OpenSpec 与 Spec Kit 使用对比:规范驱动开发该选哪个?

14 阅读7分钟

AI 编程工具越来越强,但"先写规范再写代码"的 SDD(Spec-Driven Development)理念也开始流行。目前最有代表性的两个开源框架是 GitHub 的 Spec Kit 和 Fission AI 的 OpenSpec,这篇文章梳理它们各自的用法和差异。

先说背景:为什么需要 SDD

用 Cursor、Claude Code 或 Copilot 写代码时,很多人习惯直接丢一段需求描述给 AI,然后看它输出什么。这种 "Vibe Coding" 在小功能上还行,一旦需求复杂一点,生成的代码往往似是而非 —— 不是模型不够强,是我们没给够上下文。

SDD 的做法很朴素:先把要做什么写成结构化的规范文档,再让 AI 照着规范写代码。规范本身也由 AI 辅助生成,但每一步人都可以审查和修正。两个框架对"怎么组织这个流程"给出了不同的答案。

Spec Kit:GitHub 出品,流程严谨

定位

Spec Kit(28K+ Star)不是 AI 助手,而是一套给 AI 助手"加规矩"的工具包。它往你项目里注入一组 slash commands,通过 GitHub Copilot、Claude Code、Gemini CLI 等工具调用。核心思路是门控流程 —— 每一步做完、人确认了,才能进下一步。

安装

Python 生态,用 uv 装:

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init my-project

specify init 跑完后,slash commands 就被写进项目的 agent 配置目录了(.claude/.github/prompts/ 等),后续不再需要 specify 命令。

工作流:7 步门控

Constitution → Specify → Clarify → Plan → Tasks → Analyze → Implement

逐步说明:

/speckit.constitution — 定规矩

创建 constitution.md,写死项目的不可违反原则:测试覆盖率底线、技术栈约束、编码规范等。AI 在后续每一步都会参考这份文件,减少"上下文漂移"。

/speckit.specify — 写规范

用自然语言描述要做什么、为什么做,不需要涉及技术细节。

/speckit.clarify — 消歧

AI 基于规范抛出一系列结构化问题,覆盖潜在的歧义点,答案回写到规范的 Clarifications 部分。这步挺有价值 —— 很多返工就是因为前期没把需求想清楚。

/speckit.plan — 技术方案

你给出技术方向(用什么框架、什么架构),AI 生成详细方案。

/speckit.tasks — 任务拆解

把规范和方案拆成可执行的任务列表,带依赖顺序、并行标记([P])、文件路径和测试要求。

/speckit.analyze — 一致性检查

交叉检查规范、方案和任务之间有没有矛盾。输出一个 Findings Table,每行有编号(A1、C2 之类),你可以直接说"Fix A1, C2"让 AI 去改。

/speckit.implement — 执行

基于所有产物开始写代码。

优缺点

好处是严谨。每步都有人工卡点,clarify 和 analyze 能有效减少返工。

代价是重。specify 阶段就能产出 800 多行文档,整套流程 8 个 slash command,跑一遍下来需要不少耐心。对日常小功能迭代来说有些 overkill。

OpenSpec:轻量灵活,为存量代码而生

定位

OpenSpec的设计出发点不太一样 —— 它假设你大部分时间是在已有代码库上做增量变更,而非从零开始。所以它围绕"变更(Change)"这个概念来组织一切。

v1.0.0(The OPSX Release)是个大版本,把早期的 3 步线性流程重构成了 10 个可自由组合的 OPSX 命令,不再强制按顺序走。

安装

TypeScript 写的,需要 Node.js 20.19.0+:

npm install -g @fission-ai/openspec
openspec init
# 或直接指定工具
openspec init --tools claude,cursor

目前支持多种AI工具(Claude Code、Cursor、Windsurf、Gemini CLI、Copilot、Cline、Amazon Q 等)。初始化后在项目里生成对应 的skill 文件,不同工具的命令语法略有差异:

工具格式
Claude Code/opsx:command
Cursor / Windsurf / Copilot/opsx-command
Trae/openspec-command-name

核心概念:产物依赖图

理解 OpenSpec 的关键是它的产物依赖图(Artifact Graph)。每个变更包含 4 个产物:

proposal (根)
├── specs    (依赖 proposal)
├── design   (依赖 proposal)
└── tasks    (依赖 specs + design)

每个产物有三种状态:BLOCKED → READY → DONE。AI 通过查询 CLI 拿到实时状态,自动判断该做什么。这意味着你可以随时回去改任何产物,系统会自动更新状态链路。

完整命令(10 个)

按使用阶段分:

探索

