[Bug] Subagents silently fall back to Sonnet 5 when a credit-billed model (fable) is requested via Agent tool or agent frontmatter
Claude Code version: 2.1.220
Description:
When a subagent is invoked with a model that requires usage-credit billing (Fable 5, shown in /model as "Requires usage credits"), the actual API call silently falls back to Sonnet 5 instead of using the requested model or raising an error. Plan-billed models (opus, sonnet) resolve correctly in the same contexts.
Repro steps:
- Agent definition frontmatter (
.claude/agents/sdd-design.md) hasmodel: fable. Invoking it via theAgenttool withsubagent_type: sdd-design(nomodelparam, relying on frontmatter) produces a subagent transcript (~/.claude/projects/<project>/subagents/agent-<id>.jsonl) showing"model":"claude-sonnet-5"for every turn. - Isolated further with a direct override:
Agent(subagent_type: "general-purpose", model: "fable")with a trivial one-word prompt. The subagent transcript again shows"model":"claude-sonnet-5", not"claude-fable-5". - Meanwhile, in the same session, a different agent (
sdd-spec.md,model: opus) correctly produced"model":"claude-opus-5"in its transcript — ruling out a general "frontmatter/override is ignored" bug. /modelconfirms Fable 5 is available and selectable for this account ("3. Fable — Fable 5 · Most capable... · Requires usage credits"), and the account has a $100 API credit balance intended for it plus an active Pro subscription.
Expected: subagent runs on Fable 5, or the call fails loudly if credit-billed models aren't supported for subagent dispatch.
Actual: silent fallback to Sonnet 5, no warning, no error — only detectable by manually grepping the subagent's own transcript JSONL for the model field.
Impact: anyone assigning model: fable to a phase-specific agent (e.g., for higher-effort design work) gets billed/behaves as Sonnet 5 without knowing it, since usage looks identical from the calling side (only the transcript reveals it).
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