
AI 编程从插件走向生产线
前几天我看一个 AI Agent 改代码的视频,差点把自己看笑了。
需求只有一句:“给后台加一个导出 CSV。”它很兴奋,立刻开写,十几个文件一顿改,接口、按钮、状态、测试全都给你安排上。看起来特别勤奋,像一个刚入职但精力旺盛到吓人的实习生。
我意识到:它根本没问清楚“导出谁、按什么筛选导出、谁有权限导出、数据量大怎么办”。
这就是现在 AI 编程最容易被低估的风险:AI 不是不会写代码,而是太会写代码了。
它可以把一个模糊想法迅速变成一堆看起来完整的实现。但真实项目里,真正贵的从来不是“写出代码”,而是:需求有没有对齐,边界有没有想清楚,测试有没有先定义,发布前有没有验收。
所以今天这篇文章,不讲“再装一个更强插件”。
我们讲一套更像工程生产线的组合:OpenSpec + Superpowers + gstack。
它们分别管住 AI 编程的三个关键环节:
• OpenSpec:写代码前,把需求锁住 • Superpowers:写代码时,用 TDD 和工程纪律卡住质量 • gstack:写完代码后,用评审、QA、发布流程把交付包起来 |
如果只装一个工具,你得到的是一个更强的 AI 助手。
但如果把这三个工具串起来,你得到的更像是一条从想法到上线的 AI 软件生产线。
先说结论:它们不是一类工具
很多人第一次看到 OpenSpec、Superpowers、gstack,会把它们都归到“Claude Code 插件”“Skills”“工作流增强”里。
这就像把产品经理、测试工程师、发布经理都叫成“写文档的人”。听着没错,实际完全不是一回事。
这三个工具真正的分工是:
• OpenSpec:负责需求、规范、验收标准,是需求真相源 • Superpowers:负责 TDD、计划、代码审查纪律,是质量门禁 • gstack:负责多角色评审、浏览器 QA、发布,是交付编排器 |
换句话说:
OpenSpec 负责“不写偏”,Superpowers 负责“不乱写”,gstack 负责“不假装交付”。
这句话基本就是整套组合的核心。

OpenSpec、Superpowers、gstack 的三层分工
OpenSpec:先把需求从聊天记录里拎出来
AI 编程第一个大坑,是需求经常只存在聊天记录里。
你说:“帮我加一个暗色模式。”
AI 说:“好的,我来实现。”
然后它就开始写了。
但真实需求里藏着一堆问题:
• 是跟随系统,还是手动切换? • 要不要记住用户选择? • SSR 场景怎么办? • 是否影响已有主题变量? • 哪些页面必须覆盖? • 验收标准是什么? |
如果这些问题没有被固定下来,AI 写得越快,偏得也可能越快。
OpenSpec 的价值就在这里:在第一行代码出现之前,先把想法变成可审查、可追踪、可归档的规范文件。
一个标准变更通常会生成这些产物:
openspec/changes/add-user-export/ proposal.md design.md tasks.md specs/ user-export.md |
它们分别回答:
• proposal.md:为什么做、要解决什么问题 • specs/:系统应该表现出什么行为,验收场景是什么 • design.md:技术上打算怎么实现 • tasks.md:拆成哪些可执行步骤 |
注意,OpenSpec 不是为了让 AI 写得更快。
它是为了让 AI 不要一上来就写偏。
这也是我现在最建议团队建立的习惯:只要是生产功能,不要从“写代码”开始,从“变更规范”开始。
Superpowers:把“写高质量代码”变成硬规则
第二个坑,是 AI 很容易跳过工程纪律。
人类工程师写功能,至少会经历几个动作:想边界、拆任务、写测试、做实现、跑验证、看 diff。
AI 的默认倾向却是:先写实现,再补一段“已完成,测试通过”。
听起来很熟悉吧?有时候它甚至测试都没跑,只是气势跑满了。
Superpowers 的思路不是对 AI 说一句“请写高质量代码”。这种话太虚了,和对自己说“明天开始早睡”差不多。
它是把工程方法论拆成一组可触发的 Skills,让 AI 在不同阶段自动进入对应流程,比如:
• 需求澄清 • 头脑风暴 • 写实现计划 • Git worktree 隔离开发 • 测试驱动开发 • 子代理执行任务 • 代码审查 • 修复审查反馈 • 完成分支并准备合并 |
这里最关键的是 TDD。
Superpowers 里的 TDD 不是“最好写点测试”。它更接近一条硬门禁:
RED → GREEN → REFACTOR |
也就是:
1. 先写失败测试 2. 确认测试真的失败 3. 写最小实现 4. 确认测试通过 5. 再重构 |
如果 AI 先写实现,再补测试,这不叫 TDD。
因为那种测试很容易变成“证明已有代码没错”,而不是“定义正确行为”。
在 AI 编程里,测试还有一个更重要的作用:测试是给 AI 的可执行规格说明。
自然语言 specs 可能会有歧义,测试不会。
比如“用户导出 CSV”这个功能,后端测试可以先定义:
- 非 admin 用户调用导出 API 返回 403- admin 用户调用导出 API 会创建 export job- 导出结果只包含当前筛选条件下的用户- CSV 不能包含未授权字段 |
这些测试一旦先写出来,AI 就不再是在“自由发挥”。
它是在沿着轨道施工。

