把 CSDD 治理层(宪法、门禁、模板、文档)安装到已有仓库,并按清单可选安装第三方扩展。
整个包放在 .specify/packages/csdd/,通过 spec-kit 扩展机制分发。
cd /path/to/your-repo
# 1. 目标仓库先初始化 spec-kit(已初始化则跳过)
# claude 集成默认就是技能格式,不接受 --skills
uvx --from specify-cli==1.1.3 specify init --here \
--integration claude --script sh --ignore-agent-tools --non-interactive
# codex 集成需要:--integration codex --integration-options="--skills"
# 2. 安装本扩展(本地目录用 --dev)
uvx --from specify-cli==1.1.3 specify extension add /path/to/csdd/.specify/packages/csdd --dev
# 3. 预演,确认后执行
bash .specify/extensions/csdd/scripts/csdd-install.sh --target . --agent claude
bash .specify/extensions/csdd/scripts/csdd-install.sh --target . --agent claude --apply装完在 agent 里有四个命令:/speckit.csdd.install、/speckit.csdd.verify、/speckit.csdd.extensions、/speckit.csdd.navigate。
克隆本仓库后,对任意目标项目:
# 预演:不写文件,打印计划
bash scripts/csdd-bootstrap.sh --target /path/to/project --agent claude
# 执行;--with-extensions all 同时装清单里的第三方扩展(默认不装)
bash scripts/csdd-bootstrap.sh --target /path/to/project --agent claude --yes
bash scripts/csdd-bootstrap.sh --target /path/to/project --agent codex --yes --with-extensions brownkit,blueprint-index只支持 claude、codex,其它集成未验证。目标项目需要有 README.md。退出码:0 成功 / 2 初始化失败 / 3 治理层有冲突 / 4 自检或扩展安装失败 / 5 安装成功但门禁自检因 .claude/ 下第三方技能文档的示例链接失败(见「已知限制」)。
第三方扩展优先用本仓库 cache/ 里的压缩包(哈希与清单一致才用,不联网);缓存缺失或不符才联网下载,并再次核对整包哈希。
| 情况 | 行为 |
|---|---|
| 目标不存在该文件 | 新增 |
| 内容相同 | 跳过 |
AGENTS.md / CONTRIBUTING.md 已存在且不同 |
追加带 CSDD:BEGIN 标记的区块,保留原内容 |
.specify/memory/constitution.md 是 spec-kit 默认占位模板 |
替换(识别 [PROJECT_NAME] 占位) |
| 其它文件已存在且不同 | 报冲突并跳过,需显式 --force |
有冲突且未加 --force |
不写入任何文件,退出码 3 |
| 装完 bootstrap 失败 | 退出码 4,不假装成功 |
- 不安装任何第三方扩展(用
/speckit.csdd.extensions,且默认全 skip)。 - 不生成 agent 技能(
specify integration install负责)。 - 不修改
quality-policy.json的checks(必须按项目技术栈人工填)。
改了治理仓库根下的文件后,必须重新同步 payload,否则安装出去的是旧版本。本包位于治理仓库内的 .specify/packages/csdd 时,默认源仓库是上三级;本包被单独克隆(发布仓库)时,用 --repo 指向治理仓库根:
bash scripts/sync-payload.sh --repo /path/to/governance-repo
bash scripts/verify-package.sh --repo /path/to/governance-repo第三方扩展的压缩包缓存在 cache/(见下),改了清单里的版本、来源或哈希后重新生成:
python3 scripts/cache_extensions.pypayload.manifest.txt 是唯一发布清单:增删文件改这里,不要手改 payload/。
verify-package.sh --target /repo 用来检查目标仓库是否被本地改过(一致 / 不一致 / 缺失)。
清单在 extensions.manifest.json。硬规则:source 必须是 https 地址、sha256 必须是 64 位十六进制,缺任一项、整包哈希不符、extension.yml 与审计记录不符,都拒绝安装。装完用 specify extension list 确认真的登记了,否则退出码 4。
bash .specify/packages/csdd/scripts/csdd-extensions.sh --list
bash .specify/packages/csdd/scripts/csdd-extensions.sh --install spec-gates清单里 7 个 spec-kit 扩展都已固定整包哈希。v-model 上游包超过 512 条目,脚本下载上游包、校验整包哈希后只解压 include 清单内的文件,并核对目录树哈希,属改造安装。整包哈希来自 GitHub 自动生成的标签压缩包,是否长期字节稳定未验证;发布前建议改指向自己仓库 release 里的压缩包。
安装不等于能力验证。
已知限制:
blueprint-index的check脚本在 bash 5.1 与 3.2 下语法检查失败(Ubuntu 22.04 默认 5.1.16,macOS 默认 3.2),bash 5.2.15 通过;上游 v0.3.0 与 main 相同,尚无修复。使用前请升级 bash。- Claude 集成下,第三方扩展的技能文档(如 BrownKit 里的
a.md示例链接)会被quality_gate.py的链接扫描当成坏链接,因为它只排除了.agents/,没有排除.claude/。Codex 集成不受影响。需要在你自己的门禁里排除.claude/,并走你们的评审。