Skip to content

Cursor model picker: iOS-style nested config view when a non-Default base is selected #48

Description

@heavygee

UX problem

In dual-mode Cursor sessions (multi-variant bases via CLI sku enrichment), the Variant picker is rendered structurally below the entire 29-row Model list. On mobile the user has to scroll past every model to find it, making the variant configuration effectively invisible.

Even on desktop the section is buried below the long model list. Confirmed in PR #47 thread screenshot: variant section appears below grok-build-0.1 / kimi-k2.5 rows.

Constraint

Cursor has de-prioritized the standard ACP `configOptions` migration. The proprietary `parameterizedModelPicker` / variants-mode path is what HAPI gets, indefinitely. So the picker UX needs to live with the current data shape long-term - worth doing properly.

Design (iOS-style nested config)

Majority of users pick Default/Auto. The minority who pick a specific model should get a focused configure experience, not a long scroll.

State A — no model selected (Default):

  • Show full Model section: Default radio + all 29 base radios
  • No Variant section (current behavior)

State B — non-Default base selected (single- or multi-variant):

  • Compact Model section: Default radio + selected-base radio + "Change model…" link
  • Variant section below (only when the base has multi-variant CLI sku enrichment)
  • "Change model…" toggles back to State A view (full base list)

Behavior:

  • Auto-collapse to compact view when user picks a non-Default base
  • Auto-expand to full view when user clicks "Change model…"
  • Auto-expand to full view when session.model changes externally to Default/null
  • Picking a different base from the expanded list collapses back to compact view

Scope

  • Cursor flavor only. No change to Claude/Codex/Gemini/OpenCode picker layouts.
  • Applies to both dual mode (with Variant section) and flat mode (no Variant section). In flat mode the "compact view" is just Default + selected wire row + "Change model…" — still cleaner than scrolling a 29-row flat list to confirm what's picked.

Out of scope

  • Animations / slide transitions
  • Forward/back navigation stack
  • Touch-gesture handling

These can be follow-ups if needed; minimal-viable is two render branches gated on local state.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions