Misleading 'Stop hook blocking error' message should say 'Stop blocked' instead
Description
When a stop hook returns {"decision": "block", ...} to intentionally prevent Claude from stopping (e.g., for iterative loops like the ralph-loop plugin), Claude Code displays:
Stop hook blocking error from command: "bash ..."
The word "error" is misleading because this is expected behavior - the hook is working correctly. Users may think something is broken when the hook is functioning as designed.
Suggested fix
Change the message to something clearer like:
- "Stop blocked by hook"
- "Stop hook: blocked"
- "Stop hook feedback"
Context
This occurs when using the ralph-loop plugin which uses stop hooks to implement iterative development loops (the Ralph Wiggum technique). Each iteration shows "blocking error" which is confusing since it's the intended behavior.
Steps to reproduce
- Install the ralph-loop plugin:
/plugin install ralph-loop - Start a loop:
/ralph-loop:ralph-loop "Do something" --max-iterations 3 - Complete the iteration and observe the message when the stop hook fires
The message says "Stop hook blocking error" when it should indicate the stop was intentionally blocked.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