Hooks 里别再冒「Response」:2.1.281 清引导,PermissionRequest 也收紧
CLI 2.1.281 的公开亮点很短:系统提示里 hooks 相关引导去掉了多余的 Response 字样。同一窗口里,2.1.280 已经改了 PermissionRequest 对 agent 型钩子的态度,并给钩子完成事件补了体积字段。写 hooks 的人建议一次对齐,别只升号不改配置。
Hooks 是「到点必跑」的铁律层,和 Skills、MCP 的分工见 MCP、Skills、Hooks 怎么选;和 CLAUDE.md 的边界见 CLAUDE.md 管倾向,Hooks 才是铁律。
2.1.281:引导里的 stray「Response」
changelog 写的是:hooks guidance 里去掉 stray Response token。它动的是模型看到的钩子说明,不是你仓库里某段业务文案。
实操含义:
- 升级后重开会话再观察钩子相关行为;旧会话仍可能带着旧系统提示缓存。
- 若你曾按某篇旧教程,在 hook 输出或示例里刻意塞一个名叫
Response的字段,以「对齐官方引导」——以当前 CLI 为准,别为了对齐幽灵 token 硬造结构。 - 真正决定成败的仍是:钩子命令是否退出成功、stdout/stderr 是否按契约回写、超时是否过短。引导措辞清干净,不会替你修好坏脚本。
社区里有人问「是文档错字还是会触发空跑 hooks」。公开材料只确认引导被清掉;把钩子当契约测一遍比猜内部实现更稳。
PermissionRequest:agent 型钩子不再掺和
2.1.280 起:挂在 PermissionRequest 上的 agent 型钩子不再执行。原因写得很直白——这类钩子的「回答」本来就不能允许或拒绝权限请求。现在会直接报错,并指你去用 command 或 http 型钩子。
对照记:
| 场景 | 建议 |
|---|---|
| 权限弹窗要自动否决 / 放行 | command 或 http 钩子,按官方契约返回 allow/deny |
| 想让子代理「想想再决定」 | 别挂 PermissionRequest;改流程或用人审 |
| 旧配置里塞了 agent 型 | 升级后会报错;删掉或改类型,别指望静默跳过 |
这是安全面上的收紧:权限闸口只接受能真正拍板的钩子类型。
可观测:钩子输出有多大
同一版还把 钩子输出体积,以及「过大、已落到文件」的数量,写进 hook_execution_complete 这类 OpenTelemetry 事件。你在排「会话突然变慢 / 日志爆了」时,可以先看钩子是不是在往事件里塞巨量 stdout。
搭配建议:
- 钩子只回短状态;大 diff、大日志写文件,事件里留路径与摘要。
- UserPromptSubmit 超时提示与 debug 日志会点名是哪条钩子命令超时(同窗口改进)——超时别只怪「网络」。
升级检查清单
claude --version至少到 2.1.281(PermissionRequest 行为从 2.1.280 起就变了)。- 搜一遍 hooks 配置:PermissionRequest 下有没有 agent 型。
- 开一条短会话,故意触发一次权限请求,确认钩子仍按预期 allow/deny。
- 若接了 OTel,确认
hook_execution_complete里能看到输出大小相关字段。
引导措辞会继续变。铁律不变:权限闸口用能拍板的钩子;输出保持短;升级后用真实权限流测一遍。