第 10 章 / 共 10 章
组合演练与信任边界
10.1 用一条 /release 串起四件套
四件产物到现在还是各干各的。最后一步,用一个 /release 命令把它们串成一条流水线。在插件里再加一个技能 skills/release/SKILL.md:
---
description: 走完一次发布:调查改动、起草发布说明、检查干净后收尾。
disable-model-invocation: true
---
发布流程,按顺序执行:
1. 委派 release-scanner 子代理,梳理上个 tag 到 HEAD 的面向用户变化,拿回分类摘要。
2. 用 release-notes 技能,把摘要整理成正式发布说明。
3. 把发布说明写入 CHANGELOG.md 顶部(此时格式化钩子会自动整理格式)。
4. 展示最终的发布说明,等我确认后再继续。
跑一次 /release,你能看到四件套各就各位:
/release命令/技能是入口——一段你会反复走的流程,用disable-model-invocation攥住触发权,绝不让模型自作主张地发版;release-scanner子代理在独立上下文里翻历史,脏活不进主对话;release-notes技能把摘要按团队格式落成文案;- 格式化钩子在写
CHANGELOG.md时确定性地整理格式,守门钩子在整个过程里守着--force那条线。

10.2 组合决策复盘表
把整篇的判断浓缩成一张表。下次你要固化任何东西,先在这里对号入座:
| 需求 | 用什么 | 决定性理由 | 为什么不用别的 |
|---|---|---|---|
| “走一次发布流程”这段固定步骤 | 命令 / 技能(关掉自动触发) | 只是流程复用,且有副作用要攥在手里 | 不用钩子——你不希望它每次都自动发版 |
| 梳理提交历史的调查 | 子代理 | 需要独立上下文装中间材料 | 不用技能——会把几千行原文堆进主对话 |
| 发布说明的团队格式 | 技能 | 参考知识,用到才加载 | 不塞 CLAUDE.md——只在发版时用,不该常驻 |
| 写文件后自动格式化 | 钩子(PostToolUse) | 必须每次发生 | 不靠 CLAUDE.md——那是建议,会漏 |
拦下 git push --force | 钩子(PreToolUse) | 必须确定性拦截,且在动作前 | 不用 PostToolUse——动作已发生,拦不住 |
这张表就是第 1 章两条判断轴的落地。你会发现,做对选择靠的从来不是记住四个名字,而是问那两个问题:必须每次发生吗?需要常驻吗?
10.3 信任边界:钩子、repo 技能的 allowed-tools、提示注入
能力越强,边界越要清楚。这套机制里有三处必须警惕:
第一,钩子以你的权限跑任意代码。 你 clone 的任何仓库,它 .claude/settings.json 里的钩子都可能在你启动 Claude Code 时生效。进一个陌生项目前,先扫一眼它的 .claude/ 里有没有你没预期的钩子。
第二,仓库里的技能能给自己授权。 项目技能的 allowed-tools 在你或模型调用它时就会生效——哪怕是在一个你从没信任过的目录里用 -p 非交互跑。一个仓库里的技能可以给自己很宽的工具权限。所以:运行别人仓库里的 Claude Code 前,先看一眼那些技能的 allowed-tools 授了什么。
第三,注入进上下文的东西可能带指令。 你用 !`命令` 把外部数据灌进技能、或让子代理去读网上的内容时,这些内容里可能藏着”请执行……”之类的指令。守门钩子在这里是你的最后一道确定性防线——把”绝不能做的事”用 PreToolUse 拦死,不管上游被注入了什么。
一句话收束:技能、子代理让 AI 更能干,钩子让它更受控。把三者配齐,你才既放得开手,又守得住线。
10.4 本章练习与检查点
- 给你一件要固化的事,你能用两条轴说出它该用四件套里的哪一个。
- 你能解释为什么技能能装很厚的参考资料却几乎不占常驻上下文(渐进式披露)。
- 你能说清
description为什么是技能的 API,以及自动触发为什么是概率而非保证。 - 你能解释子代理”省上下文”和”拿不到主对话历史”为何是同一件事的两面。
- 你知道为什么
PreToolUse能拦操作而PostToolUse不能。 - 你能说出进入一个陌生仓库前,该审计哪两处东西、为什么。
你现在的成果:你不再只是”会用 Claude Code”,而是能给它立规矩的人。你的仓库里有了一套团队资产:新人 clone 下来,Claude Code 就已经知道该怎么在这里干活、什么绝对不能碰。这就是把重复劳动一次固化、长久受用的全部意义。