#hooks
7 篇文章权限拒绝以后,别让 agent 原地重试:用 PermissionDenied 给出可执行改道
自动模式拒绝工具调用时,最浪费时间的不是那次拒绝,而是 agent 带着同一条命令反复撞墙。把拒绝原因变成受约束的改道提示,再决定哪些场景允许重试。
别让并行 agent 各自绿灯:用 PostToolBatch 收口集成验收
一次并行调用五件事,单点都成功但合起来不成立。Claude Code 在整批工具调用结算后留了 PostToolBatch 触发点,用它做批后集成检查,再用 Stop 把没验证的改动拦回去。
别让 agent 每改一行都跑全量测试:按变更路由 Hook 验收
把 agent 的文件改动映射到最小验证命令。先用 Hook 识别路径,再跑对应检查,最后用全量测试守住合并门。
退出码 2 才是门:hook 阻断信号的按事件契约
exit 1 表示失败是 Unix 常识,放进 hook 里却等于把门开着。把拦截信号按事件对齐,再用一台本地自检台证明它真的拦得住。
钩子装上了不等于生效:把 PreToolUse 收窄并审计
拦截型 hook 的价值取决于它有没有真的触发。用 if 条件收窄触发面,用信任规则和调试日志证明它确实在跑。
Copilot hook 的 stdout 是契约:别让拦截静默失效
Copilot hook 的判定完全依赖 stdout:progress 行被剥掉,剩下的行拼成单个 JSON 文档再解析。一次 echo 调试、一个写错的正则,都能让闸门无声消失。
让 coding agent 自己暴露错误:用 Hook 做最短反馈回路
把格式化、定向测试和失败摘要挂到 agent 的工具调用之后,让错误在下一步决策前出现,而不是堆到提交前。