Cursor CLI calling `composer2-fast` despite always calling with `composer2

Hey, thanks for the report. Let’s dig in.

A few questions to narrow this down:

  1. What exact model string are you passing, composer2 or composer-2 with the dash? The CLI expects composer-2, and if it doesn’t match, it may fall back to the default composer-2-fast.
  2. How are you authenticating in the CLI, OAuth or a user API key crsr_*? And are you running it interactively or headless with agent -p?
  3. Can you share 2 to 3 Request IDs from the sessions that showed up in the dashboard as composer-2-fast, for example the 1.1M token one at 09:44 PM? You can find them in the CLI output or in the dashboard. With those we can check which backend path was used.

In parallel, two things that might matter here:

  • Built-in subagents the agent spawns on its own, like explore and generalPurpose, currently default to composer-2-fast regardless of the parent --model. This is a known limitation, tracked internally, with no ETA. That said, 800k to 1.2M tokens for a subagent is unusually large, so this is probably not it in your case.
  • There was a similar report in this thread Cursor CLI unable to use composer 2 classic where --model composer-2 is accepted, system/init shows “Composer 2”, but billing still goes under composer-2-fast. If you’re using headless mode with an API key, that matches.

Once you send the info above, we can look at the specific requests.