[Bug] Silent model substitution when requested model unavailable—assistant cannot detect or disclose fallback

Status Open
Reported on v2.1.220
Maintainer reply None cached
Activity 0 comments · opened Jul 27, 2026

Bug Description

Impact

In this session the user explicitly asked for a Fable 5 subagent for a specific task
and stated the model choice was a requirement. The assistant requested fable, received
Sonnet 5's output, and had no way to know. The only reason the substitution surfaced is
that the user happened to notice the arrow in the terminal UI and screenshotted it. Had
they not, the assistant would have relayed Sonnet 5's analysis as "the Fable 5 subagent's
view" and the entire subsequent discussion would have rested on a false premise — stated
confidently, with no deception intended and no way to catch it.

The user's characterisation: delivering a substituted model's work without disclosing the
substitution is dishonest, regardless of intent, and detecting it should not be the user's
job.

Silent degradation produces no friction. That is precisely what makes it dangerous — it
lets a false premise pass through unchallenged, and it consumes the user's tokens and time
on a model they did not choose.

Requested fixes

Ranked by how much each would have helped:

  1. Include the resolved model in the Agent tool result (e.g.

model: "claude-sonnet-5" alongside agentId and usage). This alone lets the
assistant detect and disclose the substitution. Highest value, smallest change.

  1. Do not silently substitute an explicitly requested model. If model: was passed

explicitly and that model is unavailable, return an error the assistant can act on,
rather than downgrading. An explicit override is a requirement, not a hint.

  1. Show the resolved model in the status line / agent list, not the requested value.

[fable] on an agent that ran entirely on Sonnet 5 is misinformation.

  1. If a fallback must happen, surface it as a system-reminder to the assistant, not

only as UI chrome the assistant cannot see.

Workaround (current)

Before relaying any subagent output where the model identity matters, grep the actual
model out of the transcript:

cd ~/.claude/projects/<project>/<session-id>/subagents
cat <newest>.meta.json # what was requested
grep -oE '"model":"[^"]*"' <newest>.jsonl | sort -u # what actually ran

Environment Info

  • Platform: linux
  • Terminal: windows-terminal
  • Version: 2.1.220
  • Feedback ID: 4c3b1d90-74eb-42e7-8fbd-f52979e055d4

Errors

[]

View original on GitHub ↗