这篇继续围绕 Claude Code 展开,主题是「Claude Code Hooks 怎么用?把格式化、检查、提醒自动接上」。前面几篇已经讲过安装、settings.json、-p 模式和 CLAUDE.md,这次往真实使用流程里再拆细一点。
Hooks 是什么
如果你把 Claude Code 想成一个「会调工具的助手」,那 Hooks 就是「在它每次调工具的前后插一段你自己的脚本」。它能让你在 AI 行为发生之前或之后做一些事情,比如:
- 让它在写完文件后,自动跑一遍 lint
- 让它在删除文件前,先打印一条警告
- 让它在任务结束时,发一条桌面通知
说白了,Hooks 把 Claude Code 从「单一工具」变成「可编程的工作台」。
常见 Hook 类型
根据社区里讨论比较多的几类(请以你使用版本的官方文档为准):
1. PreToolUse
在调用工具之前触发。可以用来做权限检查、阻止危险命令、记录日志。
2. PostToolUse
在调用工具之后触发。最常见的用途是:写完文件自动跑 formatter,比如 prettier、black、gofmt。
3. Stop
在一次任务结束时触发。可以用来发通知、写总结、推 Slack 消息。
4. UserPromptSubmit
在你提交一个新提示词时触发。可以用来在提示前注入额外上下文,比如把 git status 当前状态自动加进去。
5. Notification
模型有问题要问你时触发,可以转成系统通知,免得你忘了它在等你。
一个实际场景:写完代码自动格式化
假设你的项目用 Prettier,每次 Claude Code 写完 .ts 文件,你都希望自动跑一遍格式化。
你可以配置一个 PostToolUse hook,监听文件写入事件,触发 prettier --write 命令。这样 AI 写出来的代码就永远是规范风格,不用你提醒。
类似的还有:
- Python 项目:写完
.py自动跑ruff或black - Go 项目:写完
.go自动跑gofmt - 前端项目:写完文件自动跑
eslint --fix
第二个场景:危险命令拦截
你可能担心 Claude Code 不小心跑 rm -rf 或者 git push --force。这种情况可以用 PreToolUse hook:
- 检查它要执行的 shell 命令
- 如果命中危险关键字,直接拒绝执行
- 如果是中等风险命令,要求人工确认
这条 hook 本质上是给你的项目加了一层「软防火墙」。
第三个场景:任务结束发通知
用 Stop hook,在每次任务结束时调一下 osascript(Mac)或者 notify-send(Linux)或者推一条 Slack 消息。
好处是:你让 AI 跑一个长任务时,可以去做别的事情,任务一结束你就能收到提醒。
配置思路
Hooks 一般在 settings.json 或专门的 hooks 配置文件里声明,结构大致是:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"command": "prettier --write $FILE"
}
]
}
}
(具体字段以你使用版本为准。)
核心是三件事:触发时机、匹配条件、执行命令。
几个注意事项
- hook 脚本要快:每次工具调用都跑,慢一点就拖慢整体节奏
- hook 失败不要默默吞掉:要打印明显错误,否则你不知道 lint 其实没跑
- 不要在 hook 里做关键决策:hook 是「辅助」,关键路径还是模型自己的判断
- 危险命令拦截要白名单 + 黑名单结合:纯黑名单容易漏,纯白名单又太死板
小结
Hooks 是 Claude Code 从「能用」到「好用」的一个关键升级。它不会让 AI 变聪明,但能让你把日常重复动作(格式化、检查、通知)从大脑里卸载下来,让协作更顺滑。

延伸阅读
如果你还没看前面的基础篇,可以先看《Claude Code 从零搭建》《settings.json 权限配置》《CLAUDE.md 项目规则》这几篇,再回来看本文会更顺。
小结
Claude Code 真正好用的地方,不是让它一次性替你完成所有事,而是把流程拆清楚:哪些让 AI 做,哪些必须人来确认,哪些结果要留下验证记录。这个习惯养成之后,它就更像一个靠谱的编程搭档。