with one click
bootstrap
为空项目搭建文档骨架(README.md / CLAUDE.md / DEVTREE.md),仅在项目首次开发前调用一次
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
为空项目搭建文档骨架(README.md / CLAUDE.md / DEVTREE.md),仅在项目首次开发前调用一次
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
按照 git 规则自动分析变更并提交代码
提交前的自动 review 迭代环:委派子 agent 跑 CC 自带 /code-review(默认 sonnet × medium,并发/难复现等硬 diff 升 opus × high),发现高置信正确性问题就修、跑测试+happy-path 验证、复审,迭代到「运行验证通过 + 无高置信 correctness 问题」才放行。收敛靠运行验证+置信过滤,非 reviewer 挑不出为止。三条硬规则:永远显式传档位、永远委派子 agent、只用两个合法的模型×档位组合。由 /commit 在生成 commit 前自动调用,也可手动跑
依据 docs/DEVTREE.md 中作者维护的 Epic 结构,重新生成可视化图表和节点索引
完成当前开发项:撰写 SUMMARY.md,反思跨项目可沉淀流程并可向 claude-code-global 提 issue,关联并关闭 issue(GitHub / GitLab,如有),提交代码
诊断本地分支分叉并按清单引导完成 rebase,历史保持 FF 直线
把 claude-code-global 仓库管理的"跨项目共享开发配置模板"的最新变化同步进当前项目;含 adopt 模式(无 marker 老项目首次接入)
| name | bootstrap |
| description | 为空项目搭建文档骨架(README.md / CLAUDE.md / DEVTREE.md),仅在项目首次开发前调用一次 |
| disable-model-invocation | false |
用户调用此 skill 表示要为一个全新空项目搭建文档骨架。本 skill 是一次性脚手架,不用于已有 docs/ 历史的项目。
按顺序检查,任一命中就立即停止并报告,不要尝试覆盖已有内容:
docs/ 下已存在 N- 数字前缀开头的开发轮次目录 → "项目已初始化(检测到 docs/N-xxx),不应运行 bootstrap。"CLAUDE.md 已存在 → "已有 CLAUDE.md,如要重置请先备份再删除原文件。"DEVTREE.md 已存在 → 同上提示全部通过才继续。
一次性问全,不要逐条来回:
/backlog,不需要详细内容)参数(args)若非空,可作为问题 1 或 2 的输入;不足部分仍需向用户问全。
# {项目名}
{一句话描述}
## 目录结构
(待补充)
## 开发流程
本项目遵循 [全局 Constitution](https://github.com/pkulijing/claude-code-global/blob/master/GLOBAL_AGENTS.md) 中定义的「需求 - 计划 - 执行 - 总结」四步开发模式,文档记录见 `docs/`。
# {项目名}
{一句话描述}
## 目录结构
(待补充)
## 开发注意事项
(待补充)
不调用内置 /init:空项目无可扫的代码,等代码长起来后由用户手动跑 /init 重写更合适。
为项目套用一份 claude-code-global 管理的「跨项目共享开发配置」(.pre-commit-config.yaml / .vscode/ / .gitignore / lint.yml / .gitlab-ci.yml(变体组,按 runner 类型选一个落地,见 Step 3.3.7)/ pyproject.toml [tool.ruff] / issue templates 双套 / .github/labels.yml / .prettierrc 等)。GitHub 与 GitLab 双轨同时落、互不干扰(各读各的 CI / issue templates)。labels 同步等命令行步骤由 helper $HOME/.claude/scripts/platform_issue.py 按 git remote 自动 dispatch(契约见 ~/.claude/scripts/platform_issue.md)。字段约定见 ~/.claude/global-repo/docs/11-跨项目共享模板与sync-skill/SCHEMA.md。
~/.claude/templates/ 下有两类目录:
_common/:所有项目都套用,stack-无关(issue templates 双套、labels.yml、.prettierrc 等通用资源),bootstrap 会自动应用,不让用户选择<stack>/(如 python-uv、react-vite):技术栈特异资源,前端 / 后端正交、可多选叠加(如后端 python-uv + 前端 react-vite 同仓并存);各 stack 落点由其 stack.yml 的 default_path 决定~/.claude/templates/ 下非下划线开头的子目录,得到可选 stack 列表(如 python-uv、react-vite)stack.yml(若存在)取两个字段:default_path(该 stack __subpath__/ 文件相对项目根的落点,缺省 .——即 stack 目录下没有 stack.yml 或没写该字段时落项目根)与 label(选择列表展示名,缺省用 stack 目录名)。例:python-uv 无 stack.yml → path .(落根);react-vite 的 stack.yml 写 default_path: frontend → 落 frontend/ 子目录_common/)是伪 stack,自动应用,不进入用户选项~/.claude/templates/ 不存在 → 提示用户「尚未通过 install.sh 部署 templates,跳过模板初始化」并跳过 Step 3 整个段落前端 / 后端是正交维度,一个项目可叠加多个 stack。询问用户,让其勾选 0 个或多个 stack:
label(来自 Step 3.1)_common)各 stack 的落点由其 default_path 决定(Step 3.1 已解析),不向用户询问 path:后端 python-uv 落项目根,前端 react-vite 落 frontend/,互不干扰、可同仓并存。
若一个都没选 → 跳过 Step 3.3 的 stack 部分,但 _common 仍然应用(除非 _common/ 也不存在);若 _common/ 不存在则 Step 3.3 完全跳过。
先应用 _common,再按用户选的每个 <stack> 依次应用(同名文件以 stack 优先,但理论上不应有冲突 —— 见 ~/.claude/global-repo/docs/12-backlog改为issue驱动/SUMMARY.md 中 _common 与 stack 的边界划分)。
对每个生效来源(先 _common/,再逐个选中的 <stack>/):
__root__/ 下所有文件(含点文件、含子目录结构)复制到项目根__subpath__/ 下所有文件复制到该来源的落点:_common 与 default_path 为 . 的 stack(如 python-uv)落项目根;default_path 为子目录的 stack(如 react-vite → frontend/)落 <default_path>/(目录不存在则建)特殊处理(一)—— 变体组文件(凡文件名形如 <target>.variant.<key>,.variant. 在文件名末段、<key> 不含点)是「一组互斥变体」中的一员:同一 <target> 的多个 .variant.<key> 表示「需按环境选一个落地」。.gitlab-ci.yml 这类会被工具真实执行的运行时配置不能把多变体都落进项目再让用户删(漏删即得会真跑的错误配置),故选择前移到本步交互、只落选中那一份。本步把这些文件从普通复制流程中剔除(不落地为 *.variant.*),按 <target> 聚合成变体组,实际「选一个并落地」在 Step 3.3.7 执行。当前唯一变体组:
.gitlab-ci.yml.variant.docker / .gitlab-ci.yml.variant.shell → target .gitlab-ci.yml,按 GitLab runner 类型选一个(见 Step 3.3.7)。特殊处理(二)—— fragment 文件(凡文件名以 .fragment 结尾)不能直接落地为同名文件,它们是片段、需合并进目标文件。去掉 .fragment 后缀即得目标相对路径,目标始终落项目根。本步只把这些片段从普通文件复制流程中剔除(不落地为 *.fragment 文件),实际合并动作在 Step 3.3.6 执行。当前两类 fragment:
pyproject.toml.<section>.fragment → 合并进项目根 pyproject.toml 对应段(TOML 段合并)。<section> 用 - 分隔层级(ruff → [tool.ruff]、uv → [tool.uv]、uv-index → [[tool.uv.index]])。.vscode/<name>.json.fragment → 合并进项目根 .vscode/<name>.json(JSON 合并)。各 stack 的编辑器配置以此形式汇聚到项目根 .vscode/(VS Code 单根工作区只读仓库根的 .vscode/,故落根才生效;子目录 stack 如 react-vite 也借此落根、可与 python-uv union)。复制完后,如果项目根出现了 .github/labels.yml(来自 _common),调 helper:
python3 $HOME/.claude/scripts/platform_issue.py label-sync-from-file .github/labels.yml
helper 完整行为(平台 detect、gh/glab dispatch、color 转换、exit 2/3/4 降级、stdout TSV)见 ~/.claude/scripts/platform_issue.md。stdout 结果原样展示给用户;exit 2/3/4 按契约降级为收尾提示(见 Step 5 收尾反馈第 6 条),不阻塞后续步骤。
对 Step 3.3 剔除出来的每一份 *.fragment,按类型合并:
pyproject.toml.<section>.fragment(TOML 段合并):
<section> 用 - 分隔层级映射到 TOML 表头:ruff → [tool.ruff]、uv → [tool.uv]、uv-index → [[tool.uv.index]]、uv-workspace → [tool.uv.workspace]、pytest → [tool.pytest.ini_options](以 fragment 内实际表头为准)。
pyproject.toml → AI 智能合并,保留用户已有字段,模板新增字段追加;冲突字段询问用户。数组段([[tool.X]],如 [[tool.uv.index]])按 name 字段 union。pyproject.toml:
python-uv(单包)→ 标记为 needs-step-3.5(待 Step 3.5.1 uv init --package 生成 [project] 骨架后再合)。python-uv-workspace(多包虚拟根)→ 直接用本 stack 的 workspace fragments 内容创建根 pyproject.toml(虚拟根本就无 [project]、不该 uv init;多份 fragment 依次合并即得 [tool.uv.workspace] + 共享配置的完整虚拟根)。不标记 needs-step-3.5。uv init / 等价命令再 /sync-project-config」并跳过。.vscode/<name>.json.fragment(JSON 合并,目标项目根 .vscode/<name>.json):
.vscode/)。extensions.json 的 recommendations 数组做有序去重 union;settings.json 做顶层键 union(键只一侧→并入;两侧都为对象→递归深合并;标量冲突→询问)。_common 再逐个 stack),得各 stack 推荐 / 设置的并集(前后端语言作用域键天然不相交,纯 union)。对 Step 3.3 剔除并按 <target> 聚合出来的每个变体组(同 <target>、多个 .variant.<key>):
.gitlab-ci.yml 组:docker → "Docker executor runner(GitLab.com / 官方 docker runner,image 提供 uv+Python)";shell → "本地 shell runner(公司自建、无 docker executor,runner 无 uv 时脚本装)"。<target>(去掉 .variant.<key> 后缀,落到该来源 stack 的落点:python-uv path . → 项目根)。其余变体一律不落地。<target> 已存在(罕见,如项目侧本就有 .gitlab-ci.yml)→ 列入冲突清单,逐条确认 take 选中变体 / 保留项目侧 / 智能合并(同 Step 3.3 普通文件冲突处理)。<target> → 选中 key),供 Step 3.6 写进 marker。为何前移到此交互而非「都落地让用户删」:
.gitlab-ci.yml会被 GitLab 真实解析执行,多变体并存 + 手删是地雷(漏删即错误 CI)。选择前移、只落一份,保证项目侧永远是干净可跑的单一版本。
选中的 stack 既不含 python-uv 也不含 python-uv-workspace 则整段跳过。命中其一时(落点 path 均为 .,下列 uv 命令都在项目根执行),先询问用户确认是否执行(默认 yes,给「只要配置不要装依赖」选项);选 no 则跳过整段并在收尾反馈中提示用户后续可手动跑。
python-uv(单包)与python-uv-workspace(多包虚拟根)互斥,正常只会命中其一;两步分别按各自分支走。
单包 python-uv:
[ -f pyproject.toml ] && echo "exists, skip uv init" || uv init --package
--package 落标准 src 布局(生成 src/<pkg>/__init__.py 空文件、无 hello world + 含 [build-system] uv_build 的 pyproject.toml),见 rules/python.md §2。空目录 bootstrap 走 uv init --package 分支;老项目 adopt 走 exists 分支。
多包 python-uv-workspace:不要 uv init --package —— 它会在虚拟根写出 [project] + src/ 破坏 workspace 形态。虚拟根 pyproject.toml 由本 stack 的 workspace fragments(uv-workspace / uv / uv-index / ruff / pytest)合并而成,成员包随模板 packages/* 已整体复制就位。故本步只需确保上述 fragments 已合(Step 3.3.6 对「目标不存在」会用 fragment 内容创建根 pyproject.toml),不执行任何 uv init。
跑完后回到 Step 3.3.6处理所有标记 needs-step-3.5 的片段(清华源 fragment 必须先合,否则 3.5.2 在国内会卡)。
uv add --dev pytest pytest-cov ruff
uv 会跳过已装的,幂等。失败 → 报告 stdout/stderr,提示用户手动重试,暂停 skill 不继续。不自动回滚已写文件。
python-uv-workspace:uv add --dev在虚拟根(无[project])同样把依赖写进根[dependency-groups] dev并触发一次uv sync——会把packages/*各成员一并 editable 装入、解析跨成员[tool.uv.sources] workspace=true依赖。无需额外uv init,本步即让整个工作区可跑(uv run pytest跑全树)。
command -v pre-commit >/dev/null || uv tool install pre-commit
pre-commit install
成功后打印 pre-commit installed at .git/hooks/pre-commit。不强制跑 pre-commit run --all-files(首次接入易出大量 finding,让用户自决)。
选中的 stack 不含 react-vite 则整段跳过。含 react-vite 时,模板已在 Step 3.3 整体复制到 frontend/(含写死版本的 package.json + 固化 npmmirror 源的 .npmrc)。先询问用户确认是否执行(默认 yes,给「只要文件不装依赖」选项):
cd frontend && npm install
.npmrc 已固化 npmmirror 源,npm install 自动走国内镜像。失败 → 报告 stdout/stderr,提示用户手动重试,不自动回滚已写文件。装完可选 npm run lint / npm run build 验证。
.agent-template.yml marker在项目根创建 .agent-template.yml(字段来源详见 SCHEMA.md)。stacks 列表写所有选中的 stack,每条 path 取其 default_path(Step 3.1 解析);若该 stack 在 Step 3.3.7 落了变体组,把「<target> → 选中 key」写进该条的 variants map:
# 由 claude-code-global 管理,非必要请勿手动编辑
source: <git -C ~/.claude/global-repo config --get remote.origin.url 的输出>
template_commit: <git -C ~/.claude/global-repo rev-parse HEAD 的输出>
bootstrap_time: <当前 UTC 时间的 ISO 8601 字符串>
stacks:
- stack: python-uv
path: .
skipped: []
variants: # 仅当该 stack 落了变体组时写,缺省不写
.gitlab-ci.yml: shell # Step 3.3.7 用户选的 key
- stack: react-vite
path: frontend
skipped: []
上例是「后端 + 前端」并存形态;只选其一就只写对应那一条,一个都没选则写 stacks: [] 并在顶层加 skipped: [](见 SCHEMA.md 无 stack 形态)。variants 是可选字段:只有落了变体组的 stack 才写,无变体组的 stack(如 react-vite)不写该字段。
source 取不到 origin 时填占位符 https://github.com/<owner>/claude-code-global,并在收尾里提示用户手动补全。
/devtree 落 DEVTREE.md 骨架直接调用 /devtree。/devtree 自身已支持「冷启动」:当 docs/DEVTREE.md 不存在或 Epic 结构为空时,会写入完整骨架(分类图例 + 可视化占位 + 节点索引占位 + Epic 结构占位)。
不要在本 skill 里复制一份 DEVTREE 骨架模板 —— 单一事实来源在 /devtree。
README.md、CLAUDE.md、docs/DEVTREE.md,以及(若 Step 3 未跳过)模板复制的文件清单 + .agent-template.yml(跳过的项注明「已存在,未覆盖」或「用户在冲突清单中选择保留」)README.md 与 CLAUDE.md 的「待补充」段DEVTREE.md 的「Epic 结构」区块下添加首批叶 Epicuv run pytest / git commit;可选跑 pre-commit run --all-files 验证全量配置(首次接入易出 finding)。若选了 react-vite 且 Step 3.5b 已执行:frontend/ 已可 npm run dev / npm run builduv init --package && uv add --dev pytest pytest-cov ruff && uv tool install pre-commit && pre-commit install,或重跑 /sync-project-config adopt 走自动流程pyproject.toml 不存在 / 选了非 python-uv stack:未来可运行 /sync-project-config 走 adopt 模式补全gh/glab auth login;exit 2 无 origin → 关联 remote 或自托管 GitLab 加 --platform gitlab 重跑;exit 4 CLI 缺失 → brew install gh/glab),补齐后 /sync-project-config。详见 ~/.claude/scripts/platform_issue.md.github/labels.yml 中 area: 段还是占位符:提示「按本项目实际模块改 area 段后跑 /sync-project-config 重新同步 labels」/backlog 登记/start 开启 round 0~/.claude/rules/ 对应文件、按 GLOBAL_AGENTS 触发条件主动读入,不需要在项目根独立放指针 md:选了 python-uv 见 rules/python.md(涉及 Python 时)、选了 react-vite 见 rules/frontend.md(涉及前端时)/commit —— 是否立即提交由用户决定(与 /backlog 一致)