{"version":"2.1.317","anchor":"unreadable-input-exits-from-hooks-reported-with-a-generic-me","canonical_anchor":"unreadable-input-exits-from-hooks-reported-with-a-generic-me","heading":"A hook that cannot run its program now reports a plain explanation","tier":"notice","area":"Hooks","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.317\/e\/unreadable-input-exits-from-hooks-reported-with-a-generic-me","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.317","markdown":"### A hook that cannot run its program now reports a plain explanation\n\nWhen a hook's command exits with code 126 or 127, Claude Code shows a short explanation in place of the hook's error output\n\n**What**\n\nA hook is a command you set up to run automatically at certain moments while Claude Code works. Every command ends with an exit code, a number that reports how it went. A shell uses 126 and 127 when it could not run a program, for example because the program is missing.\n\nWhen a hook exits with 126 or 127, Claude Code now replaces the hook's error output with a message saying the exit code is a shell's code for a program it could not run and that the hook's error output is left out. This applies only when the hook carries a command label. Before, the hook's output and error output were passed on unchanged.\n\n**Why**\n\nThis changes what both you and Claude see when a hook's command is missing or cannot be run.\n\n- Area: Hooks\n- Tier: You'll notice\n- Useful: 1\/5\n- Signal: 1\/5\n- Scope: individual\n- Heads-up: no"}