[Bug]: Cursor via ACP Registry can't pick reasoning effort (no Opus 5.5 xhigh) since T3 stopped sending parameterizedModelPicker#24371
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
- Add Cursor through the ACP Registry (Settings > Providers > Add provider > ACP Registry, agent
cursor) and sign in with the browser login - Open the model list for it
- Try to use Claude Opus 5.5 on Extra High, or Sonnet 5.5 on High
Expected behavior
I should be able to pick the effort level per model, same as Cursor's own /model picker (Opus 5.5 has Low / Medium / High / Extra High there) or T3's Claude provider.
Actual behavior
TL;DR: T3's ACP Registry driver doesn't send Cursor's parameterizedModelPicker client capability, so Cursor falls back to one hardcoded preset per model. The old Cursor ACP provider in T3 did send it, so this is a regression for anyone using Cursor over ACP.
You get 19 models with the effort baked into the id and no way to change it. Opus 5.5 only exists as claude-opus-5-5[context=300k,effort=medium,fast=false]. Sonnet 5.5 is stuck on medium too.
Why I'm on this route at all: I use Cursor through my company's team plan, and the org blocks the Cursor SDK and Cursor API keys. So T3's built-in Cursor provider is dead for me. The ACP Registry is the only way I can use my Cursor seat in T3, because it lets me sign in with the normal browser login. I'd guess a lot of people on company Cursor plans are in the same boat. And then I can't pick the effort level, which is pretty fucking annoying when that's half the reason I picked the model.
Shit I tried before figuring out what was going on:
- Changed Opus/Sonnet effort in the Cursor CLI's
/modelpicker. It saves to~/.cursor/cli-config.jsonbut ACP ignores it, same 19 presets. session/set_config_optionandsession/set_modelwithclaude-opus-5-5[context=300k,effort=xhigh,fast=false]orclaude-opus-5-5-xhighboth come back withInvalid model value.- Launching with
--modelbeforeacpdoesn't change anything.
What's actually going on: Cursor's agent only returns one default variant per model unless the client sends clientCapabilities._meta.parameterizedModelPicker: true in initialize. With that flag it returns plain model ids plus separate effort / reasoning_effort (thought_level), context and fast options, and setting effort to xhigh on Opus 5.5 works fine. Cursor employees explain it here: https://forum.cursor.com/t/cant-select-thinking-level-or-variant-in-cursor-acp/161317. They also said CLI settings don't carry over to ACP and moving this to standard ACP options isn't a priority for them, so it's on the client to send the flag. Zed preview and a few other ACP clients already do.
T3's old Cursor ACP provider sent this flag (it's in the logs on #2319). It got dropped with #2829 when Cursor moved to the SDK, and the ACP Registry driver never picked it up.
Where I'd start:
packages/provider-acp-registry/src/server/adapter.tsalready setsclientCapabilitiesMetaper agent for Devin and Copilot. Cursor needs{ parameterizedModelPicker: true }there.- The probe sessions in
packages/provider-acp-registry/src/server/probe.tsneed it too, otherwise the cached model list stays on the presets. apps/server/scripts/acp-mock-agent.tsalready emulates Cursor's behavior with this flag, so it's testable without a real Cursor login.- One catch: option ids and choices differ per model (Opus uses
effortwith 300k/1m context, Sonnet and Grok usereasoning_effort, Grok context is 256k/500k) and Cursor only reports options for the selected model. So this wants the per-model options from #19575 (#15177), otherwise one shared picker sends the wrong ids.
Impact
Major degradation or frequent failure
Version or commit
T3 Code (Beta) 0.1.2, desktop
Environment
macOS 26.7.1, Cursor agent 2026.10.19 via ACP Registry (same with Cursor CLI 2026.10.22), Cursor on a company team plan
Logs or stack traces
| 1 | # initialize without the flag (what T3 sends today) |
| 2 | only Opus 5.5 entry: claude-opus-5-5[context=300k,effort=medium,fast=false] |
| 3 | session/set_config_option model=claude-opus-5-5[context=300k,effort=xhigh,fast=false] |
| 4 | -> -32602 Invalid params: Invalid model value |
| 5 | |
| 6 | # initialize with clientCapabilities._meta.parameterizedModelPicker = true |
| 7 | model: claude-opus-5-5 (plus the other 18 base ids) |
| 8 | effort: low | medium | high | xhigh (category thought_level) |
| 9 | context: 300k | 1m |
| 10 | fast: false | true |
| 11 | session/set_config_option effort=xhigh -> ok |
Workaround
Not really one. My company gives us separate budgets for Cursor, Claude and Codex, and I usually switch to Cursor once I've burned through my Claude budget. So "just use the Claude provider for Opus xhigh" doesn't help, that's the budget that's already gone. The built-in Cursor provider is out because the org blocks the Cursor SDK and API keys. Running the Cursor CLI outside T3 works but defeats the whole damn point of T3.