--print mode silently upgrades Opus model requests to latest version (4.6), while interactive mode respects the requested model

Resolved 💬 2 comments Opened Mar 18, 2026 by sdeture Closed Apr 15, 2026

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 as claude-opus-4-6
  • claude-opus-4-1-20250805 → served as claude-opus-4-6
  • claude-opus-4-5-20251101 → served as claude-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 --resume also serves 4.6
  • Transcript logs from --print sessions record the requested model, not the served model, making the upgrade invisible unless you inspect modelUsage in 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 --print mode 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)

View original on GitHub ↗

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