Skip to content

fix(models): default Cursor fast tier OFF, add picker toggle#23

Merged
justin-carper merged 1 commit into
mainfrom
fast-models-default-bug
Jun 16, 2026
Merged

fix(models): default Cursor fast tier OFF, add picker toggle#23
justin-carper merged 1 commit into
mainfrom
fast-models-default-bug

Conversation

@justin-carper

Copy link
Copy Markdown
Collaborator

Problem

The variant builder (buildModelVariants) only mapped reasoning/effort params (/think|reason|effort/) and dropped Cursor's fast toggle entirely, so it never reached providerOptions.cursor.

Cursor's catalog marks the default variant of several models as fast: truecomposer-2.5, composer-2, and the gpt-*-codex line. Because the provider omitted the param, opencode silently ran the fast tier with no way to opt out from the picker.

Fix

fast now defaults off:

  • New defaultModelParams() pins non-reasoning boolean params (fast) OFF.
  • Fast-capable models seed options.params.fast = "false" (via toOpencodeModels + buildModelV2Map), sent every turn through the existing options.paramsproviderOptions.cursor.params channel resolveControls already reads.
  • Each reasoning variant bakes in fast: "false", so picking a reasoning level can't silently re-enable fast (robust regardless of how opencode merges variant vs. options params).
  • A fast picker variant lets you opt back in.
  • Override per model: provider.cursor.models.<id>.options.params.fast.

No resolveControls change required.

Deliberate constraint

opencode variants are single-select, so you can't pick fast and a reasoning level from the picker at once — use static options.params config for that combo (noted in README).

Tests

TDD (tests written and watched fail first):

  • test/model-variants.test.tsfast opt-in toggle, default-off, baked-in reasoning variants, defaultModelParams.
  • test/model-discovery.test.tstoOpencodeModels seeds options.params.
  • test/model-v2.test.ts (new) — buildModelV2Map seeds options.

tsc --noEmit clean · 192/192 tests pass · tsup build success.

Docs updated (README per-request controls + CHANGELOG Unreleased).

The variant builder only mapped reasoning/effort params and dropped
Cursor's `fast` toggle, so it never reached providerOptions.cursor.
Cursor marks the default variant of several models as fast:true
(composer-2.5, composer-2, gpt-*-codex), so omitting the param ran the
fast tier with no opt-out.

Now `fast` defaults off: fast-capable models seed
options.params.fast="false" (sent every turn, and pinned into each
reasoning variant so picking a reasoning level can't re-enable it), and
a `fast` picker variant opts back in. Override per model via
provider.cursor.models.<id>.options.params.fast.
@justin-carper justin-carper merged commit 2754e9d into main Jun 16, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant