以前是每次改完都让我 review,五分钟的活儿要花二十分钟看代码。现在改成:它自己跑 review,只在发现问题时才拦我。
配置在 .claude/settings.json 的 hooks 里,挂在 Stop 事件上:
{
"hooks": {
"Stop": [{
"matcher": "",
"hooks": [{"type": "command", "command": "bash scripts/review.sh"}]
}]
}
}scripts/review.sh 干三件事:
- git diff --quiet 判断有没有改动,没有就直接 exit 0
- 有改动就调 claude -p 做一次针对性 review,prompt 只给 diff,不给整个仓库
- 输出里含 BLOCKER 才 exit 2(exit 2 会阻断并把消息回给主 agent),其余只写日志
踩坑:一开始 exit 1,结果正常情况也被当成失败,agent 会反复重试同一个动作,白烧 token。exit code 语义要分清:0 放行、2 阻断、其他是错误。
收益:日常小改动基本不再打扰我;它真卡住了才把 diff 和 review 结论一起给我。一个副作用是 review 的 prompt 得单独维护,别复用主对话的上下文,否则越审越长。
主楼这个 exit code 的坑我也踩过。补一句:不同客户端对 exit 2 的处理不一样,动手之前先在最简场景验一次。
继续逛逛