Skip to content

Claude Desktop/web remote control drops [1m] model suffix, silently downgrading context from 1M to 200K #56

@tfvchow

Description

@tfvchow

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

  1. Start Claude Code CLI: claude --debug
  2. Verify: banner shows "Opus 4.6 (1M context)", /context shows claude-opus-4-6[1m] · 1000k tokens
  3. Enable /remote-control
  4. Send a message from Claude Desktop or Claude Code web
  5. Banner changes to "Opus 4.6" (no 1M), /context shows claude-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 /model reselect
  • /model menu 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingimportantWant to address, not pressingtool:claude-codeClaude Code CLI tool

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions