OpenSpec + Superpowers 实战:从需求对齐到代码交付的 SDD+TDD 双驱动工作流

在这里插入图片描述

Vibe Coding 圈里最受关注的两件套组合:OpenSpec 负责"对齐需求",Superpowers 负责"保证质量"。它们恰好补上了 AI 编程最头疼的两个短板——但组合使用的正确姿势,并不是简单地叠加两套工具。

一、从一次真实的需求漂移说起

假设这样一个场景:你在对话框里告诉 Claude Code——“给用户中心加一个导出功能,支持导出近 30 天的操作记录”。Claude 开始写代码,你去开会,回来一看,它把导出格式做成了 Excel,还顺手给每列加了筛选器,甚至引入了一个新的 xlsx 处理库。

功能是有了,但你要的只是一个 CSV 下载按钮。

三天后 PM 来问:当初为什么选 Excel 格式?你翻了半小时聊天记录,发现根本没有记录——那个决策在对话里一闪而过,AI 自己做的。

这个场景里有两个独立的问题,常常被混为一谈:

第一个问题是需求漂移。 AI 没有恶意,它只是在补全你没有说清楚的部分。你说"导出",它根据训练数据推断"导出通常是 Excel",然后就做了。真正的问题是:需求没有一个可以被双方确认的载体,只有聊天记录。

第二个问题是质量失控。 即便需求对齐了,AI 产出的代码也经常缺少边界处理——导出 10 万行时内存会怎样?用户浏览器关了下载会怎样?这些问题不是 AI 不懂,而是没有流程强制它在写代码之前先想清楚。

这两个问题的根源是同一件事:AI 编程缺少工程化的流程管控。 传统开发有 PRD 评审、技术设计评审、Code Review 来兜底,Vibe Coding 把这些全压缩进了聊天窗口,然后期望 AI 自己补全。

OpenSpec 和 Superpowers 各自解决其中一个问题。


二、两个工具,各管一段

OpenSpec:在写代码之前,先对齐要做什么

OpenSpec 是 Fission AI 推出的规格驱动开发框架,核心思路只有一句话:在 AI 开始写代码之前,先产出一份双方都同意的规格文档。

它的工作方式是给每个功能变更建立一个独立文件夹,里面包含四类文档:

文件核心问题传统开发的对应物
proposal.md为什么做,做什么,不做什么需求文档
specs/行为规格,用 GIVEN/WHEN/THEN 描述场景验收标准
design.md技术实现方案技术设计文档
tasks.md实现任务拆解Sprint Backlog

其中最关键的是 specs/ 里的 Delta Spec 机制。Delta Spec 描述的不是系统的全量状态,而是这次变更在哪里新增、修改、删除了什么行为。这使得 OpenSpec 对存量代码库(brownfield)特别友好——你不需要先把整个系统的规格写完才能开始用。

OpenSpec 有意设计为"流动而非刚性"的——它不要求你按顺序填完所有文档才能开始写代码,任何文件可以随时更新,理解加深了就修改 spec,这是它区别于传统重型规格框架的关键。

目前 OpenSpec 支持包括 Claude Code、Cursor、GitHub Copilot 在内的 20 余种 AI 编程工具,通过 slash command 工作,不绑定任何特定 IDE 或模型。

Superpowers:在写代码的过程中,保证怎么做

Superpowers 是 Jesse Vincent 开发的 AI 编程 Agent 技能体系。Jesse Vincent 是开源工单系统 Request Tracker 的作者,也曾担任 Perl 5 的发布负责人,联合创办了机械键盘公司 Keyboardio——他的背景决定了 Superpowers 的气质:流程纪律、自动化测试、文档化,这些是他认为不可谈判的工程底线。

Superpowers 的核心判断是:AI 编程质量差的根源不是能力不够,而是缺乏职业纪律。 Claude 知道应该先写测试,知道应该处理边界条件,但没有东西强制它这么做。Superpowers 要做的就是把这套纪律编码成可执行的技能文件。

它的工作方式是一套可组合的技能(Skills)体系,每个技能对应一个开发阶段,在对应场景下自动触发:

