bash -lc 'input=$(cat); for root in "${CLAUDE_PLUGIN_ROOT:-}" "$HOME/.claude/plugins/everything-claude-code" "$HOME/.claude/plugins/everything-claude-code@everything-claude-code" "$HOME/.claude/plugins/marketplace/everything-claude-code"; do if [ -n "$root" ] && [ -f "$root/scripts/hooks/run-with-flags.js" ]; then printf "%s" "$input" | node "$root/scripts/hooks/run-with-flags.js" "session:start" "scripts/hooks/session-start.js" "minimal,standard,strict"; exit $?; fi; done; for parent in "$HOME/.claude/plugins" "$HOME/.claude/plugins/marketplace"; do if [ -d "$parent" ]; then candidate=$(find "$parent" -maxdepth 2 -type f -path "*/scripts/hooks/run-with-flags.js" 2>/dev/null | head -n 1); if [ -n "$candidate" ]; then root=$(dirname "$(dirname "$(dirname "$candidate")")"); printf "%s" "$input" | node "$root/scripts/hooks/run-with-flags.js" "session:start" "scripts/hooks/session-start.js" "minimal,standard,strict"; exit $?; fi; fi; done; echo "[SessionStart] WARNING: could not resolve ECC plugin root; skipping session-start hook" >&2; printf "%s" "$input"; exit 0'


Implement the following plan:

# gstack 项目详细文档

> **注意：这不是一个实施计划，而是用户要求的项目分析文档。**

---

## 一、项目概述

**gstack** 是由 Y Combinator 总裁兼 CEO Garry Tan 开源的 **AI 工程工作流系统**，构建在 Claude Code 之上。它将 Claude Code 从一个通用 AI 编程助手，转变为一个拥有 **15 个专业角色**的虚拟工程团队——CEO、工程经理、设计师、QA 主管、发布工程师等，全部通过斜杠命令（slash commands）调用。

**核心理念：** 用结构化的角色分工取代泛化的 AI 对话。每个 skill 都是一套完整的方法论，有明确的输入、输出和流程。

**关键数据：**
- MIT 开源协议，完全免费
- 作者声称使用 gstack 每天可产出 10,000-20,000 行可用代码
- 60 天内产出 600,000+ 行代码（35% 为测试代码）
- 效率压缩比：模板代码 ~100x、测试 ~50x、功能开发 ~30x、Bug 修复 ~20x
- 当前版本 v0.6.4（2026 年 3 月）

---

## 二、核心架构

### 2.1 整体架构图

```
用户 → Claude Code → /skill 命令 → SKILL.md prompt → AI Agent 执行
                         ↓
                    browse 二进制 → HTTP 请求 → Bun 服务器 → Chromium 浏览器（持久守护进程）
```

gstack 由两大核心组件构成：

1. **Skill 系统**：15 个 Markdown 格式的 prompt 模板，每个代表一个专业角色
2. **Browse 浏览器引擎**：基于 Playwright 的无头浏览器守护进程，提供 ~50 个命令

### 2.2 Browse 浏览器守护进程

这是 gstack 的"秘密武器"。与每次调用都启动新浏览器不同，gstack 维护一个**持久运行的 Chromium 守护进程**：

- **首次调用 ~3 秒**启动，后续调用 **~100-200ms**
- Cookie、登录态、localStorage **跨命令持久保存**
- 30 分钟空闲自动关闭，节省资源
- 本地 HTTP 服务器 + Bearer Token 认证，安全隔离

**技术栈：**
- Bun 运行时，编译为 ~58MB 独立二进制
- Playwright 控制 Chromium
- 随机端口（10000-60000），支持多工作区并行

### 2.3 Ref 引用系统（非 CSS 选择器）

gstack 不使用脆弱的 CSS 选择器操作页面元素，而是基于**无障碍树（Accessibility Tree）**建立引用：

```
snapshot 命令输出：
  @e1 [heading] "Welcome" [level=1]
  @e2 [textbox] "Email"
  @e3 [button] "Submit"

后续操作：
  click @e3    → 点击 Submit 按钮
  fill @e2 "test@example.com"  → 填写邮箱
```

- `@e1`, `@e2` 等是基于 Playwright Locator 的稳定引用，不需要修改 DOM
- 不会触发 CSP（Content Security Policy）问题
- 支持 SPA 过期检测

### 2.4 模板生成系统

SKILL.md 文件不是手写的，而是由 `.tmpl` 模板 + `gen-skill-docs.ts` 脚本**自动生成**的：

```
SKILL.md.tmpl （手工编写的模板）
    ↓  gen-skill-docs.ts 读取源码元数据
SKILL.md （自动生成，提交到 Git）
```

10 个模板变量从源码中提取真实数据：
- `{{COMMAND_REFERENCE}}` → 从 `commands.ts` 生成命令表
- `{{SNAPSHOT_FLAGS}}` → 从 `snapshot.ts` 生成快照标志
- `{{PREAMBLE}}` → 通用前置段（升级检查、会话追踪）
- `{{QA_METHODOLOGY}}` → 共享的 QA 测试方法论
- `{{DESIGN_METHODOLOGY}}` → 共享的设计审查方法论
- 等等...

这确保了**文档永远与代码同步**。

---

## 三、15 个 AI 专业技能（Skills）

### 3.1 规划阶段（Plan Review）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/plan-ceo-review` | CEO/创始人 | 重新审视问题本质，寻找 10 倍产品机会。4 种模式：扩展、选择性扩展、保持范围、缩减范围 |
| `/plan-eng-review` | 工程经理 | 锁定架构、数据流、测试计划。每次只抛出一个问题，交互式审查 |
| `/plan-design-review` | 高级设计师 | 交互式设计审查（每个维度 0-10 评分），逐项修复至满分 |
| `/design-consultation` | 设计合伙人 | 从零构建完整设计系统，输出 DESIGN.md 和 HTML 预览页 |

**CEO 审查的 4 种模式**特别值得关注：
- **EXPANSION（扩展）**：放大思考，寻找 10 倍机会，需要用户明确同意
- **SELECTIVE EXPANSION（选择性扩展）**：保持范围，逐项提议扩展供用户选择
- **HOLD SCOPE（保持范围）**：最大严谨度，加固现有计划
- **SCOPE REDUCTION（缩减范围）**：无情削减到最小可行产品

### 3.2 测试与修复阶段（QA & Fix）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/qa` | QA 主管 + 修复者 | 系统化测试应用并修复发现的 Bug，生成回归测试 |
| `/qa-only` | QA 报告员 | 仅测试和报告，**绝不修改代码** |
| `/design-review` | 设计师 + 编码者 | 对线上网站做设计审查，然后逐项修复 CSS/HTML |
| `/browse` | QA 工程师 | 底层浏览器操作，~50 个命令 |

`/qa` 的工作流程：
1. 分析 git diff 确定测试范围
2. 系统化浏览每个页面并截图
3. 交互测试（表单填写、按钮点击、边界测试）
4. 发现 Bug → 修复 → 原子化提交（`test(qa): ...`）
5. 自动生成回归测试
6. 输出详细报告，含前后对比截图

### 3.3 发布阶段（Ship & Post-Ship）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/review` | Staff 工程师 | PR 代码审查：SQL 安全、竞态条件、LLM 信任边界、枚举完整性 |
| `/ship` | 发布工程师 | 全自动发布流程：测试→覆盖率→审查→版本号→CHANGELOG→提交→推送→创建 PR |
| `/document-release` | 技术写手 | 发布后文档更新：README、ARCHITECTURE、CONTRIBUTING、CLAUDE.md |
| `/retro` | 工程经理 | 周回顾：提交统计、测试健康度、工作模式分析 |

**`/ship` 是最复杂的 skill（165KB 模板），实现完全自动化发布：**
1. Pre-flight 检查（分支状态、未提交变更）
2. 合并基础分支（自动解决简单冲突）
3. 运行测试（Rails + Vitest 并行）
4. **测试覆盖率审计**（ASCII 图表展示代码路径覆盖）
5. **Pre-landing 代码审查**（调用 `/review` 工作流）
6. 版本号自动递增
7. CHANGELOG 自动生成
8. TODOS.md 自动更新
9. Bisect 提交（每个提交一个逻辑变更）
10. 推送并创建 PR（包含完整的审查报告）

### 3.4 辅助工具

| 命令 | 功能 |
|------|------|
| `/setup-browser-cookies` | 从 Chrome/Arc/Brave/Edge 导入 Cookie 到无头浏览器 |
| `/gstack-upgrade` | 检查和安装 gstack 更新 |

---

## 四、AI 能力深度解析

### 4.1 AI 作为虚拟团队

gstack 的核心创新在于**将不同的 AI prompt 策略映射为不同的专业角色**。每个角色内嵌了该领域大师的思维框架：

**CEO 模式内嵌的思维框架：**
- Bezos（单向门决策、Day 1 思维）
- Andy Grove（偏执危机感）
- Charlie Munger（逆向思维）
- Ben Horowitz（战时 CEO 意识）
- Chesky/Graham（创始人模式）
- Sam Altman（杠杆偏执）

**工程经理模式：**
- Will Larson（团队状态诊断）
- Tanya Reilly（boring by default）
- Fred Brooks（本质 vs 偶然复杂性）
- Kent Beck（让变更变得容易）

**设计师模式：**
- Dieter Rams（减法优先）
- Don Norman（设计的三个层次）
- Julie Zhuo（有原则的品味）
- Jony Ive（关怀是可见的）

这不是简单的 checklist——它通过"潜在空间激活"让 LLM 内化这些框架，使每次审查都成为一次真正的视角转换。

### 4.2 AI 驱动的浏览器自动化

