这是Claude Code通关手册的第八篇,推荐5个实用的Hook,代码质量提升 3 倍
上周三下午,我让 Claude Code 帮我重构一个老模块。
它干得挺快,噼里啪啦一顿输出。我切出去喝了口水,回来一看------它正准备把我一个还没有提交git的源文件直接覆盖掉。
手抖着点了"拒绝",后背全是冷汗。
那一刻我突然意识到:不是 Claude 坏,是我太信任它了。
每次它问"我可以执行这个命令吗?"我都点"允许",点多了就麻了。它要 rm -rf 我也点,它要改 .env 我也点------我把 AI 当成了不会犯错的神,但它只是个能力很强的实习生。
我翻了一遍 Claude Code 的文档,又刷了创始人 Boris 的 X。他分享了自己在用的几个 hooks,我全抄下来,砍掉一半,最后剩下 5 个。
装上之后,Claude 还是那个 Claude,但我再也没怕过它。
Hook 到底是什么?3 秒钟理解
你每次让 Claude 跑命令、改文件,它都会弹窗问你"行不行?"------这就是最后一道防线。
Hook 就是在弹窗之前或之后,自动跑一段你写好的脚本。
-
你想让它自动允许某些命令?Hook 能干。
-
你想让它打死也不准
rm -rf?Hook 能干。 -
你想让它每次写完代码自动格式化?Hook 也能干。
说白了,Hook 就是给 Claude 装上"自动驾驶 + 刹车片"。
Claude Code 总共支持 27 种 hook,我挑 5 个最实用的,每天救我于水火。
Hook 1:每次启动,自动给 Claude "补课"
痛点 :每天早上打开 Claude Code,它都像失忆了一样。
"当前分支是什么?"
"最近改了啥?"
"TODO 文件在哪?"
你敲三行字,它回三句废话,两分钟没了。
解决方案 :SessionStart hook
Claude 一启动,自动跑一个脚本,把当前分支、最近 5 条 commit、未提交的改动一股脑塞给它。
脚本长这样(你复制就行):
bash
#!/bin/bash
echo "Current branch: $(git branch --show-current)"
echo ""
echo "Recent commits:"
git log --oneline -5
echo ""
echo "Uncommitted changes:"
git status --short
效果:Claude 一开机就知道你昨天干到哪了,冷启动时间归零。
Hook 2:打死也不准 rm -rf
痛点 :Claude 有时候真的很"勇"。
它觉得临时文件太多,就想 rm -rf ./。
它觉得环境变量该更新,就想直接覆盖 .env。
你手一抖点了"允许",哭都来不及。
解决方案 :PreToolUse hook
在任何危险命令执行之前拦截。你可以选择:
allow(放行)deny(拒绝)ask(问你要不要)- 甚至偷偷改参数 (比如把
rm -rf ./改成rm -rf ./dist,缩小爆炸半径)
拦截 rm -rf 的脚本核心就这几行:
bash
if echo "$COMMAND" | grep -qE 'rm\s+-rf'; then
# 返回 deny,并说明原因
jq -n '{permissionDecision: "deny", ...}'
fi
效果 :再也不用担心 Claude 把你家目录删了。
Boris 还用这个 hook 记录每一条 bash 命令------相当于审计日志,随时回溯 Claude 干过啥。
Hook 3:写完代码自动格式化,再也不卡 CI
痛点 :Claude 写的代码,10 次里有 9 次没问题,但总有 1 次漏个分号、缩进不对、行尾多个空格。
CI 一跑就挂,你还得手动修,烦不烦?
解决方案 :PostToolUse hook
Claude 写完文件之后,自动跑一次格式化工具。
bash
case "$FILE_PATH" in
*.ts|*.tsx|*.js) prettier --write "$FILE_PATH" ;;
*.py) black "$FILE_PATH" ;;
*.go) gofmt -w "$FILE_PATH" ;;
esac
效果:Claude 专注写逻辑,格式问题交给脚本。CI 再也不因为空格报错了。
Boris 原话:
Claude usually generates well-formatted code out of the box, and the hook handles the last 10% to avoid formatting errors in CI later.
那 10% 不值得人管,让 hook 干。
Hook 4:Claude 说"搞定了"?先让它自己跑测试
痛点 :Claude 经常自信满满:"重构完成,可以合入了!"
你信了,一跑测试------全红。
你又得回去跟它掰扯"为什么你没测边界条件"。
解决方案 :Stop hook
Claude 觉得活干完了 的那一刻,自动跑测试、跑 lint。
挂了就返回 block,Claude 必须继续改,直到全绿为止。
脚本核心:
bash
if ! mvn test --quiet; then
jq -n '{decision: "block", reason: "Maven 单元测试失败,请修复后再结束。"}'
exit 0
fi
效果 :Claude 变成了一个"不把测试跑通就不下班"的卷王。
你再也不用当验收员了。
Hook 5:活干完了,手机通知我
痛点 :大重构经常跑十几分钟。
你切出去开会、刷手机、吃饭,回来一看------Claude 卡在一个权限问题上等了半小时,进度条一动不动。
解决方案 :Stop hook + 飞书/钉钉/企业微信机器人
Claude 跑完活(无论成功还是卡住),自动往你手机发一条消息。
配置都不用写脚本,直接填 webhook:
bash
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "http",
"url": "https://open.feishu.cn/open-apis/bot/v2/hook/xxx",
"headers": { "Content-Type": "application/json" }
}]
}]
}
}
效果:Claude 跑完活,你手机"叮"一声。再也不用来回切窗口看它好了没。
不过现在 Claude Code 出了 remote control,我直接手机上看状态,这个 hook 用得少了。但如果你还没升,它依然很香。
最后:别把 AI 当魔法,把它当基础设施
Boris 有句话我特别认同:
Treat Claude Code as infrastructure, not magic.
基础设施的意思是:该有护栏的地方要有护栏,该自动化的地方要自动化。
Hooks 就是这基础设施里的"水泥"。
你不需要装 27 个,从你最疼的地方开始:
- 每次启动都要重新交代状态 → 装
SessionStart - 怕它删库跑路 → 装
PreToolUse拦危险命令 - 烦透格式问题卡 CI → 装
PostToolUse自动格式化 - 不想当验收员 → 装
Stop自动跑测试 - 想手机收通知 → 装
Stop+ 飞书机器人
5 个 hook,一下午配好,之后天天受益。
未来已来,Enjoy AI!但记得给它装好刹车。
你还有什么好用的 hook 用法?评论区交个朋友~