Spec Kit 工作流程 · 实践落地版
GitHub Spec Kit · Spec-Driven Development

AI 原生软件开发工作流程
实践落地版

以 Spec Kit(specify CLI)为工具底座,把「写规格 → 生成计划 → 拆解任务 → 执行实现 → 收敛验证」变成一套可执行、可检查、可复制的日常工作流。本页所有命令均可在项目目录中直接运行。

工具链 specify CLI(uv 安装)
支持智能体 30+(Copilot / Claude Code / Gemini / Codex / Kilo Code…)
核心命令 7 条 /speckit.* 斜杠命令
当前版本 1.0.0(dogfooding:Spec Kit 用自身开发自己)

0SDD 是什么:一次权力倒置§

过去 30 年,代码是真理,规格是脚手架——写完就扔。SDD(Spec-Driven Development)把关系倒过来:规格是唯一真理源,代码是规格的表达式。维护软件 = 演进规格;调试 = 修复生成错误代码的规格;重构 = 为清晰度重组计划。

传统开发:代码是真理 PRD / 设计文档(写完即弃,很快过时) 人工写代码(文档与代码逐渐脱节) 缺口:意图 ⇄ 实现永远对不齐 规格 → 死文档,代码 → 唯一现实 SDD:规格是真理,代码是表达式 可执行规格 spec.md(自然语言,唯一真理源) 实现计划 plan.md + 任务 tasks.md(AI 生成) 代码由规格生成 —— 没有缺口,只有转换
图 0-1 · 传统开发与 SDD 的根本差异:SDD 用「规格 → 计划 → 代码」的生成链消除意图与实现之间的缺口

原则六大核心原则

  • 规格是通用语言:spec 是第一工件,代码是其在特定语言/框架下的表达
  • 可执行规格:必须精确、完整、无歧义到足以生成可运行系统
  • 持续精炼:一致性检查不是一次性门禁,而是贯穿全程
  • 研究驱动上下文:调研智能体持续收集技术选型与组织约束
  • 双向反馈:生产环境的事故与指标回流为规格的修订输入
  • 分支探索:同一份规格可生成多个实现方案做并行实验

适用三类开发场景

  • 0 → 1 绿地开发:从高层需求直接生成规格,构建生产级应用
  • 创造性探索:同一规格并行生成多套技术栈/UX 方案,快速试错与重启
  • 迭代增强(棕地):在既有系统上增量加功能、现代化改造旧系统

关键区分:升级 Spec Kit 工具 ≠ 演进规格工件。工具升级刷新托管文件,specs/ 下的工件只在预期行为变化时更新。

1环境初始化:10 分钟跑通§

前置条件:安装 uv。一条命令装 CLI,一条命令初始化项目,从此该项目的 AI 编码智能体就拥有了完整的 SDD 斜杠命令。

# 1. 安装 Specify CLI(用具体 release tag,保留前缀 v)
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z
# 或直接从 PyPI:uv tool install specify-cli

# 2. 初始化项目(--integration 选择你的 AI 编码智能体)
specify init my-project --integration copilot
cd my-project

# CI / 无键盘环境:加 --non-interactive,非空目录再加 --force
specify init --here --force --non-interactive --integration claude

# CLI 自管理
specify self check          # 只检查,不改任何东西
specify self upgrade --dry-run  # 预览升级动作
specify self upgrade        # 原地升级(自动识别 uv tool / pipx)
命令作用备注
specify init <dir> --integration <agent>初始化项目,写入 .specify/ 与智能体命令目录30+ 智能体可选;specify integration list 查看全部
specify init --here --force在当前目录初始化(棕地项目)CI 场景配合 --non-interactive --ignore-agent-tools
specify extension add <name>安装扩展(bug、assess、agent-context…)specify extension search 先搜索
specify preset add <name>安装预设(覆盖模板与术语)可多层叠加,优先级排序
specify bundle install <id>一键安装整套角色化配置bundle info 先看装什么,幂等可卸载

验证初始化成功的标志

  • 项目根出现 .specify/ 目录(模板、脚本、集成清单)
  • 智能体命令目录出现斜杠命令文件,如 .claude/commands/speckit.*.md 或 .github/prompts/
  • 在项目里启动智能体,输入 /speckit. 能补全出 constitution / specify / plan / tasks / implement / converge 等命令

