{"version":"2.1.269","anchor":"toolcheck-hook-denials-now-re-enter-the-denyask-pipeline-i","canonical_anchor":"toolcheck-hook-denials-now-re-enter-the-denyask-pipeline-i","heading":"tool.check hook denials now re-enter the deny\/ask pipeline instead of hard-stopping","tier":"notice","area":"Plugin Hooks","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.269\/e\/toolcheck-hook-denials-now-re-enter-the-denyask-pipeline-i","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.269","markdown":"### tool.check hook denials now re-enter the deny\/ask pipeline instead of hard-stopping\n\nA denial from a tool.check hook now runs back through the normal deny\/ask approval flow instead of stopping immediately\n\n**What**\n\nWhen a `tool.check` hook (a script that can approve or block a tool call before it runs) denies a tool call, Claude Code no longer just accepts that denial and stops. It now sends the result back through a handler that re-applies any deny-rule overrides, and if the hook's verdict is \"ask\" rather than a flat denial, it still routes the request through the normal interactive approval flow so you can approve or reject it yourself.\n\n**Why**\n\nThis ensures a hook's \"ask\" verdict actually reaches you for a decision instead of silently being treated as a hard stop, and keeps deny-rule handling consistent regardless of whether a denial came from a hook or elsewhere.\n\n- Area: Plugin Hooks\n- Names: `tool.check`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 2\/5"}