{"version":"2.1.287","anchor":"asyncrewake-hook-with-an-unopenable-script-reports-once","canonical_anchor":"asyncrewake-hook-with-an-unopenable-script-reports-once","heading":"A Stop hook whose script can't be opened is reported once, not repeatedly","tier":"notice","area":"Hooks","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.287\/e\/asyncrewake-hook-with-an-unopenable-script-reports-once","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.287","markdown":"### A Stop hook whose script can't be opened is reported once, not repeatedly\n\nIf a background Stop hook fails because its script can't be opened, Claude Code reports it once and ignores identical repeats\n\n**What**\n\nA Stop hook is a command that runs when Claude finishes a turn. One set to run in the background with `asyncRewake` can wake Claude up again by exiting with code 2. If that exit happens because the hook's script file cannot be opened, Claude Code now recognises it as a broken hook rather than feedback. It sends one \"hook could not run\" message, explaining it is a broken installation and not feedback on Claude's work. Identical repeats are dropped and do not wake Claude.\n\nBefore, every exit with code 2 was passed to Claude as a Stop hook blocking error.\n\n**Why**\n\nA broken hook no longer keeps waking Claude over and over with the same error.\n\n- Area: Hooks\n- Names: `asyncRewake`\n- Tier: You'll notice\n- Useful: 2\/5\n- Signal: 1\/5"}