2项目宪法:一次性奠基,全程受约束§

每个项目只做一次:/speckit.constitution 生成项目级治理原则(存于 .specify/memory/constitution.md)。它像「架构 DNA」——此后每份实现计划都要通过宪法门禁(Phase -1 Gates),不通过就必须在「Complexity Tracking」里书面解释为什么。

# 一次性建立项目原则(可随时修订,但需走修订流程)
/speckit.constitution 创建聚焦代码质量、测试标准、用户体验一致性与性能要求的项目原则
条款主题约束含义(落到计划模板的门禁)
ILibrary-First每个功能必须先以独立库形态存在——从第一天就强制模块化
IICLI 接口库必须暴露文本输入/输出 + JSON 的 CLI 接口——可观测、可测试
IIITest-First(不可协商)先写测试 → 用户确认 → 测试确认失败(红)→ 才允许写实现
IV–VI项目自定义由各项目自填:安全边界、集成测试、版本策略、破坏性变更等
VII简单性初始实现最多 3 个项目(projects),不做未来式设计
VIII反抽象直接用框架能力,不包一层壳;单一模型表示
IX集成优先测试真实数据库优于 mock、真实服务实例优于 stub;契约测试先行

要点宪法是写给 AI 看的护栏

宪法的真正价值在于跨模型一致性:不同的 AI 模型(甚至明年更强的模型)在同一份宪法约束下,生成的代码在架构上彼此兼容。原则本身不可变,应用方式可演进——修订需记录理由、评审通过、评估向后兼容。

3七步核心工作流:从一句话到可交付§

这是每天都会走的主干道。前四步产物全部落在 specs/<branch>/ 目录并在功能分支上版本化;implement ⇄ converge 循环直到收敛报告输出 Converged。

constitution 一次性 · 项目原则 specify 建分支 + spec.md clarify 可选但强烈推荐 plan 技术方案 + 门禁 tasks 可执行任务清单 analyze 一致性检查门禁 implement 按任务执行实现 converge 对照 spec/plan/tasks 收敛 ✓ Converged 交付 / 合并 / 评审 循环,直到 Converged 收敛
图 3-1 · Spec Kit 核心工作流:虚线框为质量门禁(可选命令但生产实践强烈建议保留),紫色循环是 implement ⇄ converge 迭代
STEP 1

/speckit.specify —— 定义要建什么

what & why,不谈技术栈
输入
一句功能描述(用户提示词)
产出
语义化分支 + specs/<branch>/spec.md
自动完成
扫描现有 spec 分配功能编号(001…)、创建分支、套模板生成结构化需求
关键纪律
模板强制「聚焦 WHAT/WHY,禁止 HOW」;不明确处必须标 [NEEDS CLARIFICATION],禁止瞎猜
STEP 2

/speckit.clarify —— 消灭规格里的模糊地带

可选 · 建议在 plan 之前
输入
spec.md 中的所有 [NEEDS CLARIFICATION] 标记
产出
逐条澄清后的完整 spec(决策记录在案)
实践价值
把传统开发中「几天会议」压缩为与 AI 的数小时聚焦对话;歧义在计划前暴露的成本远低于实现后
验收标准
spec 中不再残留任何未决标记
STEP 3

/speckit.plan —— 技术实现计划

这里才谈技术栈与架构
输入
spec.md + 你的技术选型指令
产出
plan.md、research.md(选型对比)、data-model.md、contracts/(API 契约)、quickstart.md(验证场景)
强制检查
Phase -1 宪法门禁:简单性 ≤3 项目?无未来式设计?直接用框架?契约已定义?不通过须记录 Complexity Tracking
关键纪律
计划保持高层可读;代码片段与细节下沉到 implementation-details/ 文件;每个技术选择都可追溯到具体需求
STEP 4

/speckit.tasks —— 拆成可执行任务

契约与实体 → 具体任务
输入
plan.md(必需)+ data-model.md / contracts/ / research.md(若有)
产出
tasks.md——独立任务标 [P] 可并行,并给出安全并行分组
顺序约束
测试先行写进任务序:先 contracts/ → 契约测试 → 集成 → e2e → 单元 → 再写实现让测试通过
可选延伸
/speckit.taskstoissues 把任务列表转成 GitHub Issues 跟踪
STEP 5

