AI研发流程设计(一):Superpowers vs OpenSpec vs实践反思
AI研发流程设计(一):Superpowers vs OpenSpec vs实践反思
日期: 2026-07-11
目标: 理解两个开源项目的核心设计哲学与能力边界,结合两个个人实践项目的经验与反思,为设计一个轻量通用的AI研发流程做准备。
1. 参照项目定位
| Superpowers | OpenSpec | |
|---|---|---|
| 一句话定位 | AI coding agent的开发执行方法论 | 人与AI之间的规格化变更管理层 |
| 覆盖阶段 | brainstorming → plan → 执行 → 封仓 | explore → propose → apply → archive |
| 核心抽象 | Skill(可组合的能力模块) | Change(一个变更 = 一个文件夹) |
| 约束方式 | 纯markdown,skill自动触发 | CLI工具 + markdown约定 |
| 设计哲学 | 系统化优于即兴,TDD铁律 | 先达成共识,再自信构建 |
关键观察:两者覆盖研发流程的不同半区,几乎不重叠。
- Superpowers回答:”设计确认后,如何高质量地执行?”
- OpenSpec回答:”在写代码之前,如何把变更想清楚、讲明白、可追踪?”
本文讨论范围: Superpowers和OpenSpec是成熟的开源项目,作为设计参照的主体。另有两个个人实践项目作为补充——一个提供实践中的观察,另一个提供流程复杂度边界的探索。
2. Superpowers深度分析
2.1工作流主线
1 | brainstorming → writing-plans → subagent-driven-development → finishing-a-development-branch |
2.2核心特色
① TDD铁律
RED → GREEN → REFACTOR,不写失败测试不写生产代码。代码先于测试则删除重来。这不是建议而是”Iron Law”,skill中用大量篇幅列举rationalization表来防止绕过。
② Subagent驱动开发(SDD)
每个task派发独立subagent,上下文隔离。两阶段review:spec合规 + 代码质量。Controller策划上下文,artifact以文件传递(不污染context)。支持模型分级(简单task用便宜模型,设计判断用最强模型)。
③ Brainstorming苏格拉底式对话
一次一个问题,逐节呈现设计,每节后确认。HARD-GATE:设计未获批准前不写代码。设计文档保存到 docs/superpowers/specs/。
④ Plan极致细化
每个step是2-5分钟操作,包含精确文件路径、完整代码、验证命令、期望输出。设计哲学是”plan要详细到一个没有品味、没有判断力的初级工程师也能执行”。
⑤ git worktree隔离
每个功能分支独立工作区,干净基线。
⑥ systematic-debugging
4阶段根因调查(读错误 → 复现 → 查变更 → 追数据流),3次修复失败则质疑架构而非继续修补。
2.3能力边界
| 不擅长 | 原因 |
|---|---|
| Spec演进追踪 | Spec是一次性文档,无source of truth概念,无delta合并 |
| Brownfield增量修改规格化 | 没有”当前行为”的持久化记录,每次都从零开始写设计 |
| 变更可审计 | 只有git log,无法回溯”为什么做这个变更”的完整上下文 |
| 并行变更管理 | 没有change概念,多分支并行靠git隔离但无规格层面的协调 |
3. OpenSpec深度分析
3.1核心模型
1 | specs/(当前真相)◄──── merge on archive ──── changes/(拟议变更) |
3.2核心特色
① Spec即行为契约### Requirement: + #### Scenario: + RFC 2119关键词(MUST/SHALL/SHOULD)。行为可测试,不含实现细节。”如果改了实现但不改外部可观察行为,那它不属于spec。”
② Delta spec
变更只描述ADDED / MODIFIED / REMOVED,不重写整个spec。天然适配brownfield——不需要先文档化整个系统再修改。
③ Change是一个文件夹
1 | changes/add-dark-mode/ |
一切在一个地方。可并行多个change互不冲突。
④ Archive合并机制
完成后delta合并回 specs/,change归档到 changes/archive/YYYY-MM-DD-name/。Spec持续演进,形成完整审计链。
⑤ “Enablers, not gates”
依赖图是”可以做什么”而非”必须做什么”。可在任何阶段修改任何artifact,没有瀑布式锁定。
⑥ Explore探索阶段/opsx:explore 在产出任何artifact之前先对话探索,不创建文件、不写代码。把模糊问题变成精确变更。
3.3能力边界
| 不擅长 | 原因 |
|---|---|
| 开发执行流程 | 不涉及TDD、code review、subagent等 |
| Task细化 | tasks.md只是简单checklist,无step级TDD驱动 |
| 执行质量门 | 只有可选的verify,无强制review |
| 封仓流程 | 不涉及分支管理、merge决策 |
4. 个人实践项目一:基于Superpowers的实践观察
说明: 以下内容来自一个基于Superpowers框架的个人实践项目,经历了5个版本迭代。此处提取实践中观察到的关键现象。
4.1实践中的观察
观察一:Plan包含完整代码会削弱TDD有效性
Superpowers的plan包含每个step的完整代码。但在实践中发现,当plan包含完整代码时,subagent执行者倾向于”照抄plan中的代码”而非”根据测试错误驱动实现”。这削弱了TDD的核心价值——让测试失败信息驱动设计决策。
改为”描述性内容 + 文件路径 + 行为契约 + TDD验证命令”(不含代码)后,TDD的执行质量有所提升。
观察二:基线测试全绿应作为强制步骤
Superpowers的 using-git-worktrees skill隐含了基线验证,但没有强调”基线必须全绿”。实践中曾因基线不绿导致后续无法区分”新引入的”和”已存在的”测试失败。
观察三:跨task的代码清晰度问题
Superpowers有per-task review和whole-branch final review,但实践中发现跨task的重复逻辑和函数膨胀在per-task review中不易发现(reviewer只看单个task的diff)。
观察四:连续失败时的熔断策略
Superpowers SDD遇到BLOCKED时选择”升级给人类”。实践中尝试了”连续3次失败 → 切换到其他无依赖task → 全部完成后回来修复”的熔断策略,在长时间自主执行场景下有一定价值。
4.2观察的筛选结论
| 观察 | 结论 | 理由 |
|---|---|---|
| Plan不含代码 | 纳入 | 保护TDD有效性 |
| 基线测试全绿 | 纳入 | 回归检测前提,作为task执行前的checklist项 |
| 代码清晰度审查 | 合并到final review checklist | 跨task结构性问题是per-task review的盲区,但不需要独立流程阶段 |
| 熔断机制 | 不纳入核心流程 | 增加复杂度但价值有限,作为可选策略 |
5. 某研发流程尝试:多Agent契约驱动管线
说明: 以下项目完全通过与多个AI模型讨论设计而成,初衷是解决UAT中界面设计和实际产出不一致的问题。实际使用后效果不如预期,初步怀疑是模型能力不足以支撑如此复杂的流程。此案例的价值在于探索了流程复杂度的边界——哪些设计是有效的,哪些超出了当前模型的能力范围。
5.1设计意图
该尝试的核心问题是:AI生成的代码与设计稿之间存在系统性偏差(颜色、圆角、字体等趋向”统计常见值”)。为解决这一问题,设计了:
- 10个专业化Agent,通过认知隔离(每个agent只看它该看的)实现制衡
- Contract驱动开发:从设计稿提取精确的Layout Contract(属性 + 值 + 容差),编译为机器可执行断言
- 三层验证:Spec合规 → Contract断言 → 代码质量,每层有评分阈值
- Fix Loop + Arbiter:失败自动修复,3次失败后Arbiter仲裁
- 脚本化视觉审计:Playwright截图 + 像素/CIEDE2000色差计算,LLM只做判断不做计算
5.2设计中的亮点
该项目有一些有价值的洞察:
- 认知隔离 ≠ Prompt隔离:agent隔离不仅是不同的prompt,而是不同的工具权限 + 不同的可见文件 + 不同的上下文。审计agent不给Write/Edit权限,物理上无法修改代码。
- 计算与判断分离:LLM不擅长数值计算(色差、像素差异),交给脚本计算,LLM只做定性判断。这一原则在AI研发流程中具有普遍适用性。
- Root Cause Gate:在修复bug前必须通过假设-证伪循环证明根因,防止猜测式修复。这一理念与Superpowers的systematic-debugging高度一致。
- Surgical Fix Contract:修复时只允许修报告中的问题,禁止”顺便优化”,避免引入新问题。
- Spec场景到测试的自动转换:从GIVEN/WHEN/THEN场景自动生成测试骨架(RED phase),确保测试与规格的可追溯性。
5.3效果不如预期的原因分析
① 流程过重
完整流程是:proposal(10 phase)→ design(11 phase,4个agent)→ build(8 phase,2个agent)→ verify(9 phase,4个agent + fix loop)。一个简单的UI变更需要经过38个phase、10个agent的处理。这超出了当前AI模型的可靠执行能力——模型在超过 ~15步的连续流程中开始丢失上下文和偏离指令。
② Agent数量过多
10个agent之间的协调开销巨大。每个agent需要独立的上下文初始化、memory读写、输出文件传递。实际效果是大量token消耗在协调和文件传递上,而非实际开发工作。对比Superpowers的SDD(只需implementer + reviewer两种subagent),复杂度差距悬殊。
③ 脚本依赖过重
Contract Compiler、Contract Assertion、VRT Baseline、VRT Assert、Visual Impact、Feasibility Check、Score Calculator——7个TypeScript脚本。这些脚本本身需要维护,且引入了额外的技术栈依赖(Playwright、Pixelmatch、CIEDE2000)。
④ 评分系统的假精确
视觉审计用95分阈值,看似精确,但实际上CIEDE2000色差 + 像素diff的”95分”与人类感知的”95% 相似”不是一回事。假精确给人虚假的信心,但实际用户体验可能完全不同。
⑤ 核心问题可能不在流程
界面设计与产出不一致的问题,可能更多是模型能力问题——随着多模态模型能力提升,直接给模型看设计稿并要求精确复刻,效果可能比复杂的contract机制更好。流程无法弥补模型能力的不足。
5.4经验提炼
该项目虽然在当前模型能力下效果不如预期,但其设计思路中的有效部分和超出能力的部分都值得记录:
| 经验 | 具体表现 | 对新流程的参考价值 |
|---|---|---|
| 流程步骤不应超过模型可靠执行能力 | 38 phase连续流程,模型在后期严重偏离 | 核心流程应控制在 ~10步以内 |
| Agent数量应最小化 | 10个agent的协调开销过大 | 核心角色不超过3个 |
| 脚本依赖应最小化 | 7个TypeScript脚本增加维护负担 | 除非必要不引入脚本,纯md优先 |
| 不要用流程弥补模型能力 | Contract机制试图用流程解决模型视觉偏差 | 模型能力问题应通过换模型解决 |
| 假精确不如无精确 | 95分阈值给人虚假信心 | 质量判断用”通过/不通过 + 具体问题”更诚实 |
| 认知隔离是有价值的设计 | 审计agent无Write权限,物理上无法改代码 | 可简化为:审查者不直接修改代码 |
| 计算与判断分离值得保留 | 脚本算色差,LLM做判断 | LLM不擅长的确定性计算交给工具 |
| Spec场景到测试的自动转换 | GIVEN/WHEN/THEN → 测试骨架 | 确保spec与测试的可追溯性 |
6. 四方对比矩阵
| 维度 | Superpowers | OpenSpec | 个人实践项目一 | 某研发流程尝试 |
|---|---|---|---|---|
| Spec格式 | 自由格式设计文档 | 结构化行为契约 | 自由格式设计文档 | 结构化行为契约 + Contract DSL |
| Spec演进 | 一次性,无追踪 | Delta + Archive合并 | 一次性,无追踪 | Delta + Archive(借鉴OpenSpec) |
| Plan格式 | 极细化,含完整代码 | 简单checklist | 描述性,行为契约 + TDD命令 | 微任务 + 精度上下文注入 |
| 执行方式 | Subagent + TDD + 两阶段review | /opsx:apply(简单) |
Subagent + TDD + review | 10 agent认知隔离 + 三层验证 + Fix Loop |
| 质量门 | code review + verification | verify(可选) | 代码清晰度三审 + 回归 | 评分阈值 + Fix Loop + Arbiter |
| 工具复杂度 | 纯markdown,无CLI | CLI + schema + config | 纯markdown | 7个TS脚本 + Playwright + 配置文件 |
| 流程步骤数 | ~15步(brainstorm → 封仓) | ~5步(explore → archive) | ~20步(P0 + A循环 + B循环) | ~38 phase + 10 agent |
| 核心角色数 | 2(implementer + reviewer) | 0(无agent概念) | 2(同Superpowers) | 10(专业化agent) |
| 设计起点 | 通用AI研发 | 通用AI研发 | Superpowers实践增强 | UI设计-实现偏差问题 |
7. 关键设计张力
从四个项目的对比中,提炼出三个核心设计张力:
张力一:Plan中是否包含代码?
- Superpowers立场:包含完整代码。理由是让”无品味的初级工程师”也能执行,减少执行时的判断偏差。
- 个人实践观察:不包含代码,用行为契约 + TDD命令替代。理由是含代码的plan会让执行者变成”转录器”而非”TDD驱动者”。
- OpenSpec立场:不涉及(tasks.md只是checklist)。
- 某研发流程尝试立场:不含代码,用Contract + 精度上下文注入替代。
核心矛盾:plan的详细程度与TDD的有效性之间存在反向关系。plan越详细(含代码),TDD越沦为”按plan写代码然后补测试”;plan越抽象(行为契约),TDD越能真正驱动设计,但对执行者的能力要求更高。
张力二:Spec是一次性文档还是持续演进?
- Superpowers立场:一次性设计文档,用完即弃。
- OpenSpec立场:source of truth,delta合并,持续演进。
- 个人实践:一次性设计文档,与Superpowers一致。
- 某研发流程尝试立场:尝试引入delta(借鉴OpenSpec),但实际效果未验证。
核心矛盾:持续演进的spec提供了brownfield支持和审计能力,但增加了维护成本。一次性spec轻量但无法回答”系统当前到底怎么工作”。
张力三:纯markdown约束vs工具强制
- Superpowers立场:纯markdown,skill自动触发,零工具依赖。
- OpenSpec立场:CLI工具驱动,JSON机器可读接口,schema校验。
- 个人实践:纯markdown,与Superpowers一致。
- 某研发流程尝试立场:重度工具依赖(7脚本 + 配置),维护成本高。
核心矛盾:OpenSpec的delta合并、spec校验等能力依赖工具实现。纯markdown方式下,这些能力只能靠”约定”——agent是否会一致遵守?某研发流程尝试的经验表明,工具依赖一旦膨胀就难以控制。但如果完全不用工具,delta合并等能力如何保证?
8. 批判性分析:个人实践中的增强项是否应该纳入
判断原则: 每当考虑引入新流程环节时,必须回答三个问题:
- 为什么Superpowers / OpenSpec没有涉及?
- 我是否必须纳入?
- 我的理由是什么?
8.1基线测试全绿
- 为什么开源项目没做? Superpowers的
using-git-worktreesskill隐含了基线验证,但没有将其提升为独立的强制阶段。OpenSpec不涉及执行层。 - 是否必须纳入? 基线测试全绿是回归检测的前提。如果从一个broken baseline开始,后续测试失败无法区分是”新引入的”还是”已存在的”。
- 理由: 这是工程常识,不需要复杂机制,一个checklist项即可。
- 结论: 纳入。作为task执行前的checklist项,不需要独立”阶段”。
8.2 Plan不含代码
- 为什么开源项目没做? Superpowers的设计哲学是”plan要详细到任何人能执行”,代码是实现这一目标的手段。OpenSpec不涉及plan细化。
- 是否必须纳入? 取决于执行者是谁。如果执行者是subagent且遵循TDD,含代码的plan会削弱TDD价值。如果执行者是人类或非TDD agent,含代码的plan更安全。
- 理由: 新流程如果以TDD为核心,plan不含代码是必要的。
- 结论: 纳入。作为plan格式规范,md约定。
8.3代码清晰度审查(去重→拆分→统一)
- 为什么开源项目没做? Superpowers的per-task review + whole-branch final review理论上覆盖了代码质量。其设计假设是”如果每个task的review做好了,整体质量就有保障”。OpenSpec不涉及执行层。
- 是否必须纳入? per-task review确实能发现大部分问题。但实践中发现,跨task的重复逻辑和函数膨胀在per-task review中不容易发现,因为reviewer只看单个task的diff。
- 理由: 跨task的结构性问题是per-task review的盲区。
- 结论: 合并到final review的checklist中,而非独立流程阶段。
8.4熔断机制
- 为什么开源项目没做? Superpowers SDD的BLOCKED状态处理方式是”升级给人类”或”换更强模型重试”。其设计哲学是”遇到阻塞就停下来问人”。
- 是否必须纳入? 取决于使用场景。如果agent被期望长时间自主执行,熔断能提高吞吐。如果人类始终在场(Superpowers假设),BLOCKED → 升级即可。
- 理由: 对于”轻量通用”的目标,熔断增加了流程复杂度但价值有限。
- 结论: 不纳入核心流程,作为可选策略。
9. 某研发流程尝试的经验对新流程的约束
该尝试虽然在当前模型能力下效果不如预期,但其探索为理解流程复杂度的边界提供了有价值的参考。以下是从中提炼的设计约束:
| 约束 | 来源 | 对新流程的要求 |
|---|---|---|
| 核心流程 ≤ ~10步 | 38 phase超出模型可靠执行能力 | 砍掉一切非必要环节 |
| 核心角色 ≤ 3个 | 10 agent协调开销过大 | 执行者 + 审查者(+ 人类决策点) |
| 脚本依赖最小化 | 7脚本增加维护负担 | 纯md优先,除非delta合并等能力确实需要工具 |
| 不用流程弥补模型能力 | Contract机制试图用流程解决模型偏差 | 模型能力问题 → 换模型,不叠加流程层 |
| 质量判断用”通过/不通过” | 假精确的95分阈值 | 不用评分系统,用”通过 + 具体问题列表” |
10. 初步结论
10.1互补关系确认
Superpowers和OpenSpec在研发流程上高度互补:
- OpenSpec擅长:变更规格化、spec演进追踪、brownfield支持、变更可审计
- Superpowers擅长:TDD执行、subagent驱动、code review、调试方法论
两者的结合方向是清晰的:OpenSpec的spec/change管理前置,Superpowers的执行流程后置。
10.2个人实践的筛选结论
从个人实践中筛选出的设计决策:
| 观察项 | 结论 | 形态 |
|---|---|---|
| Plan不含代码 | 纳入 | plan格式规范,md约定 |
| 基线测试全绿 | 纳入 | task执行前checklist项 |
| 代码清晰度审查 | 纳入 | 合并到final review checklist |
| 熔断机制 | 不纳入核心流程 | 可选策略 |
10.3某研发流程尝试的启示
该尝试的核心启示是:流程复杂度必须与模型可靠执行能力匹配。一个理论上完善的流程,如果超出了模型的可靠执行能力,实际效果反而不如简单流程。同时,该尝试中的认知隔离、计算与判断分离、Spec场景到测试的自动转换等设计思路是有价值的,可以在简化后融入新流程。新流程必须以复杂度上限为硬约束,同时不丢弃已被验证有效的设计理念。