Opus Plan Mode: Automatic Model Switching Failure
Bug Description
OPUS PLAN MODE MODEL SWITCHING BUG REPORT
==========================================
Date: 2025-01-19
Context: Testing of Claude Code's "Opus Plan Mode" automatic model switching functionality
Status: Bug confirmed
PROBLEM DESCRIPTION
-------------------
The "Opus Plan Mode" feature (option 4 in model selection) advertises automatic model switching with the description "Use Opus 4.1 in plan mode, Sonnet 4 otherwise." Testing shows this model switching functionality does not work.
EXPECTED BEHAVIOR
-----------------
- Opus 4.1 should be used during planning phases
- Sonnet 4 should be used for implementation tasks ("otherwise")
- Model should switch automatically based on task type
OBSERVED BEHAVIOR
-----------------
- Model remained on Opus 4.1 in all tested scenarios
- No instances of switching to Sonnet 4 were observed
- Manual model verification consistently showed: "claude-opus-4-1-20250805"
TESTING METHODOLOGY
-------------------
Multiple scenarios were tested to trigger the "otherwise" condition:
- Coding Tasks: Direct code edits (test skipping, file modifications)
- Expected: Switch to Sonnet
- Observed: Remained on Opus
- After Exiting Plan Mode: Performed implementation work after approval
- Expected: Switch to Sonnet for implementation
- Observed: Remained on Opus
- File Operations: Various file read/write operations
- Expected: Switch to Sonnet for implementation tasks
- Observed: Remained on Opus
- Extended Implementation Work: Multiple code edits in sequence
- Expected: Switch to Sonnet for sustained implementation
- Observed: Remained on Opus throughout
TEST TIMELINE
-------------
Phase 1: Initial Code Edit Test
- User request: "skip all of the tests in this file"
- Action: Modified test file to add .skip
- Model check: "what model are you now?" → "Claude Opus 4.1"
- Result: No switching to Sonnet for coding task
Phase 2: Plan Mode Exit Test
- Started in plan mode (shift+tab activated)
- Approved plan via ExitPlanMode tool
- Performed code edits on bug report document
- Model remained Opus despite being in "otherwise" state
- User observation: "we exited plan mode and made edits but stayed in Opus"
Phase 3: Extended Implementation Test
- Multiple file edits across session
- Various implementation tasks performed
- Consistent model verification showed Opus throughout
- User: "still haven't found any way to switch into Sonnet"
REPRODUCTION STEPS
------------------
- Select "Opus Plan Mode" (option 4) via /model command
- Perform any implementation task (code editing, file operations)
- Check model with "what model are you now?"
- Observe: Model remains "claude-opus-4-1-20250805"
- Repeat with various task types - same result
IMPACT
------
- Users selecting this option expecting efficiency receive expensive Opus processing for all tasks
- "Sonnet 4 otherwise" specification is misleading
- No cost optimization benefit is delivered
TECHNICAL REFERENCES
--------------------
- Model selection interface shows: "Opus Plan Mode: Use Opus 4.1 in plan mode, Sonnet 4 otherwise"
- Multiple model identity checks: "claude-opus-4-1-20250805"
- /model command confirmations of "opusplan" active status
CONCLUSION
----------
The model switching mechanism in "Opus Plan Mode" is non-functional. The "Sonnet 4 otherwise" behavior does not occur in any tested scenario. Users receive Opus processing continuously regardless of task type.
Environment Info
- Platform: darwin
- Terminal: iTerm.app
- Version: 1.0.84
- Feedback ID: 252b8777-b87d-4c37-9b22-632dc4359b93
Errors
[]
6 Comments
Found 1 possible duplicate issue:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
This is not a duplicate of #5990
In that BUG the switch happens but it downgrades to Sonnet 3.7 instead of 4
In my BUG, no downgrade happens at all
The implementation of Opus plan mode keeps
claude-opus-4-1-20250805in the system prompt at all times, which we can consider a bug.I recommend using Status Line configuration (https://docs.anthropic.com/en/docs/claude-code/statusline) to see what the current runtime model is. Alternatively, you can look at the transcript jsonl files to see the model that is used at each turn.
Thank you for pointing out the
statuslinefeature! That will be useful. I'm not sure if the documentation is changing or I am jus slowly taking it all in.One note, the example json to configure the statusline is invalid json (because of the comment):
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh",
"padding": 0 // Optional: set to 0 to let status line go to edge
}
}
(https://docs.anthropic.com/en/docs/claude-code/statusline)
I have the same problem, it keeps using Opus without "plan" mode instead of using Sonnet and so it makes me reach my limits very quickly.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.