/speckit.analyze —— 跨工件一致性审查

tasks 之后 · implement 之前的最后门禁
输入
spec + plan + tasks 三份工件
产出
一致性 & 覆盖度报告:歧义、矛盾、任务缺口、宪法违背项
定位
不是一次性放行检查,而是持续精炼机制的一环;此时修复成本最低
验收标准
报告中无阻断项(blocker)
STEP 6

/speckit.implement —— 执行全部任务

AI 按计划与任务逐条实现
输入
tasks.md 及全部设计工件
产出
功能分支上的实现代码 + 通过的测试
纪律
严格按 tasks.md 顺序执行;测试先红后绿;不做任务清单之外的「顺手」功能
迭代
实现后立即进入 converge,而不是先自己 review
STEP 7

/speckit.converge —— 收敛验证,直到 Converged

实现 ⇄ 规格的闭环
输入
当前代码库 + spec / plan / tasks
产出
偏差评估报告;未完成项自动追加为新任务
循环规则
implement → converge →(新任务)→ implement → …,直到报告 Converged
收敛后
进入常规 PR / 评审 / 合并流程——spec 工件随代码一起被评审与版本化

实操一条完整的会话样例

# ① 一次性
/speckit.constitution 项目原则:代码质量、测试标准、UX 一致性、性能

# ② 每个功能的标准节拍
/speckit.specify 构建一个照片相册应用:相册按日期分组、主页拖拽重排、
                 相册不嵌套、相册内照片以磁贴网格预览
/speckit.clarify
/speckit.plan 使用 Vite + 原生 HTML/CSS/JS,尽量少依赖库;
              照片不上传服务器,元数据存本地 SQLite
/speckit.tasks
/speckit.analyze
/speckit.implement
/speckit.converge      # 循环直至 Converged

4工件地图:specs/ 目录里到底有什么§

SDD 的全部智慧都物化在 specs/<branch>/ 里。读懂这张地图,你就能 review 别人的规格,也能诊断自己的流程卡在哪一步。

specs/003-chat-system/
├── spec.md            # 功能规格:用户故事、验收标准、[NEEDS CLARIFICATION]
├── plan.md            # 实现计划:技术决策 + 理由 + Phase -1 宪法门禁
├── research.md        # 选型调研:库对比、性能基准、安全影响
├── data-model.md      # 数据模型:实体、关系、schema
├── contracts/         # API 契约:WebSocket 事件、REST 端点(实现前先定)
├── quickstart.md      # 关键验证场景:跑通这些 = 功能成立
├── tasks.md           # 任务清单:[P] 并行标记 + 执行顺序
└── implementation-details/  # 从 plan 下沉的代码细节,保持计划可读
工件生成命令一句话检验「写对了没」
spec.mdspecify + clarify只讲 what/why;测试可验证;无残留 [NEEDS CLARIFICATION]
plan.mdplan每个技术选择有理由且有需求回链;门禁全过或有记录的豁免
contracts/plan契约测试能在零实现时编写并失败(红)
tasks.mdtasks每条任务可独立验收;测试任务排在实现任务之前;无投机功能
quickstart.mdplan照着做 10 分钟能验证核心价值

5质量护栏:模板如何驯服 LLM§

Spec Kit 的秘密不在命令本身,而在模板——每份模板都是一份精心设计的 prompt,用结构性约束把 LLM 从「有创意的作者」变成「有纪律的规格工程师」。理解这七道护栏,你就能举一反三地写自己的模板。

#护栏机制防住什么落地观察点
1抽象层级隔离
spec 聚焦 WHAT/WHY,明令禁止 HOW
LLM 过早跳到「用 React + Redux 实现」spec.md 中不应出现任何技术栈词
2强制不确定标记
[NEEDS CLARIFICATION: …]
LLM 「合理但错误」的自行假设grep 一下 spec 里的标记数量
3清单即规格的单元测试遗漏边界情况、不可测的成功标准checklist 全勾才算 spec 完成
4Phase -1 宪法门禁过度工程:多层抽象、投机性项目结构不通过必须在 Complexity Tracking 留痕
5层级化信息架构
计划高层可读,细节下沉子文件
规格沦为不可读的代码堆场plan.md 单屏能看完主结构
6测试先行的文件序
契约 → 契约测试 → 集成 → e2e → 单元 → 实现
先生成代码再「补测试」git 提交顺序反映这个序列
7禁止投机功能「以后可能用到」的镀金功能每个功能可回溯到具体用户故事

