[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]
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

  1. configure a status line to show the selected model for the session
  2. have multiple sessions of claude open
  3. select a model in one
  4. 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_

View original on GitHub ↗

15 Comments

github-actions[bot] · 7 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/18270
  2. https://github.com/anthropics/claude-code/issues/15467
  3. https://github.com/anthropics/claude-code/issues/15226

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

hongvincent · 7 months ago

Confirming this bug on macOS.

Reproduction confirmed:

  • Session A: /model sonnet → Status bar correctly shows 'Sonnet 4.5'
  • Session B (separate terminal): /model opusBoth sessions' status bars now incorrectly show 'Opus 4.5'
  • Verified with /model command: Session A is still actually using Sonnet (correct behavior)
  • Only the status bar display is wrong (UI bug, not functional bug)

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:

  • UX/Trust issue: Users cannot trust the status bar to show the correct model
  • Cost concern: Users may think they're accidentally using expensive models (Opus) when they're actually on cheaper ones (Sonnet/Haiku)
  • No functional impact: Actual model usage is correct, only display is broken

Environment:

  • Platform: macOS (Darwin 25.2.0)
  • Claude Code version: 2.0.76+
  • Multiple concurrent sessions in separate Terminal.app windows
  • Custom statusLine configured in ~/.claude/settings.json

Related 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.

jimmy-harden · 6 months ago

Seconded - confirmed again as a bug, duplicate under #25885

kippesp · 6 months ago

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.

  1. Start Claude code
  2. Use /model opus
  3. Observe statusline's data.model.display_name shows Opus 4.6
  4. Edit ~/.claude/setting and change with "model": "sonnet"
  5. Issue !ls to update the statusline
  6. Observe statusline now shows Sonnet 4.5
BareTread · 6 months ago

Still 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_name is read from shared state (~/.claude/settings.json or equivalent), not from the session's actual active model. Any /model switch 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 stale label should probably come off — the bug is very much alive.

carmstrong-ProviderSoft · 6 months ago

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.

dandaka · 6 months ago

Reproducing this on v2.1.59 on macOS. Steps: run /model to 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 /model output 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" />

BareTread · 6 months ago

Yeah that's happened to me many times, it's worse if you have multiple terminals open because they're all scrambled

SimoneCallegari · 5 months ago
elect a model in one select a model in another One of these will not have t

Steps to reproduce:

  1. Open Claude Code session A, change model to Opus 4.6
  2. Open a new Claude Code session B (different terminal window)
  3. In session B, Claude's system context reports "claude-sonnet-4-6" via self-identification
  4. But the status bar at the bottom still shows "Opus 4.6"

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

jackstine · 5 months ago

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" />

jackstine · 5 months ago

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" />

bassner · 5 months ago

Still happening.

vedantggwp · 5 months ago

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:

{
  "model": {
    "id": "claude-sonnet-4-6",
    "display_name": "Sonnet 4.6"
  }
}

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" in settings.json works as a workaround (avoids needing /model override), 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.

claude[bot] contributor · 4 months ago

This is a duplicate of #37596, which was fixed as of version 2.1.85.

github-actions[bot] · 4 months ago

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.