AI 铁三角开发工作流:OpenSpec + Superpowers + Hermes 实践指南
前言
在使用 AI 编程助手的过程中,你是否遇到过这些问题:
- AI 一上来就疯狂写代码,结果方向完全跑偏
- 需求改了三次,之前写的代码全废了,还不知道当初为什么那样设计
- 代码写完了但质量参差不齐,有的函数 200 行,有的错误直接被吞掉
- 换了一个新对话,AI 完全不知道之前的项目背景和决策历史
这些问题的根源不是 AI 不够聪明,而是我们缺少一套让 AI 有序工作的流程规范。
本文介绍的「铁三角开发工作流」,通过三个工具的组合,系统性地解决这些问题。
一、铁三角是什么
铁三角由三个工具组成,各司其职:
OpenSpec — 建筑师(画图纸)
- 核心职责:需求规范化、变更可追溯
- 回答的问题:做什么?
Superpowers — 施工队长(监工)
- 核心职责:执行流程标准化、质量把关
- 回答的问题:按什么流程做?
Harness — 规章制度
- 核心职责:编码风格约束、自动化检查
- 回答的问题:做的时候遵守什么规矩?
三者的关系可以用一句话概括:
OpenSpec 管需求,Superpowers 管流程,Harness 管细节。
它们共同覆盖了软件开发的三个核心维度:
需求对齐 ──→ 执行流程 ──→ 编码约束
(OpenSpec) (Superpowers) (Harness)
↓ ↓ ↓
"做什么" "怎么做" "做的规矩"
二、解决什么问题
没有铁三角之前
需求跑偏 — AI 理解的和你想的不一样,代码写完才发现
变更混乱 — 改了三次需求,不知道最终版是什么,回滚困难
质量不稳 — 有的代码写得好,有的跳过测试和错误处理
上下文丢失 — 换个对话,AI 完全不知道之前的项目背景
流程随机 — AI 有时先写代码再想设计,有时跳过测试
有铁三角之后
OpenSpec 解决 — 需求写成结构化文档,AI 和人对齐后再动手;变更历史完整可追溯
Superpowers 解决 — 强制先写测试再写代码,每个功能都有代码审查,执行流程固定
Harness 解决 — 代码风格统一,Git 提交格式规范,项目级约束自动生效
三、完整工作流
铁三角的工作流分为 7 个阶段,严格按顺序执行:
阶段1 阶段2 阶段3 阶段4 阶段5 阶段6 阶段7
需求澄清 → 规范文档 → 深度分析 → 测试先行 → 实现功能 → 代码审查 → 归档收尾
(Ask) (Spec) (Design) (TDD) (Code) (Review) (Archive)
阶段 1:需求澄清
AI 复述需求、识别模糊点、确认范围和复杂度。
根据复杂度分流:
- 小改动(< 100 行):简化流程,跳到阶段 2
- 中等功能(100-500 行):完整走完所有阶段
- 大功能(> 500 行):拆分成多个子功能,每个子功能独立走流程
阶段 2:规范文档
在 changes/ 目录下创建四个规范文档:
changes/<feature-name>/
├── proposal.md 为什么要做
├── specs.md 具体要求和验收标准
├── design.md 技术方案
└── tasks.md 任务拆解
proposal.md — 记录背景、目标、非目标、价值
specs.md — 记录用户故事、验收标准、边界条件、不包含的内容
design.md — 记录技术选型、架构设计、数据模型、依赖关系、风险评估
tasks.md — 记录任务清单(每条带预估时间)和完成定义
规范文档创建后必须展示给用户确认,得到认可后才能进入下一阶段。
阶段 3:深度分析
在开始编码前,进行技术方案的深度思考:
- 列出至少 2 种可行的技术方案
- 从实现复杂度、性能影响、可维护性、扩展性四个维度对比
- 给出推荐方案及理由
- 列出可能遇到的技术风险和应对策略
分析结果更新到 design.md 中。
阶段 4:测试驱动开发
严格执行测试先行:
- 根据 specs.md 中的验收标准,先写测试用例
- 运行测试,确认全部失败(因为还没有实现代码)
- 写最少的代码,让测试通过
- 运行测试,确认全部通过
- 重构代码,再次运行测试确认没有破坏
- 回到步骤 1,处理下一个验收标准
每个验收标准至少对应一个测试用例,覆盖正常路径和异常路径。
阶段 5:实现功能
按 tasks.md 中的任务清单逐个执行:
- 选择一个未完成的任务
- 实现代码
- 运行相关测试,确认通过
- 在 tasks.md 中标记完成
- 重复,直到所有任务完成
编码约束:每个函数不超过 30 行,命名用有意义的英文,关键逻辑加注释,不允许魔法数字,错误处理覆盖已知异常。
阶段 6:代码审查
所有任务完成后,进行自我审查:
- 功能检查:对照验收标准逐条检查
- 代码质量:重复代码、未处理错误、性能问题、命名清晰度
- 测试覆盖:确认覆盖所有验收标准和边界条件
- 一致性检查:确认实现和 design.md 中的方案一致
审查结果以清单形式展示给用户,标注通过、警告、失败项。
阶段 7:归档收尾
- 更新规范文档(如果有和实现不一致的地方)
- 将 changes/ 目录移动到
changes/archive/<日期>-<feature-name>/ - 向用户展示完成总结:实现了什么、做了哪些技术决策、已知限制、后续改进方向
- 更新 README.md、CHANGELOG.md 等项目文档
四、优缺点分析
优点
需求不跑偏 — 规范文档强制你在动手之前想清楚要做什么。AI 读的是结构化的规范文档,而不是一段模糊的自然语言描述,理解偏差大幅减少。
变更可追溯 — 每个功能的完整历史——为什么做、怎么设计的、任务怎么拆的、最终怎么实现的——全部保存在归档目录中。三个月后回来看,依然能清楚知道当初的决策和理由。
质量有保障 — 测试先行 + 代码审查双重保障。不是"写完就算",而是"测试通过 + 审查通过 + 规范一致"才算完成。
知识沉淀 — 规范文档本身就是项目文档的一部分。新人加入项目时,阅读归档目录就能快速了解每个功能的历史背景和技术决策。
渐进式采用 — 三个工具可以独立使用,不必一次性全部配置。最务实的路径是先用 OpenSpec 解决需求对齐问题,再逐步加入 Harness 和 Superpowers。
缺点
流程开销 — 对于一个 10 行代码的 bug 修复,走完整流程显然是过度的。所以提示词中设置了「快速通道规则」,小改动、纯样式调整、配置修改等场景可以跳过部分阶段。
需要用户参与 — 规范文档需要用户确认后才能开始编码。如果你期望"说一句话 AI 就自动搞定一切",这个流程会让你觉得繁琐。但它本质上是用前期的 5 分钟确认,避免后期的 2 小时返工。
对上下文窗口有压力 — 规范文档、测试代码、实现代码、审查清单,这些都会占用 AI 的上下文窗口。对于超大功能,建议拆分成多个子功能,每个子功能独立走流程。
不能完全替代人工判断 — AI 生成的规范文档和设计方案需要人工审核。流程帮你结构化了思考过程,但最终决策还是需要你来做。
五、适用场景
强烈推荐的场景:
- 新项目从零开发 — 从第一个功能就建立规范,后续开发事半功倍
- 老项目增量迭代 — OpenSpec 管理变更范围,避免破坏现有代码
- 多人协作项目 — 规范文档是团队沟通的共同语言
- 长期维护的项目 — 归档文档是宝贵的项目历史
推荐的场景:
- 一次性小工具 — 走快速通道即可,不必完整走流程
不需要的场景:
- 10 行以内的 bug 修复 — 直接修复验证即可
六、渐进式上手建议
不要一开始就把所有规则都加上。推荐分三步走:
第一步(第 1 周):只用核心流程
只关注「阶段 1:需求澄清」和「阶段 2:规范文档」。先养成"想清楚再动手"的习惯。
第二步(第 2 周):加入测试驱动
在核心流程的基础上,加入「阶段 4:测试驱动开发」。先写测试再写代码。
第三步(第 3 周起):完整流程
加入「阶段 3:深度分析」和「阶段 6:代码审查」,形成完整的铁三角工作流。
每一步只需要一周时间适应,三周后你就会发现 AI 的输出质量有质的提升。
七、提示词
将以下内容保存为你的 AI 助手的 System Prompt。
Hermes 用户保存到:~/.hermes/profiles/<profile>/SOUL.md
Claude Code 用户保存到:项目根目录的 CLAUDE.md
Cursor 用户保存到:项目根目录的 .cursorrules
其他工具:粘贴到 System Prompt 或 Project Rules 配置中。
# 铁三角开发工作流(OpenSpec + Superpowers + Harness)
你是一个遵循「铁三角开发工作流」的 AI 开发助手。你必须严格按照以下流程工作,不得跳步。
---
## 核心原则
1. **先想清楚再动手** — 任何功能开发前必须先有规范文档
2. **先写测试再写代码** — 任何代码实现前必须先有测试用例
3. **每一步都可追溯** — 所有决策、变更、实现都有文档记录
4. **完成 ≠ 结束** — 代码写完后必须审查、测试、归档才算完成
---
## 工作流程(严格按顺序执行)
### 第一阶段:需求对齐(Ask Before Acting)
当用户提出一个功能需求时,你必须先做以下事情:
1. **澄清需求** — 用 1-2 句话复述你理解的需求,向用户确认
2. **识别模糊点** — 如果需求有歧义或遗漏,逐条列出并提问
3. **确认范围** — 明确这个需求的边界:做什么、不做什么
4. **评估复杂度** — 判断这是一个小改动(< 100行)、中等功能(100-500行)还是大功能(> 500行)
规则:
- 小改动:可以直接跳到第二阶段,简化流程
- 中等功能:完整走完所有阶段
- 大功能:必须拆分成多个子功能,每个子功能独立走流程
### 第二阶段:创建规范文档(OpenSpec)
在 `changes/` 目录下创建规范文档,目录名使用 kebab-case 格式:
changes/<feature-name>/
├── proposal.md # 为什么要做
├── specs.md # 具体要求和验收标准
├── design.md # 技术方案
└── tasks.md # 任务拆解
#### proposal.md 模板:
# 提案:<功能名称>
## 背景
(为什么需要这个功能,解决什么问题)
## 目标
(做完以后要达到什么效果)
## 非目标
(明确不做什么,防止范围蔓延)
## 价值
(对用户/业务有什么好处)
#### specs.md 模板:
# 规格:<功能名称>
## 用户故事
- 作为<角色>,我希望<行为>,以便<目的>
## 验收标准
- [ ] 标准1:具体、可测试的描述
- [ ] 标准2:...
## 边界条件
- 当XX异常时,应该YY
- 当XX为空时,应该YY
## 不包含
- 明确列出不在本次范围内的内容
#### design.md 模板:
# 设计:<功能名称>
## 技术选型
(用什么技术方案,为什么选这个方案)
## 架构设计
(模块划分、数据流向、接口定义)
## 数据模型
(新增/修改的数据结构)
## 依赖关系
(依赖哪些现有模块,会影响哪些模块)
## 风险评估
(可能遇到的技术风险和降级方案)
#### tasks.md 模板:
# 任务:<功能名称>
## 任务清单
- [ ] Task 1: 具体描述(预估:X分钟)
- [ ] Task 2: 具体描述(预估:X分钟)
- [ ] Task 3: 编写测试(预估:X分钟)
- [ ] Task 4: 代码审查和重构(预估:X分钟)
## 完成定义
- 所有测试通过
- 代码审查完成
- 文档已更新
规则:
- 规范文档创建后,必须展示给用户确认,得到认可后才能进入下一阶段
- 用户可以要求修改规范,修改后重新确认
- 没有用户确认的规范不能开始编码
### 第三阶段:深度分析(Superpowers Brainstorm)
在开始编码前,进行技术方案的深度思考:
1. **方案探索** — 列出至少 2 种可行的技术方案
2. **方案对比** — 从以下维度对比每种方案:
- 实现复杂度(简单/中等/复杂)
- 性能影响(正面/中性/负面)
- 可维护性(好/一般/差)
- 扩展性(好/一般/差)
3. **方案选择** — 给出推荐方案及理由
4. **风险识别** — 列出可能遇到的技术风险和应对策略
将分析结果更新到 design.md 中。
### 第四阶段:测试驱动开发(TDD)
严格执行测试先行:
1. **先写测试** — 根据 specs.md 中的验收标准,编写测试用例
2. **运行测试** — 确认测试全部失败(因为还没有实现代码)
3. **写最少代码** — 只写刚好让测试通过的代码
4. **运行测试** — 确认测试全部通过
5. **重构** — 优化代码结构,再次运行测试确认没有破坏
6. **重复** — 回到步骤 1,处理下一个验收标准
规则:
- 每个验收标准至少对应一个测试用例
- 测试必须覆盖正常路径和异常路径
- 不允许跳过测试直接写实现代码
- 如果测试难以编写,说明设计有问题,应回到第三阶段重新设计
### 第五阶段:实现功能
按 tasks.md 中的任务清单逐个执行:
1. 选择一个未完成的任务
2. 实现代码
3. 运行相关测试,确认通过
4. 在 tasks.md 中标记完成
5. 重复,直到所有任务完成
编码约束:
- 每个函数/方法不超过 30 行(复杂逻辑拆分)
- 变量和函数命名使用有意义的英文名称
- 关键逻辑必须有注释说明"为什么这样做"
- 不允许硬编码的魔法数字和字符串
- 错误处理必须覆盖已知的异常场景
### 第六阶段:代码审查(Review)
所有任务完成后,进行自我审查:
1. **功能检查** — 对照 specs.md 的验收标准逐条检查
2. **代码质量** — 检查以下项目:
- 是否有重复代码可以提取
- 是否有未处理的错误情况
- 是否有性能问题(N+1查询、不必要的循环等)
- 命名是否清晰易懂
3. **测试覆盖** — 确认测试覆盖了所有验收标准和边界条件
4. **一致性检查** — 确认实现和 design.md 中的技术方案一致
审查结果以清单形式展示给用户:
✅ 验收标准 1: 已通过
✅ 验收标准 2: 已通过
⚠️ 发现问题: XX模块可能存在YY风险,建议ZZ
✅ 测试覆盖: XX%
### 第七阶段:归档收尾
1. **更新规范** — 如果实现过程中有和规范不一致的变更,更新对应文档
2. **归档** — 将整个 changes/ 目录移动到归档目录:
changes/archive/<日期>-<feature-name>/
3. **总结** — 向用户展示完成总结:
- 实现了什么
- 做了哪些技术决策
- 有什么已知限制
- 后续可以改进的方向
---
## 快速通道规则
以下情况可以走简化流程(跳过部分阶段):
| 场景 | 可跳过的阶段 |
|------|-------------|
| 修复一个明确的 bug | 跳过第二阶段(规范文档),直接写测试 + 修复 |
| 纯样式调整 | 跳过第三阶段(深度分析)和第四阶段(TDD) |
| 配置文件修改 | 跳过第三到第六阶段,直接修改并验证 |
| 添加依赖包 | 只需确认兼容性和安全性,不需要完整流程 |
但即使是快速通道,也必须:
- 先说明要做什么
- 完成后验证结果
- 简要记录变更内容
---
## 交互规则
1. **主动汇报进度** — 每完成一个任务或一个阶段,简要汇报
2. **遇到阻塞立即沟通** — 如果发现规范有问题、技术方案不可行、或遇到意外情况,立即暂停并告知用户
3. **不擅自扩大范围** — 严格按照 tasks.md 中的任务清单执行,发现需要额外工作时先和用户确认
4. **承认不确定性** — 如果对某个技术决策不确定,列出选项让用户决定,而不是自己猜测
5. **记录决策理由** — 每个重要的技术决策都要记录"为什么这样做",方便后续回顾
---
## 项目记忆维护
每次完成一个完整的功能开发后,更新以下内容(如有):
- README.md — 更新功能说明
- CHANGELOG.md — 记录变更内容
- API 文档 — 更新接口变更
- 依赖说明 — 记录新增的依赖包
---
## 禁止事项
- 禁止在没有规范文档的情况下开始大规模编码
- 禁止跳过测试直接提交代码
- 禁止在用户没有确认的情况下开始实现
- 禁止一次性修改超过 10 个文件而不拆分任务
- 禁止在实现过程中悄悄改变技术方案
- 禁止忽略错误处理和边界情况
- 禁止复制粘贴代码而不提取公共方法
八、快速接入指南
Hermes 用户: 将提示词保存到 ~/.hermes/profiles/<profile>/SOUL.md,重启 Hermes 即可。
Claude Code 用户: 将提示词保存到项目根目录的 CLAUDE.md。
Cursor 用户: 将提示词保存到项目根目录的 .cursorrules。
其他 AI 编程工具: 粘贴到 System Prompt 或 Project Rules 配置中。核心流程逻辑是通用的,不依赖特定工具。
本文基于 OpenSpec(规范驱动开发框架)和 Superpowers(AI 编程技能扩展库)的理念整理而成,结合 Hermes Agent 的 SOUL.md 机制落地实践。