技能触发时机实质作用
brainstorming检测到新需求反向提问澄清边界,产出技术 Design Doc
writing-plans设计确认后将设计拆解为 2-5 分钟粒度的任务
subagent-driven-developmentPlan 确认后子代理逐任务执行,强制 TDD
test-driven-development每个实现任务内红灯→绿灯→重构,不跳步
requesting-code-review每个任务完成后对照 Plan 审查,Critical 问题阻塞继续
finishing-a-development-branch全部完成后验证、PR 决策、清理工作区

技能不是建议,它们是强制执行的。Jesse Vincent 在设计时明确说明,目标是让 Agent "像一个充满热情但缺乏判断力的初级工程师"也能按流程执行——这描述的其实是任何 AI Agent 的现状。


三、为什么两件套比单用更有价值

单独使用 OpenSpec 或 Superpowers,各自有明确的短板。

单用 OpenSpec,需求规格有了,但 /opsx:apply 阶段直接调用模型基础编码能力,没有强制的测试覆盖和阶段性 Code Review。规格写得再好,代码质量还是随机的。

单用 Superpowers,brainstorming 产出的 Design Doc 质量很高,但这些文档保存在本地,没有系统化的版本管理和归档。更重要的是,Superpowers 的状态管理是文本化的——任务完成后靠在文档里打勾来追踪进度,但 Agent 有时会忘记打勾,下次断点恢复时不得不重新扫描整个代码库来确认当前状态,这会消耗大量额外 Token。

组合使用后,两个工具的职责边界变得清晰:

OpenSpec  ←→  "做什么"的载体(Spec 生命周期、归档、版本追溯)
Superpowers ←→  "怎么做好"的执行器(技术设计、TDD 实现、Code Review)

它们的衔接点在于:OpenSpec 产出的 proposal.mddesign.md 作为 Superpowers brainstorming 的输入,Superpowers 在技术深挖中发现的需求盲区反写回 OpenSpec 的 delta spec,形成闭环。


四、完整工作流:从需求到交付

整体流程概览

修改

确认

修改

确认

用户描述需求

OpenSpec: /opsx:propose

人工 Review
proposal + specs

Superpowers: brainstorming

产出 Design Doc
发现需求盲区

回写 delta spec 到 OpenSpec

人工确认
Design Doc

Superpowers: writing-plans

创建 feature 分支

subagent-driven-development

逐任务 TDD 实现

每任务 Code Review

Critical 问题?

所有任务完成?

OpenSpec: verify-change

Superpowers: finishing-a-branch

OpenSpec: archive

变更归档,支持追溯

第一步:OpenSpec 产出 Spec

安装:

npm install -g @fission-ai/openspec@latest
cd your-project
openspec init   # 自动检测已有 AI 工具配置,按需初始化

初始化后在 AI 终端发起提案:

/opsx:propose "为用户中心增加操作记录导出功能,支持导出近 30 天数据,CSV 格式"

生成结果:

openspec/changes/export-audit-log/
├── proposal.md          # 变更动机、范围边界(包括"不做什么")
├── specs/
│   ├── export-format.md     # 导出格式规范(GIVEN/WHEN/THEN)
│   ├── data-range.md        # 数据范围规范
│   └── error-handling.md    # 异常处理规范
├── design.md            # 技术实现方案
└── tasks.md             # 实现任务列表

这一步的关键不是生成文档,而是 Review 环节。 重点检查两件事:proposal.md 里"不做什么"(out of scope)是否明确——这是防止需求漂移的核心;specs/ 里的 GIVEN/WHEN/THEN 场景是否覆盖了你能想到的边界情况。

第二步:Superpowers 技术深挖

Spec 确认后,让 Superpowers 做技术层面的深度设计:

读取 openspec/changes/export-audit-log/ 下所有文档,
使用 superpowers brainstorming,针对这个变更做技术设计。

这一步会发生两件重要的事:

其一,Superpowers 会反向提问。对于导出功能,它会问:100 万行数据时用流式导出还是分页导出?导出期间用户关闭浏览器怎么办?并发导出请求有没有限流?这些问题在写代码之前必须有答案。

其二,它会发现 OpenSpec 遗漏的场景并回写。实际场景中,一个看似简单的导出功能,brainstorming 后经常能发现 4-6 个规格盲区:

