项目引导 (Project Bootstrap)
一个轻量级编排器。此技能不包含其他技能——它会在正确的步骤加载正确的技能,运行确定性脚本以创建文件,并根据用户的回答填充模板。如果以下步骤与复制进来的技能冲突,以此技能为准。
优先规则——仅限设置会话
此排序**仅在设置会话期间(即此技能激活时)**适用。如果在设置过程中指令冲突,请按以下顺序应用:
- 此技能 (
project-bootstrap) —— 设置范围、安全规则、停止规则。 - 项目自己的
CLAUDE.md—— 因为正在被创建。 - 栈技能 —— 例如适用于此项目类型的 SwiftUI 或设计技能。
- 工作流检查表 ——
references/workflow.md,默认流程。
一旦设置结束,此技能不再激活,排序失效:项目的 CLAUDE.md(及其文档)是未来会话的唯一常设指令集。
切勿安装两个竞争的工作流框架(例如,不要同时安装基于重度规范驱动框架与此技能的工作流检查表)。如果用户明确指定了一个工作流框架,则使用该框架代替默认检查表,并将选择记录在 docs/SETUP.md 中。
安全规则(绝不能被覆盖)
- 绝不要将密码、API 密钥或令牌写入任何生成的文件,也绝不要将服务器端秘密(例如银行 API 密钥)放在客户端应用中。
- 未经用户明确同意,绝不要覆盖现有文件(
scripts/bootstrap.py默认拒绝;--force是仅限选择的选项,使用--force时脚本会先将每个文件备份到<filename>.pre-bootstrap.bak)。 - 仅用于设置:不要在此会话中开始构建产品功能。
工作流
按顺序执行这些步骤。不要跳步。
1. 访谈
加载 references/interview.md。一次一个地提问,并在每个答案到达时将其写入相关的文档——不要将所有内容保留在对话记忆中。如果用户一次回答多个问题,记录所有给出的答案,标记那些问题已回答,并从第一个未回答的问题继续——绝不要重新询问已回答的问题。当每个问题都有答案或用户明确推迟回答时(将推迟的项目记录在 docs/STATE.md 中),停止访谈。
2. 运行脚本
从此技能目录执行:
python3 scripts/bootstrap.py \
--project-name "<来自访谈的项目名称>" \
--type <ios|web|python|generic> \
--purpose "<来自访谈的单行目的>" \
--target <全新项目仓库路径> \
--allow-placeholders
此处需要 --allow-placeholders:在此阶段,模板仍然有意包含 {{...}} 填充令牌(步骤 3 会填充它们),因此脚本通过逐文件令牌警告而非失败来通过验证。目标目录必须已存在(全新项目仓库);如果目标缺失,脚本会报错,而不是创建拼写错误的路径——只有当用户明确希望脚本创建该目录时才传递 --create-target。
这将创建目录并确定性地渲染模板。准确报告创建、跳过或覆盖的内容——永远不要声称脚本未报告的文件存在。
3. 根据访谈答案填充模板
用实际答案替换生成文件中剩余的填充提示:CLAUDE.md / AGENTS.md 中的栈和构建/测试命令,docs/PRD.md 中的范围,docs/ROADMAP.md 中的阶段,docs/CONTEXT.md 中的词汇表术语。保持 CLAUDE.md 简短——如果超过约 80 行,将细节移到 docs/ 中并留下指针。
4. 安装栈技能——固定版本,安装前阅读
加载项目类型的引用,仅安装其列出的技能:
- iOS →
references/ios.md - Web →
references/web.md - Python / 通用 → 默认无栈技能;在 SETUP 中记录该选择。
列出的每个技能都固定到引用文件的固定技能表中的确切提交 SHA。安装意味着:将仓库克隆到项目的 .claude/skills/,然后 git checkout 固定的 SHA——不要从移动分支安装,并且在不记录新 SHA 的情况下不要更改固定版本。
**强制要求安装前阅读。**克隆后,在安装被视为完成之前,对于每个技能:
- 完整阅读其
SKILL.md(并注意它默认加载的其他内容)。 - 写出 2-3 行摘要:此技能将向未来会话加载哪些指令。
- 标记任何要求网络访问、凭据使用或破坏性命令的内容。将标记展示给用户;未经用户同意,不要静默安装任何要求这些内容的技能。
在 docs/SETUP.md 中记录每个技能:名称、确切来源 URL、固定 SHA、安装日期和阅读摘要。不要将技能的内容复制到 CLAUDE.md 中——技能应保持一个独立可加载的单元。
5. 设置工作流规则
如果 CLAUDE.md 中尚未存在,则从 references/workflow.md 写入默认循环:规范 → 计划 → 构建 → 独立审查,每个阶段一个全新的会话,每个会话结束时更新 docs/STATE.md。
6. 验证——全新检查,而非步骤 2 的输出
现在,在 --verify 模式下全新运行验证(它读取目标当前状态且不修改任何内容):
python3 scripts/bootstrap.py --verify --target <项目仓库路径>
不要重用步骤 2 运行的输出——该运行在步骤 3 的填充和步骤 4 的安装之前。不要在验证命令中添加 --allow-placeholders——脚本会直接拒绝此组合,因为验证必须针对已填充的文件运行。--verify 在生成文件中发现任何剩余的填充令牌时会失败:如果因令牌失败,则步骤 3 未完成——返回,填充剩余令牌,并重新运行 --verify 直到通过。--verify 还检查内容,而不仅仅是令牌:PRD 的不在范围内列表必须非空,并且 docs/SETUP.md 必须为每个已安装的技能记录固定的 SHA(或声明未安装任何栈技能)。同时:
- 确认
.gitignore涵盖了此栈的秘密。 - 确认项目的空/模板应用仍能使用
CLAUDE.md中记录的构建命令构建(如果构建命令已存在)。 - 重新阅读
docs/SETUP.md:每个已安装的技能都必须列出其来源 URL、固定 SHA、安装日期和阅读摘要。
7. 提交
一次提交,仅此而已:
chore: 初始项目设置
仅包含设置文件。如果未配置 git 用户身份或远程仓库,请说明并将提交留给用户——不要虚构任何一个。
8. 停止
向用户展示创建的文件树和 docs/ROADMAP.md 的阶段 1。然后停止。不要开始阶段 1,不要构建功能,也不要主动提出“仅启动骨架”——下一阶段应属于全新的会话(参见 references/workflow.md)。
应急出口: 停止,除非用户明确指示你继续。如果他们指示继续,建议一次——即阶段 1 仍应在新会话中进行——然后听从用户并继续。
引用文件——按需加载
| 文件 | 加载时机 |
|---|---|
references/interview.md | 总是——步骤 1。 |
references/ios.md | 项目类型为 ios。 |
references/web.md | 项目类型为 web。 |
references/workflow.md | 步骤 5,以及任何后续在已引导仓库中工作的会话。 |