[BUG] Remote Control: busy indicator never clears after /compact — no assistant entry at the compact boundary
Preflight Checklist
- [x] I have searched existing issues (see disclosure below — every prior report is closed
not_plannedby the staleness bot, and #57891 is locked) - [x] This is a single bug report
- [x] I am using the latest version of Claude Code (2.1.251, matching npm
latest)
What's Wrong?
Running /compact from a Remote Control client leaves the client's busy/thinking indicator spinning indefinitely. The compaction result never renders remotely.
The host session is not hung — it compacts successfully and answers the next prompt normally. Only the remote client is wedged, so from the phone a healthy session looks dead.
Disclosure: this is a re-file, per the closing bot's own instruction on #57891 ("please file a new issue and reference this one if it's relevant"). Prior reports — #44665 (Windows, auto-compact), #56811, #57891 — were all closed as not_planned by the staleness bot rather than fixed, and #57891 is now locked to comments. #75215 is open and related. The bug has survived from 2.1.126 to 2.1.251.
What this report adds over those: a transcript-level signature that should be checkable without reproducing on a device.
What Should Happen?
The busy indicator clears when the compaction completes, and the compaction summary renders in the remote client — the same as it does in the local terminal.
Error Messages/Logs
No error is emitted. That is part of the problem — the failure is silent on both ends.
A compaction produces no assistant entry in the session transcript. It writes exactly two records:
{"type":"system", "subtype":"compact_boundary", "compactMetadata":{"trigger":"manual"}}
{"type":"user", "isCompactSummary":true}
Hypothesis, not verified — I have not read the bridge code: if the remote client clears its busy state on a relayed assistant turn-end, a compaction gives it nothing to clear on, because the compaction terminates on a user-type entry.
Corroborating measurement. In one session with 6 compactions (4 manual, 2 auto), the next user prompt after the boundary was recorded with promptSource:"queued" rather than "typed" for 3 of the 5 boundaries that had a following prompt. queued means the input was taken into a busy-state queue at a moment when nothing was running — the client still believed a turn was in flight. In the most recent case the queued prompt arrived 63 seconds after the boundary.
Steps to Reproduce
- Start a long-running session on an always-on Mac and attach it with
--remote-control. - Let the conversation grow long enough that a compaction has real work to do.
- From the remote client (iOS app), run
/compact— with or without custom instructions. - Observe the host: it compacts successfully and is responsive.
- Observe the remote client: the busy/thinking indicator spins indefinitely and the compaction summary never renders. It does not recover on its own.
Also occurs on automatic compaction (trigger:"auto"), not only manual /compact.
Workaround: send a message anyway. It is accepted into the queue, then fires, and the session resumes normally. This is a workaround for the user, not a recovery — there is no way to clear the stuck indicator itself.
Environment
| | |
|---|---|
| Claude Code version | 2.1.251 (Claude Code) |
| Model | Opus |
| Regression? | No — this never worked; no known good version since #44665 |
| Platform | Anthropic API (claude.ai subscription OAuth) |
| OS | macOS (darwin 25.6.0, arm64) |
| Terminal | Terminal.app |
| Client | iOS Claude Code app, Remote Control |
Additional Information
A diagnosability gap worth fixing alongside. Every post-compaction prompt in the transcript carries entrypoint:"cli", including bridge-injected ones — the bridge submits through the same path as local input. The transcript therefore cannot distinguish a remote-originated prompt from a locally-typed one, which makes exactly this class of bug harder to confirm from logs. An origin marker on bridge-injected prompts would help.
Impact. Compaction is unavoidable in long sessions, and being away from the desk is precisely when Remote Control matters. Every compaction currently costs confidence that the session is still alive.