Jammed background tasks + Remote Control reconnect loops silently consume Max usage window after forced token rotation
Status Open
Reported on v2.1.229
Maintainer reply None cached
Activity 2 comments · opened Aug 19, 2026
Summary
After a Claude Desktop auto-update forced an OAuth token rotation (all sessions invalidated at once), a combination of (a) Desktop background tasks (spawn_task chips) stuck in a jammed state, (b) sessions hosting Remote Control that entered reconnect/fail loops against invalid credentials, and (c) restoring/re-hosting threads into a second account burned through an entire Max 5-hour usage window with zero user-visible progress. There is no circuit breaker, no progress-vs-spend signal, and no per-session usage attribution to identify the burner while it is happening.
Environment
- macOS Darwin 25.5.0 (arm64)
- Claude Desktop 1.32352.1 (auto-updated overnight ~00:14 local; update invalidated all OAuth tokens on the machine)
- Claude Code engine 2.1.229 (Desktop-embedded) / 2.1.235 (CLI)
- Two Max accounts on one machine (separate Desktop profiles via --user-data-dir)
Timeline / mechanism
- Overnight auto-update rotates tokens; every session on the machine 401s.
- Sessions that were hosting Remote Control enter reconnect loops; claude.ai threads show recurring 'Remote Control disconnected' banners. Threads whose host process died continue to show 'N running tasks'.
- Two Desktop spawn_task chips jammed (running, no progress). User forwarded the work to the second Max account and restored/resumed threads there.
- The second account's 5-hour usage window was fully consumed by this restoration/retry activity without a single task completing.
Problems
- No circuit breaker: tasks/sessions retrying against a dead or rotated credential (or otherwise not progressing) keep consuming the subscription usage window indefinitely.
- No attribution: nothing in Desktop or claude.ai shows which session/task is consuming the window, so a runaway burner can only be found by killing things one at a time.
- Stale 'running tasks' state: threads whose local host process is gone still display running tasks, inviting the user to wait on work that can never complete.
- Update timing: the auto-updater swaps the binary and rotates tokens while sessions (including Remote Control hosts and background tasks) are live, which is what seeds the loop.
Asks
- Exponential backoff + hard stop for background tasks/hosts that repeatedly fail auth or make no forward progress; surface a 'stalled' state instead of spinning.
- Per-session/per-task usage attribution visible to the user (even a coarse breakdown would let a runaway be identified before the window is gone).
- Reconcile 'running tasks' indicators with actual host liveness.
- Defer binary swap / token rotation while sessions are actively hosting Remote Control or running background tasks, or re-auth them gracefully afterwards.
🤖 Generated with Claude Code
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