下面是一份面向具体开源项目 github/spec-kit 的“入门指南 + 进阶最佳实践”整理与扩展,结合其仓库现有 README、文档结构与 Spec‑Driven Development(SDD)方法论进行体系化梳理,帮助你快速、规范、可持续地使用它。
Spec Kit 旨在把“规格(Spec)”置于开发核心:先沉淀项目原则与功能需求,再逐步澄清、规划、分解、实现,减少“一句话→直接写代码→返工”的低效模式。它通过一组 slash 命令与模板驱动你的 AI 编码代理(Copilot / Claude Code / Gemini CLI / Cursor 等)执行结构化过程,而不是一次性大模型代码生成。
核心价值:
- 意图优先:先写清楚“做什么 / 为什么”,再讨论“怎么做”
- 分阶段细化:constitution → spec → clarify → plan → tasks → analyze → implement
- 自动化生成并维护规范目录与实现工件
- 促进多人协作、分支化特性开发与可追溯
- Linux / macOS / WSL2
- Python 3.11+
- uv(Python 包与工具管理)
- Git
- 选用的 AI 代理(如:GitHub Copilot、Claude Code、Gemini CLI、Cursor、Qwen、Windsurf 等)
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git检查:
specify check一次性使用:
uvx --from git+https://github.com/github/spec-kit.git specify init <PROJECT_NAME>specify init my-app --ai copilot
# 当前目录:
specify init --here --ai copilot
# 非空目录强制合并
specify init --here --force --ai copilot常用可选参数:
--ai <agent>:选定代理--script sh|ps:脚本风格--no-git:跳过 git init--ignore-agent-tools:不检测代理工具--github-token <token>:企业/配额场景--debug:调试输出
| 命令 | 目标产物 | 关键文件 | 说明 |
|---|---|---|---|
/constitution |
项目治理/原则 | .specify/memory/constitution.md |
价值观、质量/性能/测试/演进守则 |
/specify |
功能规格(用户故事+需求) | specs/<feature>/spec.md |
只讨论“做什么与为什么” |
/clarify |
需求澄清答案集合 | spec.md Clarifications 区/或附录 |
覆盖未决点,减少后期返工 |
/plan |
技术实现计划 + 模块/数据/契约 | plan.md, data-model.md, contracts/* |
定栈、架构、API/事件等 |
/tasks |
可执行任务分解 | tasks.md |
标注依赖、并行、测试策略 |
/analyze |
跨文档一致性与覆盖分析 | 更新分析报告(通常写入 CLAUDE.md 或 spec 末) | 确认无遗漏/冲突 |
/implement |
代码+测试生成与迭代 | 代码树 + 更新任务状态 | 严格按 tasks 顺序执行 |
最佳实践:
/clarify必须在/plan之前(除非显式说明跳过)/analyze在/tasks后、/implement前,起“质检闸门”作用- 每个特性使用独立特性分支与编号(例如:
001-create-taskify)
初始化后常见结构(精简示例):
.specify/
memory/
constitution.md
scripts/
create-new-feature.sh
setup-plan.sh
update-claude-md.sh
specs/
001-create-taskify/
spec.md
plan.md
tasks.md
data-model.md
research.md
quickstart.md
contracts/
api-spec.json
signalr-spec.md
templates/
spec-template.md
plan-template.md
tasks-template.md
CLAUDE.md (或代理专属上下文)
要点:
specs/<编号-特性名>下分离“功能意图(spec)”与“技术细化(plan / data-model / contracts)”research.md支撑快速演进技术领域(例如 .NET Aspire、前端库)contracts/用于协议 / API / 实时通道说明(REST / WebSocket / SignalR 等)tasks.md驱动实现时序与 TDD 节奏
| 需求 | 建议 | 示例 |
|---|---|---|
| 严格序列 | 统一三位或四位递增 | 001-login, 002-kanban |
| 并行探索 | 派生分支加后缀 | 010-kanban-alt-a, 010-kanban-alt-b |
| 变更迭代 | 使用补丁标识 | 001-login-v2 或在 spec 内维护 Changelog |
| 作废 | 保留目录+在 spec 顶部标注 Deprecated | DEPRECATED: superseded by 014-auth-refactor |
| 维度 | 好的示例 | 常见反模式 |
|---|---|---|
| 用户故事 | “作为项目成员,我可以拖拽任务以更新其状态,以减少点击操作” | “实现拖拽功能” |
| 验收标准 | 条目化、可验证(Given/When/Then 或 bullet) | 模糊形容词(快速、友好、简单) |
| 范围界限 | “不含:外部 OAuth 登录;不做移动端适配” | 未说明不做什么,后期不断追加 |
| 术语表 | 明确“任务、项目、成员、看板列” | 词语复用概念漂移 |
| 权限/限制 | “评论仅作者可编辑/删除” | 等到实现时才讨论权限 |
| 数据约束 | “任务标题 ≤ 120 字符;评论不支持 Markdown” | 全靠实现阶段临时决定 |
- 先让模型列“未明确清单”(Unknowns matrix)
- 限制一轮问答数量(例如每批 5~10 个),防止上下文漂移
- 对回答写入
spec.md的 Clarifications 区域(保持可追溯) - 未回答的标记 TODO,避免
/plan误读 - 触发再澄清的典型信号:
- 数据实体之间的关系不完整
- 任务状态生命周期未闭合
- 错误/失败场景缺失
- 并发或并行场景模糊
在 plan.md 中添加固定分区:
- 架构简图(文字/ASCII/引用外部图)
- 模块边界(Boundary Contexts)
- 数据模型摘要(与
data-model.md互相引用) - 合同契约(API/事件/实时通道)
- 非功能需求映射(性能、可观测性、可测试性)
- 风险与假设
- 迭代与裁剪策略(MVP vs 后续增强)
契约文件(如 api-spec.json)后期可用于:
- Mock 生成
- 回归校验
- 文档站点(后续可接入 Redoc、Stoplight 之类)
任务编排字段(可在 tasks.md 中用结构化标记):
- [ ] T01 Schema 定义 (deps: -) (type: core) (test: unit + migration script)
- [ ] T02 API: POST /tasks (deps: T01) (test: contract + unit)
- [ ] T03 UI: 看板拖拽交互 (deps: T02) (test: e2e)
- [ ] T04 权限规则 & 审计 (deps: T02) (test: security)
- [ ] T05 性能初步基准 & 指标埋点 (deps: T02) (test: perf smoke)
最佳实践:
- 明确依赖(deps)→
/implement能正确排序 - 标注测试类型(unit/contract/e2e/security/perf)
- 大任务拆 ≤ 1~2 小时交付的粒度,减少上下文丢失
- 并行任务标记(如
parallel: true)给 AI 代理优化执行顺序
核对:
| 检查项 | 说明 |
|---|---|
| Spec vs Plan 一致性 | 是否出现未在 spec 提及的“幽灵需求” |
| Tasks 覆盖 | 每个关键需求/约束是否至少映射一个任务 |
| 数据模型冲突 | 命名/主键/关系是否与用户故事矛盾 |
| 风险空白 | 高风险区域(并发、持久化、权限)是否有研究/测试任务 |
| 非功能映射 | 性能/安全/可观测性是否体现在 tasks 中 |
执行前自检(可人工或让代理回答):
- Constitution 已存在且不为空
- Clarifications 已处理(无大量 TODO)
- Plan 中未留“待定(TBD)”关键段
- Tasks 全部具备测试策略标注
- 契约文件语法有效(若是 JSON/YAML 的 API Spec)
运行中:
- 监控是否出现“过度生成”(添加你未要求的第三方库/模块)
- 反复提示“遵循任务顺序,不要跳级或合并无关任务”
- 生成的测试必须先于或同步代码(保持 TDD/ATDD)
完成后:
- 运行本地测试 & 手工验证关键路径
- 对运行日志/浏览器 console 错误进行“二次对话”修复
- 生成初始 CHANGELOG(可在 feature spec 或单独
CHANGELOG.md)
| 频率 | 动作 | 说明 |
|---|---|---|
| 每个新特性 | /constitution(第一次)→ /specify → /clarify |
建立清晰意图与边界 |
| Clarify 完成后 | /plan → 复审 → /tasks |
保证覆盖与粒度 |
| 实施前 | /analyze |
形成“通过/阻塞”门 |
| 实施中 | /implement 分段执行 |
中途可人工插入研究任务 |
| 完成后 | 回顾 spec & plan | 标记偏差与下轮改进 |
| 每周 | 审查活跃特性目录 | 归档已合并,清理废弃编号 |
| 分支类型 | 命名 | 触发 | 合并策略 |
|---|---|---|---|
| 主干 | main |
稳定、可发布 | PR + 审阅 |
| 特性 | NNN-<slug> |
/specify 之后 |
Rebase / Squash |
| 探索/实验 | exp-<topic> |
创意/对比方案 | 不保证合并 |
| 修正 | fix-<issue> |
缺陷修复 | 快速审阅后合并 |
最佳实践:
- 在 spec 顶部记录:
Branch: 001-create-taskify - PR 描述引用:
Implements specs/001-create-taskify/spec.md
| 方向 | 可行实践 |
|---|---|
| 契约测试 | 引入 Schemathesis/Dredd 读取 contracts/api-spec.json |
| 架构防腐 | ADR(Architecture Decision Records)与 plan 互链 |
| 安全 | 静态依赖扫描集成(如 pip-audit, npm audit)+ “安全限制”部分写入 constitution |
| 可观测性 | 在 plan 中加入指标表(API p95、错误率、启动时间) |
| 回归审查 | Feature 合并后生成“Spec vs 实际产物差异报告” |
| 变更控制 | Commit lint 强制引用 spec 编号(如 feat(001): add drag&drop) |
| 陷阱 | 症状 | 预防 |
|---|---|---|
| 跳过 Clarify | 后期大量返工 | 设立“Clarify 完成”门(未完成不得 /plan) |
| Plan 过度堆叠 | 生成超出 MVP 的“未来功能” | Constitution 中增加“范围控制”原则 |
| Tasks 粒度过大 | /implement 生成卡住或上下文丢失 |
单任务 ≤ 100 行改动/≤2 小时 |
| Spec 与实现脱节 | 代码新增未更新 spec | 合并前执行“Spec 覆盖核对”脚本 |
| 代理过度自作主张 | 引入不必要框架/库 | 明确提示“最小依赖集”“拒绝未授权技术栈” |
| 研究漂移 | Research 写成百科漫谈 | Prompt:限定“列出不确定点→针对点搜索→更新 research.md” |
| 指标 | 说明 | 采集方式 |
|---|---|---|
| Clarification Completion Rate | Clarify 项完成占比 | 解析 spec Clarifications 段 |
| Task Traceability | Task 是否链接需求编号或用户故事 | 在 tasks.md 增加 ref: 标签 |
| Spec Drift | 合并后实现与 spec 不一致条目数 | 运行静态/契约对比脚本 |
| Over-Spec Ratio | Spec 中未实现条目 / 总条目 | 统计勾选状态 |
| Implementation Latency | /plan → /implement 完成平均时长 |
Git 提交时间差 |
| Churn per Feature | Feature 分支重复回滚/重写次数 | Git log 分析 |
SPECIFY_FEATURE:
- 在没有 Git 分支(或临时目录演练)下,手动指向当前特性目录
- 流程:设定 → 运行代理 → 执行
/tasks或/implement - 示例:
export SPECIFY_FEATURE=001-create-taskify
| 步骤 | 动作 | 目标 |
|---|---|---|
| 1 | 选择一个即将开发的新功能 | 避免一次性重构旧需求 |
| 2 | 初始化 Spec Kit 环境 | 引入脚手架与模板 |
| 3 | 手动补写 .specify/memory/constitution.md |
定义统一风格与质量门槛 |
| 4 | 为此新功能走完整流程(spec→clarify→plan→tasks→implement) | 试点验证 |
| 5 | 复盘:记录痛点与改进点 | 形成团队约定 |
| 6 | 为下一个特性复制成功模板 | 渐进推广 |
| 7 | 回填历史核心模块最低限度 spec | 提升可追溯范围 |
| 8 | 引入指标脚本+预提交或 CI 钩子 | 形成质量闭环 |
推荐固定章节:
- 使命与范围声明(Mission & Scope)
- 风格与代码规范(引用已有 lint / formatter)
- 测试金字塔策略(何时写单测、契约、e2e、性能)
- 性能预算(首屏渲染 / API p95 / 资源上限)
- 安全与权限(最小权限、输入消毒、审计日志)
- 依赖策略(允许 vs 禁止的库清单;版本升级节奏)
- 可观测性(日志结构、指标命名、错误分级)
- 变更治理(需求 → 任务 → 实现的强制回链)
- 风险应对(快速回滚标准 / 探索性分支策略)
specs/
012-kanban-dnd/
spec.md # 用户故事 + Clarifications + 验收清单
plan.md # 架构/模块/数据流/接口/性能策略
data-model.md # ER/字段约束
contracts/
api-spec.json # 任务 CRUD / 列表 / 状态更新
events.md # 可选:实时更新事件
research.md # 针对拖拽库/状态同步策略
tasks.md # 可执行任务流水线+测试策略
quickstart.md # 针对新成员/测试人员
| 项 | 是否达成 |
|---|---|
| 有 constitution 并引用于后续 prompt | |
| 最新特性 spec 有 Clarifications(无大量 TODO) | |
| Plan 未出现“待定”关键段(如数据库选型) | |
| Tasks 均带测试策略标记 | |
| Contracts 已验证(无语法错误) | |
/analyze 报告通过(无严重冲突) |
|
| 实现完成后 PR 描述引用对应 spec 路径 | |
| Merge 前手动或自动生成变更说明(Changelog 或 Release Note) |
Spec Kit 把“构思 → 澄清 → 设计 → 分解 → 执行”嵌入一个可重复、可审查、可升级的循环。成功的关键不只是运行命令,而是:
- 建立严格的信息分层(what/why 与 how 分离)
- 用 Clarify 阶段拉平不确定性
- 用 Analyze 做一致性护栏
- 用可观察的任务清单驱动真正的“结构化 AI 协作”
- 将质量/性能/安全升级为显式条款(constitution 化)
只要坚持这一套节奏,你会发现:
- 返工率下降
- 需求浮动更容易被识别
- 新成员可在数分钟内理解上下文
- AI 生成代码更贴近意图,少“跑偏”
如果你已经在某个现有仓库里想加入 Spec Kit,可以直接从“一个新特性试点”开始,再逐步回填历史核心模块的 spec。也可以把你当前的目录或特性想法贴出来,我再帮你落地映射与裁剪策略。祝使用顺利!