gstack 让 AI Agent 能够**直接操作真实浏览器**，这远超传统的代码分析能力：

**~50 个浏览器命令分类：**

| 类别 | 命令示例 | 用途 |
|------|---------|------|
| 导航 | `goto`, `back`, `forward`, `reload` | 页面跳转 |
| 读取 | `text`, `html`, `links`, `forms`, `accessibility`, `console`, `network` | 提取页面信息 |
| 交互 | `click`, `fill`, `select`, `hover`, `type`, `press`, `scroll` | 模拟用户操作 |
| 视觉 | `screenshot`, `responsive`, `diff`, `pdf` | 截图/对比/响应式测试 |
| 检查 | `is`（visible/hidden/enabled/checked）, `cookies`, `storage`, `perf` | 状态断言 |
| 标签页 | `tabs`, `tab`, `newtab`, `closetab` | 多标签管理 |

**关键能力：**
- `snapshot -i` — 仅交互元素的无障碍树快照，让 AI 快速理解页面结构
- `responsive` — 一键在手机/平板/桌面三种视口下截图
- `diff` — 对比两次快照的差异（SPA 状态变化检测）
- `chain` — JSON 格式批量执行命令，减少往返次数
- `cookie-import-browser` — 从本地浏览器导入认证 Cookie，测试登录后页面

### 4.3 三层 AI 评估管道

gstack 拥有一套**用 AI 测试 AI 的完整评估体系**：

#### Tier 1：静态验证（免费，<1 秒）
- 验证 SKILL.md 中所有 `$B` 命令语法正确
- 检查 snapshot 标志合法性
- 确保生成文件与模板同步

#### Tier 2：端到端评估（~$3.85/运行）
- 通过 `claude -p` 子进程**完整运行 AI Agent 工作流**
- 实时流式输出 NDJSON 格式的工具调用
- 使用"植入 Bug"（planted bugs）的方式测试 QA 技能的 Bug 检出率
- 自动记录成本（美元）、token 用量、工具调用次数

#### Tier 3：LLM-as-Judge（~$0.15/运行）
- 使用 claude-sonnet-4-6 模型评估文档质量
- 三个评分维度：**清晰度、完整性、可操作性**（1-5 分）
- 对于 planted-bug 测试，评估：**检出率、误报数、证据质量**

#### 智能差异化测试选择
- 每个测试声明自己依赖的文件（touchfiles）
- 只运行受 `git diff` 影响的测试
- 全局 touchfile 变更（如 session-runner.ts）触发全量测试
- 大幅降低 CI 成本

### 4.4 完整性原则（Completeness Principle）

gstack 的核心哲学之一——贯穿所有 skill：

> 当 AI 辅助编码将实施时间压缩 10-100 倍时，始终推荐完整方案。边际成本几乎为零时，不要走捷径。

体现在：
- 计划审查会标记偷工减料的实现
- 全程展示双时间估算（人工团队时间 vs CC+gstack 时间）
- 测试覆盖率和边界情况默认追求完整
- 被推迟的工作会明确写入 TODOS.md

### 4.5 AI Slop（AI 垃圾风格）检测

设计审查中内置了**AI 生成内容的垃圾风格检测**：
- 紫色渐变背景
- 千篇一律的三栏布局
- 泛化的营销文案
- 过度使用的设计模式

这帮助团队避免 AI 生成的内容看起来像"AI 做的"。

### 4.6 交互式 AI 审查

所有审查 skill 都采用**结构化交互**模式：
- 每次只提出一个问题（绝不批量提问）
- 每个问题都有明确的上下文（项目名、分支名、当前步骤）
- 提供推荐选项并说明原因
- 通常只给 2-3 个选择，避免决策疲劳

---

## 五、安装与使用

### 5.1 安装（约 30 秒）

```bash
# 全局安装
git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup

# 可选：为项目团队本地安装
cp -Rf ~/.claude/skills/gstack .claude/skills/gstack
rm -rf .claude/skills/gstack/.git
cd .claude/skills/gstack && ./setup
```

`setup` 脚本会：
1. 构建 browse 二进制（如需要）
2. 安装 Playwright Chromium
3. 创建 `~/.gstack` 全局状态目录
4. 建立技能符号链接

### 5.2 日常使用示例

一个完整的功能开发流程：

```
你：    我想给卖家添加照片上传功能。
你：    /plan-ceo-review
Claude: [提出 8 个扩展提议，附带努力/影响评估]

你：    /plan-design-review
Claude: 设计评分: B | AI Slop 评分: C
        [80 项设计审查，逐项修复至满分]

你：    /plan-eng-review
Claude: [架构图、测试矩阵、错误路径分析]

你：    [批准计划] → Claude 在 11 个文件中写入 2,400 行代码

你：    /review
Claude: [自动修复] 2 个问题 | [询问] 1 个竞态条件

你：    /qa https://staging.myapp.com
Claude: [发现并修复预览清除 Bug]
        [自动生成回归测试]

你：    /ship
Claude: 测试: 42 → 51 (+9 新增)
        覆盖率: 14/14 代码路径 (100%)
        PR: github.com/you/app/pull/42
```

**一个功能。七个命令。一整个虚拟团队。**

### 5.3 开发与测试命令

```bash
bun install              # 安装依赖
bun test                 # 免费测试（浏览器 + 快照 + 技能验证）
bun run test:evals       # 付费评估：LLM 判官 + 端到端
bun run test:e2e         # 仅端到端测试
bun run eval:select      # 预览差异化测试会选中哪些测试
bun run dev <cmd>        # 开发模式运行 CLI
bun run build            # 生成文档 + 编译二进制
bun run gen:skill-docs   # 重新生成 SKILL.md
bun run skill:check      # 技能健康仪表盘
```

---

## 六、项目目录结构

```
gstack/
├── browse/              # 无头浏览器 CLI + 服务器
│   ├── src/
│   │   ├── cli.ts       # CLI 入口
│   │   ├── server.ts    # Bun HTTP 服务器
│   │   ├── commands.ts  # 命令注册表（唯一真相源）
│   │   ├── snapshot.ts  # 无障碍树 + Ref 引用系统
│   │   └── browser-manager.ts  # Chromium 生命周期管理
│   ├── test/            # 166+ 集成测试
│   └── dist/browse      # 编译后的二进制
│
├── plan-ceo-review/     # CEO 审查 skill
├── plan-eng-review/     # 工程经理审查 skill
├── plan-design-review/  # 设计审查 skill（计划阶段）
├── design-consultation/ # 设计系统构建 skill
├── design-review/       # 设计审查 + 修复 skill（线上）
├── review/              # 代码审查 skill
├── ship/                # 发布流程 skill（165KB 模板）
├── qa/                  # QA 测试 + 修复 skill
├── qa-only/             # QA 仅报告 skill
├── retro/               # 周回顾 skill
├── document-release/    # 发布后文档更新 skill
├── setup-browser-cookies/ # Cookie 导入 skill
├── gstack-upgrade/      # 升级 skill
│
├── scripts/
│   ├── gen-skill-docs.ts    # 模板 → SKILL.md 生成器
│   ├── skill-check.ts       # 健康仪表盘
│   └── dev-skill.ts         # 开发模式（文件监视）
│
├── test/
│   ├── helpers/
│   │   ├── session-runner.ts  # 端到端子进程编排
│   │   ├── llm-judge.ts       # LLM-as-Judge 评估
│   │   ├── eval-store.ts      # 评估结果持久化 + 对比
│   │   └── touchfiles.ts      # 差异化测试选择
│   ├── skill-validation.test.ts  # Tier 1: 静态验证
│   ├── skill-e2e.test.ts         # Tier 2: 端到端评估
│   └── skill-llm-eval.test.ts    # Tier 3: LLM 判官
│
├── bin/                 # 工具脚本
├── SKILL.md.tmpl        # 根技能模板
├── SKILL.md             # 自动生成（勿直接编辑）
├── CLAUDE.md            # 开发指引
├── CHANGELOG.md         # 版本历史
└── package.json         # Bun 项目配置
```

---

## 七、核心设计理念总结

1. **角色化 AI**：不是一个万能 Agent，而是 15 个专精角色，各有方法论
2. **持久浏览器**：守护进程模式带来亚秒级响应和状态持久
3. **代码即文档**：模板系统保证文档永远与代码一致
4. **AI 测试 AI**：三层评估管道确保 skill 质量
5. **完整性优先**：AI 压缩了实施成本，因此永远选择完整方案
6. **交互式审查**：一次一个问题，减少认知负荷
7. **开箱即用**：30 秒安装，一个命令就能调用整个虚拟团队

If you need specific details from before exiting plan mode (like exact code snippets, error messages, or content you generated), read the full transcript at: /root/.claude/projects/-root-projects-gits-gstack/a8cf046e-8466-4591-a0a4-a6ca509bc321.jsonl


The user wants me to implement a plan that's described in the message. However, looking at the content carefully, it says:

> **注意：这不是一个实施计划，而是用户要求的项目分析文档。**

This is a project analysis document, not an implementation plan. The user is asking me to "implement" this plan, but the document itself says it's not an implementation plan - it's a detailed documentation/analysis of the gstack project.

Let me re-read the user's message more carefully. They said "Implement the following plan:" and then provided a detailed Chinese document about the gstack project.

Looking at this more carefully, this seems like the user wants me to create this document as an actual file in the project.

So the document covers the gstack project comprehensively—including its overview, core architecture, fifteen AI skills, detailed AI capabilities, installation instructions, directory structure, and design philosophy. There's also a reference to a previous plan mode session where I can access specific details like code snippets and error messages from the project transcript if needed.

