/goal re-blocks every stop while waiting on an external event, forcing endless polling turns
Status Open
Maintainer reply None cached
Activity 1 comment · opened Oct 15, 2026
Summary
While a /goal condition is active, the Stop hook feedback fires again on every attempted stop. When the condition depends on something outside the session's control, such as another party merging a pull request, the session receives an identical "not satisfied" message dozens of times in a row. Each one forces a new turn and a new tool call, and the model can only restate that it is still waiting.
Observed
- The goal was to deliver a set of tickets, and part of that depended on a peer session merging its pull request.
- The peer needed several hours (a full end-to-end run plus CI).
- For that whole time, every stop attempt was blocked and the full goal text and a paragraph of reasoning were re-fed. This happened roughly 80 times.
- The loop spent tokens and context on identical polling turns and cluttered the transcript. The model had no way to say "blocked on an external event; check again later" that the hook would accept.
Expected
- The evaluator should recognise a blocked state that is waiting on an external event and back off, or pause the check instead of re-prompting at once.
- A repeated identical verdict should be rate-limited or collapsed.
- There should be a way for the model to declare "blocked, waiting for X" so the hook allows the stop, or a documented escape such as a maximum number of consecutive blocks.
Environment
Claude Code CLI on Linux, /goal with a session-scoped Stop hook.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