/opsx:explore — 在正式开始前调研问题、对比方案。这个模式有硬隔离,不会产生任何产物或代码变更,纯粹用来想清楚。

规划

/opsx:new <name> — 创建一个变更,在 openspec/changes/<name>/ 下搭好脚手架。支持 --schema 参数指定自定义产物流程。

/opsx:ff — Fast-Forward,按依赖顺序一口气生成 proposal、specs、design、tasks 四个产物。适合需求明确的场景。

/opsx:continue — 每次只生成下一个就绪的产物,适合边想边做。

ff 还是 continue?想清楚了用 ff,没想清楚用 continue

实现

/opsx:apply — 按照 specs 和 design 逐个实现 tasks.md 里的任务。支持 /opsx:apply <name> 指定变更名,做到断点续跑。

/opsx:verify — 实现完了跑一遍校验,检查代码和规范是否一致。问题分三级:CRITICAL / WARNING / SUGGESTION。

归档

/opsx:sync — 把变更里的 delta specs 合并回主规范目录。可选步骤,archive 时也会提示。

/opsx:archive — 验证产物和任务完成后,把变更移到 archive 目录。

/opsx:bulk-archive — 同时归档多个变更,自动检测跨变更的规范冲突。

入门

/opsx:onboard — 用你的真实代码库做一次完整的引导教学,11 个阶段,大约 15 分钟。

三种典型工作流

模式场景流程
快速功能需求清晰new → ff → apply → verify → archive
探索式需求模糊explore → new → continue → ... → apply → verify → archive
并行变更多任务并行多个 new,按需切换,最后 bulk-archive

几个值得注意的设计

变更隔离

OpenSpec 把"当前系统状态"和"变更提案"放在不同目录:

openspec/
├── specs/          ← 系统当前状态(Source of Truth)
├── schemas/        ← 自定义产物工作流
├── config.yaml     ← 项目配置
└── changes/        ← 各个变更提案
    ├── add-dark-mode/
    ├── fix-login-bug/
    └── archive/    ← 历史变更

每个功能在独立的 change 目录里开发,只在 archive 时才合并到主规范。多人并行开发时不会互相踩。Spec Kit 没有这层隔离,直接改主规范文件,协作时容易冲突。

Delta Spec

变更中的规范用 ADDEDMODIFIEDREMOVEDRENAMED 标记增量,不是全量覆盖。看一眼就知道这次改了什么。

动态指令(v1.0 新增)

AI 拿到的指令不再是写死的模板,而是从三层动态拼装:项目上下文(config.yaml)、产物规则、输出模板。AI 每次操作前都会查 CLI 获取最新状态,所以指令始终跟项目实际情况同步。

CLI 命令

除了 AI 助手里的 slash commands,终端里也有一组 CLI 命令:

命令用途
openspec init初始化项目
openspec status查看产物完成状态
openspec list列出活跃变更和规范
openspec show <name>查看变更详情
openspec view交互式仪表盘
openspec validate校验规范格式
openspec archive终端归档(--yes 跳过确认)
openspec feedback提交反馈
openspec completion install安装 Shell 补全

对比:怎么选

核心差异

维度Spec KitOpenSpec
出品方GitHubFission AI
语言 / 安装Python / uvTypeScript / npm
Stars28K+22K+
设计思路严格门控,步步审查依赖图驱动,灵活迭代
擅长场景新项目从零开始(Greenfield)已有代码库增量开发(Brownfield)
命令数量8 个10 个
规范体量较重,单阶段可达 800+ 行较轻,文档约 250 行
流程自由度线性,不能跳步非线性,随时可以回改
协作友好度直接改主规范,多人易冲突变更隔离,archive 时合并
Token 消耗较高较低
变更追踪无内建机制Delta Spec + 归档历史

快速上手命令对照:

Spec Kit:

uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
specify init my-project
# 在 AI 助手中:
/speckit.specify → /speckit.clarify → /speckit.plan → /speckit.tasks → /speckit.implement

OpenSpec:

npm install -g @fission-ai/openspec
openspec init --tools claude
# 在 AI 助手中:
/opsx:new feature-name → /opsx:ff → /opsx:apply → /opsx:verify → /opsx:archive

选择建议

场景推荐
新项目,要求严谨规范Spec Kit
已有代码库做功能迭代OpenSpec
多人协作,关注冲突管理OpenSpec
合规性 / 可审计性要求高Spec Kit
追求开发速度OpenSpec
需求模糊,需要深度消歧Spec Kit

总结

两者不是非此即彼。一种可行的组合方式:新项目启动阶段用 Spec Kit 把架构和规范敲定,进入日常迭代后切到 OpenSpec 做增量变更管理。