目标:为团队定制一套可分发、可治理的 SDD(规范驱动开发)技能集,覆盖「需求拷问 → 规范 → 拆票 → 实现 → 审查 → 归档」全链路,并与设计流水线(DESIGN.md)打通。
为什么底座选 mattpocock skills,而不是 OpenSpec 或 spec-kit?
三条不可妥协的定制原则(源自实践复盘):
CONTEXT.md、决策进 ADR、环境进 docs/agents/,技能的每个阶段都要有明确的落盘动作。ready-for-agent 状态、lint 0/0、双轴审查,全部固化进技能,不依赖人的自觉。| 维度 | mattpocock/skills | OpenSpec | spec-kit |
|---|---|---|---|
| 定位 | 可组合技能集,反对全流程接管 | 轻量 spec 变更管理(npm CLI) | SDD 方法论 + 脚手架 CLI(Specify) |
| 核心结构 | 三层技能:编排层(grill-with-docs → to-spec → to-tickets → implement)/ 纪律层(tdd、code-review、diagnosing-bugs)/ 原语层(grilling、domain-modeling) | 双区模型:openspec/specs/(当前事实源,按 capability)+ openspec/changes/(进行中提案:proposal / design / tasks / delta) |
.specify/(宪法 + 模板 + 脚本)+ specs/<NNN-feature>/(spec / plan / tasks / checklists) |
| 工作流 | idea → ship:拷问访谈(状态化,实时写 CONTEXT.md/ADR)→ spec → 曳光弹垂直切片 ticket → 每票独立会话 implement(内嵌 TDD 红绿循环 + 双轴 code-review) | proposal → specs delta(可并行 design)→ tasks → apply → archive;「Specs describe current → Changes propose deltas → Archive merges」 | constitution → specify → clarify(9 类歧义、限 5 问)→ plan(宪法检查门禁)→ tasks → analyze(只读一致性分析) → implement → converge |
| 质量门 | ready-for-agent 状态标签;spec/ticket 模板内嵌(XML 风格块);双轴审查刻意不合并排序 |
validate --strict:Zod schema 校验(requirement 须含 SHALL/MUST、scenario 须四级标题、单 change ≤10 delta);archive 原子合并、失败可回滚 |
Constitution Check(plan 前后各一次,违反须论证);checklists 门禁(implement 前检查);analyze 输出 CRITICAL~LOW 分级报告 |
| 防漂移机制 | 文档四段式规范、双桶治理(README 与 plugin.json 必须同步) | delta 只描述差异(ADDED/MODIFIED/REMOVED);MODIFIED 须完整拷贝原需求块且标题精确匹配;归档是唯一写入主 spec 的路径 | 宪法语义化版本演进;「宪法冲突自动 CRITICAL,只能改产物不能稀释原则」 |
| 分发 | claude plugins install(仓库即市场)+ npx skills add;changesets 管版本 |
openspec init --tools 为 40+ AI 工具生成 skills/commands,指令文本单一来源防多工具漂移 |
uv tool install;45+ 代理集成注册表(INTEGRATION_REGISTRY),占位符令牌替换调用前缀 |
| 最适合借鉴的 | 分层架构、技能组合规则、模板内嵌、状态机 | delta 格式、validate 校验、archive 归档、change 隔离并行 | 宪法门禁、analyze 一致性分析、clarify 歧义分类法 |
两篇实践记录提供了三个工具仓库里没有的实战约束,直接转化为定制要求:
| 实践发现 | 教训 | 转化为定制要求 |
|---|---|---|
| grill-with-docs 的状态化访谈(长辈计算器 4 轮 27 问) | 术语敲定即落盘 CONTEXT.md,比批量补交可靠;每轮访谈后知识不丢失 | 公司版 grill 技能必须强制「实时写盘」,并约定 CONTEXT.md 只记术语与共识、不含实现细节 |
| spec 质量取决于术语表 | 36 条用户故事全部使用 CONTEXT.md 词汇,spec 与术语表冲突时以术语表为准 | to-spec 技能增加自检项:「spec 中每个领域名词必须能在 CONTEXT.md 中找到定义」 |
| ticket 是实现批次而非用户故事 | 12 张曳光弹切片、每张单会话完成;每票之间是天然的检查点;上下文满仓的后半程质量衰减 | to-tickets 保留曳光弹原则,模板显式写入「单上下文窗口可完成」约束与 Blocked-by 依赖图 |
| code-review 双轴发现真实偏差 | Spec 轴抓到「算式行数字未带千分位」这种真 bug;Standards 轴的建议需人工取舍 | 公司版增加第三轴(安全轴),三轴并行、各自报告 |
| DESIGN.md 三层治理(标准只读 / 偏离显式 / 回流有门槛) | AI 会顺手改文件,治理规则必须前置;「项目没有资格修改标准」 | 新增 design-pipeline 技能;标准文件在技能正文中声明为只读输入,偏离必须写入 overrides 并附理由 |
| 环境变量取空、npx 拦截、限流 429 等踩坑 | 试错解法固化进 docs/agents/design-pipeline.md 后「试错变成照做」 |
每个技能配一个「已知坑」小节,AI 遇到对应症状直接走正确路径 |
| Figma 只读、HTML 才是 AI 的设计稿 | 设计事实源上移到仓库文本规范;HTML 原型秒级迭代,Figma 退居协作层 | 设计流水线以「网站 → DESIGN.md → HTML 原型 → Figma 存档」为标准路径,Figma 段落是唯一的人工环节 |
沿用 mattpocock 的分层规则并扩展一层公司治理技能(仍属编排层,但只在特定入口被调用):
| 技能 | 决策 | 定制要点 |
|---|---|---|
grill-with-docs |
改造 | 保留「有状态访谈」内核(每轮敲定即写盘)。公司化改动:① 文档固定为 CONTEXT.md(术语)+ docs/adr/(决策),路径不开放配置;② 增加「合规三问」固定题项——数据边界、权限边界、对外依赖;③ 访谈结论必须回指公司工程宪法(见 §6.1),与宪法冲突的选项在访谈中即被标记。 |
to-spec |
改造 | 保留模板六段结构(Problem / Solution / User Stories / Implementation Decisions / Testing Decisions / Out of Scope)。公司化改动:① 增加「测试接缝」必填段(Feathers seam,实践已验证有效);② 增加「设计关联」段——涉及界面的 spec 必须引用 DESIGN.md tokens 或声明 overrides;③ 发布路径固定 .scratch/<feature-slug>/spec.md;④ 发布前自动执行 spec-validate(见 §6.2),0 错误才允许打 ready-for-agent。 |
to-tickets |
改造 | 保留曳光弹垂直切片、Blocked-by 依赖图、单上下文窗口约束。公司化改动:① ticket 模板增加「验证方式」必填字段(对齐 OpenSpec tasks 的约束——每个任务必须含验证方式);② ticket 状态机固定:draft → ready-for-agent → in-progress → done,状态行格式与 spec 一致;③ 拆票完成后强制产出依赖图摘要表。 |
implement |
保留 | 16 行的纯编排者,调用 tdd + code-review。仅两处修改:① 结尾增加「工单验收项勾选 + 提交」步骤(实践已跑通的模式);② 实现前检查 constitution-check 快速项(只查禁令类,不做全量分析)。 |
constitution |
新增 | 从 spec-kit 翻译为技能形式(见 §6.1)。 |
design-pipeline |
新增 | 把设计流水线实践固化为技能(见 §6.4)。 |
archive |
新增 | 从 OpenSpec 翻译为技能形式(见 §6.3)。 |
setup-* |
改造 | 公司版每仓库初始化技能:issue tracker 选项收敛为公司唯一系统;文档目录固定;写入 docs/agents/issue-tracker.md 等;并生成 CLAUDE.md 骨架(引用宪法与 CONTEXT.md)。 |
wayfinder |
保留 | 超大工作的决策地图机制原样保留,issue tracker 适配公司系统。 |
triage / ask-matt |
改造 | triage 保留状态机、标签表改公司版;ask-matt 改为公司路由图(改名 sdd-map),补充新增治理技能的入口说明。 |
| 技能 | 决策 | 定制要点 |
|---|---|---|
tdd |
保留 | 红绿循环纪律与 references(tests.md / mocking.md)原样保留,实践已验证。 |
code-review |
改造 | 双轴(Standards / Spec)扩为三轴并行:新增 Security 轴(对照公司安全清单 + OWASP 常见项,与安全扫描工具的产出互补——扫描管已知模式,该轴管业务逻辑层面的安全意图偏离)。三轴刻意不合并排序,各出各的报告。 |
diagnosing-bugs / domain-modeling / codebase-design / prototype / research |
保留 | 原样入库。这些是模型自主调用的纪律与原语,不涉及公司流程。 |
resolving-merge-conflicts / wizard / improve-codebase-architecture |
保留 | 原样入库。 |
| 技能 | 决策 | 说明 |
|---|---|---|
grilling | 保留 | 可复用访谈原语,grill-with-docs 的依赖,必须保留。 |
handoff | 保留 | 与 prototype 配套的交接技能。 |
grill-me / teach / to-questionnaire / wait-what / writing-for-agents | 不进 | 个人向/内容向技能,不属于公司 SDD 流程,不随插件分发(仓库内可保留在独立目录供个人安装)。 |
constitution — 工程宪法(译自 spec-kit)一次性技能:建立/修订 docs/constitution.md。宪法是公司工程原则的最小集,后续所有阶段加载并受其约束。
---
name: constitution
description: 建立/修订项目工程宪法。修订须语义化版本并输出 Sync Impact Report。
---
## 流程
1. 读取公司基线宪法(docs/standards/engineering-constitution.md,只读)
2. 访谈确认项目级增补原则(≤5 条,每条须含「为什么」与「违反时的处理」)
3. 写入 docs/constitution.md,含版本号与批准日期
4. 输出 Sync Impact Report:本次变化影响哪些下游工件(模板/skill/CI)
## 规则
- 公司基线原则:项目只能引用、不能稀释(冲突 = CRITICAL,只能改项目产物)
- 项目增补原则:MAJOR=删除/重定义 · MINOR=新增 · PATCH=澄清
- 宪法冲突不可协商绕过;确需绕过时必须在 Complexity 论证段留痕
spec-validate — 规范校验(译自 OpenSpec,去掉 CLI 依赖)纪律型技能:对 spec / delta 做结构校验,把 OpenSpec 的 Zod 规则翻译成技能正文里的检查清单。AI 逐项执行,输出 0 errors / 0 warnings 才放行。
| 检查项 | 规则(源自 OpenSpec validator) |
|---|---|
| 需求措辞 | 每条 Requirement 须含 SHALL/MUST(RFC 2119);单条 ≤500 字符 |
| 场景格式 | Scenario 用 GIVEN/WHEN/THEN;标题层级精确(OpenSpec 的教训:3 个 # 会静默失败) |
| 动机充分 | Why/Problem 段 ≥50 字符(防「一句话 spec」) |
| delta 完整性 | MODIFIED 须完整拷贝原需求块且标题精确匹配,防场景丢失;REMOVED 须带 Reason 与 Migration |
| 规模上限 | 单次变更 ≤10 个 delta,超出应拆分 |
| 词汇对齐 | spec 中的领域名词必须能在 CONTEXT.md 找到定义(公司特有,源自实践) |
| 占位符残留 | 检出 TODO/占位符(含排除 fenced code block 的误报,OpenSpec 踩过的坑) |
archive — 规范归档(译自 OpenSpec 双区模型)功能完成、验收通过后执行:把 .scratch/<feature>/ 中已达成的行为契约合并进 specs/(按 capability 组织的当前事实源),原变更目录移入 specs/archive/YYYY-MM-DD-<feature>/ 留审计。要点:
specs/ 的路径——杜绝「顺手改规范」造成的漂移(与 DESIGN.md 三层治理同构);--archived 检查)。design-pipeline — 设计流水线(源自实践,固化为技能)把两篇博文中的设计环节做成与开发环节平行的技能,五个阶段各带质量门:
| 阶段 | 动作 | 质量门 | 执行者 |
|---|---|---|---|
| 1 | 提炼设计规范(参考站 → DESIGN.md) | designmd lint 0 errors / 0 warnings | AI 全自动 |
| 2 | 生成 HTML 高保真原型(tokens 内联、单文件零依赖、内容对齐 CONTEXT.md) | 规范忠实 + 领域文档对齐自检 | AI 全自动 |
| 3 | 导入 Figma(本地服务器 → Chrome 扩展 → Send to Figma) | 画板落地非空 | 人(约 2 分钟) |
| 4 | 对齐校验(MCP 一次性回读 vs tokens 比对) | 禁轮询 REST(429) | AI 全自动 |
| 5 | 偏离治理(偏离写 DESIGN.overrides.md 并附理由;标准文件 git diff 必须为空) | 标准纯净检查 | AI 检查 / 人拍板回流 |
analyze — 只读一致性分析(译自 spec-kit)implement 前执行,只读不改文件:重复与歧义扫描、欠指定项识别、宪法对齐、覆盖缺口(哪些 spec 需求没有任何 ticket 承载)、产物间矛盾。输出 CRITICAL~LOW 分级报告,限 50 条。CRITICAL 项未清零前,implement 拒绝开始。
sdd-map — 路由图(改自 ask-matt)人读的流程地图:什么规模的工作走哪条路。单会话装得下的小活直接 implement;标准工作走全流程;超大/多雾工作先 wayfinder 建决策地图;涉及界面的工作在 grill 后插入 design-pipeline。
统一所有项目的仓库布局(每仓库初始化时由 setup-sdd 生成骨架):
.
├── CLAUDE.md # 入口:指向宪法、CONTEXT.md、工作流地图
├── CONTEXT.md # 领域术语表(grill-with-docs 实时落盘;spec 冲突时以此为准)
├── docs/
│ ├── constitution.md # 项目宪法(公司基线 + 项目增补,语义化版本)
│ ├── adr/ # 架构决策记录(三道闸门通过的决策落这里)
│ ├── agents/ # 环境配置(AI 的"入职文档")
│ │ ├── issue-tracker.md # 工单系统约定(公司唯一系统)
│ │ ├── domain.md # 领域背景
│ │ └── design-pipeline.md # 设计流水线操作指引 + 已知坑
│ └── standards/
│ └── engineering-constitution.md # 公司基线宪法(只读)
├── DESIGN.md # 公司标准设计规范(只读消费;有 UI 的项目引入)
├── DESIGN.overrides.md # 项目偏离(只记 delta + 理由)
├── .scratch/<feature-slug>/ # 进行中工作区
│ ├── spec.md # Status: ready-for-agent ...
│ └── issues/NN-*.md # 曳光弹切片,各带 Blocked-by 与 Status
└── specs/ # 已归档行为契约(事实源,按 capability;archive 唯一写入口)
└── archive/YYYY-MM-DD-*/ # 归档留痕(审计上下文)
| 工件 | 事实源属性 | 谁写入 | 谁只读 |
|---|---|---|---|
CONTEXT.md | 领域词汇权威定义 | grill-with-docs(访谈中实时) | 所有技能 |
docs/constitution.md | 工程原则权威 | constitution 技能(版本化) | 全部阶段加载 |
DESIGN.md | 公司设计标准 | 标准维护者(评审回流) | 项目侧一律只读 |
specs/ | 系统当前行为契约 | archive 技能(唯一路径) | spec / implement |
.scratch/ | 进行中提案(隔离) | to-spec / to-tickets / implement | analyze / review |
四个来源的门禁统一收口到一张表,每个门禁都有明确的「不过怎么办」:
| 门禁 | 所处节点 | 判定标准 | 不通过时 |
|---|---|---|---|
| spec-validate | spec 发布前 | 结构校验 0 errors / 0 warnings;词汇全部对齐 CONTEXT.md | AI 修复后重校;不得带伤打 ready-for-agent |
| analyze | implement 前 | CRITICAL = 0(覆盖缺口、宪法冲突、产物矛盾) | 回改 spec/tasks;LOW 项记录后可放行 |
| constitution-check | plan/design 前后 | 禁令类原则零违反;取舍类违反须在 Complexity 段论证 | 改方案;不可协商项无论证豁免 |
| code-review 三轴 | 每张 ticket 提交前 | Spec 轴(忠实实现)/ Standards 轴(规范+坏味道)/ Security 轴(安全意图) | Spec 轴问题必须修;其余轴按严重度取舍并留痕 |
| design-lint | 原型进 Figma 前 | designmd lint 0/0;标准文件 git diff 为空 | 偏离改走 overrides;禁止回写标准 |
| archive 前置检查 | 归档前 | ticket 验收项全勾;delta 校验通过 | 中止归档,保留原目录(可回滚) |
specs/ 只能由 archive 写入、DESIGN.md 项目侧永远只读——「AI 会顺手改文件,治理规则必须前置」;Status: 行驱动,AI 只认状态不认口头;| AI 全自动 | 人工(全部是拍板,不是操作) |
|---|---|
| 访谈出题、实时落盘 CONTEXT.md/ADR;spec / tickets 生成与校验;analyze 报告;TDD 红绿循环;三轴审查;归档合并;设计规范提炼、原型生成、lint、对齐回读、起本地服务器 | grill 各轮作答与共识终局确认;设计评审拍板 + Figma 导入的扩展点击(约 2 分钟);每张 ticket 完成后的验收;偏离回流标准的评审;宪法修订批准 |
把分工写进每个技能的正文,AI 就能自动跑到「需要人拍板」的那一步并递上决策材料——这是流程可复现的前提。
| 阶段 | 动作 | 产出 | 验收信号 |
|---|---|---|---|
| P1 试点 1–2 周 |
fork mattpocock/skills 改名 company-sdd;按 §5 清单裁剪;用真实项目(建议选一个中型功能)走完全流程 |
私有插件仓库;试点项目的完整工件链(CONTEXT → spec → tickets → 归档) | 一张 ticket 从 ready-for-agent 到 archive 全程无需 improvisation;spec-validate/analyze 在试点中至少拦下 1 个真实问题 |
| P2 内化 2–4 周 |
制定公司基线宪法与 DESIGN.md 标准;code-review 接入安全轴;把试点暴露的问题回写技能(已知坑小节) | docs/standards/ 两份标准;v1.0 插件 |
第二个项目零培训跑通;门禁拦截率有数据记录 |
| P3 规模化 | 插件市场私有分发(参考 mattpocock 的 repo-as-marketplace + changesets 版本管理);CI 集成(结构校验、标准纯净检查);季度审计(diff 对照标准,确认无隐性漂移) | 团队级分发 + CI 门禁 + 度量看板 | 新项目接入成本 = 一条 init 命令;偏离回流开始产生(标准在进化) |
.claude-plugin/marketplace.json(仓库即市场),版本由 changesets 统一管理;公司内安装 claude plugins install company-sdd。双桶治理沿用上游规则:README 与 plugin.json 的技能清单必须同步,CI 校验。# 初始化(每仓库一次)
/setup-sdd # 写 docs/agents/、CLAUDE.md 骨架、工单约定
/constitution # 建项目宪法(公司基线 + 项目增补)
# 标准工作流
/grill-with-docs <一句话想法> # 访谈 → CONTEXT.md / ADR 落盘
/to-spec # → .scratch/<slug>/spec.md(过 spec-validate 后 ready-for-agent)
/to-tickets # → issues/NN-*.md 曳光弹切片 + 依赖图
/analyze # implement 前只读一致性检查
/implement issues/NN-*.md # 单票单会话:tdd → 三轴 review → 提交勾选
/archive <feature-slug> # 合入 specs/ + 归档留痕
# 设计分支(有界面的工作)
/design-pipeline # DESIGN.md → HTML 原型 → (人) Figma → 对齐 → overrides 治理
# 地图
/sdd-map # 什么规模走哪条路
/Users/junjian/GitHub/mattpocock/skills —— 分层规则见 README.md;编排者范式见 skills/engineering/implement/SKILL.md、grill-with-docs/SKILL.md;模板内嵌见 to-spec/SKILL.md、to-tickets/SKILL.md/Users/junjian/GitHub/Fission-AI/OpenSpec —— delta 格式见 schemas/spec-driven/templates/;校验规则见 src/core/validation/validator.ts;归档合并见 src/core/specs-apply.ts/Users/junjian/GitHub/github/spec-kit —— 方法论见 spec-driven.md;宪法模板见 templates/constitution-template.md;analyze 见 templates/commands/analyze.md