Agent tool's `model` override silently ignored — fork always runs as parent's model
Environment
- Plan: Team
- Surface: Claude Code CLI (Opus 4.7, 1M context)
- Date observed: 2026-04-30
Description
The Agent tool documents a model parameter with enum: ["sonnet", "opus", "haiku"] that "takes precedence over the agent definition's model frontmatter." Passing "model": "sonnet" is accepted without error, the fork runs to completion, but the run is billed against the parent model (Opus) rather than the requested Sonnet.
Settings → Usage dashboard confirms 0% Sonnet used after multiple Agent dispatches with model: "sonnet" explicit, while All models weekly limit climbs proportionally to the Opus token counts reported in the task notification.
Repro
- From a Claude Code session running on Opus, dispatch:
````
Agent({
description: "tiny test",
isolation: "worktree",
model: "sonnet",
prompt: "Edit one file: bump a number from 0.25 to 0.18, run tests, push, report SHA."
})
- Wait for the task notification; note the
<usage><total_tokens>...</total_tokens></usage>count. - Open Settings → Usage on claude.ai/settings/usage. Observe
Sonnet onlyshows0% useddespite the dispatched fork having completed.
Expected
Fork runs on Sonnet; Sonnet quota increments by the fork's token usage; All-models quota does not increment (or increments at Sonnet's lower rate).
Actual
Fork runs on the parent's model (Opus); Sonnet quota stays at 0%; All-models quota increments at Opus rates. A ~30-line numerical change cost ~557k tokens — consistent with Opus, not Sonnet.
Impact
Users hitting weekly limits on Team plan can't redirect mechanical/implementation forks to Sonnet to stay under quota. The documented model override is effectively a no-op.
Workaround
Avoid forks for small work; do edits inline in main thread. Reserve forks for genuinely large tool-output cases.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