Looking at this more carefully, the user is asking me to implement what was analyzed—meaning I need to save this complete Chinese-language analysis document as a file in the project. I should figure out the appropriate location and filename for it. I'm second-guessing where to save this document. The CLAUDE.md guidelines discourage creating markdown files unless explicitly requested, but the user did ask me to implement their plan. Let me check the transcript to understand the full context and what they actually want before deciding on a file location.

让我先查看之前的 plan mode 记录，了解完整上下文。

Bash

Check transcript size

tail -5 /root/.claude/projects/-root-projects-gits-gstack/a8cf046e-8466-4591-a0a4-a6ca509bc321.jsonl | head -2 | python3 -c "import sys,json; [print(json.loads(l).get('type','')) for l in sys.stdin]"

Check last few entries in transcript


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "pre:bash:tmux-reminder" "scripts/hooks/pre-bash-tmux-reminder.js" "strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "pre:bash:git-push-reminder" "scripts/hooks/pre-bash-git-push-reminder.js" "strict"


bash "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags-shell.sh" "pre:observe" "skills/continuous-learning-v2/hooks/observe.sh" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "pre:insaits-security" "scripts/hooks/insaits-security-wrapper.js" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "post:bash:pr-created" "scripts/hooks/post-bash-pr-created.js" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "post:bash:build-complete" "scripts/hooks/post-bash-build-complete.js" "standard,strict"


bash "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags-shell.sh" "post:observe" "skills/continuous-learning-v2/hooks/observe.sh" "standard,strict"


178 /root/.claude/projects/-root-projects-gits-gstack/a8cf046e-8466-4591-a0a4-a6ca509bc321.jsonl


assistant
assistant


Let me look at the actual transcript to understand what was planned. Let me extract the key messages.

python3 -c "
import json
with open('/root/.claude/projects/-root-projects-gits-gstack/a8cf046e-8466-4591-a0a4-a6ca509bc321.jsonl') as f:
    for line in f:
        obj = json.loads(line)
        t = obj.get('type','')
        if t == 'human':
            msg = obj.get('message',{})
            if isinstance(msg, dict):
                content = msg.get('content','')
                if isinstance(content, list):
                    for c in content:
                        if isinstance(c, dict) and c.get('type') == 'text':
                            print(f'HUMAN: {c[\"text\"][:300]}')
                elif isinstance(content, str):
                    print(f'HUMAN: {content[:300]}')
            elif isinstance(msg, str):
                print(f'HUMAN: {msg[:300]}')
        elif t == 'assistant':
            msg = obj.get('message',{})
            if isinstance(msg, dict):
                content = msg.get('content','')
                if isinstance(content, list):
                    for c in content:
                        if isinstance(c, dict) and c.get('type') == 'text':
                            print(f'ASSISTANT: {c[\"text\"][:200]}')
                elif isinstance(content, str):
                    print(f'ASSISTANT: {content[:200]}')
" 2>&1 | head -60

Extract conversation from transcript


ASSISTANT: Let me先深入探索这个项目的代码库。
ASSISTANT: 现在我已经对项目有了全面的了解，让我撰写详细的中文文档。
ASSISTANT: 文档已撰写完成，涵盖了以下内容：

**项目目标**：将 Claude Code 转化为拥有 15 个专业角色的虚拟工程团队

**工作原理**：
- 持久化 Chromium 浏览器守护进程（亚秒级响应）
- 基于无障碍树的 Ref 引用系统（取代脆弱的 CSS 选择器）
- 模板生成系统（代码即文档，永远同步）
- 三层 AI 评估管道（静态验证 → 端到端 → LLM 判官）

**15 个


So from the transcript, it seems the user asked for a detailed Chinese documentation of the gstack project. The assistant explored the codebase and wrote the documentation. Now the user is asking me to "implement" this - which means writing it as a file.

Let me check if there's a plan file that was written.

Check for plan files


No files found


Exit code 2


Looking at this more carefully, the document says "注意：这不是一个实施计划，而是用户要求的项目分析文档。" (Note: This is not an implementation plan, but a project analysis document requested by the user.)

The user's previous conversation generated this analysis document. Now they're saying "Implement the following plan" - they want me to create this document as a file in the project.

But wait - CLAUDE.md says "NEVER create documentation files (*.md) or README files unless explicitly requested by the User." The user IS explicitly requesting this - they said "Implement the following plan" which means create this document.

Now I need to figure out where to place this file. The CLAUDE.md guidelines mention `~/.gstack-dev/plans/` for local plans, but since this is a comprehensive project analysis document, it makes more sense to put it in the project's documentation structure - either as `docs/PROJECT_ANALYSIS_CN.md` or at the root level as `ANALYSIS_CN.md`.

The user is asking me to implement this plan by creating the file, so I should just write it to the appropriate location. Let me check if a docs directory already exists in the project.

这是一份项目分析文档，我来将它创建为文件。让我先检查项目现有结构。

ls /root/projects/gits/gstack/docs/ 2>/dev/null || echo "no docs dir"

Check for docs directory

List existing markdown files


images
skills.md


/root/projects/gits/gstack/ARCHITECTURE.md
/root/projects/gits/gstack/BROWSER.md
/root/projects/gits/gstack/CHANGELOG.md
/root/projects/gits/gstack/CLAUDE.md
/root/projects/gits/gstack/CONTRIBUTING.md
/root/projects/gits/gstack/README.md
/root/projects/gits/gstack/SKILL.md
/root/projects/gits/gstack/TODOS.md


List docs directory contents


There's a `docs/` directory with `images/` and `skills.md`. I'll create the analysis document there as `docs/PROJECT_ANALYSIS_CN.md` or similar.

Actually, looking more carefully at the document, it's a comprehensive Chinese-language analysis that could serve as a Chinese README or guide. Let me place it in `docs/` as that's where documentation lives.

Let me write the file.

已有 `docs/` 目录。我将文档写入 `docs/PROJECT_ANALYSIS_CN.md`。

Write

# gstack 项目详细文档

---

## 一、项目概述

**gstack** 是由 Y Combinator 总裁兼 CEO Garry Tan 开源的 **AI 工程工作流系统**，构建在 Claude Code 之上。它将 Claude Code 从一个通用 AI 编程助手，转变为一个拥有 **15 个专业角色**的虚拟工程团队——CEO、工程经理、设计师、QA 主管、发布工程师等，全部通过斜杠命令（slash commands）调用。

**核心理念：** 用结构化的角色分工取代泛化的 AI 对话。每个 skill 都是一套完整的方法论，有明确的输入、输出和流程。

**关键数据：**
- MIT 开源协议，完全免费
- 作者声称使用 gstack 每天可产出 10,000-20,000 行可用代码
- 60 天内产出 600,000+ 行代码（35% 为测试代码）
- 效率压缩比：模板代码 ~100x、测试 ~50x、功能开发 ~30x、Bug 修复 ~20x
- 当前版本 v0.6.4（2026 年 3 月）

---

## 二、核心架构

### 2.1 整体架构图

```
用户 → Claude Code → /skill 命令 → SKILL.md prompt → AI Agent 执行
                         ↓
                    browse 二进制 → HTTP 请求 → Bun 服务器 → Chromium 浏览器（持久守护进程）
```

gstack 由两大核心组件构成：

1. **Skill 系统**：15 个 Markdown 格式的 prompt 模板，每个代表一个专业角色
2. **Browse 浏览器引擎**：基于 Playwright 的无头浏览器守护进程，提供 ~50 个命令

### 2.2 Browse 浏览器守护进程

这是 gstack 的"秘密武器"。与每次调用都启动新浏览器不同，gstack 维护一个**持久运行的 Chromium 守护进程**：

- **首次调用 ~3 秒**启动，后续调用 **~100-200ms**
- Cookie、登录态、localStorage **跨命令持久保存**
- 30 分钟空闲自动关闭，节省资源
- 本地 HTTP 服务器 + Bearer Token 认证，安全隔离

**技术栈：**
- Bun 运行时，编译为 ~58MB 独立二进制
- Playwright 控制 Chromium
- 随机端口（10000-60000），支持多工作区并行

### 2.3 Ref 引用系统（非 CSS 选择器）

gstack 不使用脆弱的 CSS 选择器操作页面元素，而是基于**无障碍树（Accessibility Tree）**建立引用：

```
snapshot 命令输出：
  @e1 [heading] "Welcome" [level=1]
  @e2 [textbox] "Email"
  @e3 [button] "Submit"

后续操作：
  click @e3    → 点击 Submit 按钮
  fill @e2 "test@example.com"  → 填写邮箱
```

- `@e1`, `@e2` 等是基于 Playwright Locator 的稳定引用，不需要修改 DOM
- 不会触发 CSP（Content Security Policy）问题
- 支持 SPA 过期检测

### 2.4 模板生成系统

SKILL.md 文件不是手写的，而是由 `.tmpl` 模板 + `gen-skill-docs.ts` 脚本**自动生成**的：

```
SKILL.md.tmpl （手工编写的模板）
    ↓  gen-skill-docs.ts 读取源码元数据
SKILL.md （自动生成，提交到 Git）
```

10 个模板变量从源码中提取真实数据：
- `{{COMMAND_REFERENCE}}` → 从 `commands.ts` 生成命令表
- `{{SNAPSHOT_FLAGS}}` → 从 `snapshot.ts` 生成快照标志
- `{{PREAMBLE}}` → 通用前置段（升级检查、会话追踪）
- `{{QA_METHODOLOGY}}` → 共享的 QA 测试方法论
- `{{DESIGN_METHODOLOGY}}` → 共享的设计审查方法论
- 等等...

这确保了**文档永远与代码同步**。

---

## 三、15 个 AI 专业技能（Skills）

