Claude Code Fable Model Silently Redirected to Opus on Numerical and Scientific Queries
When a user selects the Fable model in Claude Code and submits a purely numerical or scientific query (such as a fluid dynamics question about skewed boundary representation in orthogonal…
At a Glance
When a user selects the Fable model in Claude Code and submits a purely numerical or scientific query (such as a fluid dynamics question about skewed boundary representation in orthogonal grids), the request is silently rerouted to the Opus model without explicit user consent or a…
Summary
When a user selects the Fable model in Claude Code and submits a purely numerical or scientific query (such as a fluid dynamics question about skewed boundary representation in orthogonal grids), the request is silently rerouted to the Opus model without explicit user consent or a visible error. The most likely cause is an internal complexity or capability-routing heuristic that misclassifies numerical scientific content and upgrades the model mid-session. The practical impact is unexpected model substitution, potential cost differences, and broken user trust in model selection controls.
Root-Cause Analysis
Confirmed Evidence
- Claude Code version 2.1.207 on Linux (tmux) routes a Fable-targeted fluid dynamics query to Opus.
- The query involves numerical scientific content (skewed boundaries in orthogonal grid representation) with no security-sensitive material.
- The
errorsarray returned from the platform is empty ([]), meaning the redirect is treated as a normal, non-error event by the client. - The redirect is not user-initiated and produces no visible warning in the UI.
Reasonable Inference
Claude Code likely contains a server-side or client-side model routing layer that evaluates query characteristics and may promote requests to a more capable model when certain signals are detected. Plausible triggering signals include:
| Signal | Inference | |—|—| | Mathematical or domain-specific terminology | Could be scored as "high complexity," triggering a capability upgrade | | Long token budget estimation | Numerical derivations may produce high estimated output length | | Capability gap flag | Fable may be flagged internally as insufficient for certain query classes | | Safety/content classifier false positive | Although the query is benign, an overly broad classifier could misfire |
Because the error array is empty and the redirect is silent, the routing decision is intentional from the platform's perspective — it is not a crash or fallback from a failure. This makes it a product behavior decision exposed as a bug rather than an infrastructure failure.
Alternative Causes
- A per-model allow-list or capability matrix may exclude Fable from handling queries containing certain domain keywords (e.g., "fluid dynamics," "orthogonal," "grid").
- A session-level model negotiation step may re-evaluate the selected model after the first message is parsed.
- A A/B routing experiment or gradual rollout flag could be silently overriding model selection for a subset of users.
What Additional Evidence Would Confirm the Diagnosis
- Server-side logs showing the routing decision and the specific rule or classifier that triggered the redirect.
- The network request/response payload (HTTP body) immediately before and after the redirect to identify whether the model switch occurs client-side or server-side.
- Reproduction with varied query phrasing (removing domain-specific terms) to determine whether terminology or complexity score drives the routing.
- Confirmation of whether other non-numerical Fable queries in the same session retain Fable as the model.
Resolution Steps
- Verify the active model per request by enabling verbose or debug output in Claude Code (see CLI Commands below) to confirm at which point in the request lifecycle the model substitution occurs.
- Check for a forced-model configuration option in Claude Code settings. If an explicit model override flag exists (e.g.,
--modelCLI argument or a configuration key), set it explicitly rather than relying on the UI selector, which may be subject to server-side routing overrides.
- Test with a minimal repro query — submit a short, plainly worded mathematical question to Fable (e.g., "What is 2 + 2?") and observe whether the redirect still occurs. Then progressively reintroduce domain terminology to isolate the triggering token or phrase.
- Report the Feedback ID to Anthropic support — Feedback ID
02569565-6c13-47f0-b0bc-a9154bd6d507is already captured. File a support ticket referencing this ID and explicitly request server-side routing logs for the offending session. This is the most direct path to a confirmed root cause.
- As a temporary workaround, if Opus produces acceptable results for the use case, document the behavior and monitor whether model costs or rate limits are affected. If Fable is required for cost or capability-boundary reasons, avoid queries with numerical scientific terminology until the routing rule is corrected.
- Monitor subsequent Claude Code releases — the issue is labeled
bugandarea:model, indicating it is tracked for a platform-side fix.
CLI Commands
Check the currently active model reported by Claude Code (syntax may vary by version):
claude --version
claude config listAttempt to pin the model explicitly at invocation time (use the correct model identifier for Fable as documented in your Claude Code release notes):
claude --model <FABLE_MODEL_ID> "What is the representation of skewed boundaries in an orthogonal grid?"Enable verbose/debug output to capture the request lifecycle:
CLAUDE_DEBUG=1 claude --model <FABLE_MODEL_ID> "<YOUR_QUERY>"Capture the raw HTTP traffic to identify where the model substitution occurs (requires network interception capability in your environment):
claude --model <FABLE_MODEL_ID> "<YOUR_QUERY>" 2>&1 | tee /tmp/claude_debug_$(date +%s).logVerification
After applying the explicit --model flag workaround or after a platform-side fix is deployed:
- Submit the original fluid dynamics query (skewed boundary representation in an orthogonal grid) with the Fable model selected.
- Confirm the response header or debug output identifies the responding model as Fable, not Opus.
- Repeat with at least three distinct numerical scientific queries to confirm the routing is stable across query types.
Healthy expected behavior: The model identifier in the response metadata matches the model explicitly selected by the user. No silent substitution occurs, and no redirect is logged.
Rollback indicator: If after a Claude Code update the redirect resumes, compare the --version output to the previously working version and file a regression report referencing issue 77152.
Prevention
- Expose model routing decisions to users: The platform should surface any model substitution as an explicit warning (e.g., "Fable was substituted with Opus because…") rather than silently rerouting. This is a product-level safeguard that prevents trust erosion.
- Add a strict model enforcement mode: Provide a configuration flag (e.g.,
strict_model: true) that causes the request to fail with a clear error rather than silently upgrade, giving users full control over cost and capability boundaries.
- Regression tests for model routing: Anthropic's test suite should include cases where a non-Opus model is explicitly selected and numerical/scientific queries are submitted, asserting that the responding model matches the requested model.
- Classify routing rules transparently in documentation: Publish the conditions under which model substitution can occur so operators can design queries or system prompts that avoid unintended upgrades.
- Monitor model usage metrics client-side: Teams operating Claude Code in production should instrument which model is actually used per request (not just which was requested) and alert on divergence. This surfaces silent routing changes introduced by upstream platform updates.