Skip to content

第48课 · OpenSpec:规范驱动开发

本节要点

  • OpenSpec 是什么:一个给 AI 编程加「协议层」的插件,让需求从「聊天里的一句话」变成「仓库里的一份文档」
  • Spec 是什么:Specification(规范文档)的简称——你把需求写进文档,AI 照着文档干活,不再是「你说一句,AI 猜一句」
  • 六个阶段一个闭环:Explore 探索 → Propose 提议 → Update 修订 → Apply 执行 → Sync 同步 → Archive 归档
  • Update 是计划的「后悔药」:文档写完甚至代码写了一半,计划变了随时修订文档,保持各文档彼此一致——只改文档,不碰代码
  • 归档是关键差异:相比第 5 课讲的 Superpowers,OpenSpec 有完整的归档机制——做完一个功能,变更记录归档,主规范持续演进
  • 兼容 30+ 主流 AI 编程工具:OpenCode、Claude Code、Cursor、GitHub Copilot……一套规范,所有工具通用
  • 适合大型项目:小需求不用搞这么复杂,但如果你在做稍大一点的项目,用 Spec 驱动能保持主线不跑偏

1. 为什么需要 OpenSpec?

还记得第 5 课讲的 Superpowers 插件吗?它每次跟 AI 头脑风暴、探索需求后,会生成设计文档和任务文档。

用着用着你会发现一个问题——文档越积越多,但没有一个总纲

Superpowers 的问题
  • 每次对话需求,它都生成一个 Spec 文件
  • 文件越攒越多,全部并列堆在一起
  • 没有一个主框架把它们串起来
  • 你不知道哪些是当前在做的,哪些是历史的
  • 每次都相当于在全新的基础上做变更

OpenSpec 的思路不同:它有一个主架构文档,描述你整个系统的结构。每次你要做一个新功能或修一个 bug,它会创建一个变更(Change),走完一个完整生命周期后归档,然后把变更内容同步回主架构。

这样你的项目就有一个持续演进的主线,而不是一堆散落的碎片。


2. Spec 是什么?

如果你没接触过软件开发,可能没听过这个词。

Spec = Specification,中文叫「规范文档」或「规格说明」。

打个比方:

📋 你去装修公司装修房子,设计师会先出一份施工图纸——哪里放沙发、哪里开窗户、电线怎么走。这份图纸就是 Spec。施工队(AI)照着图纸干活,而不是凭感觉砌墙。

在 AI 编程里,Spec 就是你把想做什么、为什么这么做、具体改哪些地方,都写进一份文档。AI 读了文档再动手,而不是靠你聊天时的几句话去猜。

OpenSpec 的核心理念用一句话概括:

Agree First, Then Build —— 先对齐,再编码。

你跟 AI 先把「要做什么」在文档里讨论清楚、审查通过,然后再让 AI 去写代码。这样不会浪费代码量,也不会跑偏。


3. 六个阶段:一个功能的完整生命周期

OpenSpec 给每个功能(或 bug 修复)设计了一个六阶段闭环。每个功能都走同一条路:

🤔 Explore  →  📝 Propose  →  ✏️ Update  →  ⚡ Apply  →  🔄 Sync  →  📦 Archive
    探索          提议           修订          执行         同步        归档
                              (计划变了,随时回到这一步)

阶段 1:Explore 探索

有一个需求,但还没想清楚怎么做?

输入 /opsx-explore,进入探索模式。AI 会读取你的代码、权衡不同方案,跟你聊清楚需求。这个阶段不写任何代码,纯粹是思考伙伴。

💡 第 5 课学的 Superpowers 里叫 brainstorm(头脑风暴),OpenSpec 里叫 explore,本质一样。

阶段 2:Propose 提议

需求聊清楚了,输入 /opsx-propose。AI 会自动在你的项目里创建一个变更文件夹,包含这些文档:

文件作用
proposal.md需求文档——这次要解决什么问题
design.md设计文档——打算怎么解决
specs/受影响的规范变更——跟主架构的差异
tasks.md任务列表——拆成一个个小任务,带编号

写完这些文档后,你先看一眼(或者让 AI 帮你 review),确认没问题再往下走。