发现的盲区根源
导出文件名规则(含时区)spec 只说"CSV",没说文件名
空数据时的导出行为GIVEN 场景没有覆盖空状态
大数据量时的超时处理性能边界没有写进 spec
权限不足时的错误提示文案错误处理 spec 只写了状态码

这是两件套最重要的协作价值:OpenSpec 定义需求,Superpowers 在实现前帮你找出需求里的坑。

第三步:写实现计划并执行

使用 superpowers writing-plans,基于 Design Doc 创建实现计划。

Plan 生成后,Superpowers 创建 feature 分支,进入 subagent-driven-development 阶段。这个过程是自动的——每个子代理接收一个任务,强制先写测试,测试红灯通过后再写实现,实现通过后重构,最后提交。每个任务完成后触发 code review,Critical 问题会阻塞流程继续。

整个过程可能持续 30-60 分钟,期间不需要人工干预。

第四步:验证与归档

# 验证实现与 Spec 的一致性
openspec verify-change export-audit-log

# Superpowers 收尾(验证测试、做 PR 决策)
# 在 AI 终端触发 superpowers finishing-a-development-branch

# 归档变更
/opsx:archive export-audit-log

归档后,这次变更的完整上下文——为什么做、做什么、怎么做、做完验证——都保存在 openspec/changes/archive/ 里,三个月后还能追溯当初的设计决策。


五、真实场景:存量系统加功能(Brownfield)

前面的流程在新项目上直觉清晰,但更多人面对的是存量系统。这里用一个更贴近真实的场景展示两件套在 brownfield 场景下的价值。

场景: 一个运行了 2 年的 SaaS 产品,要给已有的用户权限模块增加"临时授权"功能——允许管理员给用户设置一个有效期,到期自动失效。

痛点在哪: 权限模块已有复杂的继承关系,临时授权需要插入现有的鉴权链路。如果只是扔给 AI 一句话,它大概率会在合适的地方插入一段代码,但不会意识到"临时授权到期时,已经建立的 session 怎么办"——因为这个问题在鉴权链路里藏得很深。

两件套的作用:

/opsx:propose 生成的 proposal.md 会强制描述与现有权限模块的边界关系——哪些现有行为是 MODIFIED,哪些是 ADDED,哪些明确不变。这一步让 AI 和你都必须面对"临时授权如何与现有 session 交互"这个问题,而不是绕开它。

Superpowers 的 brainstorming 则会系统性地追问:临时权限到期时,正在进行的操作如何处理?权限变更事件如何通知依赖方?如果授权创建者本身权限被撤销,已创建的临时授权怎么处理?

这些问题在 brownfield 场景下尤其重要,因为每一个都可能牵连到现有系统的某个角落。

关键结论: 两件套对存量系统的价值甚至高于新项目,因为存量系统里有更多"隐形的需求约束"需要被显式化。


六、自动化方案:用 Comet 串联全流程

手动切换 OpenSpec 和 Superpowers 需要记住一批命令,更重要的是,两个工具之间的文档同步和状态流转需要人工维护。Comet@rpamis/comet)的价值正是在这里——它解决的不只是"记命令"的问题,而是解决了一个更深层的工程问题。

OpenSpec 和 Superpowers 各自的状态追踪都有弱点:OpenSpec 的 tasks.md 是静态 Markdown,Superpowers 的 Plan 文档靠 Agent 打勾来追踪进度——而 Agent 常常忘记打勾。这导致断点恢复时,Agent 不知道自己做到哪了,只能重新扫描代码库核验,浪费大量 Token。

Comet 用脚本化状态机替代了文本化进度追踪,每个阶段的状态由脚本写入 .comet.yaml,不依赖 Agent 自己记录,断点恢复只需一个命令:

/comet   # 自动检测当前 Spec 状态,从断点继续

Comet 五阶段流水线

阶段五:Archive(OpenSpec)

同步 delta spec

标注完成

归档

阶段四:Verify(两者)

openspec verify

finishing branch

Guard 脚本检测

阶段三:Build(Superpowers)

writing-plans

建 feature 分支

subagent TDD 实现

Guard 脚本检测

阶段二:Design(Superpowers)

brainstorming

产出 Design Doc

回写 delta spec

Guard 脚本检测

阶段一:Open(OpenSpec)

explore

propose

Guard 脚本检测

