{"version":"2.1.299","anchor":"hook-module-results-can-be-withheld-matcher-error-reworded","canonical_anchor":"hook-module-results-can-be-withheld-matcher-error-reworded","heading":"Hook modules can mark a result as withheld, and a matcher error is reworded","tier":"internal","area":"Hooks","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.299\/e\/hook-module-results-can-be-withheld-matcher-error-reworded","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.299","markdown":"### Hook modules can mark a result as withheld, and a matcher error is reworded\n\nHook module results marked as withheld now trigger the module's own withheld handler, and a matcher error message has new wording\n\n**Unclear.** What marking a hook result as withheld changes for the user.\n\n**What**\n\nHooks are pieces of code, often supplied by plugins, that Claude Code runs at set points. Two small changes affect hook modules:\n\n- When a hook module returns a result marked as withheld, Claude Code now calls that module's own withheld handler, if it has one, before going on.\n\n- An error about an invalid key in a hook's matcher, the rule deciding which events the hook responds to, now ends with \"which a matcher does not keep\" instead of \"which no event has\".\n\n**Why**\n\nThis is a small change to how plugin hooks run. Plugin authors may see the new error wording.\n\n- Area: Hooks\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}