用 /speckit.checklist 生成自定义质量清单

内置清单之外,可以按领域生成专属检查表——作者称之为「给英文写的单元测试」:规格本身也是代码,也需要测试。

# 例:为安全敏感功能生成安全规格清单
/speckit.checklist 生成覆盖认证、授权、数据脱敏与审计日志的规格质量清单

6两条分支工作流:Bug 修复 与 想法评估§

主干流程之外,官方捆绑的两个可选扩展覆盖最高频的日常场景。均为 opt-in,specify extension add 后即装。

🐞 Bug 扩展:assess → fix → test

防的是「智能体从报错直接跳到补丁」:没有验证诊断、没确认修复了原始症状。bug 扩展让每次修复范围受控、基于证据、从根因到验证全程留痕。

# 一次性安装
specify extension add bug

# 三步修复一个 bug
/speckit-bug-assess "用户登录时崩溃" slug=login-crash   # 评估:定位根因
/speckit-bug-fix slug=login-crash                       # 修复:针对已评估的根因
/speckit-bug-test slug=login-crash                      # 测试:确认症状消失

💡 Assess 扩展:intake → research → define → shape → decide

好想法值得先拿证据再承诺——无论最后做不做软件。assess 扩展把一个原始想法变成有据可查的 go / needs-clarification / kill 决策。

# 一次性安装
specify extension add assess

# 五步评估一个想法
/speckit-assess-intake "离线模式" slug=offline-mode       # ① 立项登记
/speckit-assess-research slug=offline-mode               # ② 收集支持/反对证据
/speckit-assess-define slug=offline-mode                 # ③ 定义问题、目标、成功指标
/speckit-assess-shape slug=offline-mode                  # ④ 塑形候选方案与权衡
/speckit-assess-decide slug=offline-mode                 # ⑤ 裁决:做 / 澄清 / 砍掉

衔接两条流都通向主干

assess 裁决为 go 的想法,直接交给 /speckit.specify 进入主干开发;bug 修复中发现更大范围的设计缺陷,也应收敛回 spec 层面处理。整张工作流网从此闭环。

7团队协作落地:规格进 Git,评审进 PR§

SDD 天然支持团队流程:规格是可版本化、可分支、可合并的工件——产品经理改验收标准,实现计划自动标记受影响的技术决策;架构师发现更优模式,PRD 反向更新。

实践做法工具支撑
功能分支每个功能一个分支,spec/plan/tasks 与代码同分支演进/speckit.specify 自动建语义化分支
规格评审PR 同时评审规格与实现;「改需求 = 改 spec + 重新生成」工件都是 Markdown,天然进 Git diff
任务跟踪tasks.md → GitHub Issues,人在 Issue 层面认领与跟踪/speckit.taskstoissues
并行开发tasks 标 [P] 的任务组可分给多人/多智能体并行/speckit.tasks 的并行分组
棕地演进工具升级与规格演进分离;行为变化才更新 specs/Evolving Specs 指南
角色配置PM / BA / 安全研究员 / 开发者各装一套角色化命令栈specify bundle install
自举(dogfooding)Spec Kit 团队用 Spec Kit 开发 Spec Kit:重大功能走 assess → SDD 全流程参考其 feature-assessment workflow

心智模型角色重新分工

开发者的时间从「机械翻译」(把需求翻译成代码)转向创造力、实验与批判性思维:定义验收标准、评审生成方案、追问边界情况、决定何时推翻重来(0 → 1 → 1′ → 2 → 3 → N 的重生式迭代)。

8定制体系:把 Spec Kit 变成你的流程§

四层优先级栈,运行时自顶向下解析,取第一个命中的模板——这意味着你可以不动核心、不建分支地定制任何环节。

