{"version":"2.1.299","anchor":"hook-default-responses-become-functions-with-reason","canonical_anchor":"hook-default-responses-become-functions-with-reason","heading":"Plugin hook denials now carry a reason","tier":"notice","area":"Plugins","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.299\/e\/hook-default-responses-become-functions-with-reason","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.299","markdown":"### Plugin hook denials now carry a reason\n\nDefault deny responses for plugin hooks such as tool.check and agent.spawn now include a reason alongside the decision\n\n**What**\n\nPlugins (add-on packages for Claude Code) can register hooks, which are small handlers Claude Code runs at certain moments. The default \"deny\" response for several of these hooks now takes a reason and passes it along with the decision. For example, a denied tool.check now gives back a decision of \"deny\" together with a reason.\n\nThis covers these hook events:\n\n- tool.call\n\n- tool.check\n\n- agent.spawn\n\n- prompt.submit\n\n- prompt.mention\n\n**Why**\n\nWhen a plugin hook blocks something, the block can now explain why, instead of being a bare refusal.\n\n- Area: Plugins\n- Names: `tool.check`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 2\/5\n- Scope: individual\n- Heads-up: no"}