### 3.1 规划阶段（Plan Review）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/plan-ceo-review` | CEO/创始人 | 重新审视问题本质，寻找 10 倍产品机会。4 种模式：扩展、选择性扩展、保持范围、缩减范围 |
| `/plan-eng-review` | 工程经理 | 锁定架构、数据流、测试计划。每次只抛出一个问题，交互式审查 |
| `/plan-design-review` | 高级设计师 | 交互式设计审查（每个维度 0-10 评分），逐项修复至满分 |
| `/design-consultation` | 设计合伙人 | 从零构建完整设计系统，输出 DESIGN.md 和 HTML 预览页 |

**CEO 审查的 4 种模式**特别值得关注：
- **EXPANSION（扩展）**：放大思考，寻找 10 倍机会，需要用户明确同意
- **SELECTIVE EXPANSION（选择性扩展）**：保持范围，逐项提议扩展供用户选择
- **HOLD SCOPE（保持范围）**：最大严谨度，加固现有计划
- **SCOPE REDUCTION（缩减范围）**：无情削减到最小可行产品

### 3.2 测试与修复阶段（QA & Fix）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/qa` | QA 主管 + 修复者 | 系统化测试应用并修复发现的 Bug，生成回归测试 |
| `/qa-only` | QA 报告员 | 仅测试和报告，**绝不修改代码** |
| `/design-review` | 设计师 + 编码者 | 对线上网站做设计审查，然后逐项修复 CSS/HTML |
| `/browse` | QA 工程师 | 底层浏览器操作，~50 个命令 |

`/qa` 的工作流程：
1. 分析 git diff 确定测试范围
2. 系统化浏览每个页面并截图
3. 交互测试（表单填写、按钮点击、边界测试）
4. 发现 Bug → 修复 → 原子化提交（`test(qa): ...`）
5. 自动生成回归测试
6. 输出详细报告，含前后对比截图

### 3.3 发布阶段（Ship & Post-Ship）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/review` | Staff 工程师 | PR 代码审查：SQL 安全、竞态条件、LLM 信任边界、枚举完整性 |
| `/ship` | 发布工程师 | 全自动发布流程：测试→覆盖率→审查→版本号→CHANGELOG→提交→推送→创建 PR |
| `/document-release` | 技术写手 | 发布后文档更新：README、ARCHITECTURE、CONTRIBUTING、CLAUDE.md |
| `/retro` | 工程经理 | 周回顾：提交统计、测试健康度、工作模式分析 |

**`/ship` 是最复杂的 skill（165KB 模板），实现完全自动化发布：**
1. Pre-flight 检查（分支状态、未提交变更）
2. 合并基础分支（自动解决简单冲突）
3. 运行测试（Rails + Vitest 并行）
4. **测试覆盖率审计**（ASCII 图表展示代码路径覆盖）
5. **Pre-landing 代码审查**（调用 `/review` 工作流）
6. 版本号自动递增
7. CHANGELOG 自动生成
8. TODOS.md 自动更新
9. Bisect 提交（每个提交一个逻辑变更）
10. 推送并创建 PR（包含完整的审查报告）

### 3.4 辅助工具

| 命令 | 功能 |
|------|------|
| `/setup-browser-cookies` | 从 Chrome/Arc/Brave/Edge 导入 Cookie 到无头浏览器 |
| `/gstack-upgrade` | 检查和安装 gstack 更新 |

---

## 四、AI 能力深度解析

### 4.1 AI 作为虚拟团队

gstack 的核心创新在于**将不同的 AI prompt 策略映射为不同的专业角色**。每个角色内嵌了该领域大师的思维框架：

**CEO 模式内嵌的思维框架：**
- Bezos（单向门决策、Day 1 思维）
- Andy Grove（偏执危机感）
- Charlie Munger（逆向思维）
- Ben Horowitz（战时 CEO 意识）
- Chesky/Graham（创始人模式）
- Sam Altman（杠杆偏执）

**工程经理模式：**
- Will Larson（团队状态诊断）
- Tanya Reilly（boring by default）
- Fred Brooks（本质 vs 偶然复杂性）
- Kent Beck（让变更变得容易）

**设计师模式：**
- Dieter Rams（减法优先）
- Don Norman（设计的三个层次）
- Julie Zhuo（有原则的品味）
- Jony Ive（关怀是可见的）

这不是简单的 checklist——它通过"潜在空间激活"让 LLM 内化这些框架，使每次审查都成为一次真正的视角转换。

### 4.2 AI 驱动的浏览器自动化

gstack 让 AI Agent 能够**直接操作真实浏览器**，这远超传统的代码分析能力：

**~50 个浏览器命令分类：**

| 类别 | 命令示例 | 用途 |
|------|---------|------|
| 导航 | `goto`, `back`, `forward`, `reload` | 页面跳转 |
| 读取 | `text`, `html`, `links`, `forms`, `accessibility`, `console`, `network` | 提取页面信息 |
| 交互 | `click`, `fill`, `select`, `hover`, `type`, `press`, `scroll` | 模拟用户操作 |
| 视觉 | `screenshot`, `responsive`, `diff`, `pdf` | 截图/对比/响应式测试 |
| 检查 | `is`（visible/hidden/enabled/checked）, `cookies`, `storage`, `perf` | 状态断言 |
| 标签页 | `tabs`, `tab`, `newtab`, `closetab` | 多标签管理 |

**关键能力：**
- `snapshot -i` — 仅交互元素的无障碍树快照，让 AI 快速理解页面结构
- `responsive` — 一键在手机/平板/桌面三种视口下截图
- `diff` — 对比两次快照的差异（SPA 状态变化检测）
- `chain` — JSON 格式批量执行命令，减少往返次数
- `cookie-import-browser` — 从本地浏览器导入认证 Cookie，测试登录后页面

### 4.3 三层 AI 评估管道

gstack 拥有一套**用 AI 测试 AI 的完整评估体系**：

#### Tier 1：静态验证（免费，<1 秒）
- 验证 SKILL.md 中所有 `$B` 命令语法正确
- 检查 snapshot 标志合法性
- 确保生成文件与模板同步

#### Tier 2：端到端评估（~$3.85/运行）
- 通过 `claude -p` 子进程**完整运行 AI Agent 工作流**
- 实时流式输出 NDJSON 格式的工具调用
- 使用"植入 Bug"（planted bugs）的方式测试 QA 技能的 Bug 检出率
- 自动记录成本（美元）、token 用量、工具调用次数

#### Tier 3：LLM-as-Judge（~$0.15/运行）
- 使用 claude-sonnet-4-6 模型评估文档质量
- 三个评分维度：**清晰度、完整性、可操作性**（1-5 分）
- 对于 planted-bug 测试，评估：**检出率、误报数、证据质量**

#### 智能差异化测试选择
- 每个测试声明自己依赖的文件（touchfiles）
- 只运行受 `git diff` 影响的测试
- 全局 touchfile 变更（如 session-runner.ts）触发全量测试
- 大幅降低 CI 成本

### 4.4 完整性原则（Completeness Principle）

gstack 的核心哲学之一——贯穿所有 skill：

> 当 AI 辅助编码将实施时间压缩 10-100 倍时，始终推荐完整方案。边际成本几乎为零时，不要走捷径。

体现在：
- 计划审查会标记偷工减料的实现
- 全程展示双时间估算（人工团队时间 vs CC+gstack 时间）
- 测试覆盖率和边界情况默认追求完整
- 被推迟的工作会明确写入 TODOS.md

### 4.5 AI Slop（AI 垃圾风格）检测

设计审查中内置了**AI 生成内容的垃圾风格检测**：
- 紫色渐变背景
- 千篇一律的三栏布局
- 泛化的营销文案
- 过度使用的设计模式

这帮助团队避免 AI 生成的内容看起来像"AI 做的"。

### 4.6 交互式 AI 审查

所有审查 skill 都采用**结构化交互**模式：
- 每次只提出一个问题（绝不批量提问）
- 每个问题都有明确的上下文（项目名、分支名、当前步骤）
- 提供推荐选项并说明原因
- 通常只给 2-3 个选择，避免决策疲劳

---

## 五、安装与使用

### 5.1 安装（约 30 秒）

```bash
# 全局安装
git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup

# 可选：为项目团队本地安装
cp -Rf ~/.claude/skills/gstack .claude/skills/gstack
rm -rf .claude/skills/gstack/.git
cd .claude/skills/gstack && ./setup
```

`setup` 脚本会：
1. 构建 browse 二进制（如需要）
2. 安装 Playwright Chromium
3. 创建 `~/.gstack` 全局状态目录
4. 建立技能符号链接

### 5.2 日常使用示例

一个完整的功能开发流程：

```
你：    我想给卖家添加照片上传功能。
你：    /plan-ceo-review
Claude: [提出 8 个扩展提议，附带努力/影响评估]

你：    /plan-design-review
Claude: 设计评分: B | AI Slop 评分: C
        [80 项设计审查，逐项修复至满分]

你：    /plan-eng-review
Claude: [架构图、测试矩阵、错误路径分析]

你：    [批准计划] → Claude 在 11 个文件中写入 2,400 行代码

你：    /review
Claude: [自动修复] 2 个问题 | [询问] 1 个竞态条件

你：    /qa https://staging.myapp.com
Claude: [发现并修复预览清除 Bug]
        [自动生成回归测试]

你：    /ship
Claude: 测试: 42 → 51 (+9 新增)
        覆盖率: 14/14 代码路径 (100%)
        PR: github.com/you/app/pull/42
```

**一个功能。七个命令。一整个虚拟团队。**

### 5.3 开发与测试命令

