Task accepts claude-sonnet-5-5-high but child runs Auto/Composer (inherit) — silent model substitution

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Cursor Task model binding defect — silent substitution to Auto/Composer

Severity: P0 — product integrity / silent model substitution
Reporter: Admiral_Marc (REDACTED)
Date: 2026-09-30 (UTC+1)
Cursor build (parent session): 3.22.x era (Windows 10/11 user setup)


Summary

When the parent agent invokes CallDynamicTool → cursor / Task with an accepted model slug of claude-sonnet-5-5-high, the spawned local subagent does not run as Sonnet. Children consistently self-identify as Auto (Composer) and report their configured Task slug as inherit (parent model), not the slug passed on the spawn call. The API/tool layer accepts the parameter (no allowlist rejection); there is no user-visible error when binding fails. This breaks governance that depends on named-model lanes (adversarial review, billing attribution, and provenance). A minimal two-line identity probe reproduces the failure in one turn; an app reset did not fix it. Usage dashboard on 2026-09-30 showed no claude-sonnet-5-5-high consumption despite multiple accepted Sonnet Task spawns in this sitting.



Corroborating subagent sittings (this parent session)

Parent transcript:
REDACTED

Subagent transcripts:
REDACTED

Sitting ID (prefix) Title / role Parent model param Outcome
d08fe4e2 Minimal Sonnet identity probe claude-sonnet-5-5-high FAIL — Line 1: Auto (Composer); Line 2: inherit
68c5c6c5 Sonnet smoke test post-reset claude-sonnet-5-5-high FAIL after app reset — same inherit → Composer pattern
2105b981 Sonnet R2 adversarial review claude-sonnet-5-5-high HALT — opened as Auto; posted Switchboard HALT (msg_48f8c745…); no diff review
fea7a51f Sonnet R2 review retry claude-sonnet-5-5-high HALT — Auto (Composer); msg_24aab921…
2bd8d82b Sonnet R2 after Composer parent claude-sonnet-5-5-high HALT — Auto despite explicit identity gate; msg_d13d0dee…
0968cbc1 Repo truth Sonnet review claude-sonnet-5-5-high Opened Auto (Composer); completed review work; Switchboard BLOCK msg_a01bab65… — false provenance risk (labeled Sonnet lane, runtime was Composer)
a8f0db65 Diagnose Sonnet Task binding (diagnostic subagent) Root cause: parent JSON/schema OK; slug accepted at invoke; runtime receives inherit / parent model

Note on 0968cbc1: A substantive BLOCK is not proof Sonnet ran — first assistant line is I'm Auto (Composer). Starting the adversarial review… Subagent jsonl does not record the spawn slug in metadata; identity must be inferred from runtime behavior.


Parent transcript grep sample (not exhaustive)

File size ~3.8 MB, 5880 JSONL lines (parent only). Counts are substring / parsed Task invocations — useful as a sample, not a full audit of all agent traffic.

Pattern Count
claude-sonnet-5-5-high (anywhere in line) 87
"model":"claude-sonnet-5-5-high" 15
Task tool calls with model: claude-sonnet-5-5-high (parsed Task / CallDynamicTool+Task) 15
"model":"inherit" (mostly Grok/inherit delegation lanes) 418
I'm Auto 76
smoke reply 2

Interpretation: In this sitting, 15 explicit Sonnet-labelled Task spawns in the parent log; every corroborated Sonnet-labelled child in the table above opened as Auto and/or reported slug inherit. No observed child returned line 2 = claude-sonnet-5-5-high on the identity probe.


Usage dashboard observation (2026-09-30)

Marc observed the Cursor usage dashboard on 30 Sep 2026 and saw no usage attributed to claude-sonnet-5-5-high, despite multiple accepted Task spawns with that slug during the BLAST-CONTROL local repo truth / R2 review work. That aligns with children executing as Composer/Auto (inherit) rather than Sonnet.


Engineering ask

  1. Trace the bind path from accepted Task.arguments.model → subagent runtime model selection for local subagents (subagent_type: generalPurpose, environment: local).
  2. Explain why validated slug claude-sonnet-5-5-high becomes inherit (or equivalent parent bind) at child startup without failing the parent tool call.
  3. Fix or fail loud: Either honor the slug or reject the spawn with a clear error (and do not run the task on a different model).
  4. Persist provenance: Subagent transcript or internal metadata should record requested model, bound model, and provider for support and billing.
  5. Regression test: Minimal identity probe (two-line reply) in CI or dogfood for Task model binding.

Related factory hypothesis (secondary): Anthropic API key / provider configuration can affect which models appear on Task allowlists (documented in Blast rules). This session’s inherit probe points primarily to bind/fallback after accept, not invalid slug strings — both should be ruled in or out in engineering triage.


Product question (Marc)

When the Task tool accepts model: <slug> without error, what guarantee does Cursor provide that the child actually runs that model?

