[BUG] /model UI shows "Sonnet 4.6" but session jsonl logs claude-sonnet-4-5-20250929 for every assistant turn
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
claude --version→2.1.129 (Claude Code)- Run
/model, confirm picker showsSonnet — Sonnet 4.6 · Best for everyday tasks - Pick
Sonnet - Send any prompt
- Open
~/.claude/projects/<encoded-cwd>/<session-id>.jsonl 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.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