```bash
bun install              # 安装依赖
bun test                 # 免费测试（浏览器 + 快照 + 技能验证）
bun run test:evals       # 付费评估：LLM 判官 + 端到端
bun run test:e2e         # 仅端到端测试
bun run eval:select      # 预览差异化测试会选中哪些测试
bun run dev <cmd>        # 开发模式运行 CLI
bun run build            # 生成文档 + 编译二进制
bun run gen:skill-docs   # 重新生成 SKILL.md
bun run skill:check      # 技能健康仪表盘
```

---

## 六、项目目录结构

```
gstack/
├── browse/              # 无头浏览器 CLI + 服务器
│   ├── src/
│   │   ├── cli.ts       # CLI 入口
│   │   ├── server.ts    # Bun HTTP 服务器
│   │   ├── commands.ts  # 命令注册表（唯一真相源）
│   │   ├── snapshot.ts  # 无障碍树 + Ref 引用系统
│   │   └── browser-manager.ts  # Chromium 生命周期管理
│   ├── test/            # 166+ 集成测试
│   └── dist/browse      # 编译后的二进制
│
├── plan-ceo-review/     # CEO 审查 skill
├── plan-eng-review/     # 工程经理审查 skill
├── plan-design-review/  # 设计审查 skill（计划阶段）
├── design-consultation/ # 设计系统构建 skill
├── design-review/       # 设计审查 + 修复 skill（线上）
├── review/              # 代码审查 skill
├── ship/                # 发布流程 skill（165KB 模板）
├── qa/                  # QA 测试 + 修复 skill
├── qa-only/             # QA 仅报告 skill
├── retro/               # 周回顾 skill
├── document-release/    # 发布后文档更新 skill
├── setup-browser-cookies/ # Cookie 导入 skill
├── gstack-upgrade/      # 升级 skill
│
├── scripts/
│   ├── gen-skill-docs.ts    # 模板 → SKILL.md 生成器
│   ├── skill-check.ts       # 健康仪表盘
│   └── dev-skill.ts         # 开发模式（文件监视）
│
├── test/
│   ├── helpers/
│   │   ├── session-runner.ts  # 端到端子进程编排
│   │   ├── llm-judge.ts       # LLM-as-Judge 评估
│   │   ├── eval-store.ts      # 评估结果持久化 + 对比
│   │   └── touchfiles.ts      # 差异化测试选择
│   ├── skill-validation.test.ts  # Tier 1: 静态验证
│   ├── skill-e2e.test.ts         # Tier 2: 端到端评估
│   └── skill-llm-eval.test.ts    # Tier 3: LLM 判官
│
├── bin/                 # 工具脚本
├── SKILL.md.tmpl        # 根技能模板
├── SKILL.md             # 自动生成（勿直接编辑）
├── CLAUDE.md            # 开发指引
├── CHANGELOG.md         # 版本历史
└── package.json         # Bun 项目配置
```

---

## 七、核心设计理念总结

1. **角色化 AI**：不是一个万能 Agent，而是 15 个专精角色，各有方法论
2. **持久浏览器**：守护进程模式带来亚秒级响应和状态持久
3. **代码即文档**：模板系统保证文档永远与代码一致
4. **AI 测试 AI**：三层评估管道确保 skill 质量
5. **完整性优先**：AI 压缩了实施成本，因此永远选择完整方案
6. **交互式审查**：一次一个问题，减少认知负荷
7. **开箱即用**：30 秒安装，一个命令就能调用整个虚拟团队


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "pre:write:doc-file-warning" "scripts/hooks/doc-file-warning.js" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "pre:edit-write:suggest-compact" "scripts/hooks/suggest-compact.js" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "post:quality-gate" "scripts/hooks/quality-gate.js" "standard,strict"


File created successfully at: /root/projects/gits/gstack/docs/PROJECT_ANALYSIS_CN.md

# gstack 项目详细文档

---

## 一、项目概述

**gstack** 是由 Y Combinator 总裁兼 CEO Garry Tan 开源的 **AI 工程工作流系统**，构建在 Claude Code 之上。它将 Claude Code 从一个通用 AI 编程助手，转变为一个拥有 **15 个专业角色**的虚拟工程团队——CEO、工程经理、设计师、QA 主管、发布工程师等，全部通过斜杠命令（slash commands）调用。

**核心理念：** 用结构化的角色分工取代泛化的 AI 对话。每个 skill 都是一套完整的方法论，有明确的输入、输出和流程。

**关键数据：**
- MIT 开源协议，完全免费
- 作者声称使用 gstack 每天可产出 10,000-20,000 行可用代码
- 60 天内产出 600,000+ 行代码（35% 为测试代码）
- 效率压缩比：模板代码 ~100x、测试 ~50x、功能开发 ~30x、Bug 修复 ~20x
- 当前版本 v0.6.4（2026 年 3 月）

---

## 二、核心架构

### 2.1 整体架构图

```
用户 → Claude Code → /skill 命令 → SKILL.md prompt → AI Agent 执行
                         ↓
                    browse 二进制 → HTTP 请求 → Bun 服务器 → Chromium 浏览器（持久守护进程）
```

gstack 由两大核心组件构成：

1. **Skill 系统**：15 个 Markdown 格式的 prompt 模板，每个代表一个专业角色
2. **Browse 浏览器引擎**：基于 Playwright 的无头浏览器守护进程，提供 ~50 个命令

### 2.2 Browse 浏览器守护进程

这是 gstack 的"秘密武器"。与每次调用都启动新浏览器不同，gstack 维护一个**持久运行的 Chromium 守护进程**：

- **首次调用 ~3 秒**启动，后续调用 **~100-200ms**
- Cookie、登录态、localStorage **跨命令持久保存**
- 30 分钟空闲自动关闭，节省资源
- 本地 HTTP 服务器 + Bearer Token 认证，安全隔离

**技术栈：**
- Bun 运行时，编译为 ~58MB 独立二进制
- Playwright 控制 Chromium
- 随机端口（10000-60000），支持多工作区并行

### 2.3 Ref 引用系统（非 CSS 选择器）

gstack 不使用脆弱的 CSS 选择器操作页面元素，而是基于**无障碍树（Accessibility Tree）**建立引用：

```
snapshot 命令输出：
  @e1 [heading] "Welcome" [level=1]
  @e2 [textbox] "Email"
  @e3 [button] "Submit"

后续操作：
  click @e3    → 点击 Submit 按钮
  fill @e2 "test@example.com"  → 填写邮箱
```

- `@e1`, `@e2` 等是基于 Playwright Locator 的稳定引用，不需要修改 DOM
- 不会触发 CSP（Content Security Policy）问题
- 支持 SPA 过期检测

### 2.4 模板生成系统

SKILL.md 文件不是手写的，而是由 `.tmpl` 模板 + `gen-skill-docs.ts` 脚本**自动生成**的：

```
SKILL.md.tmpl （手工编写的模板）
    ↓  gen-skill-docs.ts 读取源码元数据
SKILL.md （自动生成，提交到 Git）
```

10 个模板变量从源码中提取真实数据：
- `{{COMMAND_REFERENCE}}` → 从 `commands.ts` 生成命令表
- `{{SNAPSHOT_FLAGS}}` → 从 `snapshot.ts` 生成快照标志
- `{{PREAMBLE}}` → 通用前置段（升级检查、会话追踪）
- `{{QA_METHODOLOGY}}` → 共享的 QA 测试方法论
- `{{DESIGN_METHODOLOGY}}` → 共享的设计审查方法论
- 等等...

这确保了**文档永远与代码同步**。

---

## 三、15 个 AI 专业技能（Skills）

### 3.1 规划阶段（Plan Review）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/plan-ceo-review` | CEO/创始人 | 重新审视问题本质，寻找 10 倍产品机会。4 种模式：扩展、选择性扩展、保持范围、缩减范围 |
| `/plan-eng-review` | 工程经理 | 锁定架构、数据流、测试计划。每次只抛出一个问题，交互式审查 |
| `/plan-design-review` | 高级设计师 | 交互式设计审查（每个维度 0-10 评分），逐项修复至满分 |
| `/design-consultation` | 设计合伙人 | 从零构建完整设计系统，输出 DESIGN.md 和 HTML 预览页 |

**CEO 审查的 4 种模式**特别值得关注：
- **EXPANSION（扩展）**：放大思考，寻找 10 倍机会，需要用户明确同意
- **SELECTIVE EXPANSION（选择性扩展）**：保持范围，逐项提议扩展供用户选择
- **HOLD SCOPE（保持范围）**：最大严谨度，加固现有计划
- **SCOPE REDUCTION（缩减范围）**：无情削减到最小可行产品

### 3.2 测试与修复阶段（QA & Fix）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/qa` | QA 主管 + 修复者 | 系统化测试应用并修复发现的 Bug，生成回归测试 |
| `/qa-only` | QA 报告员 | 仅测试和报告，**绝不修改代码** |
| `/design-review` | 设计师 + 编码者 | 对线上网站做设计审查，然后逐项修复 CSS/HTML |
| `/browse` | QA 工程师 | 底层浏览器操作，~50 个命令 |

`/qa` 的工作流程：
1. 分析 git diff 确定测试范围
2. 系统化浏览每个页面并截图
3. 交互测试（表单填写、按钮点击、边界测试）
4. 发现 Bug → 修复 → 原子化提交（`test(qa): ...`）
5. 自动生成回归测试
6. 输出详细报告，含前后对比截图

### 3.3 发布阶段（Ship & Post-Ship）

| 命令 | 角色 | 功能 |
|------|------|------|
| `/review` | Staff 工程师 | PR 代码审查：SQL 安全、竞态条件、LLM 信任边界、枚举完整性 |
| `/ship` | 发布工程师 | 全自动发布流程：测试→覆盖率→审查→版本号→CHANGELOG→提交→推送→创建 PR |
| `/document-release` | 技术写手 | 发布后文档更新：README、ARCHITECTURE、CONTRIBUTING、CLAUDE.md |
| `/retro` | 工程经理 | 周回顾：提交统计、测试健康度、工作模式分析 |

