[BUG] /model UI shows "Sonnet 4.6" but session jsonl logs claude-sonnet-4-5-20250929 for every assistant turn

Resolved 💬 3 comments Opened May 6, 2026 by mm7894215 Closed May 7, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet (related ones #24655, #24227, #26379, #26396 were all closed without a fix — as duplicates of each other or as inactive)
  • [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?

In Claude Code 2.1.129, selecting Sonnet via /model shows "Sonnet — Sonnet 4.6 · Best for everyday tasks" in the picker. However, every assistant turn written to ~/.claude/projects/<project>/<session>.jsonl records message.model as claude-sonnet-4-5-20250929 (the dated alias for Sonnet 4.5), not claude-sonnet-4-6.

Across the last 24 hours of main sessions on this machine: 472 sonnet events, 100% tagged claude-sonnet-4-5-20250929, 0 tagged claude-sonnet-4-6. The full 30-day history is the same.

This means the API is actually serving Sonnet 4.5 even though the UI promises Sonnet 4.6 — and any downstream tool that reads the canonical message.model field (token trackers, billing dashboards, audit logs) cannot tell the user is on the wrong model.

This appears to be the same root behavior previously closed as duplicates: #24655, #24227, #26379, #14092. None resulted in a fix; they were closed inactive or as duplicates of each other.

What Should Happen?

When the UI says "Sonnet 4.6", message.model in the API response (and therefore in the session jsonl) must be claude-sonnet-4-6. If the alias falls back to 4.5 for subscription/region reasons, the UI must reflect the actual model in use rather than showing "Sonnet 4.6".

Steps to Reproduce

  1. claude --version2.1.129 (Claude Code)
  2. Run /model, confirm picker shows Sonnet — Sonnet 4.6 · Best for everyday tasks
  3. Pick Sonnet
  4. Send any prompt
  5. Open ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl
  6. grep '"model":' <file> → all assistant lines show "model":"claude-sonnet-4-5-20250929"

Concrete evidence from this machine

file: ~/.claude/projects/-Users-sunxiufeng--claude-mem-observer-sessions/70f26873-95f4-4d9f-b0a9-c9a246aaf5b9.jsonl
timestamp: 2026-05-06T03:06:57.358Z
cc_version: 2.1.129
msg_id: msg_01TK*****
requestId: req_011C*****
message.model: claude-sonnet-4-5-20250929   ← but UI said Sonnet 4.6

No ANTHROPIC_BASE_URL / Bedrock / Vertex env vars set; this is direct Anthropic API.

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Claude Code Version

2.1.129

Platform

Anthropic API

Operating System

macOS (Darwin 25.4.0)

Terminal/Shell

zsh

Additional Information

Related closed-without-fix issues showing the same alias/UI mismatch:

  • #24655 — Opus 4.6 selected → Sonnet 4.5 served (closed as duplicate)
  • #24227 — VS Code Extension ignores model settings (closed inactive, root issue)
  • #26379 — "unprepared rollout of Sonnet 4.6" (closed)
  • #26396 — Docs still referenced Sonnet 4.5 after rollout (closed resolved, docs only)

Third-party dashboards that parse message.model faithfully (e.g. token trackers reading ~/.claude/projects/**/*.jsonl) currently surface this mismatch as "user thinks they're on 4.6, but stats show 100% 4.5" — which is the symptom that led to filing this issue.

View original on GitHub ↗

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