Superpowers 用 TDD 卡住编码质量
gstack:代码写完,不等于真的交付
第三个坑,是“代码能跑”经常被误当成“已经交付”。
真实项目里,完成一个功能远不止提交代码。
你还要确认:
• 产品上是否值得做 • 范围有没有失控 • 架构是否合理 • 用户体验是否清楚 • diff 有没有安全问题 • 浏览器里是否真的能走通 • 发布前检查是否完成 • PR 描述是否说清楚 |
gstack 的特点,是把 Claude Code 变成一个小型虚拟工程团队。
它提供了很多角色化命令,例如:
/office-hours/plan-ceo-review/plan-eng-review/plan-design-review/plan-devex-review/review/qa/ship/retro |
这些命令不是为了“多套一层仪式感”。
它们是在逼 AI 从不同角色重新看一遍这个功能。
CEO/产品视角会问:这个功能真的值得做吗?有没有更小的版本?
工程视角会问:会不会拖垮数据库?权限校验在哪里?失败状态怎么处理?
设计视角会问:用户点击后看到什么?处理中怎么反馈?空结果怎么办?
DevEx 视角会问:API 命名清楚吗?测试好写吗?以后扩展别的导出类型麻烦吗?
这就是 gstack 在这套组合里的位置:它不是帮你写某段代码,而是把“从想法到发布”的流程编排起来。
为什么三个工具可以同时装?
关键原因很简单:它们不抢同一个位置。
OpenSpec 的核心状态在:
openspec/ changes/ your-change/ proposal.md design.md tasks.md specs/ |
它关心的是“这个功能的规范是什么”。
Superpowers 更偏 agent 方法论和 Skills,通常通过:
CLAUDE.md.claude/skills/ |
把 TDD、计划、审查等工程纪律注入 AI 编程环境。
gstack 则有自己的技能目录、命令、浏览器能力和流程状态,通常围绕:
~/.claude/skills/gstack.gstack/CLAUDE.md 中的 gstack 配置 |
它关心的是“这个功能如何走完评审、QA、发布”。
所以它们不是互相覆盖,而是分层:
OpenSpec = 需求层Superpowers = 质量层gstack = 交付层 |
这也是为什么我更愿意把它们理解成一条生产线,而不是三个插件。
真正重要的不是安装,而是串联
很多教程会把重点放在安装命令上。
这当然有用,但不是最重要的。
真正有价值的是:一个功能从想法到上线,每一步如何自然触发下一步。
理想流程不是:用完 OpenSpec,手动切到 Superpowers,再手动切到 gstack。
更好的状态是它们在同一个 Claude Code 会话里共同生效:
1. 你正常输入需求 2. OpenSpec 先生成规范 3. gstack 读取规范做计划评审 4. 编码阶段 Superpowers 的 TDD hard gate 生效 5. 代码完成后 gstack Review 和 QA 接管 6. 发布完成后 OpenSpec Archive 归档规范 |
这才是一条闭环。