**`/ship` 是最复杂的 skill（165KB 模板），实现完全自动化发布：**
1. Pre-flight 检查（分支状态、未提交变更）
2. 合并基础分支（自动解决简单冲突）
3. 运行测试（Rails + Vitest 并行）
4. **测试覆盖率审计**（ASCII 图表展示代码路径覆盖）
5. **Pre-landing 代码审查**（调用 `/review` 工作流）
6. 版本号自动递增
7. CHANGELOG 自动生成
8. TODOS.md 自动更新
9. Bisect 提交（每个提交一个逻辑变更）
10. 推送并创建 PR（包含完整的审查报告）

### 3.4 辅助工具

| 命令 | 功能 |
|------|------|
| `/setup-browser-cookies` | 从 Chrome/Arc/Brave/Edge 导入 Cookie 到无头浏览器 |
| `/gstack-upgrade` | 检查和安装 gstack 更新 |

---

## 四、AI 能力深度解析

### 4.1 AI 作为虚拟团队

gstack 的核心创新在于**将不同的 AI prompt 策略映射为不同的专业角色**。每个角色内嵌了该领域大师的思维框架：

**CEO 模式内嵌的思维框架：**
- Bezos（单向门决策、Day 1 思维）
- Andy Grove（偏执危机感）
- Charlie Munger（逆向思维）
- Ben Horowitz（战时 CEO 意识）
- Chesky/Graham（创始人模式）
- Sam Altman（杠杆偏执）

**工程经理模式：**
- Will Larson（团队状态诊断）
- Tanya Reilly（boring by default）
- Fred Brooks（本质 vs 偶然复杂性）
- Kent Beck（让变更变得容易）

**设计师模式：**
- Dieter Rams（减法优先）
- Don Norman（设计的三个层次）
- Julie Zhuo（有原则的品味）
- Jony Ive（关怀是可见的）

这不是简单的 checklist——它通过"潜在空间激活"让 LLM 内化这些框架，使每次审查都成为一次真正的视角转换。

### 4.2 AI 驱动的浏览器自动化

gstack 让 AI Agent 能够**直接操作真实浏览器**，这远超传统的代码分析能力：

**~50 个浏览器命令分类：**

| 类别 | 命令示例 | 用途 |
|------|---------|------|
| 导航 | `goto`, `back`, `forward`, `reload` | 页面跳转 |
| 读取 | `text`, `html`, `links`, `forms`, `accessibility`, `console`, `network` | 提取页面信息 |
| 交互 | `click`, `fill`, `select`, `hover`, `type`, `press`, `scroll` | 模拟用户操作 |
| 视觉 | `screenshot`, `responsive`, `diff`, `pdf` | 截图/对比/响应式测试 |
| 检查 | `is`（visible/hidden/enabled/checked）, `cookies`, `storage`, `perf` | 状态断言 |
| 标签页 | `tabs`, `tab`, `newtab`, `closetab` | 多标签管理 |

**关键能力：**
- `snapshot -i` — 仅交互元素的无障碍树快照，让 AI 快速理解页面结构
- `responsive` — 一键在手机/平板/桌面三种视口下截图
- `diff` — 对比两次快照的差异（SPA 状态变化检测）
- `chain` — JSON 格式批量执行命令，减少往返次数
- `cookie-import-browser` — 从本地浏览器导入认证 Cookie，测试登录后页面

### 4.3 三层 AI 评估管道

gstack 拥有一套**用 AI 测试 AI 的完整评估体系**：

#### Tier 1：静态验证（免费，<1 秒）
- 验证 SKILL.md 中所有 `$B` 命令语法正确
- 检查 snapshot 标志合法性
- 确保生成文件与模板同步

#### Tier 2：端到端评估（~$3.85/运行）
- 通过 `claude -p` 子进程**完整运行 AI Agent 工作流**
- 实时流式输出 NDJSON 格式的工具调用
- 使用"植入 Bug"（planted bugs）的方式测试 QA 技能的 Bug 检出率
- 自动记录成本（美元）、token 用量、工具调用次数

#### Tier 3：LLM-as-Judge（~$0.15/运行）
- 使用 claude-sonnet-4-6 模型评估文档质量
- 三个评分维度：**清晰度、完整性、可操作性**（1-5 分）
- 对于 planted-bug 测试，评估：**检出率、误报数、证据质量**

#### 智能差异化测试选择
- 每个测试声明自己依赖的文件（touchfiles）
- 只运行受 `git diff` 影响的测试
- 全局 touchfile 变更（如 session-runner.ts）触发全量测试
- 大幅降低 CI 成本

### 4.4 完整性原则（Completeness Principle）

gstack 的核心哲学之一——贯穿所有 skill：

> 当 AI 辅助编码将实施时间压缩 10-100 倍时，始终推荐完整方案。边际成本几乎为零时，不要走捷径。

体现在：
- 计划审查会标记偷工减料的实现
- 全程展示双时间估算（人工团队时间 vs CC+gstack 时间）
- 测试覆盖率和边界情况默认追求完整
- 被推迟的工作会明确写入 TODOS.md

### 4.5 AI Slop（AI 垃圾风格）检测

设计审查中内置了**AI 生成内容的垃圾风格检测**：
- 紫色渐变背景
- 千篇一律的三栏布局
- 泛化的营销文案
- 过度使用的设计模式

这帮助团队避免 AI 生成的内容看起来像"AI 做的"。

### 4.6 交互式 AI 审查

所有审查 skill 都采用**结构化交互**模式：
- 每次只提出一个问题（绝不批量提问）
- 每个问题都有明确的上下文（项目名、分支名、当前步骤）
- 提供推荐选项并说明原因
- 通常只给 2-3 个选择，避免决策疲劳

---

## 五、安装与使用

### 5.1 安装（约 30 秒）

```bash
# 全局安装
git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup

# 可选：为项目团队本地安装
cp -Rf ~/.claude/skills/gstack .claude/skills/gstack
rm -rf .claude/skills/gstack/.git
cd .claude/skills/gstack && ./setup
```

`setup` 脚本会：
1. 构建 browse 二进制（如需要）
2. 安装 Playwright Chromium
3. 创建 `~/.gstack` 全局状态目录
4. 建立技能符号链接

### 5.2 日常使用示例

一个完整的功能开发流程：

```
你：    我想给卖家添加照片上传功能。
你：    /plan-ceo-review
Claude: [提出 8 个扩展提议，附带努力/影响评估]

你：    /plan-design-review
Claude: 设计评分: B | AI Slop 评分: C
        [80 项设计审查，逐项修复至满分]

你：    /plan-eng-review
Claude: [架构图、测试矩阵、错误路径分析]

你：    [批准计划] → Claude 在 11 个文件中写入 2,400 行代码

你：    /review
Claude: [自动修复] 2 个问题 | [询问] 1 个竞态条件

你：    /qa https://staging.myapp.com
Claude: [发现并修复预览清除 Bug]
        [自动生成回归测试]

你：    /ship
Claude: 测试: 42 → 51 (+9 新增)
        覆盖率: 14/14 代码路径 (100%)
        PR: github.com/you/app/pull/42
```

**一个功能。七个命令。一整个虚拟团队。**

### 5.3 开发与测试命令

```bash
bun install              # 安装依赖
bun test                 # 免费测试（浏览器 + 快照 + 技能验证）
bun run test:evals       # 付费评估：LLM 判官 + 端到端
bun run test:e2e         # 仅端到端测试
bun run eval:select      # 预览差异化测试会选中哪些测试
bun run dev <cmd>        # 开发模式运行 CLI
bun run build            # 生成文档 + 编译二进制
bun run gen:skill-docs   # 重新生成 SKILL.md
bun run skill:check      # 技能健康仪表盘
```

---

## 六、项目目录结构

```
gstack/
├── browse/              # 无头浏览器 CLI + 服务器
│   ├── src/
│   │   ├── cli.ts       # CLI 入口
│   │   ├── server.ts    # Bun HTTP 服务器
│   │   ├── commands.ts  # 命令注册表（唯一真相源）
│   │   ├── snapshot.ts  # 无障碍树 + Ref 引用系统
│   │   └── browser-manager.ts  # Chromium 生命周期管理
│   ├── test/            # 166+ 集成测试
│   └── dist/browse      # 编译后的二进制
│
├── plan-ceo-review/     # CEO 审查 skill
├── plan-eng-review/     # 工程经理审查 skill
├── plan-design-review/  # 设计审查 skill（计划阶段）
├── design-consultation/ # 设计系统构建 skill
├── design-review/       # 设计审查 + 修复 skill（线上）
├── review/              # 代码审查 skill
├── ship/                # 发布流程 skill（165KB 模板）
├── qa/                  # QA 测试 + 修复 skill
├── qa-only/             # QA 仅报告 skill
├── retro/               # 周回顾 skill
├── document-release/    # 发布后文档更新 skill
├── setup-browser-cookies/ # Cookie 导入 skill
├── gstack-upgrade/      # 升级 skill
│
├── scripts/
│   ├── gen-skill-docs.ts    # 模板 → SKILL.md 生成器
│   ├── skill-check.ts       # 健康仪表盘
│   └── dev-skill.ts         # 开发模式（文件监视）
│
├── test/
│   ├── helpers/
│   │   ├── session-runner.ts  # 端到端子进程编排
│   │   ├── llm-judge.ts       # LLM-as-Judge 评估
│   │   ├── eval-store.ts      # 评估结果持久化 + 对比
│   │   └── touchfiles.ts      # 差异化测试选择
│   ├── skill-validation.test.ts  # Tier 1: 静态验证
│   ├── skill-e2e.test.ts         # Tier 2: 端到端评估
│   └── skill-llm-eval.test.ts    # Tier 3: LLM 判官
│
├── bin/                 # 工具脚本
├── SKILL.md.tmpl        # 根技能模板
├── SKILL.md             # 自动生成（勿直接编辑）
├── CLAUDE.md            # 开发指引
├── CHANGELOG.md         # 版本历史
└── package.json         # Bun 项目配置
```

