Hooks = 自动化规则

Track B: CC 进阶 ~25 分钟

🎯 学完这课你能

这课真正想帮你解决的,是“重复摩擦”。
如果某件事你几乎每次都要提醒 CC 做一次,而且结果还能判断对错,那它就很适合变成 Hook。Hook 的价值不在酷,而在省掉重复劳动和低级遗漏。

📊 你的 CC 数据说:你的最大痛点之一是"外部 API 权限卡住整个 session"(4 次外部阻塞)。这正好是 Hook 能解决的——比如写一个 PreToolUse Hook,在 CC 调用飞书 API 之前自动检查权限和网络连通性。你的 Prisma 版本冲突问题也可以用 Hook 在部署前自动验证。

你有没有想过:每次 CC 改完代码,你都想让它自动跑一下测试?或者每次创建新文件,自动加个文件头注释?

Hooks 就是做这个的——在 CC 的特定操作自动执行你定义的规则。

Hooks = 公司里的自动化流程

想想你们 HR 系统里的自动化:
- 新员工入职 → 自动开通邮箱、飞书、门禁
- 员工离职 → 自动关闭权限、清理工位
- 报销审批通过 → 自动打款

CC 的 Hooks 是一样的逻辑:
- CC 保存文件后 → 自动跑代码检查
- CC 创建 worktree 时 → 自动安装依赖
- CC 执行命令前 → 自动检查是否安全

先问:这件事是不是经常重复

偶尔才做一次的动作,不一定值得自动化;每次编辑后都要跑检查、每次调用外部服务前都要验权限,这类才最适合 Hook。

再问:结果能不能明确判断

如果 Hook 跑完你能清楚知道“通过 / 失败 / 该提醒”,它就更适合自动化;太主观的动作不适合硬挂在 Hook 里。

失败时要决定是阻止还是提醒

像危险命令、权限检查这类适合阻断;像格式建议、提醒补注释这类更适合温和提示,不要让流程过重。

自动化不要把自己也拖慢

Hook 如果太重、太慢、太吵,用户就会想关掉它。最好先从高价值、低打扰的小 Hook 开始。

Hooks 的工作原理

触发事件 如: CC 保存了文件 Hook 执行 自动跑你定义的命令 ✓ 通过 → 继续 ✗ 失败 → 阻止/提醒

CC 的生命周期事件

CC 有 21 种事件可以挂载 Hook。最常用的几个:

PreToolUse

CC 使用工具前触发。比如在 CC 执行 Bash 命令前,检查命令是否安全。
HR 类比:员工提交出差申请,自动检查预算是否充足。

PostToolUse

CC 使用工具后触发。比如 CC 编辑完文件后,自动跑 lint 检查代码格式。
HR 类比:合同签署,自动归档到文档系统。

WorktreeCreate / WorktreeRemove

创建/删除 Worktree 时触发。可以自动安装依赖、复制环境变量等。
HR 类比:新部门成立时,自动配备办公设备。

UserPromptSubmit

你发消息触发。可以自动分析你的需求、注入上下文信息。
HR 类比:收到员工申请后,自动查询该员工的历史记录附在申请后面。

Hook 的四种执行方式

command

执行一条 shell 命令。最常用。
例:npm run lint

http

调用一个 HTTP 接口。
例:通知飞书机器人

prompt

注入额外的提示词给 CC。
例:自动提醒"检查安全性"

agent

触发一个 Agent 去处理。
例:自动让 Agent 做代码审查

怎么配置 Hook

Hooks 配置在 ~/.claude/settings.json(全局)或项目的 .claude/settings.json(项目级)中:

{ "hooks": { "PostToolUse": [ { "matcher": "Edit", // 当使用 Edit 工具后 "hooks": [ { "type": "command", "command": "npm run lint --fix" // 自动修复代码格式 } ] } ] } }
新手建议:先不急着自己写 Hook。理解它是什么、能做什么就够了。等你用 CC 一段时间后,发现总在重复做同一件事——那就是该写 Hook 的时候。

实用 Hook 场景

场景 1:每次改代码自动检查

PostToolUse + Edit → 跑 npm run lint。保证代码风格一致。

场景 2:提交前自动构建验证

PreToolUse + Bash(git commit) → 先跑 npm run build,失败就阻止提交。

场景 3:自动注入项目上下文

UserPromptSubmit → 自动读取相关的 CLAUDE.md 和项目状态,附在你的消息后面。

写 Hook 前,先过这四个判断

1. 这件事是不是高频重复

如果每次都要提醒一次,或者每次都得自己手动检查一次,它就有自动化价值。

2. 能不能明确知道对错

像“build 通过没”“权限检查通过没”这种结果明确的,很适合 Hook;太主观的事情不适合强自动化。

3. 失败时该拦住,还是只提醒

危险命令和关键前置条件适合阻断,格式建议和补充提醒更适合温和提示。

4. 这个 Hook 会不会把流程拖慢

自动化不是越多越好。最好的 Hook 是价值高、运行快、噪音低,不会让你为了自动化再去服务自动化。

📝 小测验

你想让 CC 每次编辑文件后自动跑代码格式化。应该用哪个事件?

📝 小测验 2

以下哪个 HR 流程最像 "PreToolUse" Hook?

← 第 7 课:Plan & Agent 第 9 课:Git Worktree →