本文档的结构导航如下,方便快速查阅核心章节:
gstack 是由 Y Combinator 现任总裁兼 CEO Garry Tan 开源的 AI 编程工厂与虚拟工程团队工作流。该项目建立在一个核心哲学之上:AI 不应该只在一个通用的认知模式下工作,它需要明确的角色分工。
通过将结构化的软件工程角色(如 CEO、工程经理、设计师、QA、发布工程师等)封装为特定的 AI 技能(Skills),gstack 成功地将 Claude Code 等 AI 编程助手转化为了一支纪律严明、各司其职的虚拟工程团队。Garry Tan 本人曾公开表示,借助这套工作流,他在担任 YC CEO 的同时,以兼职的时间在 60 天内写出了超过 60 万行生产级代码(日均 1-2 万行),这被社区誉为“一个人拥有了一个二十人工程团队的生产力”。
项目的核心特性包括:
/plan-eng-review 和 /review 步骤,迫使 AI 在不同阶段切换认知齿轮,从而产出高质量的架构图和代码。gstack 的系统架构主要分为两个维度:AI 技能调度层和无头浏览器交互层。为了解决 AI 代理在频繁调用浏览器时遇到的冷启动延迟(约 3-5 秒)和状态丢失(如 Cookie、登录态)问题,gstack 创新性地引入了 C/S 架构的守护进程模型。
我们可以将这套架构理解为一个虚拟的测试工程师:
$B click @e1),并通过 HTTP 长连接极速下发。整个系统从上至下实现了严格的解耦:最上层的 AI 代理通过调用本地编译的 CLI 工具发出指令,CLI 作为轻客户端通过 HTTP 协议与常驻后台的 Bun Server 通信,而 Server 则利用 CDP (Chrome DevTools Protocol) 直接驱动底层的 Playwright Chromium 实例,并异步处理日志的刷盘落库。
graph TD
subgraph AI Agent Layer
A[Claude Code / Codex] -->|Invoke Skill| B[SKILL.md Prompts]
B -->|Tool Call: $B command| C(CLI - Compiled Binary)
end
subgraph gstack Browse Daemon
C -->|1. Read .gstack/browse.json| C
C -->|2. HTTP POST| D[Server - Bun.serve]
D -->|Dispatch| E[Browser Manager]
end
subgraph Headless Browser
E -->|CDP| F[Chromium - Playwright]
F -->|Render| G[Web Page]
F -.->|Log/Network/Dialog| H[(In-Memory Buffers)]
H -.->|Async Flush| I[Disk Logs]
end
本小节详细说明系统架构中的几个关键设计决策,包括 Bun 运行时的应用、状态持久化方案以及安全隔离策略。
bun build --compile 将 CLI 打包为单一可执行文件,消除运行时的 node_modules 依赖,体积约 58MB。better-sqlite3 等 C++ 扩展,极大提高了跨平台兼容性。Bun.serve() 提供极简的 HTTP 服务,处理约 10 个核心路由,避免了冗余的 Express/Fastify 框架开销。bun run server.ts,无需预编译。localhost,禁止外部网络访问。Bearer Auth),防止跨进程的未授权调用。page.accessibility.snapshot() 获取 ARIA (Accessible Rich Internet Applications) 树,为每个元素分配顺序编号(如 @e1, @e2)。count() === 0 即抛出异常),解决传统 CSS 选择器在 Shadow DOM、框架水合时频繁失败的问题。framenavigated 事件)发生时,所有 Ref 会被自动清理。这是一种防御性设计,要求 Agent 在导航后必须重新运行 snapshot 获取最新的引用,避免点击到错误或过期的元素。@c1, @c2),通过 -C 标志捕捉未在 ARIA 树中但实际可通过光标点击的元素(如带有 cursor: pointer 或自定义 onclick 的 div)。本章主要分析 gstack 项目中的底层基础设施模块。与基于 Markdown 定义的技能配置不同,底层模块基于 TypeScript 开发,主要负责处理系统级交互与自动化任务。其中,无头浏览器引擎(Headless Browser Engine)为 AI 代理提供了页面 DOM 元素的解析与交互能力;技能模板编译系统(Skill Template Compiler)则负责管理和生成最终的技能文档,确保多环境下的配置一致性。
browse)该模块位于 browse/src/ 目录,基于 Playwright 构建,用于在后台执行自动化浏览器任务,并向外提供标准的交互接口。
cli.ts)
.gstack/browse.json 状态文件以获取当前守护进程的 PID、端口及认证 Token。在进程缺失或二进制文件版本(binaryVersion)变更时,自动拉起并初始化 server.ts,随后通过 HTTP POST 协议转发交互指令。server.ts)
browser-manager.ts)
disconnected 事件,在 Chromium 实例异常崩溃时主动终止进程,避免僵尸进程及状态不一致问题。@e1),使 AI 代理能够通过纯文本指令精准定位和操作 DOM 节点,规避了直接处理复杂 HTML 树的性能损耗。gen-skill-docs)该模块位于 scripts/gen-skill-docs.ts,主要实现技能文档(SKILL.md)的自动化构建与渲染。
.md 技能文档的直接修改,强制通过编译脚本将 .tmpl 模板转换为最终文档,以此保障代码与文档的同步更新。本章将详细梳理存放在 .agents/skills/ 目录下的所有核心技能(Skill)。这些技能通过定义特定的系统提示词(Prompt)、工具权限(Allowed Tools)与执行钩子(Hooks),赋予 AI 代理不同的专业角色。根据在软件开发生命周期中的应用阶段,这些技能可划分为四个核心层级:产品规划层、质量保障层、发布运营层以及基础设施层。
本层技能主要应用于代码编写之前的需求分析与架构设计阶段,旨在确保产品目标明确、技术架构合理且设计规范统一。
/office-hours (产品诊断与重构)
Bash, Read, Grep, Glob, Write, Edit, AskUserQuestion。/plan-ceo-review (产品边界评审)
Read, Grep, Glob, Bash, AskUserQuestion。/plan-eng-review (工程架构评审)
Read, Write, Grep, Glob, AskUserQuestion, Bash。/plan-design-review (设计方案评估)
Read, Edit, Grep, Glob, Bash, AskUserQuestion。/design-consultation (设计系统构建)
Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, WebSearch。本层技能贯穿于代码开发及测试阶段,核心目标是发现潜在缺陷、保证代码逻辑的健壮性以及 UI 表现的精确还原。
/review (代码逻辑审查)
Bash, Read, Edit, Write, Grep, Glob, AskUserQuestion。/investigate 与 /debug (系统性根本原因调试)
/debug 为其常用别名。Bash, Read, Write, Edit, Grep, Glob, AskUserQuestion。PreToolUse 拦截器,在执行 Edit 或 Write 之前自动运行 check-freeze.sh,强制检查调试范围边界,防止修改越界。/qa (端到端自动化测试与修复)
Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, WebSearch。/qa <URL>,它将自动执行点击、输入等操作。发现问题后,会通过原子提交(Atomic Commit)修复代码并重新验证。/qa-only (端到端只读测试)
/qa 的只读版本,仅执行测试与报告,不进行任何代码修改。Bash, Read, Write, AskUserQuestion,禁用了代码编辑工具(Edit)。/design-review (设计实现审查与修复)
Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, WebSearch。/codex (对抗性代码审查)
Bash, Read, Write, Glob, Grep, AskUserQuestion。/review 结合使用以获取多维度的代码评估报告。本层技能主要用于版本发布流程的自动化管理以及项目周期的复盘总结,确保交付的高效与透明。
/ship (一键发布流水线)
Bash, Read, Write, Edit, Grep, Glob, AskUserQuestion, WebSearch。/document-release (文档同步更新)
Bash, Read, Write, Edit, Grep, Glob, AskUserQuestion。/ship 之后)导致项目特性发生改变时。/retro (周期回顾与分析)
Bash, Read, Write, Glob, AskUserQuestion。本层技能提供了支撑上层业务逻辑运行的底层工具、系统配置入口及核心安全防护机制。
/gstack (全局工作流与浏览器入口)
Bash, Read, AskUserQuestion。/review 或 /ship)。若需关闭主动推荐,可按提示修改配置。/browse (无头浏览器控制)
Bash, Read, AskUserQuestion。/qa 等上层技能自动调用,开发者也可通过 $B <command> 在终端手动发送底层控制指令。/setup-browser-cookies (浏览器会话同步)
Bash, Read, AskUserQuestion。/qa 前调用,以确保无头浏览器具备正确的用户认证上下文。/careful (破坏性操作告警)
rm -rf 或 DROP TABLE 等操作。Bash, Read。PreToolUse 拦截器,在执行任何 Bash 命令前,自动运行 check-careful.sh 脚本扫描破坏性指令。/freeze 与 /unfreeze (编辑范围锁定)
Bash, Read, AskUserQuestion。/freeze 配置了 PreToolUse 拦截器,在调用 Edit 或 Write 工具前,强制执行 check-freeze.sh 验证路径权限。/freeze 锁定目录,完成任务后必须调用 /unfreeze 解除限制。/guard (全局最高安全模式)
/careful 的命令告警与 /freeze 的编辑锁定功能。Bash 前检查破坏性命令,在执行 Edit / Write 前检查边界限制。/gstack-upgrade (系统自我更新)
Bash, Read, Write, AskUserQuestion。本章将通过深入剖析三个具有代表性的 .tmpl 技能模板(/qa, /review, /plan-eng-review),展示 gstack 是如何通过高级 Prompt 工程技术,将 AI 从“被动问答机器人”转化为“主动工程伙伴”的。在此基础上,我们将总结出可复用的 Prompt 设计模式。
以下是对 gstack 核心技能底层工作流与 Prompt 设计的详细分析,并附带了部分真实的模板源码(Prompt 节选)。
/qa:端到端测试与修复闭环该技能展示了如何编排一个极其复杂的“测试-修复-回归”多步状态机。
Target URL, Tier, Scope 等参数的默认值与覆盖方式。git status --porcelain。若工作区不干净,会触发 AskUserQuestion 要求用户 Commit 或 Stash,以此保护后续的“原子提交(Atomic Commits)”不污染代码历史。源码节选(脏检查拦截):
**Check for clean working tree:**
`git status --porcelain`
If the output is non-empty (working tree is dirty), **STOP** and use AskUserQuestion:
"Your working tree has uncommitted changes. /qa needs a clean tree so each bug fix gets its own atomic commit."
~/.gstack/projects/ 读取由 /plan-eng-review 生成的测试计划(*-test-plan-*.md),以此作为测试基准。仅当测试计划缺失时,才降级使用 git diff 启发式分析。Phase 1-6: QA Baseline 到 Phase 7: Triage(基于设定的 Tier 过滤 Bug),再到 Phase 8: Fix Loop。before/after 截图比对与回归测试编写。/review:超越语法的架构级审查该技能展示了如何让 AI 摆脱“代码格式检查器”的局限,进行深度业务逻辑审查。
Step 1.5 强制要求 AI 先读取 TODOS.md 或 PR 描述,提取“声明的意图(Stated Intent)”,再对比实际的代码 Diff。以此来侦测“范围蔓延(Scope Creep)”或“需求遗漏”。源码节选(范围蔓延检测):
## Step 1.5: Scope Drift Detection
Before reviewing code quality, check: **did they build what was requested — nothing more, nothing less?**
1. Read `TODOS.md` (if it exists). Read PR description...
2. Identify the **stated intent** — what was this branch supposed to accomplish?
3. Run `git diff origin/<base> --stat` and compare the files changed against the stated intent.
Step 2 动态读取外部规则库 .claude/skills/review/checklist.md,并在 Step 4 执行“双通道审查(Two-pass review)”。第一遍专查致命问题(SQL 注入、竞态条件),第二遍查常规问题(硬编码、测试覆盖)。AUTO-FIX 和 ASK 两类。对于机械性问题自动修复;对于架构或业务问题,通过 AskUserQuestion 将多个选项(附带修复建议)批量抛给用户决策。防止了“只报不修”的无效审查。/plan-eng-review:注入专家级思维模式该技能展示了如何为 AI 注入高级人类工程师的直觉和价值观。
源码节选(认知模式注入):
## Cognitive Patterns — How Great Eng Managers Think
These are not additional checklist items. They are the instincts that experienced engineering leaders develop over years... 2. **Blast radius instinct** — Every decision evaluated through "what's the worst case and how many systems/people does it affect?" 3. **Boring by default** — "Every company gets about three innovation tokens." Everything else should be proven technology. 10. **Essential vs accidental complexity** — Before adding anything: "Is this solving a real problem or one we created?"
源码节选(复杂度阻断):
3. **Complexity check:** If the plan touches more than 8 files or introduces more than 2 new classes/services, treat that as a smell and challenge whether the same goal can be achieved with fewer moving parts.
STOP 指令。强制要求 AI “每个问题单独调用一次 AskUserQuestion”,且必须包含“投入产出比评估”,彻底打破了 AI 喜欢一次性生成长篇大论的坏习惯。通过上述拆解,我们可以提取出设计高级 AI 技能的四个核心设计模式:
AskUserQuestion 处理异常,避免破坏性行为。~/.gstack/projects/ 下的标准化产物)。下游技能(如 /qa)必须优先读取上游技能(如 /plan-eng-review)的输出,形成信息流闭环。STOP. Call AskUserQuestion. 的指令。让 AI 负责繁琐的分析与执行,但将关键路径(如是否重构、是否修复某个风险)的决策权牢牢交还给人类。CRITICAL(必须修复或询问)和 INFORMATIONAL(仅供参考)的信息层级,既保证了审查的严谨性,又不会过度阻塞工作流水线。本章节通过梳理不同类型的技能指令,展示系统各组件如何协同工作以完成 AI 代理的请求。gstack 的执行流程大致可分为两类:纯文本规划类(Markdown 驱动)与系统操作类(代码/浏览器驱动)。
/plan-eng-review)这类技能的核心在于上下文的读取与思维模式的注入,其执行流程如下:
bash 脚本读取当前分支状态、项目目录结构。*-design-*.md(设计文档)。AskUserQuestion 询问用户是否缩减范围。/qa 结合浏览器操作)以 AI 代理调用 /qa 技能并在网页中执行点击操作(执行 $B click @e1 命令)为例,其端到端涉及到了外部进程的调用:
sequenceDiagram
participant Agent as AI Agent
participant CLI as browse CLI
participant Server as Bun Server
participant Manager as BrowserManager
participant Playwright as Chromium
Agent->>CLI: 执行命令 $B click @e1
CLI->>CLI: 检查状态文件
alt 服务器未启动或已失效
CLI->>Server: spawn 启动后台进程
Server-->>CLI: 写入新的进程信息
end
CLI->>Server: 发送 HTTP POST 请求 (携带 Token)
Server->>Server: 鉴权并路由命令
Server->>Manager: 调用处理函数
Manager->>Manager: 解析 @e1 获取节点引用
Manager->>Playwright: 执行点击动作
Playwright-->>Manager: 页面响应事件
Manager-->>Server: 返回操作结果
Server-->>CLI: 返回 HTTP 状态码
CLI-->>Agent: 控制台输出结果
在这个流程中,得益于守护进程架构,只有第一次调用会触发冷启动,后续的 HTTP POST 交互将延迟压缩在了 100~200ms 内。
本章节从系统性能表现、自动化测试覆盖率两个维度对项目的工程质量进行综合评估,并提炼出测试 AI Skill 的最佳实践。
得益于常驻内存的守护进程架构,浏览器的首次启动时间约为 2 到 3 秒,但后续所有的 DOM 交互、快照截取和网络请求等命令的延迟均被压缩至 100 到 200 毫秒 之间。这使得 AI 代理可以像人类一样流畅地“浏览”页面,极大地提升了 /qa 和 /design-review 技能的执行效率。
测试一个具有“自主思考和操作能力”的 AI Agent 是一项极具挑战的工程。gstack 提供了一个堪称教科书级别的三层测试架构(参见 test/ 目录):
本层级测试旨在不依赖外部大模型接口的情况下,快速验证底层核心工具链的基础逻辑与稳定性。
bun test 执行传统的单元测试。在本地运行前,需确保底层依赖已就绪(如执行 npx playwright install 下载 Chromium 内核)。gen-skill-docs)是否正常工作,以及无头浏览器 CLI 工具(browse/src/)的基础逻辑、路径安全、状态缓存等是否正确。整个测试集包含几百个用例,由于不调用任何 LLM 接口,几秒内即可极速完成。执行示例:
# 安装依赖与浏览器内核后执行测试
bun install && npx playwright install && bun test
部分测试输出示例:
✓ Navigation > goto navigates to URL [17.33ms]
✓ Content extraction > accessibility returns ARIA tree [24.31ms]
✓ Interaction > click on option ref auto-routes to selectOption [50.01ms]
✓ CLI lifecycle > dead state file triggers a clean restart [1185.15ms]
...
本层级测试通过在真实的沙箱环境中模拟人类与 AI 代理的对话,验证其对外部工具(如无头浏览器)的实际调度与问题修复能力。
child_process.spawn 真实唤起 claude -p 命令行进程。$B 浏览器交互命令),是否能成功发现并修复沙盒中“故意植入的 Bug”。针对 AI 代理输出内容具有非确定性的特点,本层级测试引入了高智能的第三方模型来量化评估结果的质量和准确性。
expect(x).toBe(y))无法生效。因此引入另一个大模型(如 claude-sonnet-4-6)作为“裁判”。helpers/llm-judge.ts,裁判模型会读取并评估 AI 代理生成的 QA 报告或设计文档:
除了性能和测试覆盖率外,gstack 在设计上还引入了多项机制,以确保进程管理的安全性和测试环境的纯净隔离。
git rev-parse HEAD)。一旦检测到二进制文件更新,下一次调用会自动杀死旧 Server 并重启,彻底杜绝了“进程版本不一致”导致的玄学 Bug。/setup-browser-cookies 将特定的认证状态注入到无头浏览器中,确保自动化测试能够在真实的鉴权环境下运行。本章节详细说明项目的依赖管理、构建流程以及部署机制。gstack 提供了一套高度自动化的构建脚本(setup),极大降低了用户的配置成本。
项目使用 Bun 作为核心的包管理器和构建工具,极大简化了 Node.js 生态下的工具链复杂度:
bun install 可以在秒级完成项目所需依赖(主要是 playwright 和 @anthropic-ai/sdk)的安装。bun build --compile 直接将 TypeScript 源码(如无头浏览器 CLI)编译为体积约 58MB 的单文件二进制可执行程序。这意味着最终用户在运行 gstack 时,甚至不需要在机器上安装 Node.js 环境。bun run build)执行 bun run build 会触发一连串的自动化构建动作,具体包括:
gen-skill-docs.ts,将所有的 .tmpl 模板文件渲染为标准的 SKILL.md,并根据宿主环境(Claude 或 Codex)适配路径。browse/src/cli.ts 等入口文件编译打包至 browse/dist/browse。git rev-parse HEAD)并写入 .version 文件,供后续的防僵尸进程机制校验使用。setup)gstack 提供了一个强大的 setup bash 脚本,用于处理复杂的环境探测和部署逻辑:
browse/dist/browse 是否存在,并通过比对源码、package.json 或 bun.lock 的修改时间来智能决定是否需要重新触发构建流程。--host auto 参数,能够自动探测当前系统安装的是 Claude Code 还是 Codex,并将生成的技能目录动态软链接(Symlink)到对应的全局配置目录(如 ~/.claude/skills/gstack)下。这种设计既保证了全局调用的便利性,又方便了开发者在源码目录进行修改后的实时生效。本章节为希望在自己的 Vibe Coding IDE (如 Cursor, Trae 等) 中快速体验 gstack 工作流的用户提供指南。
在开始之前,请确保当前系统满足以下基础环境:
SKILL.md 标准的 Agent 技能扩展。为了让 AI 助手在任何项目中都能调用 gstack 的 21 个核心技能,推荐将其安装到全局的 .agents/skills 目录中。
打开终端,执行以下命令:
# 克隆 gstack 仓库到本地目录
git clone https://github.com/garrytan/gstack.git ~/gstack
# 进入目录并执行自动化安装脚本
cd ~/gstack && ./setup --host auto
[!NOTE]
setup脚本会自动检测系统中已安装的 AI 工具(如 Claude 或 Codex),并将编译好的二进制文件及技能模板软链接到对应的~/.claude/skills/gstack或~/.codex/skills/gstack目录下。
如果希望团队的其他成员在 clone 代码仓库时,能直接拥有同样的 AI 技能环境,可以将 gstack 固化到当前项目中。
在项目根目录下执行:
# 将全局安装的 gstack 复制到当前项目的隐藏目录下
cp -Rf ~/.claude/skills/gstack .claude/skills/gstack
# 移除 git 历史,避免嵌套仓库问题
rm -rf .claude/skills/gstack/.git
# 重新在项目内构建并注册技能
cd .claude/skills/gstack && ./setup
随后,建议在项目根目录创建一个 CLAUDE.md(或 IDE 对应的自定义系统提示词文件),加入以下内容,指导 AI 如何使用这些技能:
# AI 工作流指南
请使用项目中 `.claude/skills/gstack` 下提供的技能。
- 规划阶段请使用 `/office-hours` 和 `/plan-ceo-review`
- 审查代码请使用 `/review`
- 测试功能请使用 `/qa` 和 `/browse`,**绝对不要**使用自带的 `mcp__claude-in-chrome__*` 工具。
安装完成后,打开 IDE 聊天窗口,尝试以下的“对话流”来体验完整的 gstack 闭环:
我想在现在的项目中增加一个用户反馈收集的弹窗,/office-hours。/plan-eng-review。/qa http://localhost:3000(替换为本地开发地址),让它自己去点击弹窗,发现 Bug 并修复。/ship,它会自动运行测试、生成 Commit 并推送到仓库。