Status line JSON reports default model from settings, not actual session model

Resolved 💬 7 comments Opened Mar 23, 2026 by projektmf Closed Apr 17, 2026

Description

The model field in the status line JSON input always reflects the model value from settings.json, not the model actually serving the current session.

Steps to reproduce

  1. Set "model": "sonnet" in ~/.claude/settings.json
  2. Start a session that runs on Opus 4.6 (e.g. via --model opus or model override)
  3. Inspect the status line JSON input (e.g. write $input to a file in statusline-command.sh)

Expected behavior

model.id = claude-opus-4-6, model.display_name = Opus 4.6 (reflecting the actual model serving the session)

Actual behavior

model.id = claude-sonnet-4-6, model.display_name = Sonnet 4.6 (reflecting the default from settings.json)

Additional context

The context window data (context_window.used_percentage) and rate limit data (rate_limits) are correctly session-specific and update in real time. Only the model field is static and reads from the settings default rather than the actual session model.

Raw JSON from a session running on Opus 4.6 with "model": "sonnet" in settings:

{
  "model": {
    "id": "claude-sonnet-4-6",
    "display_name": "Sonnet 4.6"
  },
  "context_window": {
    "context_window_size": 200000,
    "used_percentage": 12
  }
}

Note: context_window_size also shows 200000 instead of the actual 1M context window available to Opus 4.6.

Environment

  • Claude Code version: 2.1.81
  • OS: macOS (Darwin 25.3.0, arm64)

View original on GitHub ↗

This issue has 7 comments on GitHub. Read the full discussion on GitHub ↗