You'll noticeTier: how much it should matter to you
2Useful: my rating, 1 to 5
1Signal: worth watching, 1 to 5
HooksArea: what it touches
Bug FixesKind: in v2.1.287,
Bug FixesSection of the release
What
A 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.
Before, every exit with code 2 was passed to Claude as a Stop hook blocking error.
Why
A broken hook no longer keeps waking Claude over and over with the same error.
One source agreesOne thing we can check says the same as this entry.
Anthropic's release notes agreeFixed hooks configured with asyncRewake waking Claude over and over with "found issues" notifications when the hook's script file is…