从想法到上线的 AI 编程闭环
一个完整例子:给后台增加“用户批量导出 CSV”
假设我们要做一个功能:给后台系统增加“用户批量导出 CSV”。
不要直接说“帮我实现”。
第一步应该是让 OpenSpec 生成需求产物:
/opsx:propose add-user-export |
然后补充一段稍微完整的需求:
我们要给后台用户管理页增加批量导出 CSV 功能。 目标: - 管理员可以按当前筛选条件导出用户列表 - 导出字段包括用户 ID、邮箱、昵称、注册时间、状态 - 导出需要受权限控制,只有 admin 可以使用 - 大数据量不能阻塞主请求 - 前端需要显示导出进度或至少显示导出任务状态 - 导出文件有效期 24 小时 请先生成 proposal、specs、design、tasks,不要开始写代码。 |
这里的重点是最后一句:不要开始写代码。
你要先检查 proposal 是否讲清楚为什么做,specs 是否写清楚验收标准,design 是否只是实现设计而不是重写需求,tasks 是否拆到 AI 可以稳定执行。
一个好的验收场景应该像这样:
场景:管理员导出当前筛选结果Given 管理员在用户管理页选择状态为 active 的筛选条件When 点击导出 CSVThen 系统应创建导出任务And 导出的 CSV 只包含 active 用户And CSV 包含用户 ID、邮箱、昵称、注册时间、状态字段 |
接着,不要急着开写,让 gstack 读取这些产物做评审:
请读取 openspec/changes/add-user-export/ 下的 proposal、specs、design、tasks,然后用 gstack 的评审流程检查这个方案。 |
可以依次触发:
/plan-ceo-review/plan-eng-review/plan-design-review/plan-devex-review |
评审结束后,让 AI 把问题合并成一个修订清单,并且只修改 OpenSpec 产物,不写代码。
等方案真的稳定了,再进入 Superpowers TDD:
接下来按照 Superpowers 的 TDD 流程执行。先根据 OpenSpec specs 和 tasks 写失败测试。不要先写实现代码。每个任务都遵守 RED-GREEN-REFACTOR。 |
代码完成后,用 gstack Review 看 diff:
/review |
Review 的输入应该同时参考:OpenSpec specs、tasks、Superpowers 生成的测试、当前分支 diff、项目已有代码风格。
如果发现问题,不要让 AI 一口气全改。
更稳的方式是:
请按严重程度排序。先修 Critical 和 High。每次只修一类问题。修完后重新跑相关测试。 |
最后进入浏览器 QA:
/qa |
这个功能至少要验证:
• admin 可以导出当前筛选条件下的用户 CSV • 非 admin 不能导出 • CSV 字段正确 • 空结果状态正确 • 导出失败时有错误提示 • 重复点击不会创建一堆异常任务 |
Review 看的是代码,QA 看的是用户路径。
这两个不能互相替代。
推荐的实战命令顺序
如果你只想照着跑,可以用下面这套顺序。
第一阶段,生成需求规范:
/opsx:propose add-user-export |
补充要求:
请生成 proposal、specs、design、tasks。不要开始实现。specs 里必须包含权限、筛选条件、大数据量、失败场景、CSV 字段验收。 |
第二阶段,计划评审:
请读取 openspec/changes/add-user-export/ 下的所有产物,基于这些产物进行 gstack 计划评审。 |
然后依次执行:
/plan-ceo-review/plan-eng-review/plan-design-review/plan-devex-review |
第三阶段,TDD 实现:
现在根据已确认的 OpenSpec 产物开始实现。必须遵守 Superpowers TDD:1. 先写失败测试2. 看到测试失败3. 写最小实现4. 看到测试通过5. 重构6. 每完成一个 task 就提交或至少给出 diff 摘要 |
第四阶段,代码审查:
/review |
第五阶段,浏览器 QA:
/qa |
第六阶段,发布:
/ship |
发布前确认:
- tests 通过- lint/typecheck 通过- review 问题已关闭- QA 通过- PR 描述包含 OpenSpec 变更摘要 |
第七阶段,归档:
/opsx:archive add-user-export |
注意顺序:先 Ship,后 Archive。
Archive 是规范归档,不是发布动作。
最容易踩的 6 个坑
第一,重复门禁。
不要让三个工具审同一件事。更好的分工是:OpenSpec 定义需求,gstack 从角色视角评审计划,Superpowers 卡编码纪律,gstack 再审查代码、QA、发布,最后 OpenSpec 归档规范。
第二,把 gstack 设计文档当成需求真相源。
在这套组合里,Specs 才是唯一真相源。如果 gstack 评审发现需求问题,应该回头修改 OpenSpec 产物,而不是直接改实现。
第三,把 Archive 当发布。
OpenSpec Archive 只是规范归档。真正的发布出口应该是:
/ship |
第四,TDD 只做形式。
先实现再补测试,不叫 TDD。真正的 TDD 必须看到测试先失败。
第五,让 AI 一次性修所有 Review 问题。
Review 后如果有 20 个问题,不要直接说“全部修复”。先修 Critical,跑测试;再修 High,跑测试;Medium 和 Low 单独判断。
第六,QA 只测 happy path。
真实问题通常出在异常路径。至少要覆盖权限不足、空数据、网络失败、超大数据、重复点击、任务处理中刷新页面、导出文件过期、接口返回错误。

