-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Note: This root cause analysis was done collaboratively with Claude Code (Opus 4.6). If that bothers you, feel free to scroll past. Nobody's getting paid here — let alone using my own subscription to troubleshoot for Anthropic. Just sharing what I found in case it helps.
Summary
When Claude Desktop or Claude Code web connects to a Claude Code CLI session via /remote-control, it sends a set_model command with claude-opus-4-6 (without the [1m] suffix), silently downgrading the session from 1M to 200K context. The change persists for the lifetime of the process (survives /clear but not restart). Any extended session running over 200K will immediately hit auto-compaction or "context limit reached" if affected.
Tested on Claude Code CLI v2.1.76, Claude for Mac v1.1.6679 (f8f4ff).
Apparently iPhone remote control is not affected — no CLI log indicates a set_model event from iPhone.
Reproduction
- Start Claude Code CLI:
claude --debug - Verify: banner shows "Opus 4.6 (1M context)",
/contextshowsclaude-opus-4-6[1m] · 1000k tokens - Enable
/remote-control - Send a message from Claude Desktop or Claude Code web
- Banner changes to "Opus 4.6" (no 1M),
/contextshowsclaude-opus-4-6 · 200k tokens
Under the Hood
CLI debug log (~/.claude/debug/<session>.txt)
Desktop sends a set_model control request over the remote control bridge on initial connection, immediately before the first message:
20:09:03 [bridge:repl] Inbound control_request subtype=initialize
20:09:05 [bridge:repl] Inbound control_request subtype=set_model ← strips [1m]
20:09:05 [bridge:repl] Sent control_response for set_model result=success
20:09:05 [bridge:repl] Ingress message type=user: "Hi from Desktop"
After /model reselect, the second Desktop message only sends initialize — no set_model:
20:15:03 [bridge:repl] Inbound control_request subtype=initialize ← no set_model
20:15:15 [bridge:repl] Ingress message type=user: "Hi from Desktop again"
Desktop log (main.log from debug zip)
LocalAgentModeSessions.setModel: sessionId=local_..., model=claude-opus-4-6
LocalAgentModeSessions.sendMessage: sessionId=local_..., messageLength=150
Desktop calls setModel("claude-opus-4-6") — without [1m] — before sendMessage.
Side effects
- Banner shows "Opus 4.6" instead of "Opus 4.6 (1M context)" — doesn't refresh after
/modelreselect /modelmenu gains a phantom option (Opus 4.6 / claude-opus-4-6) — the base model persists as a separate entry within the process
Workaround
| Action | Restores 1M? |
|---|---|
/model reselect |
Yes — persists, Desktop won't downgrade again within same remote control session |
Restart claude |
Yes |
/clear |
No |
/resume (same process) |
No |
/resume (after restart) |
Yes — restart clears the in-memory state |