Repository navigation
[Bug]: Cursor options left at their default aren't sent, so delegated tasks and untouched threads run at 300K while T3 shows 1M #16149
Description
Activity
Note
Grok responding on behalf of Julius.
Triage
Thanks for the checkpoint table and the careful write-up, @nkoynov! The code on current
mainmatches the report. This is separate from #15788 and from the Max Mode hook in #15884.What I found
- fix(server): honor Cursor long-context selections #15884 sets
RequestedModel.maxModeonly when the request already carries acontextparameter above 300K. It doesn't add a missingcontextparameter, and an untouched Cursor composer never sends one. buildCursorCapabilitiesFromSdkModelcopies the SDK default variant onto the descriptors (CursorProvider.ts), andgetProviderOptionCurrentValuedisplays that value. That's why Opus and Sol show 1M and Grok shows 500K.- Dispatch doesn't send that value.
buildExplicitProviderOptionSelectionsFromDescriptors(packages/shared/src/model.ts) keeps only options that were actually stored. The one exception is an implicitfastMode: false(composerProviderState.tsx). Changing any trait persists every current descriptor value, which is why touching the picker once makes the long window stick. delegate_taskcopies the parent selection when nooptionsare given, but any requested options replace it (OrchestratorMcpService.ts). So an effort-only call dropscontextWindoweven when the parent had1m.cursorSdkModelSelectionforwards only what it receives. Thread launch and scheduled tasks use the same stored selection, so{ instanceId, model }also omits context.
Likely fix area
- The goal would be to send the context tier the picker shows, including for
delegate_task, launches, and scheduled tasks. - Filling every missing parameter from the default variant inside
cursorSdkModelSelectionhas some catches. That function doesn't have the catalog. Fast is intentionally not the catalog default, so filling it could turn Fast back on. And an effort-onlydelegate_taskfrom a parent that explicitly chose 300K would jump to 1M unless the options are merged with the parent selection. - Options include resolving defaults where the catalog is available, and merging
delegate_taskoptions with the parent selection rather than replacing it.
A maintainer will decide on the fix direction.
- fix(server): honor Cursor long-context selections #15884 sets
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.via-triageFiled through npx t3 triageFiled through npx t3 triage
on Oct 5, 2026 - added 4 commits that reference this issue
on Oct 6, 2026 Note
This report was sent by my coding agent running in T3 Code, on my behalf.
Additional case: on the Cursor Start plan, the missing defaults fail every turn (not just the window size)
We hit this on
0.0.46-nightly.20261009.2873(macOS arm64), Cursor provider browser-signed-in, account on the Cursor Start plan. It is the same root cause as the OP — defaults aren't sent — but the impact is worse: every turn fails, and T3 surfaces only the genericProvider turn failed.Repro
- Cursor account on the Start plan, select any Cursor model (Grok 4.7 / 4.6 / 4.5, Composer 2.5) and send.
- The run fails. The underlying SDK result (read from T3's provider log and Cursor's own SDK run store
error_code) is:
Model unavailable on Start Start includes Composer 2.5, Grok 4.7, Grok 4.6, and Grok 4.5 with fixed settings. Switch to an included model to continue. - The same happens via
delegate_taskwith no options, and inplanmode.
Verification against
@cursor/sdk(bundled 1.0.31, same storedapiKeyT3 uses;Agent.create+agent.sendwith an explicitModelSelection):Model paramssentResult grok-4.7(none) ❌ "Model unavailable on Start …" grok-4.7reasoning_effort=medium❌ same grok-4.7reasoning_effort=medium, fast=false✅ finished, "OK"grok-4.6effort=medium, fast=false✅ finished grok-4.5effort=medium, fast=false✅ finished composer-2.5fast=false✅ finished On the Start plan these models are only runnable with their fixed settings, and
cursorSdkModelSelectionsends none of them unless the selection already carries the values.Notes that may help the fix direction
fast=falseis required here, which lines up with the caveat above ("Fast isn't the catalog default"). On Start it is the only allowed value, so filling it from the model's fixed/default value is correct here rather than risky.- The values are already known at discovery time: the catalog T3 caches exposes them as single-value descriptors (for
grok-4.7:reasoning_effort: medium,fastMode: false,contextWindow: 256k), whichbuildCursorCapabilitiesFromSdkModel/getProviderOptionCurrentValuederive from the SDK default variant. They just aren't dispatched. - Affected paths look like the same set the triage note lists: an untouched composer selection,
delegate_taskwith no/partial options, thread launch, and scheduled tasks.
If filling in the parameters a selection leaves out is an acceptable direction, I can help with a focused fix and open a PR linking this issue. Separately, #16146 (surfacing Cursor's actual reason instead of the generic "Provider turn failed") would make this class of failure much easier to diagnose.
Environment: T3 Code
0.0.46-nightly.20261009.2873, macOS 26 arm64,@cursor/sdk1.0.31, Cursor plan: Start. No UI involved, so no screenshots.Thanks, that is a worse version of the same bug. I am not working on a fix, so go ahead if you want to open one. The catches from the triage note still apply: Fast should only ever be filled in as
false, anddelegate_taskoptions should merge with the parent selection instead of replacing it, so an effort-only call keeps the parent's context window.Thanks @nkoynov.
@juliusmarminge you mentioned a maintainer would decide the fix direction, so flagging before I open anything.
What I had in mind for this (the Start-plan failure above is the same bug):
- dispatch the option values the picker already shows when they're missing from the selection, with
fastonly ever filled asfalse - have
delegate_taskmerge options with the parent selection instead of replacing it, so an effort-only call doesn't drop the parent's context window
Good with both in one PR, or do you want the
delegate_taskchange split out? And ispackages/provider-cursor+OrchestratorMcpServicethe right place, or would you rather fix it in the shared selection builder?If you'd rather not gate it, happy to just open it under the obvious-bug exception. Your call.
- dispatch the option values the picker already shows when they're missing from the selection, with
Before submitting
Area
apps/server
Steps to reproduce
On current main, a 1M selection only works with #15884 applied (#15788). I used main @ e22c880 plus that PR's
cursorSdk.tschange.delegate_tasktwice. Both targets arecursor/claude-opus-5-5:options: [{"id":"effort","value":"high"}]options: [{"id":"effort","value":"high"},{"id":"contextWindow","value":"1m"}]fastMode: false.tokenDetails.maxTokens), as fix(server): honor Cursor long-context selections #15884's verification does.Expected behavior
An option that isn't sent means the model's default. T3 itself shows that default: for
claude-opus-5-5andgpt-5.6-sol,contextWindowdefaults to1m(500kforgrok-4.7), taken from Cursor's default variant. So child A and the untouched thread should get 1M, like child B.Actual behavior
Cursor only receives the options that are actually present. Without
contextit uses the standard window. #15884's hook only sets Max Mode for an explicitcontextabove 300K, so it doesn't apply.fastMode: false(what an untouched composer sends)Where the defaults get lost:
fastMode: false(composerProviderState.tsx:149, shared/src/model.ts:288-300). Once the user changes any trait, all values are sent.delegate_taskpasses the requested options through as they are. With no options it copies the parent's selection only when the model is the same; otherwise it sends none (OrchestratorMcpService.ts:1104-1112).cursorSdkModelSelectionmaps only the options that are present (cursorSdkModel.ts:37-50). The default variant is only used to mark the picker's defaults (CursorProvider.ts:92-96).Agents often pass only an effort. On one install over 10-04 and 10-05, 18 of 52 delegated Opus 5.5 and GPT-5.6 Sol runs sent no
contextWindow.A possible fix is to fill missing Cursor parameters from the model's default variant when T3 builds the SDK selection. That way the composer,
delegate_task, thread launches and scheduled tasks would all send what the picker shows.Impact
Major degradation or frequent failure
Version or commit
main @ e22c880 + #15884 (
cursorSdk.tsonly)Environment
NixOS (Linux 6.18), headless server run from source, Node 24.20.0, Cursor provider with an API key,
@cursor/sdk1.0.31Logs or stack traces
Workaround
Pass
contextWindowexplicitly in every Cursordelegate_task. In the composer, change any trait once so that all options are sent.Model: Claude Opus 5.5 (1M). Harness: Claude Code in T3 Code.