前言
在 AI 辅助编程,也就是很多人说的 Vibe Coding 大行其道的今天,开发者经常会遇到一个很微妙的崩溃瞬间:
AI 确实能秒写代码。
但是它太急于交差了。
需求还没问清楚,它已经开始改文件;测试还没补,它已经说"已完成";上下文一长,它就开始自由发挥,甚至把不存在的 API、目录和业务规则写得像真的一样。
所以,AI 编程的瓶颈早就不是"它能不能写出来",而是:
它能不能按工程纪律写对、测过、交付清楚。
为了把 AI 从"手速极快的实习生"训练成"靠谱的高级工程师",开源社区逐渐形成了 AI 编程的"三件套"思路:
- OpenSpec:先把需求变成规格,解决"做什么"的问题。
- Superpowers:把工程方法变成技能,解决"怎么做"的问题。
- gstack:把审查、QA、发布变成团队流程,解决"怎么交付"的问题。
本文会从概念、安装、实战流程、避坑和技术分享考点五个角度,完整讲清这三个工具如何串成一套 AI 驱动开发工作流。
⚡ 快速参考
- 适用场景:使用 Claude Code、Cursor、Codex、OpenCode 等 AI 编程助手做真实项目开发,希望减少 AI 乱写、漏测、假完成。
- 核心结论:OpenSpec 管需求规格,Superpowers 管开发纪律,gstack 管交付验证,三者不是互相替代,而是上下游协作。
- 最短工作流 :
OpenSpec 提案->Superpowers 计划与 TDD->gstack Review/QA/Ship。 - 常用命令:
bash
# OpenSpec
npm install -g @fission-ai/openspec@latest
openspec init
# gstack
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup
- 避坑提醒:不要把这三件套理解成"多装几个插件"。真正有价值的是背后的工作流:规格先行、测试先行、验证先行。
📚 学习目标
- 说清 OpenSpec、Superpowers、gstack 各自解决什么问题。
- 能把三者串成一套真实项目中的 AI 编程流程。
- 理解 AI 编程里的 SDD、TDD、上下文工程、交付验证到底怎么落地。
- 避开 AI 编程中最常见的"需求没锁定、代码没测试、交付没验证"三类坑。
一、为什么 AI 编程需要"三件套"
1.1 Vibe Coding 的效率幻觉
Vibe Coding 的体验很爽:
你描述一句需求,AI 读仓库、改代码、跑命令、给总结。
但真实项目里,问题通常不在"AI 不会写代码",而在下面这些地方:
| 问题 | 表现 | 后果 |
|---|---|---|
| 需求模糊 | 你说"加一个暗黑模式",AI 立刻开写 | 没有确认系统偏好、用户持久化、默认策略 |
| 执行失控 | AI 一次改很多文件 | 你很难审查 diff,也很难定位回归 |
| 测试缺失 | AI 写完功能就总结完成 | 边界条件、回归测试、UI 状态都没覆盖 |
| 上下文漂移 | 对话一长,AI 开始忘记原始约束 | 代码越写越偏,甚至生成不存在的接口 |
| 交付假完成 | AI 说"已修复",但没有真实浏览器验证 | 上线后才发现控制台报错、表单不可用 |
这就是 AI 编程最常见的误区:
把 AI 当成"代码生成器",而不是"需要流程约束的执行者"。
1.2 三件套分别解决什么
可以把 AI 编程三件套理解成一个虚拟研发团队:
| 层级 | 工具 | 核心问题 | 类比角色 |
|---|---|---|---|
| 规格层 | OpenSpec | 做什么 | 产品经理 + 架构记录员 |
| 执行层 | Superpowers | 怎么做 | 高级工程师 + TDD 教练 |
| 交付层 | gstack | 怎么确认能交付 | Reviewer + QA + Release Engineer |
它们不是三选一,而是接力关系:
- OpenSpec 先把模糊需求沉淀成可审查的规格文档。
- Superpowers 约束 AI 按计划、测试、调试、审查的纪律执行。
- gstack 在交付前补上代码审查、真实浏览器 QA、安全和发布检查。
1.3 一图理解三层关系
二、OpenSpec:规格层,先管"做什么"
2.1 OpenSpec 是什么
OpenSpec 是一个面向 AI 编程的轻量级 Spec-Driven Development,规格驱动开发 工具。
它的核心思想非常简单:
先写规格,再写代码。
在传统开发里,需求可能散落在聊天记录、Issue、脑子里。AI 一旦进入长对话,很容易丢失上下文。
OpenSpec 的做法是把一次需求变更拆成结构化文档,通常包括:
| 文档 | 作用 | 解决的问题 |
|---|---|---|
proposal.md |
为什么要做、要改什么 | 防止需求目标漂移 |
design.md |
技术方案、边界、数据流 | 防止 AI 直接乱改架构 |
tasks.md |
可执行任务清单 | 防止任务过大、改动失控 |
specs/ |
长期规格资产 | 防止项目知识只存在聊天里 |
这类文档可以进 Git,可以被 Review,也可以在未来继续被 AI 读取。
2.2 OpenSpec 解决的核心痛点
OpenSpec 主要解决三个问题:
-
需求从口头变成资产
不再只靠一句 Prompt 驱动 AI,而是把需求变成可版本管理的文档。
-
AI 在正确轨道上工作
AI 每一步都围绕 proposal、design、tasks 执行,不容易偏题。
-
复杂需求可拆解、可审查
大任务先拆成多个小任务,人可以先审规格,再让 AI 动手。
2.3 OpenSpec 基本安装
OpenSpec 可以通过 npm 全局安装:
bash
npm install -g @fission-ai/openspec@latest
进入项目根目录后初始化:
bash
cd your-project
openspec init
初始化后,项目里会生成 openspec/ 相关目录,用来存放变更提案、设计文档、任务清单和规格文件。
常见工作方式如下:
text
/opsx:explore
/opsx:propose add-dark-mode
/opsx:apply
/opsx:archive
说明:
/opsx:explore:在不急着实现前,先和 AI 一起探索需求。/opsx:propose:把需求写成提案、设计和任务。/opsx:apply:按任务清单实现。/opsx:archive:完成后归档变更,更新长期规格。
不同 AI 编程助手对斜杠命令的集成方式可能不同,实际以 OpenSpec 官方文档和你使用的宿主工具为准。
2.4 示例:用 OpenSpec 锁定暗黑模式需求
不要这样写:
text
给应用加一个暗黑模式。
更推荐这样开始:
text
/opsx:propose add-dark-mode
目标:给应用添加暗黑模式。
要求:
1. 支持跟随系统偏好。
2. 支持用户手动切换 light / dark / system。
3. 用户选择需要持久化。
4. 首屏加载时不能闪白。
5. 补充单元测试和至少一个端到端验证场景。
这样 AI 不会马上乱改,而是先生成规格文档,让你审查:
text
openspec/
changes/
add-dark-mode/
proposal.md
design.md
tasks.md
你确认规格没问题,再进入实现阶段。
三、Superpowers:执行层,管"怎么做"
3.1 Superpowers 是什么
Superpowers 可以理解为一套给 AI 编程助手使用的 工程技能库。
它不是单纯增加几个 Prompt,而是把软件工程里的最佳实践变成 AI 必须遵守的工作方式,例如:
- 头脑风暴前先澄清问题。
- 写代码前先写计划。
- 修 bug 前先做系统化调查。
- 实现功能前优先采用 TDD。
- 完成后主动请求代码审查。
- 声称完成前必须运行验证命令。
这正好补上了 AI 最容易偷懒的地方。
3.2 Superpowers 解决的核心痛点
AI 写代码经常像一个兴奋的新同事:
"我懂了,我马上改。"
但高级工程师不会这么做。高级工程师会先问:
- 需求边界是什么?
- 有没有现有模式可以复用?
- 哪些测试能证明它真的工作?
- 如果失败,怎么定位根因?
- 这次改动会不会影响别的模块?
Superpowers 的价值,就是把这套纪律固定下来。
| 能力 | 对应工程实践 | 价值 |
|---|---|---|
brainstorming |
需求澄清 | 避免没想清就开写 |
writing-plans |
实施计划 | 把大任务拆成小步骤 |
test-driven-development |
TDD | 先证明问题,再实现 |
systematic-debugging |
系统化调试 | 避免拍脑袋修 bug |
requesting-code-review |
代码审查 | 完成前自查风险 |
verification-before-completion |
完成前验证 | 防止"嘴上通过" |
3.3 Superpowers 的典型安装方式
Superpowers 通常作为技能目录安装到 AI 助手的技能路径中。
以 Claude Code 为例,常见安装方式类似:
bash
git clone https://github.com/obra/superpowers.git ~/.claude/skills/superpowers
如果你使用的是 Cursor、Codex、OpenCode、Trae 等其他工具,需要根据它们各自的 Skills 或 Rules 目录调整安装位置。
例如:
text
Claude Code: ~/.claude/skills/
Codex: ~/.codex/skills/
Cursor: 以官方 Skills / Rules 支持为准
Trae: 以官方 Skills / Rules 支持为准
重点不是路径本身,而是让 AI 编程助手能在合适场景自动加载这些技能。
3.4 Superpowers 如何约束 AI 编码
假设 OpenSpec 已经生成了任务:
text
1. 添加主题状态模型
2. 实现 light / dark / system 三种模式
3. 持久化用户选择
4. 避免首屏闪烁
5. 补充测试
Superpowers 介入后,AI 不应该直接写一大坨代码,而应该按工程节奏执行:
text
需求澄清 -> 实施计划 -> 写失败测试 -> 最小实现 -> 测试通过 -> 重构 -> 验证 -> 审查
用 TDD 表达就是:
text
Red:先写失败测试,证明当前功能不存在或行为不符合预期
Green:写最少代码让测试通过
Refactor:在测试保护下清理结构
Verify:运行完整验证命令,确认没有回归
3.5 一个好用的手动触发方式
如果你的 AI 助手支持斜杠命令或技能命令,可以在复杂任务前明确要求:
text
使用 Superpowers 的 brainstorming 和 writing-plans。
先澄清需求,再写计划。
计划通过后,用 TDD 实现,不要跳过测试。
完成前运行验证命令,并给出验证结果。
这句话的本质不是"念咒",而是把 AI 的行为从"生成答案"切换成"执行工程流程"。
四、gstack:交付层,管"怎么交付"
4.1 gstack 是什么
gstack 是 Garry Tan 开源的一套 AI 编程技能和工作流集合。
它的定位很直接:
把 AI 编程助手组织成一个虚拟工程团队。
在 gstack 里,你可以使用不同技能完成不同交付动作,例如:
| 命令 | 角色 | 作用 |
|---|---|---|
/office-hours |
产品/创业顾问 | 澄清产品想法 |
/plan-ceo-review |
CEO 视角 | 挑战范围和价值 |
/plan-eng-review |
工程经理 | 审查架构和风险 |
/review |
高级工程师 | 代码审查,找 bug 和回归风险 |
/qa |
QA 负责人 | 打开真实浏览器做交互测试 |
/cso |
安全负责人 | 做安全审计 |
/ship |
发布工程师 | 发布前检查 |
如果说 Superpowers 强调"编码过程的纪律",那么 gstack 更强调"交付前的完整把关"。
4.2 gstack 解决的核心痛点
很多 AI 编程失败不是失败在写代码,而是失败在最后 20%:
- 没有认真审 diff。
- 没有跑真实页面。
- 没有检查控制台报错。
- 没有考虑安全边界。
- 没有发布前清单。
gstack 把这些动作显式化。
尤其是 /qa 这类能力,价值很高:
让 AI 不只是在文本里说"页面应该能用",而是打开真实浏览器,点击、输入、检查状态和报错。
这对于前端页面、后台管理系统、登录注册、表单提交、支付流程等场景尤其重要。
4.3 gstack 基本安装
gstack 支持多种 AI 编程助手。通用安装方式:
bash
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/gstack
cd ~/gstack && ./setup
如果需要指定宿主,可以使用:
bash
./setup --host codex
./setup --host cursor
./setup --host opencode
如果你使用 Claude Code,也可以安装到 Claude 的技能目录:
bash
git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack
cd ~/.claude/skills/gstack && ./setup
安装完成后,可以在支持的 AI 编程助手中使用对应技能,例如:
text
/review
/qa https://staging.example.com
/ship
4.4 gstack 在工作流中的位置
gstack 不应该只在"代码写完之后"才出现。
更好的方式是分阶段使用:
渲染错误: Mermaid 渲染失败: Lexical error on line 2. Unrecognized text. ... --> B/office-hours B --> C[/plan- -----------------------^
不过在本文这套三件套工作流里,可以简单理解为:
- OpenSpec 负责把需求变成规格。
- Superpowers 负责按纪律实现。
- gstack 负责交付前多角色检查。

五、三件套如何串联:一套黄金工作流
5.1 总体流程
把三件套串起来后,一个比较稳的 AI 编程流程如下:
gstack Superpowers OpenSpec 开发者 gstack Superpowers OpenSpec 开发者 #mermaid-svg-HFHecZxHP1KPQbYI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-HFHecZxHP1KPQbYI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-HFHecZxHP1KPQbYI .error-icon{fill:#552222;}#mermaid-svg-HFHecZxHP1KPQbYI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-HFHecZxHP1KPQbYI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-HFHecZxHP1KPQbYI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-HFHecZxHP1KPQbYI .marker.cross{stroke:#333333;}#mermaid-svg-HFHecZxHP1KPQbYI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-HFHecZxHP1KPQbYI p{margin:0;}#mermaid-svg-HFHecZxHP1KPQbYI .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HFHecZxHP1KPQbYI text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-HFHecZxHP1KPQbYI .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-HFHecZxHP1KPQbYI .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-HFHecZxHP1KPQbYI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-HFHecZxHP1KPQbYI .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-HFHecZxHP1KPQbYI #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-HFHecZxHP1KPQbYI .sequenceNumber{fill:white;}#mermaid-svg-HFHecZxHP1KPQbYI #sequencenumber{fill:#333;}#mermaid-svg-HFHecZxHP1KPQbYI #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-HFHecZxHP1KPQbYI .messageText{fill:#333;stroke:none;}#mermaid-svg-HFHecZxHP1KPQbYI .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HFHecZxHP1KPQbYI .labelText,#mermaid-svg-HFHecZxHP1KPQbYI .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-HFHecZxHP1KPQbYI .loopText,#mermaid-svg-HFHecZxHP1KPQbYI .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-HFHecZxHP1KPQbYI .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-HFHecZxHP1KPQbYI .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-HFHecZxHP1KPQbYI .noteText,#mermaid-svg-HFHecZxHP1KPQbYI .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-HFHecZxHP1KPQbYI .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HFHecZxHP1KPQbYI .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HFHecZxHP1KPQbYI .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-HFHecZxHP1KPQbYI .actorPopupMenu{position:absolute;}#mermaid-svg-HFHecZxHP1KPQbYI .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-HFHecZxHP1KPQbYI .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-HFHecZxHP1KPQbYI .actor-man circle,#mermaid-svg-HFHecZxHP1KPQbYI line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-HFHecZxHP1KPQbYI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 描述需求 生成 proposal/design/tasks 人工审查并确认 进入任务执行 计划、TDD、调试、验证 提交可审查变更 review、qa、ship 输出交付结论和风险
一句话总结:
OpenSpec 让 AI 别跑偏,Superpowers 让 AI 别偷懒,gstack 让 AI 别假完成。
5.2 Step 1:用 OpenSpec 锁定需求
以"添加暗黑模式"为例,先不要直接让 AI 改代码。
输入:
text
/opsx:propose add-dark-mode
给应用添加暗黑模式:
1. 支持 light、dark、system 三种模式。
2. system 模式跟随操作系统偏好。
3. 用户手动选择需要持久化。
4. 首屏加载不能出现明显闪烁。
5. 需要补充测试和验证步骤。
OpenSpec 生成文档后,你先 Review:
text
proposal.md:目标是否清楚?
design.md:方案是否合理?
tasks.md:任务是否足够小?
确认无误后再执行:
text
/opsx:apply
5.3 Step 2:用 Superpowers 保障实现质量
进入编码阶段后,明确要求 AI 使用工程纪律:
text
请按 Superpowers 工作流执行:
1. 先读取 OpenSpec 生成的 tasks.md。
2. 为每个任务写一个小计划。
3. 使用 TDD:先补失败测试,再写实现。
4. 每完成一个任务运行相关测试。
5. 完成后运行完整验证命令。
一个理想的执行记录应该像这样:
text
[Plan] 本次实现拆成 4 个小步骤
[Red] 新增 theme preference 测试,当前失败
[Green] 实现 useThemePreference,让测试通过
[Refactor] 抽离 localStorage 访问函数
[Verify] npm test 通过,npm run lint 通过
如果测试失败,不要让 AI 猜。
要求它进入系统化调试:
text
不要直接修。
先复现失败,列出观察结果,再提出 2-3 个可能原因。
确认根因后再修改。
5.4 Step 3:用 gstack 做交付把关
实现完成后,不要直接合并。
先让 gstack 做代码审查:
text
/review
重点看:
- 是否有潜在 bug。
- 是否破坏现有行为。
- 是否缺测试。
- 是否有安全风险。
- 是否有明显 AI 生成的冗余代码。
如果是前端功能,再做真实 QA:
text
/qa http://localhost:3000
让 AI 打开浏览器,实际验证:
- 默认主题是否正确。
- 切换 light / dark / system 是否生效。
- 刷新后用户选择是否保留。
- 控制台是否有报错。
- 页面是否出现闪烁。
最后进入发布检查:
text
/ship
这一步通常会检查测试、diff、文档、版本、变更说明等。

六、完整实战案例:给应用添加暗黑模式
下面用一个简化案例,把三件套串起来。
6.1 需求输入
原始需求:
text
给应用加一个暗黑模式。
这句话太模糊,需要改写成可执行需求:
text
目标:给应用添加暗黑模式。
功能要求:
1. 支持 light / dark / system 三种主题。
2. 默认使用 system。
3. 用户手动选择后写入 localStorage。
4. 页面刷新后恢复用户选择。
5. 首屏渲染时尽量避免主题闪烁。
质量要求:
1. 补充单元测试。
2. 补充至少一个浏览器验证场景。
3. 不引入新的 UI 框架。
4. 遵循现有项目的组件和样式约定。
6.2 OpenSpec 阶段
输入:
text
/opsx:propose add-dark-mode
期望生成:
text
openspec/changes/add-dark-mode/
proposal.md
design.md
tasks.md
人工审查重点:
| 文件 | 审查点 |
|---|---|
proposal.md |
是否说明为什么要做、用户价值是什么 |
design.md |
主题状态放在哪里、如何避免闪烁、如何持久化 |
tasks.md |
是否拆成可独立验证的小任务 |
如果 tasks.md 里出现类似"实现暗黑模式全部功能"这种大任务,要继续拆。
更好的任务清单:
text
1. 新增主题偏好类型和存储工具函数。
2. 新增 ThemeProvider,支持 light / dark / system。
3. 新增主题切换 UI。
4. 添加首屏主题初始化脚本。
5. 补充单元测试。
6. 补充浏览器 QA 验证步骤。
6.3 Superpowers 阶段
让 AI 按 TDD 执行:
text
读取 openspec/changes/add-dark-mode/tasks.md。
请使用 TDD 实现。
每次只处理一个任务:
1. 先写测试。
2. 再写最少实现。
3. 测试通过后再重构。
4. 每完成一个任务汇报 diff 和验证结果。
理想的验证命令可能是:
bash
npm test
npm run lint
npm run typecheck
如果项目是后端服务,可能是:
bash
mvn test
如果是 Python 项目,可能是:
bash
pytest
ruff check .
关键点:
验证命令必须来自项目本身,而不是 AI 临时编出来。
6.4 gstack 阶段
代码实现后:
text
/review
让 AI 重点检查:
text
请重点看:
1. 首屏主题闪烁风险。
2. localStorage 不可用时的降级。
3. system 模式监听 prefers-color-scheme 变化是否正确清理。
4. 测试是否覆盖 light / dark / system。
5. 是否有无关 refactor。
如果是 Web 应用:
text
/qa http://localhost:3000
QA 检查清单:
text
1. 首次访问默认跟随系统。
2. 切换 dark 后页面立即变化。
3. 刷新后仍保持 dark。
4. 切换 system 后跟随系统偏好。
5. 控制台无报错。
6. 关键页面视觉没有明显错位。
准备发布:
text
/ship
发布前确认:
text
1. 测试通过。
2. lint/typecheck 通过。
3. 代码审查问题已处理。
4. QA 问题已处理。
5. changelog 或发布说明已更新。
七、三件套不是银弹:它们各自的边界
7.1 OpenSpec 的边界
OpenSpec 能帮你沉淀规格,但不能替你判断业务价值。
如果一开始的方向就是错的,规格写得再漂亮也没用。
适合 OpenSpec 的场景:
- 新功能开发。
- 架构调整。
- 多模块变更。
- 团队需要审查需求和技术方案。
不一定需要 OpenSpec 的场景:
- 修一个错别字。
- 改一行配置。
- 临时验证一个小实验。
7.2 Superpowers 的边界
Superpowers 能约束 AI 的执行过程,但它依赖项目本身有基本工程基础。
如果项目没有测试、没有 lint、没有清晰模块边界,AI 也很难凭空变出稳定流程。
所以,使用 Superpowers 前最好先补齐:
- 项目启动命令。
- 测试命令。
- lint/typecheck 命令。
- 目录说明。
- 编码规范。
这些可以写到:
text
AGENTS.md
CLAUDE.md
README.md
7.3 gstack 的边界
gstack 能做审查、QA、安全和发布检查,但它不是替代人工负责。
尤其是:
- 涉及支付、权限、隐私、生产数据的变更。
- 涉及数据库迁移的变更。
- 涉及安全策略的变更。
- 涉及公司合规和发布流程的变更。
这些仍然需要人来最终决策。
八、场景应用
场景 1:个人开发者做独立项目
需求:一个人维护项目,想快速迭代,但怕 AI 改乱代码。
推荐流程:
text
OpenSpec 写清每个功能变更
Superpowers 约束 AI 按 TDD 实现
gstack 在发布前做 /review 和 /qa
收益:
- 每个功能都有规格记录。
- 改动更容易回看。
- 不容易出现"AI 说完成但页面打不开"。
场景 2:团队协作开发
需求:多人参与同一个仓库,希望 AI 输出可审查、可追踪。
推荐流程:
text
OpenSpec 作为需求和技术方案入口
AGENTS.md 写团队编码规范和测试命令
Superpowers 负责执行纪律
gstack /review 作为 PR 前置自查
收益:
- AI 不再只听某一次聊天上下文。
- 团队可以 Review 规格和任务。
- PR 质量更稳定。
场景 3:遗留系统重构
需求:老项目复杂,不敢让 AI 大范围乱改。
推荐流程:
text
OpenSpec 先限定重构范围
Superpowers 要求小步 TDD
gstack 做风险审查和回归 QA
特别注意:
- 每次只改一个模块。
- 每次只做一个明确目标。
- 不要让 AI 顺手"优化全项目"。
九、开发避坑总结
9.1 典型坑 1:装了工具,但还是一句话让 AI 开写
错误方式:
text
帮我把系统优化一下。
正确方式:
text
先用 OpenSpec 生成变更提案。
不要写代码。
我确认 proposal、design、tasks 后再进入实现。
9.2 典型坑 2:把 OpenSpec 当文档生成器
OpenSpec 的重点不是"多生成几份 Markdown",而是让规格成为开发入口。
真正的流程应该是:
text
需求 -> 规格 -> 审查 -> 任务 -> 实现 -> 归档
如果规格写完没人看、没人审、实现时也不读,那就失去了意义。
9.3 典型坑 3:AI 写完测试但没有运行
很多 AI 会说:
text
我已经添加了测试。
但"添加测试"和"测试通过"不是一回事。
你应该要求:
text
请运行项目测试命令,并贴出关键结果。
如果测试失败,不要跳过,先定位根因。
9.4 典型坑 4:gstack QA 没有真实环境
/qa 需要能访问你的应用页面。
如果本地服务没启动、登录态没有准备、测试账号不可用,QA 结果就会受限。
建议提前准备:
text
1. 本地启动命令
2. 测试账号
3. 需要验证的 URL
4. 核心路径检查清单
9.5 典型坑 5:多个工具职责混乱
不要让三个工具互相抢活。
更清晰的职责分工是:
| 阶段 | 主工具 | 人的职责 |
|---|---|---|
| 需求阶段 | OpenSpec | 判断需求是否值得做 |
| 编码阶段 | Superpowers | 审查计划和测试 |
| 交付阶段 | gstack | 决定是否合并和发布 |
十、总结
AI 编程的未来,不是"AI 替代开发者",而是"开发者带着 AI 组成更高效的研发系统"。
在这个系统里:
- 开发者负责判断、取舍、审查和最终责任。
- AI 负责执行、验证、整理和重复性工作。
- 工具负责把流程固化下来,减少 AI 的随意发挥。
OpenSpec、Superpowers、gstack 分别补齐了 AI 编程中最关键的三块短板:
- OpenSpec 让 AI 理解你要什么。
- Superpowers 让 AI 按工程纪律去做。
- gstack 让 AI 在交付前接受审查和验证。
当你愿意花时间把需求想清楚,把任务拆清楚,把测试和 QA 跑清楚,AI 就不再只是"写得快",而是开始接近一个真正可靠的工程协作者。
这也是 AI 编程从玩具走向生产力的分水岭:
不是让 AI 更自由,而是给 AI 更好的工程约束。
参考链接
- OpenSpec npm 包:https://www.npmjs.com/package/@fission-ai/openspec
- OpenSpec GitHub:https://github.com/Fission-AI/OpenSpec
- Superpowers GitHub:https://github.com/obra/superpowers
- gstack GitHub:https://github.com/garrytan/gstack
本文为MY_TEUCK原创实战学习笔记,持续更新Java后端与AI应用领域干货,问题欢迎评论区交流。