GitHub 上的 Spec 驱动开发:从 Vibe Coding 到按图纸施工

当 AI 写代码越来越快,「写得对不对」成了真正的瓶颈。Spec-Driven Development(规格驱动开发)正在把「需求文档」从一次性脚手架变成可执行的工程产物。


背景:Vibe Coding 的尽头是 Spec Coding

过去一年,AI 编程工具(Cursor、Claude Code、Copilot)让「写代码」的门槛骤降。但随之而来的是一个普遍困境:

  • AI 一口气生成几百行代码,跑起来才发现需求理解有偏差
  • 多轮对话后,最初的意图被稀释,代码偏离方向
  • 没有结构化的需求记录,复盘和迭代全靠记忆

Spec-Driven Development 的核心命题:让 AI 按「规格说明书」施工,而不是凭感觉写代码。规格(Spec)不再是写完就扔的脚手架,而是贯穿开发全生命周期的可执行资产。


主流项目对比

项目 Star 数 出品方 核心定位 适用场景
obra/superpowers ~197k Jesse Vincent (obra) 强制纪律的方法论框架,七阶段流水线 个人/小团队,追求极致规范
github/spec-kit ~113k GitHub 官方 规格驱动开发工具包,CLI + Slash 命令 企业级,多 AI 助手集成
bmad-code-org/BMAD-METHOD ~34k 社区 完整 AI 敏捷开发框架 团队级敏捷协作
Fission-AI/OpenSpec ~29k 社区 开放 Spec 规范 规范研究/跨工具对齐
garrytan/gstack --- YC CEO Garry Tan 个人工作流模板 快速启动新项目

深度解析:两个标杆项目

1. obra/superpowers --- 强制纪律的方法论

哲学:不是「给你工具」,而是「强制你按规则走」。

七阶段强制流水线(v5.1.0):

复制代码
Brainstorm(头脑风暴)
  ↓
Spec(编写规格说明)
  ↓
Plan(拆解为可执行任务)
  ↓
TDD(红→绿→重构,强制循环)
  ↓
Subagent Dev(子 agent 实现)
  ↓
Review(两阶段审查:规格合规 + 代码质量)
  ↓
Finalize(交付前最终验证)

三条 Iron Law

  1. 测试优先:若 agent 在写测试之前就开始写实现代码,强制删除,要求从测试重新开始
  2. 证据非声称:不允许「应该可以工作」的假设,必须验证
  3. 拒绝外部贡献新 skill:保持方法论纯度,避免稀释

支持平台:Claude Code、Cursor、Copilot、Gemini CLI、Windsurf 等 8+ 平台。

安装

bash 复制代码
npx skills add obra/superpowers -g -y

2. github/spec-kit --- GitHub 官方押注的未来

哲学:让规格(Spec)成为软件开发的第一公民,代码是规格的产物。

五阶段工作流

复制代码
Constitution(宪章:项目原则/编码标准)
  ↓
Specify(需求:what & why,不涉及技术栈)
  ↓
Plan(技术方案:技术栈 + 架构 + 模块设计)
  ↓
Tasks(任务拆解:可执行任务列表)
  ↓
Implement(执行:按任务生成代码)

核心 Slash 命令

命令 作用
/speckit.constitution 建立项目宪章(编码标准、原则、约束)
/speckit.specify 描述要构建什么(what/why)
/speckit.plan 制定技术实现方案
/speckit.tasks 拆解为具体任务列表
/speckit.implement 执行任务,生成代码
/speckit.clarify 澄清模糊需求(plan 之前运行)
/speckit.analyze 跨产物一致性分析
/speckit.checklist 生成质量检查清单

支持的 AI 助手(截至 v0.11.6):

AI 助手 CLI 选项 支持级别
Claude Code --ai claude ✅ 完整支持
GitHub Copilot --ai copilot ✅ 完整支持
Cursor --ai cursor ✅ 完整支持
Gemini CLI --ai gemini ✅ 完整支持
Windsurf --ai windsurf ✅ 完整支持
Qwen Code --ai qwen ✅ 完整支持
Codex CLI --ai codex ⚠️ 有限支持

安装

bash 复制代码
# 推荐:持久安装
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git

# 初始化项目
specify init my-project --ai claude

# 现有项目原地初始化
specify init --here --ai copilot

项目结构(初始化后):

复制代码
my-project/
├── .github/
│   ├── agents/
│   └── prompts/
├── .specify/
│   ├── memory/
│   │   └── constitution.md
│   ├── scripts/
│   └── templates/
├── specs/
│   └── (功能目录)

工作流拓扑图

