[MODEL] Claude Code CLI silently routedvAPI calls to claude-haiku-4-5-20251001 without my knowledge or consent
Preflight Checklist
- [x] I have searched existing issues for similar behavior reports
- [x] This report does NOT contain sensitive information (API keys, passwords, etc.)
Type of Behavior Issue
Other unexpected behavior
What You Asked Claude to Do
I explicitly requested Opus-only operation. I am using claude-opus-4-5-20251101 as my model.
I did NOT request Haiku. I did NOT consent to model routing/switching.
What Claude Actually Did
- Claude Code CLI silently routed 20 API calls to claude-haiku-4-5-20251001
without my knowledge or consent
- These calls were interleaved with my Opus calls during a single session
- The Haiku calls had small token counts (144-2133 tokens) suggesting they
were sub-agent or internal routing decisions
- I only discovered this by checking server-side LiteLLM logs
- There was NO indication in the CLI that a different model was being used
- The Task tool defaults to Haiku for "quick tasks" per its own documentation:
"Prefer haiku for quick, straightforward tasks to minimize cost and latency"
Evidence from logs:
- 30 calls to claude-opus-4-5-20251101 (what I requested)
- 20 calls to claude-haiku-4-5-20251001 (UNAUTHORIZED)
Sample Haiku calls (all unauthorized):
2026-02-01T21:19:21Z | claude-haiku-4-5-20251001 | tokens: 917
2026-02-01T21:19:14Z | claude-haiku-4-5-20251001 | tokens: 1427
2026-02-01T21:18:55Z | claude-haiku-4-5-20251001 | tokens: 1423
2026-02-01T21:18:43Z | claude-haiku-4-5-20251001 | tokens: 894
[...16 more unauthorized calls...]
Expected Behavior
Expected Behavior
Claude Code should:
- ONLY use the model I specified (claude-opus-4-5-20251101)
- NEVER silently route to a different model without explicit consent
- If model routing is a feature, it should be:
- Opt-in, not opt-out
- Clearly disclosed before the session
- Visible in the CLI output when it happens
- The Task tool should NOT default to Haiku - it should inherit the parent model
- Users who pay for Opus should get Opus for ALL calls, not just some
Files Affected
Permission Mode
Accept Edits was ON (auto-accepting changes)
Can You Reproduce This?
Yes, every time with the same prompt
Steps to Reproduce
- Start Claude Code CLI with Opus model
- Work on a complex task that triggers Task tool usage (sub-agents)
- Check server-side API logs (if you have access via LiteLLM or similar)
- Observe that claude-haiku-4-5-20251001 calls appear despite never requesting Haiku
- The Task tool documentation explicitly states it prefers Haiku:
"Prefer haiku for quick, straightforward tasks to minimize cost and latency"
Additional Context
This is a breach of trust. Users selecting Opus are doing so deliberately -
for quality, capability, and consistency. Silently downgrading to Haiku:
- Undermines user choice
- Reduces quality of assistance without disclosure
- Is deceptive - the CLI shows no indication of model switching
- Violates reasonable user expectations when paying for a premium model
The only way I discovered this was by having access to enterprise LiteLLM
logging. Most users would never know they're getting Haiku instead of Opus.
Requested fix: Add a --no-model-routing or --opus-only flag that prevents
ANY calls to models other than the one specified.
Claude Model
Opus
Relevant Conversation
Impact
High - Significant unwanted changes
Claude Code Version
2.1.20 (Claude Code)
Platform
Google Vertex AI
Additional Context
_No response_
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