模板解析顺序:自顶向下,第一个命中即生效(运行时) ① 项目本地覆盖 .specify/templates/overrides/ 单项目一次性微调,最高优先级 ② 预设 Presets .specify/presets/templates/ 改变「现有流程怎么跑」:合规格式、领域术语、方法论适配、强制门禁 ③ 扩展 Extensions .specify/extensions/templates/ 新增「原来没有的能力」:新命令、新工作流、外部工具集成 ④ 核心 Spec Kit .specify/templates/(内置 SDD 命令与模板) 默认行为兜底;无任何覆盖/预设/扩展时生效 优先级递减
图 8-1 · 模板解析优先级栈:命令文件在安装时写入智能体目录;同名命令取最高优先级版本,卸载后自动回退到下一层
你的目标用哪个命令
加一个全新命令或工作流Extensionspecify extension add <name>
改 spec/plan/tasks 的格式(如合规追溯、本地化语言)Presetspecify preset add <name>
集成外部工具(Jira、内部平台…)Extension同上;也可自研,见 extensions/EXTENSION-DEVELOPMENT-GUIDE.md
强制组织/监管标准(安全审查门禁、测试先行排序)Preset同上;可多层叠加并按优先级排序
单项目临时改一处模板Project-local override直接放 .specify/templates/overrides/
给整个团队一键配齐角色化环境Bundlespecify bundle search → info → install

保障Bundle 的四条硬承诺

  • 透明:bundle info 展示的内容 = install 实际安装的内容
  • 幂等:安装可重复,范围限于项目根目录
  • 安全卸载:remove 绝不触碰其他已装 bundle 仍需要的组件
  • 离线可用:全部命令可对本地或固定版本源离线执行

9每日落地清单§

把流程刻进肌肉记忆。可打印贴在工位,也可作为团队 code review 的前置自查。

🚀 新项目上线前(一次性)

  • uv + specify CLI 安装完成,specify self check 无更新提示
  • specify init 完成,斜杠命令在智能体里可用
  • /speckit.constitution 已建立,条款覆盖质量/测试/性能/安全
  • 按需安装扩展(bug / assess)与团队预设

🔁 每个功能的标准节拍

  • spec 只写 what/why,技术词零出现;歧义全部 [NEEDS CLARIFICATION]
  • clarify 跑完,标记清零
  • plan 过宪法门禁;豁免项在 Complexity Tracking 有记录
  • tasks 测试任务先于实现任务;[P] 并行分组合理
  • analyze 无阻断项
  • implement 严格按任务序执行,先红后绿
  • converge 报告 Converged 后才发起 PR

📅 每周团队例会

  • 抽查一份 spec:能否独立读懂?验收标准可测吗?
  • 复盘 converge 循环次数异常多的功能——是规格质量问题还是计划质量问题?
  • 生产事故/指标是否回流为新的规格约束(双向反馈)?
  • 宪法是否有需要走修订流程的演进项?

10常见陷阱与对策§

陷阱症状对策
跳过 constitution 直接开写各功能风格漂移,多智能体产出互不兼容新项目第一件事就是 /speckit.constitution;门禁未建,纪律无处安放
spec 里混进技术栈换实现方案时被迫重写规格回读模板第 1 道护栏;技术选型只出现在 /speckit.plan 的参数里
让 AI 替你猜生成物「看起来对」但假设错误,返工在实现后期爆发要求所有假设显式标记 [NEEDS CLARIFICATION],clarify 阶段逐条清零
把 plan 写成代码堆计划不可读,评审失焦细节下沉 implementation-details/;plan.md 保持一屏主结构
跳过 analyze 直奔 implement三份工件互相矛盾,converge 循环次数暴涨把 analyze 当作不可跳过的门禁——此时修复最便宜
过度工程三层抽象包装框架、投机性「以后要用」的模块宪法第 VII/VIII 条 + 门禁;每次复杂度提升必须书面辩护
mock 一切单元测试全绿,集成即挂宪法第 IX 条:真实数据库优于 mock,契约测试先行
converge 一次不过就人工修代码代码与 spec 悄悄脱节,真理源失去意义回到 implement ⇄ converge 循环;修代码之前先问「规格还是计划错了」

底线一句话记住 SDD

不要让代码成为真理。当你想直接改代码时,先问:这个改动应该发生在 spec 层、plan 层还是 task 层?答案几乎从不在代码层。