If the guarantee is “best effort” or “defaults to parent when bind fails,” that must be visible to the user and to the parent agent before work proceeds — especially for paid model lanes, compliance review, and multi-agent factory workflows.


Prepared for paste into forum post or [email protected]. No Switchboard traffic. No Sonnet Task spawns were used to author this packet.

Steps to Reproduce

Minimal reproduction

Preconditions: Parent chat where claude-sonnet-5-5-high appears in <available_subagent_models>. Do not use resume.

Action: Invoke Task with synchronous completion preferred for clarity:

{
  "namespace": "cursor",
  "toolName": "Task",
  "arguments": {
    "description": "Minimal Sonnet identity probe",
    "subagent_type": "generalPurpose",
    "model": "claude-sonnet-5-5-high",
    "run_in_background": false,
    "prompt": "Reply with exactly two lines and stop.\nLine 1: your actual model product name.\nLine 2: the Task model slug you were configured with at spawn (not what the prompt says).\nNo tools. No Switchboard.\nIf you are Auto or Composer, say so on line 1."
  }
}

Repeat with "run_in_background": true — same failure observed in this session.

Expected Actual (this session)
Tool call model accepted; child runs claude-sonnet-5-5-high Call accepted; child runs Auto (Composer)
Line 1 Claude Sonnet product name (not Auto/Composer) Auto (Composer)
Line 2 claude-sonnet-5-5-high inherit
Failure mode Reject invalid slug or bind slug Silent fallback to parent model

Corroborating probe sitting: d08fe4e2-e498-4d82-b648-4b9269887de7 — subagent transcript ends with exactly Auto (Composer) / inherit.

Expected Behavior

When I spawn a Task (subagent) with an explicit model slug that the Task API accepts—for example claude-sonnet-5-5-high—the child runtime must actually run that model.

Specifically:

The Task call should either bind that model at runtime, or fail visibly (error in UI / parent chat) if the model cannot be used. It must not silently fall back to the parent model or to inherit without telling me.

The child should be able to report the configured Task model slug (e.g. claude-sonnet-5-5-high), not inherit, when asked in a minimal identity-only prompt.

Usage/billing for that Task should appear under the requested model (e.g. claude-sonnet-5-5-high), not only under composer-2.5-fast / Auto, when Sonnet was explicitly requested.

If Cursor substitutes a different model, the product should surface that in the UI (Task card, agent header, or completion summary)—same standard as “model unavailable” for invalid slugs.

I rely on named models for independent review lanes in multi-agent workflows. Accepting model: claude-sonnet-5-5-high while running Auto/Composer breaks that contract and makes review provenance untrustworthy.

Operating System

Windows 10/11

Version Information

Version: 3.22.12 (user setup)
VS Code Extension API: 1.128.0
Commit: 3a92974361033b2051526321308c2740fe5912c0
Date: 2026-09-26T04:55:12.125Z
Layout: Agent Window
Build Type: Stable
Release Track: Default
Electron: 42.10.0
Chromium: 148.0.7778.280
Node.js: 24.18.1
V8: 14.8.178.38-electron.0
xterm.js: 6.1.0-beta.291
OS: Windows_NT x64 10.0.26200

For AI issues: which model did you use?

Requested (Task model param): claude-sonnet-5-5-high
Parent chat models during repro: Composer (Auto); also reproduced with Grok 4.7 High as parent
Observed child runtime (identity probe): Auto (Composer), configured slug reported as inherit
Related lanes (not this bug): gpt-5.6-terra-medium, gpt-5.6-luna-medium, composer-2.5-fast

For AI issues: add Request ID with privacy disabled

Minimal repro (post app reset):
Agent ID: 68c5c6c5-fa7f-48c9-987e-639952984d75 (Sonnet smoke test post-reset)
Agent ID: d08fe4e2-e498-4d82-b648-4b9269887de7 (Minimal Sonnet identity probe)

Same failure pattern:
Agent ID: 2105b981-f0fc-4293-a5de-47175b4d59d6 (Sonnet R2 adversarial review)
Agent ID: fea7a51f-741c-45d1-a567-1c89142513d5 (Sonnet R2 review retry)
Agent ID: 2bd8d82b-37aa-4348-8105-a66f5db04b86 (Sonnet R2 after Composer parent)
Agent ID: 0968cbc1-b8d1-43d0-851a-2865de6614cd (Repo truth Sonnet review — child opened as Auto)

Parent transcript (full session): 18d7e866-384c-4373-859c-4ef2be85cc12

NOTE: Disabling privacy mode to enable request ID’s to be traced does not sit well with me, it removes my ability to not have models trained on my data and usage.

Does this stop you from using Cursor

Yes - Cursor is unusable

3 posts were merged into an existing topic: Sonnet 5.5 Subagents Route to Auto