托管 hook 拒绝调用但不结束回合

Claude Code 2.1.296 修复托管设置里的 PreToolUse:以 continue 为 false 拒绝工具调用时,调用被拒绝,当前回合不结束。托管的 prompt hook 拦住一次调用时同样如此。说明没有把修复前的故障拆成「结束了回合」或「没有拒绝」。用户自己的 hook 文件不在这句主语里。

托管 hook 拒绝调用但不结束回合

组织下发的 hook 若把一次工具调用否掉,回合有时会整个停住。Claude Code 2.1.296 修的是托管设置里的两类。claude code 托管 hook continue 指:PreToolUse 用 "continue": false 拒绝某次工具调用,以及托管的 prompt hook 拦住一次调用。修复后的结果是拒绝这次调用,并且不结束当前回合。

作者:CodePass 技术编辑

修复前到底停的是哪一步,说明没拆开

句子给出的是修好之后的行为。它没有单独写旧版本是「把整个回合结束了」,还是「没有真正拒绝」。低于 2.1.296 时,不要用「hook 文件里写了 continue: false」推断回合一定还在,或调用一定被拦下。升级后再看同一次调用:工具没有执行,对话仍可继续,才符合这句。

这里不写怎样把 continue 配成放行。2.1.294 修过另一类问题:写成自然语言说明的 prompt hook 曾把该拦的放过去,见 prompt hook 曾放行。那条是判断把说明句当成放行。2.1.296 这条是托管设置里的拒绝已经发生时,不要把回合一起结束。

主语是托管设置,不是每份用户 hook

「managed settings」是范围。你放在自己项目里的 hook,说明没有承诺会变成同样的「拒绝但不结束」。组织策略没下发到这台机器时,这句对不上你看到的停顿。

同一版还有一条:Esc 或中断发生在 UserPromptSubmit hook、或 mod 的 prompt.submit hook 期间时,无头会话被结束、已输入的提示被清掉,或未检查的提示被放过去。那是提交提示时的中断,不是 PreToolUse 的 continue。两处都出现 hook 和回合,处理的时刻不同。

托管的 prompt hook 拦住的是一次调用,不是把说明句重新解释一遍。2.1.294 的放行问题,升级到 2.1.296 不会自动重写你的说明文本。若调用仍被放行,先对版本和说明句,再对这句「拒绝后回合是否还在」。回合还在、工具却执行了,就不是 2.1.296 这句描述的结果。写作日没有在托管策略下复现。

参考资料