[BUG] /goal keeps re-prompting after the user says stop; the agent can't pause it, and the Code tab never shows a goal is active
What's Wrong?
I set /goal Read and pursue <path>/HANDOVER.md in a Claude desktop Code tab session. Later I told the session to stop, many times and in plain words. The goal kept re-prompting it anyway, over three days.
From the session's transcript JSONL:
- The goal's Stop hook fired 74 times and blocked the turn 73 times.
- In 55 of those blocks, the evaluator's reason quotes my stop messages and still rules the condition not met. Example below.
- The 9-consecutive-block safety cap fired 3 times. Each time, the loop started again on my next message.
There are four separate failures:
- The stop check ignores an explicit user stop. It judges only the goal condition. It can read "STOP" in the transcript, say so in its reason, and block anyway.
- The agent can't pause or clear the goal. It has no tool for it. All it could do was tell me to run
/goal clear, then reply "Stopped." and get re-prompted again. - Nothing in the Code tab shows that a goal is active. There is no indicator and no pause control. The only sign is a collapsed "Hook re-prompted Claude" block, which reads like a hook installed in a settings file. The cap message ("check stop_hook_active in the input…") also reads like advice for a user-written hook. Both the agent and I spent a long time searching settings.json, project settings, plugins and managed settings for a hook that doesn't exist on disk. The goal is a session-scoped Stop hook held in the running process.
- No clear way out. The agent set
CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0in~/.claude/settings.json, expecting it to stop the re-prompts. The running session kept re-prompting, and nothing said whether a restart was needed or what would actually work./goal clearis the only fix, and nothing in the UI points to it.
What Should Happen?
- An explicit user stop ("stop", "pause", "remove this") pauses the goal. Either the stop check treats a user-ordered stop as a pass, or the goal pauses itself.
- The agent gets a tool to pause or clear the active goal when the user asks. Stopping shouldn't depend on the user knowing a slash command.
- The Code tab shows an active goal in a persistent bar with pause/resume and clear controls. Codex has this: its goal bar with a pause/play button is always visible and works.
- The "Hook re-prompted Claude" block names its source, for example "Goal re-prompted Claude. Run /goal clear or press Pause to stop."
- After the 9-block cap fires, the goal pauses instead of starting again on the next message.
Error Messages/Logs
Hook re-prompted Claude
[Read and pursue <path>/HANDOVER.md]: The condition requires pursuing HANDOVER.md, but the transcript shows the user halted work ('STOP! ...') and asked for the goal to be cleared ('REMOVE THIS ... HOOK, NOW.'). [...] The pause is user-directed, so the handover is not being pursued and the condition is not satisfied.
A hook blocked the turn from ending 9 consecutive times — overriding and ending turn. For Stop/SubagentStop hooks, check stop_hook_active in the input and return success while it's true. Set CLAUDE_CODE_STOP_HOOK_BLOCK_CAP to raise this limit.
Steps to Reproduce
- In the Claude desktop Code tab, run
/goal Read and pursue <a file describing multi-day work>. - Let it work for a few turns, then send "STOP".
- The agent says it has stopped. The goal's Stop hook re-prompts it.
- Send "stop" again. It keeps going until the 9-block cap, then starts again on your next message.
Claude Model
Opus 5.5 (claude-opus-5-5)
Is this a regression?
I don't know
Claude Code Version
2.1.293 (Claude desktop 2.31226.0, Code tab)
Platform
Anthropic API
Operating System
macOS 26.6.2
Terminal/Shell
Claude desktop app (Code tab)
Additional Information
Related: #100075 (stop check rejects a user-ordered handoff), #94041 (no way to acknowledge a hold), #100634 (/goal clear stuck in the queue behind the looping turn), #100532 (pause/clear a goal without typing), #93230 (goal hidden in scrollback).
This report adds three things those don't cover: the evaluator explicitly cites the user's stop and blocks anyway, the agent has no way to comply, and the desktop UI gives no sign that a goal is the cause.