A pre-tool hook blocks a tool call by returning an isError result. What does the model receive, and how does it respond?
Answer: The model receives the isError result as a tool_result block and decides how to recover, just as it would for any other tool failure
A pre-tool hook that returns isError inserts the error as a tool_result block in the conversation. From the model's perspective, the tool was called and failed — it has no way to distinguish a hook-blocked call from a tool that ran and returned an error. The model applies its normal recovery logic: retry, use a different tool, or ask for clarification. This is intentional — it means hook blocks are handled gracefully without special-case orchestrator code.