Guard 脚本是 Comet 最关键的设计——Agent 说"做完了"不算数,脚本检测通过才算。这把"完成"的定义从对话里的文字变成了可验证的事实。

快捷路径

Comet 针对常见场景提供了精简流程:

/comet          → 完整五阶段(新功能、中等以上改动)
/comet-hotfix   → 跳过 Design,适合 Bug 修复
/comet-tweak    → 跳过 Design + 完整 Build 审查,适合配置调整

七、使用决策:什么时候上,上到哪一层

工具是否值得用,取决于它解决的问题的代价是否高于工具本身的学习成本。这里给出一个实用的判断框架:

需要上 OpenSpec 的信号:

  • 需求在对话里说不清楚,AI 经常理解跑偏
  • 项目有多人协作,需要共享需求上下文
  • 变更涉及现有系统的核心链路(brownfield)
  • 半个月后需要能追溯"当初为什么这么设计"

在 OpenSpec 基础上加 Superpowers 的信号:

  • 功能涉及多个文件,代码质量难以靠对话口头约定
  • 有边界条件处理要求(并发、容量、异常路径)
  • 代码会进入生产环境,需要测试覆盖

在两者基础上加 Comet 的信号:

  • 任务会跨越多个 Session(今天做不完)
  • 手动维护两套工具的文档同步让你感到负担
  • 团队多人使用同一套工作流

不需要全套的场景: 小改动(< 5 个文件)、文案调整、个人实验项目,直接用 /comet-tweak 或者裸 Claude Code 即可。工具应该在它能产生价值的地方出现,而不是无差别铺开。


八、三工具横向对比

维度OpenSpecSuperpowersComet
解决的核心问题需求漂移代码质量失控两者间的状态同步
核心理念SDD:先对齐再动手TDD:先测试再编码脚本化状态机
安装方式npm install -g @fission-ai/openspecClaude Code Plugin 市场npm install -g @rpamis/comet
是否开源开源 MIT开源 MIT开源
学习成本低(3 条核心命令)中(需理解 Skill 触发机制)低(1 条主命令)
适用范围所有 AI 编程工具(20+)主要针对 Claude CodeClaude Code 为主
最佳搭档+Superpowers+OpenSpec=上述两者整合

九、一些值得注意的使用细节

关于 OpenSpec 的"流动性"设计。 它的设计哲学是"不设强制阶段门"——你可以在任意阶段更新任意文档,先写 design 再补 specs 也可以。但实际使用中,建议在 proposal.md 确认前不要让 AI 开始写代码,因为"为什么做"不清楚的时候,"怎么做"的讨论容易跑偏。

关于上下文管理。 发起 propose 前建议清空对话上下文(/clear)。每个 Change 应该是独立的对话 Session。在一个 Session 里处理多个变更是常见错误,会导致 AI 把不同需求的上下文混在一起。

关于模型选择。 brainstorming 阶段对推理能力要求较高,用推理能力较弱的模型可能导致设计不够深入。实现阶段则更注重代码能力,可以根据项目需要调整。

关于 Git 分支。 Superpowers 默认创建 feature 分支,但后续合并需要手动处理。不要在主分支上直接运行完整流程,否则出现问题时回滚代价较高。


十、总结

OpenSpec + Superpowers 的组合,本质上是把传统软件工程里用人力维护的流程管控,映射到了 AI 编程的工作方式上

传统开发里,PRD 评审、技术设计评审、Code Review 是三个独立的人工检查点,确保"做什么"“怎么做”"做得好不好"这三个问题都有人负责。Vibe Coding 让这三个问题全部坍缩进了一个对话窗口,然后期望 AI 同时处理好——这不是 AI 不够聪明,而是流程本身缺少了约束。

OpenSpec 给"做什么"加了约束。Superpowers 给"怎么做好"加了约束。Comet 让这两个约束能够自动衔接,而不需要人工维护中间状态。

这三层叠加起来,是目前开源社区里对 AI 编程工程化程度最高的一套方案。

但它无法替代的是:写下需求时你想得有多清楚,Review 时你看得有多仔细。AI 把从需求到代码的路径缩短了十倍,但把需求想清楚这件事,目前还得人来做。工具给了你更快犯错的能力,同时也给了你更快发现错误的结构。用好哪一半,取决于你自己。


参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码点滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值