[BUG] selected model not clear, the statusline does not show updated model
Status Closed — duplicate
Reported on v2.0.76
Maintainer reply ✓ Yes — claude[bot]
Workaround ✓ Mentioned in thread ↓
Activity 15 comments · opened Jan 20, 2026 · closed Apr 17, 2026
💡 Likely answer: A maintainer (claude[bot], contributor)
responded on this thread — see the highlighted reply below.
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
when selecting model using /model in multiple session, it is not clear which model is selected.
Picture depicts selecting sonnet 4.5 but statusline still shows Opus 4.5
<img width="596" height="795" alt="Image" src="https://github.com/user-attachments/assets/3de3807f-05ea-4151-adc0-9ea11e30da81" />
What Should Happen?
ouput of statusline, if set up, should show correct model.
Error Messages/Logs
Steps to Reproduce
- configure a status line to show the selected model for the session
- have multiple sessions of claude open
- select a model in one
- select a model in another
One of these will not have the correct StatusLine
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.0.76
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
15 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Confirming this bug on macOS.
Reproduction confirmed:
/model sonnet→ Status bar correctly shows 'Sonnet 4.5'/model opus→ Both sessions' status bars now incorrectly show 'Opus 4.5'/modelcommand: Session A is still actually using Sonnet (correct behavior)Root cause:
The statusLine script receives correct per-session data via stdin, but Claude Code appears to use a globally shared rendering cache. When any session updates its status bar, all sessions display that same output.
Impact:
Environment:
~/.claude/settings.jsonRelated issues:
This is the same bug originally reported in #9106 (closed due to inactivity) and duplicated in #15226, #16595, #17820, #18270. The issue has persisted across multiple versions since October 2025.
Seconded - confirmed again as a bug, duplicate under #25885
I see this with both Windows native and macOS Claude Code. It doesn't even require multiple sessions. Just an out-of-band change to ~/.claude/settings.json.
Opus 4.6"model": "sonnet"!lsto update the statuslineSonnet 4.5Still hitting this on Linux (Arch, Claude Code v2.1.44, Opus 4.6).
The root cause is clear: the statusline payload's
model.id/model.display_nameis read from shared state (~/.claude/settings.jsonor equivalent), not from the session's actual active model. Any/modelswitch in any window overwrites the shared preference, and every other window's next statusline render picks up the stale value.Why this matters more than it might seem:
For users running custom statuslines, the model name is the #1 most important signal — it's how you confirm you're actually on the model you think you're on. When it lies, you lose trust in the entire statusline. I've seen this cause real confusion: thinking I'm on Sonnet when I'm actually burning Opus tokens, or vice versa.
Suggested fix: The statusline JSON builder should read the model from the session's in-memory state (whatever was negotiated with the API), not from disk. Each session already knows what model it's using for API calls — that's the value that should be in the payload.
This has 5+ duplicate issues filed over multiple months (#25885, #21121, #20939, #23659, #18270). The
stalelabel should probably come off — the bug is very much alive.I am also experiencing this issue using multiple Claude instances via Windows Terminal. I did find that changing the model of the instance with the wrong status model to a different model and then back to the model I actually want to use, updates the status appropriately. So there must be some error in the logic for retrieving the current model if the instance is using the default.
Reproducing this on v2.1.59 on macOS. Steps: run
/modelto switch from Opus 4.6 to Sonnet, the command confirms "Set model to sonnet (claude-sonnet-4-6)" but the status bar still shows "Opus 4.6". Only fix is starting a new session.Screenshot attached (will upload shortly) — shows the
/modeloutput saying Sonnet in the transcript, while the status bar at the bottom still reads Opus 4.6.<img width="1120" height="1064" alt="Image" src="https://github.com/user-attachments/assets/fe522ee0-936a-4a58-b04b-98736807057a" />
Yeah that's happened to me many times, it's worse if you have multiple terminals open because they're all scrambled
Steps to reproduce:
Expected: System context and status bar show the same model
Actual: Status bar shows Opus 4.6, Claude self-reports as Sonnet 4.6
Environment: Windows Terminal, MSYS shell, Claude Code CLI
adding another bug to this. as the context size is being missed as well.
on the left I have Opus 1 Million. and the right I have Sonnet 200K. the context side in the status line is showing the context side of the Sonnet Agent now, not the Opus 1M. this fixes itself, once a prompt is made to the agent though.
<img width="2704" height="263" alt="Image" src="https://github.com/user-attachments/assets/68b47ba0-814c-4148-be07-551993047597" />
now it's getting confusing which model i am using, causing compaction on Claude Code because i am thinking i am working with Opus model 1 Million
<img width="636" height="157" alt="Image" src="https://github.com/user-attachments/assets/7bfad1d3-b22e-4010-9020-1126dd294ddf" />
Still happening.
Still reproducible on v2.1.77 (macOS Darwin 25.2.0).
After switching from Sonnet 4.6 → Opus 4.6 via
/model, the statusline JSON input continues to report the account's default model:Meanwhile, the transcript correctly records
"model": "claude-opus-4-6"on every assistant message. So the actual model is correct — it's just the statusline data that's stale.Setting
"model": "opus"insettings.jsonworks as a workaround (avoids needing/modeloverride), but the statusline should reflect the active model regardless of how it was selected.5+ duplicates have been filed and closed pointing back here — this is still a live issue.
This is a duplicate of #37596, which was fixed as of version 2.1.85.
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.