#mermaid-svg-oXRCamDi4GJcQ86x{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oXRCamDi4GJcQ86x .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oXRCamDi4GJcQ86x .error-icon{fill:#552222;}#mermaid-svg-oXRCamDi4GJcQ86x .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oXRCamDi4GJcQ86x .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oXRCamDi4GJcQ86x .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oXRCamDi4GJcQ86x .marker.cross{stroke:#333333;}#mermaid-svg-oXRCamDi4GJcQ86x svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oXRCamDi4GJcQ86x p{margin:0;}#mermaid-svg-oXRCamDi4GJcQ86x .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oXRCamDi4GJcQ86x .cluster-label text{fill:#333;}#mermaid-svg-oXRCamDi4GJcQ86x .cluster-label span{color:#333;}#mermaid-svg-oXRCamDi4GJcQ86x .cluster-label span p{background-color:transparent;}#mermaid-svg-oXRCamDi4GJcQ86x .label text,#mermaid-svg-oXRCamDi4GJcQ86x span{fill:#333;color:#333;}#mermaid-svg-oXRCamDi4GJcQ86x .node rect,#mermaid-svg-oXRCamDi4GJcQ86x .node circle,#mermaid-svg-oXRCamDi4GJcQ86x .node ellipse,#mermaid-svg-oXRCamDi4GJcQ86x .node polygon,#mermaid-svg-oXRCamDi4GJcQ86x .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oXRCamDi4GJcQ86x .rough-node .label text,#mermaid-svg-oXRCamDi4GJcQ86x .node .label text,#mermaid-svg-oXRCamDi4GJcQ86x .image-shape .label,#mermaid-svg-oXRCamDi4GJcQ86x .icon-shape .label{text-anchor:middle;}#mermaid-svg-oXRCamDi4GJcQ86x .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oXRCamDi4GJcQ86x .rough-node .label,#mermaid-svg-oXRCamDi4GJcQ86x .node .label,#mermaid-svg-oXRCamDi4GJcQ86x .image-shape .label,#mermaid-svg-oXRCamDi4GJcQ86x .icon-shape .label{text-align:center;}#mermaid-svg-oXRCamDi4GJcQ86x .node.clickable{cursor:pointer;}#mermaid-svg-oXRCamDi4GJcQ86x .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oXRCamDi4GJcQ86x .arrowheadPath{fill:#333333;}#mermaid-svg-oXRCamDi4GJcQ86x .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oXRCamDi4GJcQ86x .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oXRCamDi4GJcQ86x .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oXRCamDi4GJcQ86x .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oXRCamDi4GJcQ86x .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oXRCamDi4GJcQ86x .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oXRCamDi4GJcQ86x .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oXRCamDi4GJcQ86x .cluster text{fill:#333;}#mermaid-svg-oXRCamDi4GJcQ86x .cluster span{color:#333;}#mermaid-svg-oXRCamDi4GJcQ86x div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oXRCamDi4GJcQ86x .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oXRCamDi4GJcQ86x rect.text{fill:none;stroke-width:0;}#mermaid-svg-oXRCamDi4GJcQ86x .icon-shape,#mermaid-svg-oXRCamDi4GJcQ86x .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oXRCamDi4GJcQ86x .icon-shape p,#mermaid-svg-oXRCamDi4GJcQ86x .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oXRCamDi4GJcQ86x .icon-shape .label rect,#mermaid-svg-oXRCamDi4GJcQ86x .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oXRCamDi4GJcQ86x .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oXRCamDi4GJcQ86x .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oXRCamDi4GJcQ86x :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 追求强制纪律
追求官方生态
团队级敏捷
需求输入
选择工具
superpowers

七阶段流水线
spec-kit

五阶段工作流
BMAD-METHOD

AI敏捷框架
Brainstorm
Spec
Plan
TDD 红绿重构
Subagent Dev
Review
Finalize
Constitution
Specify
Clarify
Plan
Tasks
Analyze
Implement
交付


选型建议

选 superpowers,如果你

  • 一个人或小团队,希望有严格纪律约束
  • 使用 Claude Code 作为主要 AI 助手
  • 愿意接受「强制流水线」而不是可选工具

选 spec-kit,如果你

  • 希望与企业级工具链(Copilot、Claude Code)深度集成
  • 需要团队协作,多人共享同一套 spec 规范
  • 看重 GitHub 官方背书和长期维护

选 BMAD-METHOD,如果你

  • 需要完整的敏捷开发框架(不只是 spec 驱动)
  • 团队已有 Scrum/Agile 基础,想升级为 AI 敏捷

快速上手:以 spec-kit 为例

第一步:安装 CLI

bash 复制代码
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git

第二步:初始化项目

bash 复制代码
# 新项目
specify init my-project --ai claude

# 现有项目
cd existing-project
specify init --here --ai copilot

第三步:在 AI 助手中按序执行

复制代码
/speckit.constitution
# 定义项目原则:编码标准、测试标准、性能要求

/speckit.specify
# 描述功能需求:what & why(不写 how)

/speckit.clarify
# 澄清模糊点

/speckit.plan
# 制定技术方案:技术栈、架构、模块设计

/speckit.tasks
# 拆解任务

/speckit.implement
# 按任务执行,生成代码

总结

维度 Vibe Coding Spec-Driven Development
需求记录 散落在对话历史中 结构化 Spec 文件,可追踪
开发流程 跳跃式,易偏离 分阶段,每阶段有产出
代码质量 依赖 AI 临场发挥 测试先行,规格对齐
团队协作 个人化,难复用 Spec 可共享、可审查
长期维护 难(无规格文档) 易(Spec = 活文档)

一句话判断要不要上 Spec:如果你的 AI 编程项目已经超过 3 个文件,或者需要维护超过 2 周,Spec-Driven Development 会让你少走很多弯路。