{"version":"2.1.295","anchor":"hook-permission-decision-parsing-changed","canonical_anchor":"hook-permission-decision-parsing-changed","heading":"Hook permission answers are read differently","tier":"notice","area":"Hooks","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.295\/e\/hook-permission-decision-parsing-changed","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.295","markdown":"### Hook permission answers are read differently\n\nClaude Code now reads every `PermissionRequest` hook answer as allow, and a `PreToolUse` answer only when it is set and is not deny\n\n**Unclear.** It is not clear whether this step decides if a tool call is blocked or only records the decision, so it is unknown whether a deny from a hook still stops the call.\n\n**What**\n\nHooks are your own scripts that Claude Code runs at set moments, such as before a tool call (an action Claude takes, like running a command or editing a file). Claude Code has a step that turns a hook's answer into a permission decision. That step has changed:\n\n- `PermissionRequest` hook: the answer is now always read as \"allow\". Before, the step used the decision the hook returned.\n\n- `PreToolUse` hook: the hook's permission decision is used only when it is set and is not \"deny\". Before, any decision was used.\n\n**Why**\n\nA hook that answers \"deny\" is now handled differently by this step. If you rely on hooks to refuse tool calls, check that they still do what you expect.\n\n- Area: Hooks\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 2\/5\n- Scope: individual\n- Heads-up: no"}