阶段 3:Update 修订(计划变了就回来)

计划不是一次定死的。文档写完、甚至代码写了一半,你随时可能改变主意:

  • review 时发现设计有漏洞
  • 执行中发现某个方案行不通
  • 需求本身变了

这时候输入 /opsx-update,让 AI 修订变更文件夹里的文档——改了设计,任务列表跟着改;改了需求,设计文档也要对齐。它的职责就是让所有文档保持彼此一致,不留「自己打脸」的矛盾。

两条铁律:

  • 只改文档,不碰代码——如果修订后的计划意味着代码要动,AI 会停下来指向 /opsx-apply
  • 只改已存在的文档,不新建文件(新建文档是 propose 的事)

一个简单的分工口诀:

计划落后于现实 → Update(改文档);代码落后于计划 → Apply(改代码)。

阶段 4:Apply 执行

方案审查通过,输入 /opsx-apply。AI 按照 tasks.md 里的任务列表,一个一个去完成,做完了就打勾(✓)。

如果执行过程中发现方案有问题,可以随时 /opsx-update 更新文档继续编码——不是死板的阶段门禁。

阶段 5:Sync 同步

代码写完了,输入 /opsx-sync。这一步把实际实现的内容回写到主规范文档里。

为什么要同步?因为 AI 执行时可能跟计划有出入。Sync 把真实情况记录下来,保证主架构文档是最新状态。

💡 平时可以直接走 Archive——归档时会自动顺带完成同步。单独用 Sync 的场景是:change 还要继续活跃,但你想让主规范「先走一步」。

阶段 6:Archive 归档

人工验证没问题后,输入 /opsx-archive。这一步把:

  • 变更的差异合并到主规范
  • 变更文件夹加上时间戳,移入 archive/ 目录存档

归档后,规范变成新的「客观真理」,准备做下一个功能。

📦 归档是 OpenSpec 和 Superpowers 的关键差异。 Superpowers 没有归档机制,所有 Spec 文档并列保存着,时间一长就很乱——你不知道哪些是当前在做的,哪些是历史的。OpenSpec 归档后,历史变更有条理地存在 archive/ 里,随时可以回看。


4. 安装 OpenSpec

前提条件

OpenSpec 通过 npm 安装,所以你需要先装好 Node.js(第 1 课的环境准备应该已经装了)。

安装步骤

打开终端,运行:

bash
npm install -g @fission-ai/openspec@latest

然后在你的项目文件夹里初始化:

bash
# 基本初始化
openspec init

# 或者指定你用的 AI 工具(推荐)
openspec init --tools claude,opencode,codex

初始化后,OpenSpec 会自动在你的 AI 工具配置里添加六个 Skill(斜杠命令),正好对应六个阶段:/opsx-explore/opsx-propose/opsx-update/opsx-apply/opsx-sync/opsx-archive。你在 AI 对话框里输入 /opsx 就能看到它们。

让 AI 帮你安装

如果你不想记命令,也可以直接把 GitHub 链接发给 AI,让它帮你安装:

帮我安装 OpenSpec 插件:https://github.com/Fission-AI/OpenSpec

AI 会自动执行安装和配置。

卸载 Superpowers(如果之前装了)

OpenSpec 和 Superpowers 功能相似,留一个就行。如果你想换成 OpenSpec,跟 AI 说:

帮我卸载 Superpowers 插件,包括 Skill 也一起卸载

TIP

两个插件同时装着会功能冲突,建议卸一个留一个。我个人用下来感觉 OpenSpec 更贴近需求,所以推荐它。


5. OpenSpec 的核心优势

① 告别模糊提示词

以前跟 AI 做事,需求写在聊天历史里。聊着聊着上下文满了,你压缩会话或开新会话,之前的细节就丢了。

用 OpenSpec,需求写进 Spec 文档。文档在仓库里,不在聊天里。 压缩会话、开新会话都不影响,因为文档还在。

② 可审查、可追溯

每次变更都有完整记录:方案文档、设计文档、任务列表。归档后加时间戳存档。

六个月后回头看,你知道当时为什么这么做改了哪些东西任务列表是怎么拆的

