必须执行的规则,要写成会运行的钩子,不能只写在提示里。

PreToolUse 在工具执行前触发,适合阻止危险操作;PostToolUse 在成功执行后触发,适合格式化或检查代码;Stop 在结束回复前把关。

拦截逻辑可以返回 allow、deny 或 ask,分别表示放行、拒绝、交给人判断。用 updatedInput 重写输入时,要保留原对象里其他必要字段。

退出码很关键:0 表示成功,2 才是阻塞性失败,1 通常不会阻止继续运行。工具执行后的钩子不能撤销已经发生的动作。

压缩对话后要重新注入工作状态,用带 compact 匹配器的 SessionStart,而不是只挂 PostCompact。

出处:Anthropic 官方课程 Claude Code in Action,第 5 课。