AI 编程生产线最容易踩的六个坑
什么时候可以跳过 TDD?
Superpowers 强调 TDD,但不是所有场景都值得完整 TDD。
我一般只在三类场景里放松:
• 一次性原型:当天验证 Demo,代码之后会丢弃 • 生成代码:API client、schema types、迁移产物等由上游 schema 保证 • 配置文件:比如 eslint 配置、环境变量示例、文档配置,可以用验证命令替代 TDD |
除此之外,只要是生产功能,尤其涉及数据、权限、支付、任务队列、状态流转,都建议严格执行 TDD。
别嫌麻烦。
AI 写代码越快,流程越不能省。
这套组合适合谁?
它适合这些人:
• 已经在用 Claude Code 做真实项目的人 • 想把 AI 编程从 vibe coding 升级成工程流程的人 • 独立开发者、小团队、技术创始人 • 需要频繁做功能迭代的 SaaS 或工具产品 • 对质量、测试、发布有要求的生产项目 |
它不太适合这些场景:
• 只想让 AI 改一行 CSS • 纯玩具 Demo • 完全不想维护测试 • 没有 Git 流程 • 不愿意审查 AI 输出 |
这套组合不是为了让你少思考。
恰恰相反,它是为了让你的思考被结构化,然后交给 AI 稳定执行。
最后的心法:不要把 AI 当写代码机器
没有流程时,AI 像一个很会写代码的实习生。
你说什么,它写什么。你没说的,它自己猜。你不检查,它就默认完成。
有流程后,AI 才像一个可管理的工程团队。
OpenSpec 先问清楚需求。
Superpowers 要求它按 TDD 写代码。
gstack 让它接受产品、工程、设计、QA、发布多轮检查。
最后 OpenSpec 再把规范归档,成为下一次迭代的上下文。
所以这套组合的核心不是:
装了三个工具。 |
而是:
搭了一条从需求到发布的 AI 工程流水线。 |
一句话总结:
OpenSpec 在写代码前把需求锁住,Superpowers 在写代码时把质量卡住,gstack 在写完代码后把交付包住。
这才是 AI 编程从“能用”走向“可上线”的关键。