③ 循序渐进

先定方案 → 审查通过 → AI 执行。不会一上来就猛写代码,写完发现方向不对又要推倒重来。

④ 保持上下文干净

讨论阶段可能会聊很久,上下文容易爆。但需求写进文档后,你就可以放心压缩会话了——文档是持久化的,压缩不影响

AI 用文档继续推进,注意力不会因为上下文太长而涣散。

⑤ 主线推进,不跑偏

每次变更都跟主架构对齐。做完一个功能,Sync 回主架构,Archive 归档。然后开下一个变更,继续在主线上推进。


6. 兼容 30+ 主流 AI 编程工具

OpenSpec 不挑工具,一套规范框架覆盖所有主流 AI 编码 agent:

  • 第一梯队:Claude Code、OpenCode、Codex
  • 第二梯队:Cursor、Windsurf、GitHub Copilot
  • 更多:Cline、Continue、Gemini CLI、Amazon Q、RooCode、Kiro、Qwen Code……还在持续增加

工作流完全一致——不管你用哪个工具,六个阶段、六条命令,用法一样。


7. 实战演示:修两个 Bug 的完整流程

视频里我用自己开发的一个 AI 审计工具箱做演示,还原了一个真实的开发过程。

发现问题

我在测试时发现了两个 bug:

  1. 流程模式中运行时,调用 Read 工具报错
  2. 运行过程中点「停止」按钮没有反应

第一步:Explore 探索

输入 /opsx-explore,把两个 bug 描述发给 AI:

目前在流程模式中运行时,调用 Read 的工具报错。另外,运行过程中点击停止,但是没有反应,并没有停止。帮我看一下这两个问题。

AI 进入探索模式,读代码、定位原因、跟你聊方案。

💡 关于 Sub Agent

探索过程中,AI 可能会派 Sub Agent 去做更细致的排查。在 OpenCode 里可以用 Ctrl+X + 方向下键查看 Sub Agent 的执行情况。

第二步:Propose 提议

方案聊清楚后,输入 /opsx-propose。AI 创建变更文件夹,写好需求文档、设计文档和任务列表。

重要:写完文档后先别急着执行,让 AI review 一下。

如果你装了 oh-my-opencode-slim 插件,它会派 oracle(用更好的模型)独立检查文档。新开的 Agent 没有当前上下文的干扰,能站在第三方角度发现文档里的问题。

比如我的演示里,oracle 发现了一个冲突:proposal 和 spec「自己打脸」——两个文档说了相反的话。

第三步:Update 修订

发现文档有问题,就轮到 Update 出场了。我让 AI 用通俗易懂的方式解释这个冲突,确认后让它修订文档——把矛盾的地方改一致。这就是 Update 的典型场景:不推倒重来,只把已有文档改对

你也可以在 Apply 执行到一半时用 Update——发现方案行不通,改完文档接着编码,进度不丢。

第四步:Apply 执行

文档确认没问题,输入 /opsx-apply。AI 按照任务列表(比如 1.1 到 4.3)逐个完成,做完了打勾。

⏱️ 执行时间取决于任务多少,可能几分钟,也可能跑几个小时。

如果你用的是 Electron 开发的桌面应用,还可以装一个 Electron MCP,让 AI 自己打开应用做功能测试,不用手动验证。

第五步:Sync 同步

代码写完、人工验证没问题后,输入 /opsx-sync

这一步把本次变更的内容同步到主架构文档,保证主架构是最新的。

第六步:Archive 归档

最后输入 /opsx-archive。AI 把任务列表全部标记完成,变更文件夹加时间戳归档。

至此,一次完整的变更(或功能开发)就全部完成了

又发现新问题?再开一个变更

演示最后,我又发现了一个新的 bug(任务列表显示顺序有点混乱)。没关系——归档完上一个变更后,重新 /opsx-explore,开启一个新的变更。

这就是 OpenSpec 的节奏:一个 Spec 一个 Spec 地小步前进。 每一步都有记录、有方向,不会跑偏。


8. 什么时候用 OpenSpec?

适用场景

