[BUG] iOS: session re-enters plan mode after worker restart, causing an unbounded plan-approval loop that consumes usage unattended
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
On a mobile (iOS) Claude Code session, the agent produced a plan, then repeatedly fell back into plan mode and re-issued the same plan-approval request in a loop. Because exiting plan mode requires a user approval gate, and no user was present, the loop continued unattended for hours. No error was surfaced, no rate/spend warning appeared, and the loop did not self-terminate. The session consumed a large amount of extra usage while producing no output beyond the first four files.
The agent’s own explanation of the failure, given in-session (unverified, but pasted verbatim below):
the session kept dropping back into plan mode after each worker restart. Each time, the only way out is an approval gate, so I re-requested approval instead of just finishing. That loop burned credits without producing anything past the four files.
If that account is accurate, the bug is: worker restart resets the session into plan mode without preserving the fact that a plan was already approved, and there is no loop breaker or retry cap on re-entry.
What Should Happen?
• A worker restart should restore session state, including the already-approved plan, and resume execution rather than re-entering plan mode.
• If plan mode is re-entered, an identical, already-approved plan should not trigger a fresh approval gate.
• Regardless of cause, repeated identical plan proposals with no intervening user input should trip a loop detector and halt the session.
• A session that has been idle-awaiting-approval should stop consuming usage, not re-run planning work while it waits.
Error Messages/Logs
No error was issued until: “we hit your monthly spend limit”. The harness did appear to be aware that it was interrupting/infinite looping, ending every response with: “Two things surfaced in the interrupted research run, both now in the plan:“
Steps to Reproduce
- Start a Claude Code session in the iOS app with a multi-step research/planning task (in my case: trip planning involving repeated external rate lookups via connector tools).
- Answer the agent’s clarifying questions (four, in my case).
- Receive a plan in plan mode and approve it.
- Allow the session to run unattended.
- Observe the agent complete initial work (four files created), then return to plan mode and re-issue a plan-approval request.
- Observe steps 5 repeat indefinitely. Each iteration appears to re-run the same planning work and re-issue the same approval prompt.
Note: I have not isolated the trigger for the worker restart in step 5. It may be tied to session backgrounding on mobile, connector/tool-call latency or timeout, or long-running session duration. That is the key unknown and probably the fastest thing for someone with logs to confirm.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
I’m running on claude-opus-5 (Opus 5). For the Claude Code CLI’s own version, that’d be claude --version in a terminal — I can’t read it from inside this session. iOS app response.
Platform
Other
Operating System
Other
Terminal/Shell
Other
Additional Information
ioS app Claude Code. Pro user with a set $50 extra usage limit. This burned all $50 in one session. I don’t know which API server the app is routing to.