{"version":"2.1.302","anchor":"hook-failures-now-reported-distinctly-from-cancelled-hooks","canonical_anchor":"hook-failures-now-reported-distinctly-from-cancelled-hooks","heading":"Blocked tool calls now say whether a hook failed or was cancelled","tier":"notice","area":"Hooks","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.302\/e\/hook-failures-now-reported-distinctly-from-cancelled-hooks","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.302","markdown":"### Blocked tool calls now say whether a hook failed or was cancelled\n\nWhen a hook stops a tool call, the message now says the hook failed rather than always saying it did not finish\n\n**What**\n\nA hook is a script or command you set up to run automatically at certain points, such as before Claude Code uses a tool. A tool call is one action Claude takes, like running a command or editing a file. If a hook does not complete, Claude Code blocks the tool call.\n\nThe blocking message now depends on what happened to the hook:\n\n- Cancelled: \"the hook did not finish, so this call was not run\", as before\n\n- Any other outcome: \"the hook failed, so this call was not run\"\n\nBefore, the message always said the hook did not finish. Claude Code also now marks the record of non-cancelled outcomes as a hook failure.\n\n**Why**\n\nBoth you and Claude can now tell a hook that crashed from one that was simply cancelled, which makes broken hooks easier to track down.\n\n- Area: Hooks\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}