---

## 七、核心设计理念总结

1. **角色化 AI**：不是一个万能 Agent，而是 15 个专精角色，各有方法论
2. **持久浏览器**：守护进程模式带来亚秒级响应和状态持久
3. **代码即文档**：模板系统保证文档永远与代码一致
4. **AI 测试 AI**：三层评估管道确保 skill 质量
5. **完整性优先**：AI 压缩了实施成本，因此永远选择完整方案
6. **交互式审查**：一次一个问题，减少认知负荷
7. **开箱即用**：30 秒安装，一个命令就能调用整个虚拟团队


文档已创建至 `docs/PROJECT_ANALYSIS_CN.md`。涵盖了项目概述、核心架构（Browse 守护进程、Ref 引用系统、模板生成）、15 个 AI 技能详解、三层评估管道、安装使用指南和目录结构。


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "stop:check-console-log" "scripts/hooks/check-console-log.js" "standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "stop:session-end" "scripts/hooks/session-end.js" "minimal,standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "stop:evaluate-session" "scripts/hooks/evaluate-session.js" "minimal,standard,strict"


node "${CLAUDE_PLUGIN_ROOT}/scripts/hooks/run-with-flags.js" "stop:cost-tracker" "scripts/hooks/cost-tracker.js" "minimal,standard,strict"


<local-command-caveat>Caveat: The messages below were generated by the user while running local commands. DO NOT respond to these messages or otherwise consider them in your response unless the user explicitly asks you to.</local-command-caveat>


<bash-input>./setup</bash-input>


<bash-stdout></bash-stdout><bash-stderr>Building browse binary...
./setup: line 32: bun: command not found
</bash-stderr>


执行./setup，如果遇到问题，请直接修复之后再安装


