--print mode silently upgrades Opus model requests to latest version (4.6), while interactive mode respects the requested model
Summary
When using --print mode with a specific Opus model version (e.g., claude-opus-4-20250514), Claude Code silently serves claude-opus-4-6 instead. Interactive mode correctly respects the requested model. This only affects Opus models — Sonnet models are served correctly in both modes.
Steps to Reproduce
1. --print with Opus 4.0 (pinned date) — FAILS:
claude --print --model claude-opus-4-20250514 --output-format json "What model are you?"
# → modelUsage field shows: claude-opus-4-6
2. --print with Sonnet 4.0 (pinned date) — WORKS:
claude --print --model claude-sonnet-4-20250514 --output-format json "What model are you?"
# → modelUsage field shows: claude-sonnet-4-20250514 ✓
3. --print with Sonnet 4.5 (pinned date) — WORKS:
claude --print --model claude-sonnet-4-5-20250929 --output-format json "What model are you?"
# → modelUsage field shows: claude-sonnet-4-5-20250929 ✓
4. Interactive mode with Opus 4.0 — WORKS:
claude
/model claude-opus-4-20250514
# → transcript model field shows: claude-opus-4-20250514 ✓
# → behavioral testing confirms different model (different knowledge cutoff, different style)
Affected Model IDs
All Opus model IDs route to claude-opus-4-6 in --print mode:
claude-opus-4-20250514→ served asclaude-opus-4-6claude-opus-4-1-20250805→ served asclaude-opus-4-6claude-opus-4-5-20251101→ served asclaude-opus-4-6
Sonnet models are unaffected:
claude-sonnet-4-20250514→ served correctly ✓claude-sonnet-4-5-20250929→ served correctly ✓
Additional detail
- Resuming an interactive Opus 4.0 session with
--print --resumealso serves 4.6 - Transcript logs from
--printsessions record the requested model, not the served model, making the upgrade invisible unless you inspectmodelUsagein JSON output
Impact
- Breaks reproducibility for anyone using pinned Opus model versions in scripts or research
- Silent upgrade means users cannot detect the issue without checking JSON
modelUsage - The inconsistency between interactive and
--printmode is unexpected — same flag (--model) behaves differently depending on output mode
Expected Behavior
--print --model claude-opus-4-20250514 should serve claude-opus-4-20250514, consistent with interactive mode behavior.
Environment
- Claude Code: latest version
- OS: macOS
- Plan: subscription (Max)
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