做稍大一点的项目时用。 比如你从零开始搭一个工具、一个系统,功能不止两三个,可能会持续迭代——这时候用 OpenSpec 管理变更,效果最好。

如果你只是让 AI 帮你写个小脚本、处理个 Excel,不用搞这么复杂。OpenSpec 的价值在于管理持续演进的项目,让需求有迹可循、方向不跑偏。

一句话总结:小需求直接聊,大项目用 Spec。


9. 进阶可选:用 /goal 插件驱动执行

本节是可选内容

不装这个插件,OpenSpec 的完整流程照样能跑完——Apply 阶段你盯着、每轮对话手动让它继续就行。Goal 解决的是「跑长任务时人不在旁边」的问题,属于锦上添花。

Apply 的痛点

OpenSpec 的 Apply 阶段,任务列表可能有几十项。AI 干活是以「轮」为单位的——一轮对话能做的事有限,干完一轮就停下来等你。

任务少的时候无所谓,你回一句「继续」就行。但任务多的时候:

  • 你得守在电脑前不停地点「继续」
  • 中途去吃个饭,回来发现它早就停了
  • 换了个话题,它可能忘了原来干到哪了

Goal 是什么?

OpenCode Goal Plugin 给 OpenCode 加上了 Codex 风格的「目标模式」:

🎯 打个比方:OpenSpec 的文档是施工图纸,goal 就是给施工队(AI)派了个项目经理——目标不完成不下班,你不在场它也自己接着干。

它的核心机制:

  • /goal <目标> 挂一个目标:目标写清楚做什么、验证标准是什么
  • 空闲自动续跑:一轮干完,会话空闲时自动开始下一轮,不用你催
  • 完成必须给证据:AI 说「做完了」不行,必须附上验证证据(测试通过、文件确实改了、命令输出对得上)才能标记完成
  • 干不了必须说明原因:被外部条件卡住(缺凭证、等你决策)要明确说阻塞在哪,不能装作完成了
  • 安全阀:token 预算耗尽、连续几轮没实质进展,会自动暂停并给你一份交接总结——不会无限烧钱空转

安装

bash
opencode plugin opencode-goal-plugin

装完重启 OpenCode,输入 /goal 就能用了。目标会持续挂在会话上下文里(即使上下文压缩也不丢),空闲时自动续跑,状态可直接用 /goal 查看。

和 OpenSpec 怎么配合?

分工很清晰:

OpenSpecGoal
管什么文档层——需求和计划怎么写执行层——任务怎么跑完
回答的问题「做什么、为什么、改哪里」「干到哪了、还差什么、证据呢」

实战中最顺的用法:Propose 写好文档、你审查通过后,Apply 阶段不手动盯,直接挂一个 goal:

/goal 完成 openspec/changes/add-bank-reconciliation/tasks.md 里的全部任务,
每完成一项打勾,最后跑通测试再标记完成

然后你就可以去干别的了。AI 会照着 tasks.md 一项一项推进,干完自动续跑,直到全部完成(附证据)或遇到真正干不下去的阻塞(它会停下来等你)。

目标措辞有个小技巧:写清楚范围、非目标和验证方式。比如「完成 tasks.md 全部任务」是范围,「不要动 config 目录以外的代码」是非目标,「跑通测试」是验证方式。写得越明确,AI 收工时给的证据越扎实。

常用命令

命令作用
/goal <目标>设定一个新目标,开始长任务
/goal查看当前目标状态
/goal pause / /goal resume暂停 / 恢复
/goal <新目标>重新设定目标(覆盖当前)
/goal clear清除目标

关键收获

TIP

OpenSpec = 给 AI 编程加一个「协议层」。

需求写进文档,不再散落在聊天记录里。每个功能走六个阶段:探索 → 提议 → 修订 → 执行 → 同步 → 归档。计划变了用 Update 修文档,代码欠账用 Apply 补齐。归档后主规范持续演进,历史变更完整保留。

三个核心好处:

  • 告别模糊提示词——需求在文档里
  • 可审查可追溯——每次变更都有完整记录
  • 循序渐进——先对齐再编码,不浪费代码量

安装一行命令:

bash
npm install -g @fission-ai/openspec@latest

参考链接

© 2025 逆行的狗