1. gstack:23 个 slash command 组成虚拟工程团队
1.1 从构思到发布,流程被编码成一条链
gstack 是 Garry Tan 开源的 Claude Code 技能集,用 23 个 slash command 组成虚拟工程团队,按 Think→Plan→Build→Review→Test→Ship→Reflect 跑完整研发流程。这套流程适合用 TaoToken 做统一接入,跑之前先打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建 API Key,让所有 slash command 共用这一把 Key。后续的 /office-hours、/autoplan、/review 等命令,都会通过这把 Key 完成模型调用;技能之间怎么传递上下文,仍然由 gstack 的 skill 编排决定,TaoToken 不碰流程,只负责把模型请求安全地送出去,并把用量记在同一把 Key 下。
Garry Tan 在项目 README 里写过,2026 年他的编码速度比 2013 年高两个数量级,gstack 是这套工作方式的核心。这个项目在 GitHub 上积累了十几万 Star,MIT 许可,没有高级订阅。它做的事情不是把某个 prompt 调得更聪明,而是把「一个工程团队如何协作」的流程编码成一条可执行的命令链:CEO 挑战产品方向,设计师评 UI,安全官查漏洞,QA 用真实浏览器验证行为,发布工程师管控上线。每个角色有明确边界,角色之间通过文件和会话传递结论。
1.2 单一 AI 助手为什么会在长会话里断链
只用一个 Claude Code 会话做完整功能,通常会碰到几个问题:让它写功能,它会写,但很少质疑这个功能是否真的有必要;让它审代码,它会审,但它不知道之前的设计文档里写了哪些取舍;每次开新会话都要重新解释项目背景,上下文经常断;安全审查、性能测试、文档更新这种事,你不主动提,它不会自己做。这不是模型能力不够,而是缺少分工和流程约束。
gstack 的思路是把「A 角色产出交给 B 角色评审,评审意见再交给 C 角色执行」这种协作方式固化到 slash command 里。这也意味着一个完整 sprint 会形成很长的会话,模型调用非常频繁。此时如果读者每个工具各配一套官方 Key,Claude Code 一把、Codex 一把、测试辅助的轻量模型再一把,最后账单散落在不同控制台,查起来相当费劲。这也是我在跑 gstack 之前先接 TaoToken 的原因:它是统一 API 兼容通道,把模型请求的入口收拢到一个 Base URL 和一把 API Key 上。
2. 7 步流程:Think → Plan → Build → Review → Test → Ship → Reflect
2.1 23 个 slash command 的上下文接力
gstack 的流程并不是 23 个命令平铺在菜单里,而是串成一条研发流水线。完整链路大致是:/office-hours 用六个强制问题挑战产品方向,产出设计文档;/autoplan 让 CEO、设计、工程三个角色独立评审方案,出一份可执行计划;/design-shotgun 生成 4-6 套 UI 变体,在浏览器里对比选优;/review 做代码审查,专门找那些能过 CI 但会在生产环境崩溃的 bug;/cso 按 OWASP Top 10 和 STRIDE 威胁模型做安全审计;/qa 启动真实浏览器跑用户路径,修 bug 并生成回归测试;/ship 负责同步主分支、跑测试、审计覆盖率、推送、开 PR;最后 /retro 做工程回顾,把经验沉淀下来供下次会话使用。
整条链路的每个环节都会读取上一步的产出,比如 /office-hours 生成的设计文档会被 /autoplan 引用,/plan-eng-review 写的测试计划会提供给 /qa 使用。流程执行过程中,前面角色做过的判断不会因为切换命令而丢失。对 Claude Code 来说,这意味着一个 sprint 通常是一条很长的会话,模型的上下文窗口和调用次数都会被拉高。
2.2 长会话调用频繁,多把 Key 的账单很散
长会话带来的直接问题是模型调用量成倍增长。一次 /autoplan 可能触发 CEO、设计、工程三路评审,每一路都是完整的模型调用链;一次 /qa 要在真实浏览器里做多轮交互,每轮都可能伴随多次推理。如果这些调用分别走不同厂商、不同 Key,对账时就要打开好几个控制台,分别看每个 Key 消耗了多少 token,再手动汇总到同一个项目成本里。
更麻烦的是切换模型:在官方控制台开的 Key 通常绑定固定模型或固定额度,想从快速模型切到深度推理模型,往往要重新申请、换 Key、改配置。TaoToken 的思路是把这些问题收口成一个接入点:Base URL 固定为 https://taotoken.net/api,API Key 统一从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建,模型 ID 在模型广场按需挑。gstack 该串的 23 个 slash command 一个不动,动的只是「模型请求从哪个入口出去」。
3. 装 gstack,再把 Claude Code 指到 TaoToken
3.1 30 秒安装 gstack
gstack 的安装方式和有没有 TaoToken 无关,命令照旧。在终端里执行:
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setupsetup 脚本会把一组 skill 定义和 slash command 配置安装到 Claude Code 的 skills 目录。如果是在团队里统一使用,可以执行团队模式:
(cd ~/.claude/skills/gstack && ./setup --team) && ~/.claude/skills/gstack/bin/gstack-team-init required && git add .claude/ CLAUDE.md && git commit -m "require gstack for AI-assisted work"团队模式会把 gstack 的配置提交到主仓库,之后克隆这个仓库的人会自动获得整套 skill。安装完成先别急着跑命令,下一步把模型入口配好。
3.2 在 TaoToken 创建 API Key,并确定模型 ID
打开 TaoToken 注册并登录,进入控制台创建 API Key。创建后把 Key 复制下来,保存为 YOUR_API_KEY,后续所有配置里都用这个占位符代表它。官网落地页只负责注册、创建 Key、查看模型广场、查看用量;真正填进 Claude Code 的是接口地址,这个区分很重要。
模型 ID 不要凭记忆填,也不要从任何第三方文章里复制带日期的模型名。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,看当时列表里实际提供的模型 ID,配置时以广场为准。不同时期的模型列表可能变化,写死一个不存在的 ID 会导致下一步验证失败。
3.3 settings.json 或 export 二选一
Claude Code 读取环境变量的标准方式是 ~/.claude/settings.json 的 env 字段。创建一个并写入:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "your-model-id" } }其中 your-model-id 是占位符,实际值填模型广场上显示的模型 ID。如果你更喜欢用环境变量,也可以在 shell 配置里 export:
export ANTHROPIC_BASE_URL=https://taotoken.net/api export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY export ANTHROPIC_MODEL=your-model-id注意 Base URL 末尾不要加 /v1,也不要顺手把带 UTM 参数的官网链接填进工具;环境变量里的地址和注册页面的地址是两个东西。之前配过 ANTHROPIC_API_KEY 的话,建议改成 ANTHROPIC_AUTH_TOKEN,避免旧变量优先把请求带到官方入口。
4. 值得拆开看的几个 slash command
4.1 /office-hours 与 /autoplan:需求先被挑战,代码才不白写
/office-hours 是流程的入口,它模拟 YC Office Hours 的对话方式,用六个强制问题挑战你的产品前提:解决谁的问题、怎么确认问题真实存在、现有方案为什么不够、核心假设是什么、什么情况下会失败、最小验证要做成什么样。它不是帮你完善 idea,而是先逼你把 idea 里站不住脚的部分暴露出来。很多功能在这一步就会被判定为不需要做,省下后面所有开发成本。
/autoplan 是三方评审流水线。它会自动运行 /plan-ceo-review、/plan-design-review、/plan-eng-review 三条线:CEO 评审决定范围是扩展、选择性扩展、保持还是缩减;设计评审按 0-10 分评估各设计维度,专门识别 AI 生成的「看起来完整但实际没有产品逻辑」的 UI;工程评审锁定架构、数据流、边界情况和异常路径。三个角色各自独立评审,互不干扰,最后汇总成一份可执行计划。这一条命令跑下来,相当于同时拿到老板、设计、技术负责人的三方意见。
4.2 /review、/cso、/qa:三层检查从代码到浏览器
/review 关注的是普通 lint 和 CI 查不出来的问题:竞态条件、边界情况遗漏、错误处理路径缺失、依赖版本隐患。它对明显问题会直接修复,对复杂问题输出分析和修复建议,定位是「能通过所有 CI 检查,但会在生产环境崩溃的 bug」。
/cso 是首席安全官视角,按 OWASP Top 10 和 STRIDE 威胁模型做安全审计,并且带 17 条误报排除规则,避免把「加了 try-catch 的正常异常处理」误报成错误抑制漏洞。/qa 是差异化最强的命令:它启动真实的 Playwright Chromium 浏览器,在本地测试环境里真实点击、真实提交表单、真实调用接口,发现 bug 直接修复,修复完成自动生成回归测试。每次 /qa 跑完,测试用例就沉淀一批,覆盖率随迭代逐步提升。这里所有动作都发生在本地测试环境,不会去碰生产库。
4.3 /ship 与安全护栏,以及浏览器控制能力
/ship 把发布流程压缩成一条命令:同步主分支、运行测试套件、审计测试覆盖率、推送到远程、开 Pull Request。这五步手动执行很容易漏掉某一步,/ship 用一条命令强制按顺序完成。安全护栏方面,/careful 会在危险命令(rm -rf、DROP TABLE、force push)前强制警告;/freeze 把编辑范围锁到单一目录,Agent 无法在范围外改文件;/guard 是两者的组合。
浏览器控制层还有几个设计:提示注入防御用 22MB 离线 ML 分类器检测网页里的恶意指令,再用轻量模型做二次转录检查,同时埋入随机 canary token,一旦 Agent 在响应里输出这个 token 就说明被注入。除此之外,/pair-agent 支持 Claude Code 和 Codex 等不同 Agent 共享同一个浏览器,各自在独立标签页工作;遇到验证码或人工确认场景时,可以用 handoff 把控制权交给用户,完成后用 resume 还给 Agent。
5. 跑一次 /autoplan 或 /review,确认这把 Key 被共用
5.1 验证步骤:发命令,看产出,对用量
配置完成后,在项目目录里启动 Claude Code,先跑一次 /autoplan。给它一句话需求,例如「做一个简单的番茄钟页面,包含开始、暂停、重置」,观察输出是否出现多角色评审结构,而不是单次模型回答。正常跑完说明 gstack 的 skill 编排已经生效,Claude Code 里的模型请求正通过 TaoToken 提供的 Base URL 发送。
确认流程跑通后,再执行一次 /review 或者直接跑 /qa 做真实浏览器测试。这两条命令的模型调用类型不同,能同时验证对话类模型和浏览器辅助模型的请求是否都能走通同一把 Key。验证完成后,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 进入控制台查看用量,刚才那几次命令产生的 token 消耗应该已经记录在这把 Key 名下。
5.2 配置后最常见的三个偏离
第一个是 401 Unauthorized 或 Invalid API Key。通常是 settings.json 里 ANTHROPIC_AUTH_TOKEN 没有替换成真实 Key,或者复制时带了空格;也有可能是文件路径放错,Claude Code 读的是 ~/.claude/settings.json,不是项目目录下的 settings.json。
第二个是 model not found 或 404。遇到这类错,不要急着改 Base URL,先检查 ANTHROPIC_MODEL 填的 ID 是否在模型广场当前列表里。模型 ID 是经常变化的字段,必须以官网模型广场当时显示为准,不要沿用其他文章里的旧 ID。同时确认 Base URL 是 https://taotoken.net/api,末尾不要加 /v1。
第三个是命令跑完但用量不涨。这种情况一般是环境变量没有被 Claude Code 加载。如果用的是 export 方式,需要重启终端让变量重新生效;如果用的是 settings.json,确认 JSON 格式有效,并且 env 字段没有被其他配置覆盖。
6. 并发的 sprint 里,统一 Key 的价值会被放大
6.1 10-15 个 sprint 并行时,账单怎么收口
gstack 支持多个 sprint 并行运行,配合 Conductor 或 Claude Code 的并行 worktree,一个仓库里可以同时跑 10-15 条开发线:一个 sprint 在做 /qa,另一个在跑 /design-shotgun,第三个已经在走 /ship。这种场景下,如果每个 worktree 里各配一个官方 Key,月底对账时要同时打开十几个 Key 的用量页面,再手动按功能合并成本。
统一走 TaoToken 后,所有并行 sprint 的模型调用都进同一把 Key,用量在同一个控制台汇总。跑完一轮功能开发,打开控制台就能看到这个阶段所有 slash command 消耗的 token 总量。对比关系大致如下:
| 维度 | 普通 Claude Code 直连 | gstack 团队流程 | gstack + TaoToken 统一接入 |
|---|---|---|---|
| 角色 | 单个助手 | 23 个专家角色 | 保持 gstack 角色不变 |
| 上下文 | 每次重新解释 | skill 间传递 | 保持 gstack 上下文链不变 |
| Key 管理 | 一把 Key 绑一个入口 | 多工具多 Key 分散 | 统一 Base URL + 一把 Key |
| 账单 | 按官方账号分开 | 分散在多个控制台 | 同一控制台集中对账 |
6.2 一点使用体会:流程归 gstack,接入归 TaoToken
跑完整条流水线后,我的体会是:TaoToken 不改变 gstack 的 skill 编排逻辑,23 个 slash command 谁先谁后、谁读谁的产出,仍然由 gstack 自己管理;变换的只是模型请求的入口。这把 Key 让 Claude Code、Codex、浏览器辅助模型都有了同一个出口,切换模型时只需要改 ANTHROPIC_MODEL,不必重新折腾一套配置。
虚拟工程团队是否真的有效,最终取决于你给 /office-hours 的初始输入是否诚实。Key 统一之后,省下的是来回切控制台对账的精力,但每个 slash command 需要的上下文质量,还是得靠你自己准备。
准备用这套流程跑正式项目的话,建议先到 TaoToken 模型对话 用同一把 Key 发一条测试消息,确认模型 ID 和 Base URL 没问题;需要持续写代码可以看看 Coding Plan 的套餐;Key 的创建和管理在 控制台 API Keys 页面;Claude Code 环境变量的完整对照见 接入文档。对完这一轮用量,再开下一个 sprint,心里会踏实很多。