第 1 章 / 共 10 章
你在给 AI 写规矩,不是写代码
1.1 从”第五次敲同样的提示”说起
固化的信号很好认:当你第五次把同一段话贴进对话框,就该停下来把它存起来了。
但”存起来”有四种存法,新手最常见的困惑不是不会存,而是存错地方。把一段只在发版时才用的格式规范塞进 CLAUDE.md,它会每次会话都占着上下文;把一件”每次提交前必须发生”的检查交给模型自觉,它迟早会忘。选错工具,固化非但没帮你省事,反而带来新的负担。
所以动手之前,先要有一把尺子。
1.2 两条判断轴:确定性 × 常驻
只需要问两个问题,就能把四件套分开。
第一个问题:这件事必须每次都发生吗,还是让模型看情况决定? 这是确定性轴。“每次提交前跑 lint”必须每次发生,不能靠模型记性;“帮我审一下这段 diff”则是看情况才做的事。
第二个问题:它需要一直待在上下文里吗,还是用到时再加载? 这是常驻轴。项目的通用规矩(比如”这个仓库用 pnpm 不用 npm”)值得常驻;一份只在改数据库时才用的迁移规范,就不该每次会话都占着位置。

1.3 四件套各自站在象限的哪一格
把两条轴交叉,四件套的位置就清楚了:
| 你要固化的东西 | 用什么 | 触发方式 | 为什么是它 |
|---|---|---|---|
| 一段你会反复输入的提示 | 命令 / 技能 | 你输入 /名字 | 只是提示复用,机制越轻越好 |
| 一套只在特定场景用的知识或流程 | 技能 | 你调用,或模型判断相关时自动加载 | 用到才付上下文的钱 |
| 一件消耗大量读取的调查工作 | 子代理 | 你点名,或模型委派 | 需要一个独立的上下文来装脏活 |
| 一件必须每次都发生的动作 | 钩子 | 事件触发,不经模型判断 | 只有它是确定性的 |
这张表就是第 8 章那个决策象限的展开。本篇接下来的每一件产物,都能在这张表里找到自己的位置:release-notes 是技能,release-scanner 是子代理,自动格式化是钩子。
1.4 一个更新:命令已经并入技能
如果你之前学过”自定义命令和技能是两种东西”,这里要更新一下认知。在现在的 Claude Code 里,命令已经并入技能:.claude/commands/deploy.md 和 .claude/skills/deploy/SKILL.md 都会生成 /deploy,用起来完全一样。你手头老的 .claude/commands/ 文件仍然照常工作。
区别只在于技能多了几样能力:它有一个目录可以放附属文件,有 frontmatter 可以控制”由你还是由模型来调用”,还能在相关时被模型自动加载。
这解释了为什么这份教程把重点放在技能上——命令只是技能最轻的一种形态。下一章我们就从这个最轻的形态开始,五分钟做出第一个产物。