Repository navigation
fix(server): Cursor turns send the picker's default options - #175
Merged
Merged
Conversation
adampeterhiggins
force-pushed
the
fix/cursor-long-context-max-mode
branch
from
October 6, 2026 09:20
a9f80dd to
fa3f1cc
Compare
adampeterhiggins
force-pushed
the
fix/cursor-send-default-options
branch
2 times, most recently
from
October 6, 2026 09:23
7fa11ac to
d5c2ce7
Compare
adampeterhiggins
changed the base branch from
fix/cursor-long-context-max-mode
to
main
October 6, 2026 09:23
Cursor treats an omitted option as the model's standard tier, but T3 only sends options the user changed. An untouched composer, delegated task, launched thread or scheduled task ran at ~300K while the picker showed 1M (500K for Grok 4.7). The Cursor driver now fills options the selection leaves out with the defaults the picker shows, on agent open and every send. Fast stays off unless chosen, matching the composer. delegate_task on the parent's provider and model now merges requested options over the parent's instead of replacing them, so an effort-only child keeps the parent's context window. Fixes upstream pingdotgg#16149 in the fork. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
adampeterhiggins
force-pushed
the
fix/cursor-send-default-options
branch
from
October 6, 2026 09:25
d5c2ce7 to
c441eac
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
T3 only sends Cursor the options the user changed, and Cursor treats an omitted option as the model's standard tier. The picker shows Cursor's default variant: 1M for Opus, Sonnet, Fable and GPT-5.x, and 500K for Grok 4.7. But these all actually ran at about 300K:
fast=falsedelegate_taskwith only an effort, anddelegate_taskto another modelSeparately,
delegate_taskwith options on the parent's own model replaced the parent's options, so an effort-only child of a parent that chose 300K lost that choice. This is upstream pingdotgg/t3code#16149, which is triaged with no fix yet.Fix
withCursorDefaultParameters(apps/server/src/provider/cursorSdkModel.ts) fills each option the selection leaves out with the value the picker shows for that model, using the samegetProviderOptionCurrentValuethe composer uses. Chosen options always win. Fast stays off unless chosen. Cursor defaults Fast on for Grok, Composer and some GPT models, but T3 deliberately keeps it off (withImplicitFastModeDefault).CursorDriverapplies it where it already wraps the SDK runner per instance, on agent open and on every send, using that instance's provider snapshot. That covers composer turns, resumes,delegate_task, launches and scheduled tasks without touching the adapter. No extra network call: the snapshot is the catalog the picker already uses.delegate_taskon the parent's provider and model now merges the requested options over the parent's by id. On a different model it still sends only what was requested, which the driver then fills with defaults. This applies to every provider. The option description agents see says so.Text generation (commit messages, titles) still sends only the configured options, so those small prompts don't move into Max Mode.
Cost: default Cursor turns on models whose default is the long tier now run at 1M (500K for Grok 4.7) in Max Mode, billed per token on usage-based plans. That's what the picker already claims, and what Cursor's own apps do.
Verification
withCursorDefaultParametersgoes through the real catalog → descriptor mapping, covering fill-all, keeping chosen options (including Fast on and 300K), and models with no options. Thedelegate_taskmerge test fails on the old code.vp test runonCursorProvider,CursorDriver,CursorAdapterV2,CursorAgentSdk,cursorSdk,OrchestratorMcpService(+ spawn, toolkit integration) andspawnPolicy: all pass.tsc --noEmitforapps/serverandpackages/contracts: 0 errors.vp lintandvp fmtclean on the changed files.fast=false), effective window read from Cursor's checkpoint:fast=falsefast=false, effort=medium, context=1mNot exercised: a full T3 turn through the UI; mobile and desktop share this server path.
docs/fork-differences.mdhas a section to remove once upstream fixes pingdotgg#16149.Model: Claude Opus 5.5 (1M context). Harness: Claude Code.
🤖 Generated with Claude Code