SDD 与 OpenSpec / Spec Kit
对比对象:
说明:
- 本文基于两个项目截至 2026-04-17 可见的官方 README、仓库结构与公开说明整理。
1. 什么是 SDD
SDD,通常指 Spec-Driven Development,也就是“规范驱动开发”。
它的核心思想不是先写代码、再补文档,而是先把“要做什么、为什么做、做到什么程度算完成”描述清楚,再让实现围绕这些规范展开。
和传统开发相比,SDD 有几个明显差异:
- 规范不是附属品,而是开发主线
- 需求、场景、约束、验收标准,不再只是开会纪要或聊天记录,而是实际驱动实现的核心材料。
- 先对齐再实现
- 在编码前,团队和 AI 助手先对“目标”和“边界”达成一致,减少后期返工。
- 规范可以直接驱动 AI
- 在 AI coding assistant 场景下,spec 不再只是给人看的文档,也是在约束 AI 输出。
- 开发过程可追踪
- 从 proposal、requirements、design 到 task breakdown,链路更完整,决策更容易回溯。
2. 为什么 SDD 在 AI 编码时代更重要
没有 SDD 时,很多 AI 开发流程实际上是“聊天驱动开发”:
- 需求散落在上下文里
- 实现边界不清晰
- AI 容易补全错误假设
- 多轮对话后,最初目标逐渐漂移
这会带来几个典型问题:
- 需求漂移
- 同一个功能在不同轮次里被 AI 理解成不同东西。
- 实现不可控
- AI 可能一次性做太多,也可能漏掉关键约束。
- 难以协作
- 如果多人或多 Agent 参与,聊天记录很难成为稳定的协作契约。
- 难以复盘
- 需求为什么这么写、为什么这么设计、任务为什么这样拆,后面很难追踪。
所以,SDD 在 AI 时代的价值,本质上是给 AI 开发加一层 结构化约束:
- 让目标更清晰
- 让实现更可预测
- 让多人协作更稳定
- 让项目积累下来的不是聊天记录,而是可复用的工程资产
3. 一个典型的 SDD 流程
虽然不同工具实现不同,但一个典型的 SDD 流程通常类似这样:
- 提出变更
- 明确想解决什么问题、给谁用、预期效果是什么。
- 编写或生成规范
- 把需求、场景、边界条件、验收标准结构化下来。
- 形成设计方案
- 明确技术实现方向、数据结构、接口、约束。
- 拆解任务
- 把工作拆成可以执行和验证的实现步骤。
- 实施与验证
- AI 或开发者按规范和任务推进实现。
- 归档与沉淀
- 将这次变更的 spec、设计和任务保留下来,形成团队资产。
OpenSpec 和 Spec Kit 都是在做这件事,只是两者做法不一样:
- OpenSpec 更强调“轻量、流畅、快速进入实现”
- Spec Kit 更强调“完整、规范、可治理、可扩展”
4. 两个项目分别在解决什么问题
OpenSpec
OpenSpec 想解决的问题是:
如何在不引入太重流程的前提下,让 AI coding assistant 的开发过程有 spec 约束,而不是完全靠聊天上下文驱动。
它的理念很鲜明:
- fluid not rigid
- iterative not waterfall
- easy not complex
- built for brownfield not just greenfield
它更像是给日常 AI 开发加一套“轻量护栏”。
Spec Kit
Spec Kit 想解决的问题是:
如何把 Spec-Driven Development 做成一套可落地、可扩展、可治理的方法与工具体系。
它不只是一个命令行工具,而是一整套:
- CLI
- templates
- integrations
- presets
- extensions
- workflows
它更像是“把 SDD 工程化”的工具箱。
5. 核心定位差异
| 维度 | OpenSpec | Spec Kit |
|---|---|---|
| 核心思路 | 给 AI 开发加轻量 spec 护栏 | 把 SDD 做成完整工程流程 |
| 风格 | 轻量、迭代、少仪式感 | 完整、规范、强治理 |
| 适合对象 | 个人开发者、小团队、已有项目 | 中大型项目、多人协作、需要制度化落地的团队 |
| 工作方式 | 快速提出变更并推进实现 | 先治理原则,再规范,再计划,再任务,再实施 |
| 工具生态 | Node / npm | Python / uv |
6. OpenSpec 的优缺点
优点
- 上手成本低
- Node 环境下安装直接,进入项目后
openspec init即可开始。
- Node 环境下安装直接,进入项目后
- 主流程短
/opsx:propose->/opsx:apply->/opsx:archive,很适合快速迭代。
- 更适合 brownfield
- 官方明确强调它适合已有项目,不只是新项目。
- 更符合 AI 协作直觉
- 先提出一个变更,再生成 proposal/spec/design/tasks,然后直接实施,交互阻力较小。
- 仪式感较低
- 对不想引入太重文档流程的团队更友好。
- 支持多种 AI 工具接入
- 支持 20+ AI assistants / 25+ tools。
缺点
- 方法论深度不如 Spec Kit 完整
- 在治理原则、模板体系、流程扩展等方面,公开材料里 Spec Kit 更系统。
- 容易依赖团队自觉
- 因为强调灵活,团队如果没有纪律,spec 可能又退化成“半结构化描述”。
- 不那么偏向重治理场景
- 对于需要严格留痕、清晰阶段边界、强模板约束的组织,默认流程偏轻。
- 复杂项目的 artifact 粒度相对没那么重
- 当你需要 research、data model、contracts 等细分输出时,OpenSpec 默认表达没有 Spec Kit 那么体系化。
7. Spec Kit 的优缺点
优点
- SDD 方法论更完整
- 从 constitution 到 specify、plan、tasks,链路清晰。
- 治理能力更强
- 把工程原则前置,适合多人协作和高质量要求场景。
- 扩展能力强
- 仓库里有
extensions、presets、integrations、templates等结构。
- 仓库里有
- AI agent 集成覆盖广
- 支持 30+ AI coding agents。
- 更适合团队沉淀标准流程
- 不只是解决“怎么让 AI 帮我写代码”,更在解决“团队怎么稳定地用 spec 驱动开发”。
- 文档层次更完整
- 对流程、阶段、扩展和社区资源的说明更丰富。
缺点
- 上手更重
- 依赖 Python 3.11+、
uv、Git,相比 OpenSpec 接入成本更高。
- 依赖 Python 3.11+、
- 流程更长
- constitution -> specify -> plan -> tasks -> implement,本身就更正式。
- 文档和 artifact 更多
- 这提高了治理能力,但也提高了维护成本。
- 对小项目可能偏重
- 如果只是个人开发或快速试错,Spec Kit 可能会显得过度设计。
- 团队执行门槛更高
- 规范越完整,越需要团队真正愿意维护这些规范。
8. 使用流程
在 AI coding 场景里,可以把这两个项目理解成“给 agent 提供结构化开发流程”的工具:
- OpenSpec / Spec Kit:负责定义流程、工件、命令约定
- Codex / OpenCode:负责读代码、改代码、执行命令、推进实现
也就是说,它们不是替代关系,而是组合关系。
8.1 OpenSpec 使用流程
安装
npm install -g @fission-ai/openspec@latest
要求:
- Node.js 20.19.0+
初始化
cd your-project
openspec init
openspec update
提出变更并生成 spec
/opsx:propose
通常会生成:
proposal.mdspecs/design.mdtasks.md
按任务实施
/opsx:apply
完成后归档
/opsx:archive
可选扩展命令
如果要更完整流程,还可以使用:
/opsx:new/opsx:continue/opsx:ff/opsx:verify/opsx:sync/opsx:bulk-archive/opsx:onboard
适用场景
- 已有项目增量迭代
- 个人开发者配合 AI 助手
- 小团队快速推进功能
- 希望引入 spec,但不想流程太重
8.2 Spec Kit 使用流程
安装
推荐安装:
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
一次性使用:
uvx --from git+https://github.com/github/spec-kit.git@vX.Y.Z specify init . --ai copilot
要求:
- Python 3.11+
uv- Git
- 支持的 AI coding agent
初始化
specify init .
或:
specify init --here --ai codex --ai-skills
建立治理原则
/speckit.constitution
这一阶段主要定义项目的工程原则,例如:
- 质量要求
- 测试要求
- UX 一致性要求
- 性能要求
- 技术约束
生成功能规范
/speckit.specify
重点是把“做什么”和“为什么做”说清楚。
生成技术计划
/speckit.plan
这一阶段常见输出包括:
plan.mdresearch.mddata-model.mdcontracts/quickstart.md
生成任务拆解
/speckit.tasks
通常输出 tasks.md,包含:
- 按用户故事组织的任务
- 依赖关系
- 并行标记
- 实现提示
进入实施与验证
后续由开发者或 AI 按 spec、plan、tasks 推进开发。
适用场景
- 从 0 到 1 的项目
- 多人协作项目
- 需要明确工程原则和决策边界的团队
- 想把 SDD 作为正式开发制度落地的团队
8.3 在 AI Coding 中怎么用
用两个常见 agent 举例:
- Codex
- OpenCode
思路都一样:
- 先在仓库里初始化 SDD 工具
- 再启动 AI coding agent
- 先让 agent 生成或完善 spec
- 再让 agent 按 spec 实现
- 最后回到验证、归档、沉淀
一个通用原则
不要一上来就对 agent 说“帮我把这个功能做完”。
在 SDD 场景里,更稳定的方式是分成两段:
- spec 阶段
- 明确要做什么、边界是什么、验收标准是什么
- implementation 阶段
- 基于已有 spec 去实现、测试、修正
这样做的好处是:
- agent 不容易跑偏
- 需求变更时更容易同步
- 多人或多 agent 协作时更容易对齐
示例一:Codex + OpenSpec
第一步:初始化 OpenSpec
cd your-project
openspec init
openspec update
openspec update 的作用是刷新 agent instructions 和命令绑定。
第二步:启动 Codex
cd your-project
codex
第一次运行时,按官方说明会提示你登录 ChatGPT 账号或配置 API key。
第三步:先做 spec,不急着写代码
进入 Codex 后,先告诉它:
先不要实现。请先基于 OpenSpec 工作流为这个需求生成 proposal、spec、design 和 tasks。
需求:为后台管理系统增加批量导出订单的能力,支持按时间范围和状态筛选。
完成 spec 后,先总结你的设计取舍,再等我确认。
如果你所在的 agent 环境已经加载了 OpenSpec 命令,也可以直接使用:
/opsx:propose 为后台管理系统增加批量导出订单的能力,支持按时间范围和状态筛选
也可以直接使用 OpenSpec 生成好的 Skill:
$openspec-propose 为后台管理系统增加批量导出订单的能力,支持按时间范围和状态筛选
第四步:审阅 spec,再让 Codex 实现
确认 spec 后,再给 Codex 明确指令:
现在根据已生成的 OpenSpec artifacts 开始实现。
要求:
- 严格按 tasks 顺序推进
- 每完成一组任务就运行相关测试
- 如果发现 spec 与现有代码冲突,先停下来说明冲突点
如果你的 OpenSpec 配置了实现命令,也可以使用:
/opsx:apply
也可以直接使用 OpenSpec 生成好的 Skill:
$openspec-apply-change
第五步:收尾和归档
功能完成后,可以让 Codex:
- 对照 tasks 检查是否全部完成
- 对照 spec 检查是否有偏差
- 补充测试与文档
- 执行归档
例如:
请根据当前变更,检查 spec、design、tasks 和实现是否一致;如果一致,再执行归档建议。
示例二:Codex + Spec Kit
Spec Kit 更适合在 Codex 里跑一个更正式的阶段化流程。
先初始化:
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
cd your-project
specify init . --ai codex
然后启动 Codex:
codex
推荐交互方式:
阶段 1:先建立 constitution
/speckit.constitution
可以补一句:
我们的项目原则是:
- 默认先测试后实现
- 接口变更必须更新文档
- 新功能必须提供最小可验证验收路径
阶段 2:生成功能规范
/speckit.specify
你可以这样描述需求:
功能:增加订单批量导出
用户:运营人员
目标:按筛选条件导出 CSV
约束:导出任务不能阻塞主请求线程;导出结果保留 24 小时
阶段 3:生成技术计划和任务
/speckit.plan
/speckit.tasks
这一步之后,再要求 Codex:
先总结 plan 和 tasks,再指出其中的高风险点、依赖项和需要我确认的决策。
阶段 4:再进入实现
/speckit.implement
如果你不想一次性全自动,也可以直接说:
根据 spec.md、plan.md 和 tasks.md 实现第一阶段任务;每完成一步都给出变更摘要和验证结果。
示例三:OpenCode + OpenSpec
根据 OpenCode README,基本用法是:
opencode
也可以指定工作目录:
opencode -c /path/to/project
OpenCode 的优势在于:
- 终端内交互直接
- 支持自定义 commands
- 支持非交互模式
-p
一个实用流程是:
第一步:先初始化 OpenSpec
cd your-project
openspec init
openspec update
第二步:打开 OpenCode
opencode -c your-project
第三步:让 OpenCode 先产出 spec
在会话里直接输入:
先不要编码。请基于 OpenSpec 流程,为“订单批量导出”生成功能 proposal、spec、design、tasks,并指出还缺哪些业务约束。
如果你已经把常用流程做成 OpenCode custom command,也可以把“生成 spec”“按 spec 实现”“验证 spec 与实现一致性”做成项目命令,之后通过 Ctrl+K 直接调用。
第四步:按 spec 实现
现在开始实现,但要求:
- 只按已确认的 tasks 执行
- 不要额外扩展需求
- 每次完成后告诉我改了哪些文件、跑了哪些验证
OpenCode 也支持非交互模式,所以你可以拿它做脚本化流程,例如:
opencode -c your-project -p "阅读当前 OpenSpec artifacts,总结未完成任务和实现风险"
这个模式适合做:
- 每日状态检查
- spec 完整性检查
- 任务执行前的上下文预热
示例四:OpenCode + Spec Kit
Spec Kit 和 OpenCode 的组合更像“本地终端版的阶段化 SDD 流程”。
初始化:
cd your-project
specify init . --ai opencode
然后启动:
opencode -c your-project
推荐按下面顺序推进:
/speckit.constitution/speckit.specify/speckit.plan/speckit.tasks- 实现或
/speckit.implement
如果你希望 OpenCode 更高效,可以结合它的 custom command 机制,把常见命令包装成项目命令,例如:
project:sdd-specifyproject:sdd-planproject:sdd-tasksproject:sdd-verify
这样做的价值是:
- 新成员更容易按统一流程执行
- 降低 prompt 漂移
- 常见动作可以复用
Quick Start
如果你只想先跑通一次,可以直接按这个顺序:
OpenSpec + Codex
npm install -g @fission-ai/openspec@latest
npm i -g @openai/codex
cd your-project
openspec init
openspec update
codex
然后在 Codex 中输入:
先不要写代码。请按 OpenSpec 流程为“给订单列表增加批量导出 CSV”生成 spec、design 和 tasks。等我确认后再实现。
8.4 在 AI Coding 中的实践建议
先 spec,后 implementation
这是 SDD 在 AI coding 里最重要的一条。
如果一开始就让 agent 直接动手,通常更容易出现范围漂移。
一次只推进一个阶段
不要把“写 spec、做 plan、拆 tasks、写代码、补测试”塞进同一条 prompt。
拆阶段之后,agent 更稳定,审查也更容易。
把验收标准写进 spec
尤其是:
- 输入输出要求
- 失败场景
- 性能约束
- 数据一致性要求
这比单纯说“做个导出功能”有效得多。
把 agent 当执行者,不要当需求拥有者
需求边界、取舍原则、验收标准,最好还是由你或团队明确给出。
agent 更适合在这些边界内执行,而不是替你决定目标。
9. 如何选
选 OpenSpec,如果你更看重
- 快速落地
- 少流程阻力
- 在已有项目中自然接入
- 把 spec 当成 AI 协作护栏,而不是正式治理体系
选 Spec Kit,如果你更看重
- 团队统一规范
- 从需求到实现的完整留痕
- 强治理、强模板化、强扩展能力
- 把 SDD 作为正式工程方法推广
一个务实判断
如果你们团队还没有稳定采用 SDD,通常 OpenSpec 更容易先落地。
如果你们已经接受“先规范、后计划、再实施”的节奏,并愿意维护更多 artifact,通常 Spec Kit 的长期收益更大。
10. 总结
从 SDD 的角度看,这两个项目不是简单的“谁更强”,而是代表了两种不同落地方向:
- OpenSpec:把 SDD 做轻,优先解决“怎么尽快在 AI 编码里用起来”
- Spec Kit:把 SDD 做全,优先解决“怎么把 spec 驱动开发变成稳定工程体系”
如果你是个人开发者或小团队,且项目已经存在,OpenSpec 往往更顺手。
如果你是多人协作团队,想把 SDD 正式纳入研发流程,Spec Kit 通常更合适。
11. 参考来源
- OpenSpec GitHub README: https://github.com/Fission-AI/OpenSpec/
- Spec Kit GitHub README: https://github.com/github/spec-kit