The user ran `./setup` and got an error: `bun: command not found`. I need to fix this by either installing bun or modifying the setup script to handle this case. Let me first look at the setup script to understand what it does.


     1→#!/usr/bin/env bash
     2→# gstack setup — build browser binary + register all skills with Claude Code
     3→set -e
     4→
     5→GSTACK_DIR="$(cd "$(dirname "$0")" && pwd)"
     6→SKILLS_DIR="$(dirname "$GSTACK_DIR")"
     7→BROWSE_BIN="$GSTACK_DIR/browse/dist/browse"
     8→
     9→ensure_playwright_browser() {
    10→  (
    11→    cd "$GSTACK_DIR"
    12→    bun --eval 'import { chromium } from "playwright"; const browser = await chromium.launch(); await browser.close();'
    13→  ) >/dev/null 2>&1
    14→}
    15→
    16→# 1. Build browse binary if needed (smart rebuild: stale sources, package.json, lock)
    17→NEEDS_BUILD=0
    18→if [ ! -x "$BROWSE_BIN" ]; then
    19→  NEEDS_BUILD=1
    20→elif [ -n "$(find "$GSTACK_DIR/browse/src" -type f -newer "$BROWSE_BIN" -print -quit 2>/dev/null)" ]; then
    21→  NEEDS_BUILD=1
    22→elif [ "$GSTACK_DIR/package.json" -nt "$BROWSE_BIN" ]; then
    23→  NEEDS_BUILD=1
    24→elif [ -f "$GSTACK_DIR/bun.lock" ] && [ "$GSTACK_DIR/bun.lock" -nt "$BROWSE_BIN" ]; then
    25→  NEEDS_BUILD=1
    26→fi
    27→
    28→if [ "$NEEDS_BUILD" -eq 1 ]; then
    29→  echo "Building browse binary..."
    30→  (
    31→    cd "$GSTACK_DIR"
    32→    bun install
    33→    bun run build
    34→  )
    35→  # Safety net: write .version if build script didn't (e.g., git not available during build)
    36→  if [ ! -f "$GSTACK_DIR/browse/dist/.version" ]; then
    37→    git -C "$GSTACK_DIR" rev-parse HEAD > "$GSTACK_DIR/browse/dist/.version" 2>/dev/null || true
    38→  fi
    39→fi
    40→
    41→if [ ! -x "$BROWSE_BIN" ]; then
    42→  echo "gstack setup failed: browse binary missing at $BROWSE_BIN" >&2
    43→  exit 1
    44→fi
    45→
    46→# 2. Ensure Playwright's Chromium is available
    47→if ! ensure_playwright_browser; then
    48→  echo "Installing Playwright Chromium..."
    49→  (
    50→    cd "$GSTACK_DIR"
    51→    bunx playwright install chromium
    52→  )
    53→fi
    54→
    55→if ! ensure_playwright_browser; then
    56→  echo "gstack setup failed: Playwright Chromium could not be launched" >&2
    57→  exit 1
    58→fi
    59→
    60→# 3. Ensure ~/.gstack global state directory exists
    61→mkdir -p "$HOME/.gstack/projects"
    62→
    63→# 4. Only create skill symlinks if we're inside a .claude/skills directory
    64→SKILLS_BASENAME="$(basename "$SKILLS_DIR")"
    65→if [ "$SKILLS_BASENAME" = "skills" ]; then
    66→  linked=()
    67→  for skill_dir in "$GSTACK_DIR"/*/; do
    68→    if [ -f "$skill_dir/SKILL.md" ]; then
    69→      skill_name="$(basename "$skill_dir")"
    70→      # Skip node_modules
    71→      [ "$skill_name" = "node_modules" ] && continue
    72→      target="$SKILLS_DIR/$skill_name"
    73→      # Create or update symlink; skip if a real file/directory exists
    74→      if [ -L "$target" ] || [ ! -e "$target" ]; then
    75→        ln -snf "gstack/$skill_name" "$target"
    76→        linked+=("$skill_name")
    77→      fi
    78→    fi
    79→  done
    80→
    81→  echo "gstack ready."
    82→  echo "  browse: $BROWSE_BIN"
    83→  if [ ${#linked[@]} -gt 0 ]; then
    84→    echo "  linked skills: ${linked[*]}"
    85→  fi
    86→else
    87→  echo "gstack ready."
    88→  echo "  browse: $BROWSE_BIN"
    89→  echo "  (skipped skill symlinks — not inside .claude/skills/)"
    90→fi
    91→
    92→# 4. First-time welcome + legacy cleanup
    93→if [ ! -d "$HOME/.gstack" ]; then
    94→  mkdir -p "$HOME/.gstack"
    95→  echo "  Welcome! Run /gstack-upgrade anytime to stay current."
    96→fi
    97→rm -f /tmp/gstack-latest-version
    98→

#!/usr/bin/env bash
# gstack setup — build browser binary + register all skills with Claude Code
set -e

GSTACK_DIR="$(cd "$(dirname "$0")" && pwd)"
SKILLS_DIR="$(dirname "$GSTACK_DIR")"
BROWSE_BIN="$GSTACK_DIR/browse/dist/browse"

ensure_playwright_browser() {
  (
    cd "$GSTACK_DIR"
    bun --eval 'import { chromium } from "playwright"; const browser = await chromium.launch(); await browser.close();'
  ) >/dev/null 2>&1
}

# 1. Build browse binary if needed (smart rebuild: stale sources, package.json, lock)
NEEDS_BUILD=0
if [ ! -x "$BROWSE_BIN" ]; then
  NEEDS_BUILD=1
elif [ -n "$(find "$GSTACK_DIR/browse/src" -type f -newer "$BROWSE_BIN" -print -quit 2>/dev/null)" ]; then
  NEEDS_BUILD=1
elif [ "$GSTACK_DIR/package.json" -nt "$BROWSE_BIN" ]; then
  NEEDS_BUILD=1
elif [ -f "$GSTACK_DIR/bun.lock" ] && [ "$GSTACK_DIR/bun.lock" -nt "$BROWSE_BIN" ]; then
  NEEDS_BUILD=1
fi

if [ "$NEEDS_BUILD" -eq 1 ]; then
  echo "Building browse binary..."
  (
    cd "$GSTACK_DIR"
    bun install
    bun run build
  )
  # Safety net: write .version if build script didn't (e.g., git not available during build)
  if [ ! -f "$GSTACK_DIR/browse/dist/.version" ]; then
    git -C "$GSTACK_DIR" rev-parse HEAD > "$GSTACK_DIR/browse/dist/.version" 2>/dev/null || true
  fi
fi

if [ ! -x "$BROWSE_BIN" ]; then
  echo "gstack setup failed: browse binary missing at $BROWSE_BIN" >&2
  exit 1
fi

# 2. Ensure Playwright's Chromium is available
if ! ensure_playwright_browser; then
  echo "Installing Playwright Chromium..."
  (
    cd "$GSTACK_DIR"
    bunx playwright install chromium
  )
fi

if ! ensure_playwright_browser; then
  echo "gstack setup failed: Playwright Chromium could not be launched" >&2
  exit 1
fi

# 3. Ensure ~/.gstack global state directory exists
mkdir -p "$HOME/.gstack/projects"

# 4. Only create skill symlinks if we're inside a .claude/skills directory
SKILLS_BASENAME="$(basename "$SKILLS_DIR")"
if [ "$SKILLS_BASENAME" = "skills" ]; then
  linked=()
  for skill_dir in "$GSTACK_DIR"/*/; do
    if [ -f "$skill_dir/SKILL.md" ]; then
      skill_name="$(basename "$skill_dir")"
      # Skip node_modules
      [ "$skill_name" = "node_modules" ] && continue
      target="$SKILLS_DIR/$skill_name"
      # Create or update symlink; skip if a real file/directory exists
      if [ -L "$target" ] || [ ! -e "$target" ]; then
        ln -snf "gstack/$skill_name" "$target"
        linked+=("$skill_name")
      fi
    fi
  done

  echo "gstack ready."
  echo "  browse: $BROWSE_BIN"
  if [ ${#linked[@]} -gt 0 ]; then
    echo "  linked skills: ${linked[*]}"
  fi
else
  echo "gstack ready."
  echo "  browse: $BROWSE_BIN"
  echo "  (skipped skill symlinks — not inside .claude/skills/)"
fi

# 4. First-time welcome + legacy cleanup
if [ ! -d "$HOME/.gstack" ]; then
  mkdir -p "$HOME/.gstack"
  echo "  Welcome! Run /gstack-upgrade anytime to stay current."
fi
rm -f /tmp/gstack-latest-version


需要先安装 bun。

Bash

which bun 2>/dev/null || which npm 2>/dev/null || which node 2>/dev/null

Check available JS runtimes


curl -fsSL https://bun.sh/install | bash 2>&1

Install bun runtime


#=#=#
##O#-#

#######################################                                   54.8%
################################################                          66.8%
##########################################################                81.2%
#####################################################################     96.8%
######################################################################## 100.0%
bun was installed successfully to ~/.bun/bin/bun

Added "~/.bun/bin" to $PATH in "~/.bash_profile"

To get started, run:

  source /root/.bash_profile
  bun --help


export PATH="$HOME/.bun/bin:$PATH" && ./setup 2>&1

Run setup with bun in PATH


Error: Exit code 1
Building browse binary...
bun install v1.3.11 (af24e281)
Resolving dependencies
Resolved, downloaded and extracted [3]
error: GET https://mirrors.tencentyun.com/@anthropic-ai%2fsdk - 404

error: GET https://mirrors.tencentyun.com/diff - 404

error: GET https://mirrors.tencentyun.com/playwright - 404
error: @anthropic-ai/sdk@^0.78.0 failed to resolve
error: diff@^7.0.0 failed to resolve
error: playwright@^1.58.2 failed to resolve


The issue is that bun is trying to use a Tencent mirror that doesn't have these packages. I need to configure bun to use the official npm registry.


bun 在使用腾讯镜像源，缺少部分包。切换到官方 npm registry。


cat ~/.bunfig.toml 2>/dev/null; cat ~/.npmrc 2>/dev/null

Check registry config


export PATH="$HOME/.bun/bin:$PATH" && bun install --registry https://registry.npmjs.org 2>&1

Install deps from official npm registry


bun install v1.3.11 (af24e281)
Resolving dependencies
Resolved, downloaded and extracted [30]
Saved lockfile

+ @anthropic-ai/sdk@0.78.0 (v0.80.0 available)
+ diff@7.0.0 (v8.0.3 available)
+ playwright@1.58.2

7 packages installed [691.00ms]


export PATH="$HOME/.bun/bin:$PATH" && bun run build 2>&1

Build browse binary and gen docs


$ bun run gen:skill-docs && bun build --compile browse/src/cli.ts --outfile browse/dist/browse && bun build --compile browse/src/find-browse.ts --outfile browse/dist/find-browse && git rev-parse HEAD > browse/dist/.version && rm -f .*.bun-build || true
$ bun run scripts/gen-skill-docs.ts
GENERATED: SKILL.md
GENERATED: browse/SKILL.md
GENERATED: qa/SKILL.md
GENERATED: qa-only/SKILL.md
GENERATED: setup-browser-cookies/SKILL.md
GENERATED: ship/SKILL.md
GENERATED: review/SKILL.md
GENERATED: plan-ceo-review/SKILL.md
GENERATED: plan-eng-review/SKILL.md
GENERATED: retro/SKILL.md
GENERATED: gstack-upgrade/SKILL.md
GENERATED: plan-design-review/SKILL.md
GENERATED: design-review/SKILL.md
GENERATED: design-consultation/SKILL.md
GENERATED: document-release/SKILL.md
  [17ms]  bundle  2 modules
   [1ms] compile  browse/dist/browse
   [3ms]  bundle  1 modules
   [0ms] compile  browse/dist/find-browse


export PATH="$HOME/.bun/bin:$PATH" && ./setup 2>&1

Run setup again with built binary


gstack ready.
  browse: /root/projects/gits/gstack/browse/dist/browse
  (skipped skill symlinks — not inside .claude/skills/)


安装完成。bun 已安装，依赖已下载，browse 二进制已编译，15 个 SKILL.md 已生成。

由于项目不在 `.claude/skills/` 目录下，skill 符号链接被跳过（这是正常的开发模式行为）。


gstack安装成功了吗，应该怎么使用


The user is asking if gstack was installed successfully and how to use it. Let me check the current state.

From the setup output, we got "gstack ready." which means the build was successful. However, the skill symlinks were skipped because the project is not inside `.claude/skills/`. For actual usage, gstack needs to be installed in `~/.claude/skills/gstack/`.

Let me explain the status and usage.


gstack **构建成功**了，但还没有完全安装为 Claude Code 的技能。原因是当前项目在 `/root/projects/gits/gstack`，不在 `~/.claude/skills/` 下，所以技能符号链接被跳过了。

让我检查一下当前状态：


ls -la ~/.claude/skills/gstack 2>/dev/null || echo "gstack skill not installed"; ls ~/.claude/skills/ 2>/dev/null || echo "no skills dir"

Check if gstack is installed as a skill


gstack skill not installed
learned


还没装到技能目录。需要将 gstack 复制或链接到 `~/.claude/skills/gstack/`，然后在那里运行 setup：


cp -Rf /root/projects/gits/gstack ~/.claude/skills/gstack && rm -rf ~/.claude/skills/gstack/.git && cd ~/.claude/skills/gstack && export PATH="$HOME/.bun/bin:$PATH" && ./setup 2>&1

Install gstack to Claude Code skills directory


gstack ready.
  browse: /root/.claude/skills/gstack/browse/dist/browse
  linked skills: browse design-consultation design-review document-release gstack-upgrade plan-ceo-review plan-design-review plan-eng-review qa qa-only retro review setup-browser-cookies ship
Shell cwd was reset to /root/projects/gits/gstack


gstack **安装成功**！13 个技能已链接到 Claude Code。

## 使用方法

在任何项目中打开 Claude Code，直接输入斜杠命令即可：

### 规划阶段
| 命令 | 作用 |
|------|------|
| `/plan-ceo-review` | CEO 视角审查计划，寻找 10x 机会 |
| `/plan-eng-review` | 工程经理审查架构和测试计划 |
| `/plan-design-review` | 设计师审查 UI/UX（评分制） |

### 开发阶段
| 命令 | 作用 |
|------|------|
| `/review` | 代码审查（SQL 安全、竞态条件等） |
| `/qa <url>` | 用浏览器测试网站并自动修 Bug |
| `/qa-only <url>` | 仅测试报告，不修改代码 |
| `/design-review <url>` | 设计审查 + 自动修复 CSS/HTML |
| `/browse` | 底层浏览器操作（~50 个命令） |

### 发布阶段
| 命令 | 作用 |
|------|------|
| `/ship` | 全自动发布：测试→审查→版本号→PR |
| `/document-release` | 发布后自动更新文档 |
| `/retro` | 周回顾：提交统计和工作模式分析 |

### 典型工作流
```
1. 写好计划 → /plan-ceo-review → /plan-eng-review
2. 实现代码
3. /review → 代码审查
4. /qa https://你的staging地址 → 自动测试
5. /ship → 一键发布
```


Unknown skill: office-hours


Unknown skill: office-hours . 是需要重启吗


gstack 的技能列表中没有 `office-hours` 这个命令。它不是 gstack 提供的技能。

gstack 提供的可用命令是：

- `/browse` — 浏览器操作
- `/qa` / `/qa-only` — QA 测试
- `/review` — 代码审查
- `/ship` — 发布流程
- `/plan-ceo-review` / `/plan-eng-review` / `/plan-design-review` — 计划审查
- `/design-review` / `/design-consultation` — 设计审查
- `/document-release` — 文档更新
- `/retro` — 周回顾
- `/setup-browser-cookies` — Cookie 导入
- `/gstack-upgrade` — 升级

你想使用哪个命令？


Unknown skill: gstack-upgrade


`/gstack-upgrade` 找不到，可能是符号链接没建好。让我检查一下。


ls -la ~/.claude/skills/ | grep -E "gstack-upgrade|gstack$"

Check gstack skill symlinks


drwxr-xr-x 22 root root 4096 Mar 24 14:32 gstack
lrwxrwxrwx  1 root root   21 Mar 24 14:32 gstack-upgrade -> gstack/gstack-upgrade


ls ~/.claude/skills/gstack-upgrade/SKILL.md 2>/dev/null && echo "exists" || echo "missing"

Check if SKILL.md exists via symlink


/root/.claude/skills/gstack-upgrade/SKILL.md
exists


文件和符号链接都在，但 Claude Code 没识别到。这通常是因为**技能是在当前会话启动后才安装的**，Claude Code 在启动时加载技能列表。

**需要重启 Claude Code 会话**才能识别新安装的技能。退出当前会话（`/exit` 或 Ctrl+C），重新运行 `claude` 即可。


<command-name>/exit</command-name>
            <command-message>exit</command-message>
            <command-args></command-args>


<local-command-stdout>Bye!</local-command-stdout>