All pages
On this page

Models and reasoning

Two choices shape what a turn costs and how good it is: the model, and how much it reasons. You make both in the New chat dialog and again in the composer before any message. This page covers the pickers, where each provider's model list comes from, and what the effort values mean. Provider setup is on the provider pages, and the dialog field by field is on Starting a conversation.

Where you choose #

Place What you set
New chat dialog Model and Reasoning effort for a conversation that does not exist yet.
The composer's model picker The model of the next message. Its tooltip reads Model.
The composer's effort picker The reasoning effort of the next message. Its tooltip reads Reasoning effort (Quality for image models).
The composer's Context window picker The context size of the model, where the model has more than one. For image models it is the image size.
🤗 Select Models in the conversation's ⋯ menu Which models appear in all of these lists.

A conversation uses one provider, so the composer lists only the models that provider serves. Model and effort apply per message: the choice you make before pressing send is the one that message goes out with. A conversation remembers its last model and effort, and the browser remembers the last ones you picked anywhere. A new chat starts from the browser's. If a remembered effort is not offered by the model you move to, the nearest effort that model offers takes its place; Ultracode is never chosen that way.

On a conversation that has no message yet, the picker also offers Auto, where the provider has it. After the first message Auto is disabled, with the tooltip "Auto is available only for a new conversation".

Can the model change mid-conversation? #

It depends on the provider. Where it is pinned, the picker shows the model as a locked entry (🔒) and cannot be changed.

Provider Change the model between messages
GitHub Copilot Yes, on both engines.
OpenAI Until the first message. After it, the model is pinned.
Claude Yes.
Claude API Added in 0.9.18 Yes. A billing switch keeps the model, and is refused when the other side does not list it.
Claude Cloud Yes. The sandbox switches before the next message.
Cursor Yes.
Grok No. The model is fixed when the chat is created.
DeepSeek Yes. The chat's Claude Code restarts with the new model before the next message. A model without image input is refused once the chat holds images.

OpenAI and Grok lock the picker from the first message on. The relay refuses a different Grok model with "Grok model switching requires creating a new Grok conversation". To use another model on a pinned provider, start a new conversation. The note above the composer names the pinned model; see One provider per conversation.

Select Models #

🤗 Select Models (subtitle: "Choose model variants shown in the composer selector") decides which of the discovered models show up in the pickers. The choice is saved for the whole relay, not per browser or per conversation. The dialog also shows when the lists were last refreshed.

The dialog has one tab per runtime: Copilot, OpenAI, Claude SDK, Added in 0.9.18 Claude API, Cursor SDK, Grok and Added in 0.9.17 DeepSeek. A tab is disabled when it has no models to show, for example while its provider is switched off. Claude Cloud has no tab: its list follows the Claude provider's (see below). Each model has a header with its name, its context window and a Reasoning line of chips, one per effort it offers. Below the header are the model's rows with a checkbox.

  • 💾 Save enabled models saves the ticks of the open tab. Other tabs keep what they had. A notice says "Saved model selection."
  • On a tab with Copilot models at least one has to stay ticked: "Select at least one model variant."
  • A Claude, Claude API, Cursor, Grok or DeepSeek model marked default model is fixed and cannot be unticked. OpenAI models are marked managed in settings: the OpenAI model ID and the saved list decide them, not a checkbox. A model marked unavailable was ticked earlier and is no longer reported; it is kept, so an update does not reset your choice.
  • Refresh reads the model lists again, not only the open tab's: the Copilot CLI's, and those of every other provider that is switched on. A failed OpenAI, Claude, Claude API, Cursor, Grok or DeepSeek read shows a notice such as "Claude model discovery failed. Cached Claude models were kept: …".

When the model data cannot be loaded at all, the composer shows "Model metadata is unavailable. Refresh to choose a model and reasoning effort." with a Refresh models button, and the pickers stay disabled until it works.

Where each model list comes from #

The relay reads each provider's list, and Select Models narrows it. A provider's model ID setting is its default model, the one a conversation starts with when you choose nothing else.

Provider The list comes from When it is read
GitHub Copilot The installed Copilot CLI A few seconds after the relay starts, by sessions that run, and on Refresh.
OpenAI The endpoint's /models list When you save the key or switch OpenAI on again, and on Refresh. The list is kept when a read fails. Starting a chat uses the saved list.
Claude The Claude Agent SDK When you switch Claude on, after a login, and on Refresh.
Claude API Added in 0.9.18 Anthropic's GET /v1/models with the saved key When you save the key or switch Claude API on again, and on Refresh or the tab's Refresh models. Until the first read: the Claude provider's list.
Claude Cloud The Claude provider's models, plus the tab's Default model No reading of its own.
Cursor The Cursor Agent SDK When you save the API key or switch Cursor on again, and on Refresh.
Grok The Grok CLI When you switch Grok on, after a sign-in, after a CLI install from the panel, and on Refresh.
DeepSeek DeepSeek's /models list, its deepseek-* IDs When you save the key, switch DeepSeek on again or change its base URL, and on Refresh. Until the first read: deepseek-flash and deepseek-v4-pro.

If a read fails, the relay keeps the last list it had. When the Copilot list is the stale one, the composer shows a banner, "Model list is cached from CLI; selection may be stale." Press Refresh when a list looks old.

Copilot's list starts with auto, then groups models by vendor, newest version first. Until the first read, a new relay offers a short built-in list; see GitHub Copilot. The defaults of the other providers, and what to do when a model is missing, are on their pages: OpenAI, Claude, Claude API, Claude Cloud, DeepSeek.

Context size #

The Context window picker shows the windows a model offers, for example 400K and 1M. It has one entry for most models, and the chip then only reports the window.

For Claude, a long-context model such as claude-opus-5[1m] is not listed as a second model. Choosing 1M in the picker runs the base model with the long-context variant. Claude's catalog carries no figure for the default window, so that entry reads —. A model that exists only as a [1m] variant offers just 1M. The conversation remembers the window you chose. More on Claude. Added in 0.9.18 A Claude API chat offers 1M for a model whose window Anthropic reports as 1M tokens or more, or whose 1M variant the Claude provider lists; see Claude API.

For Copilot models that have a long-context window, the picker offers it as a second entry, and the pricing details under the picker follow the entry you pick. The choice is stored with the message. The New chat dialog shows the window read-only. A Claude Cloud chat has no size to choose; the picker is hidden.

A DeepSeek chat has one window, 1,048,576 tokens, which the picker shows as 1.05M with nothing to choose. It compacts at 400K unless the auto-compact window is set; see DeepSeek.

Reasoning effort #

The effort picker says how much the model may think before it answers. Higher values mean more thinking before the answer. Its options are the ones the chosen model supports, so they change when you change the model. The values below are all there is; a model offers some of them:

Value Meaning
none No effort is requested. Where the model lists none it is sent as such; otherwise the model runs with its own default.
minimal The lowest tier a model offers, below low.
low, medium, high Increasing effort.
xhigh, max The highest tiers.
Ultracode Claude only. See below.

DeepSeek's levels are low, high (the default) and max, for every model; see below.

default. A model that cannot turn reasoning off shows none as default. Choosing it sends none, and the model runs with its own default reasoning. Cursor models do this.

An effort is sent with each message. The picker only offers values the model takes. If a message names an effort the model does not take (an agent can do this), Claude, Cursor, Grok and Claude Cloud use none. GitHub Copilot and OpenAI refuse the message with an error. DeepSeek maps it to its own levels. A message that names no effort gets none, or the first value of the list if the model has no none; on DeepSeek it keeps the conversation's effort, or high.

Claude #

Claude's picker offers none and the levels the model reports (low, medium, high, xhigh, max). none requests no effort level. Ultracode is added on models that support xhigh. Its tooltip reads "xhigh effort plus multi-agent workflow orchestration — expect much higher token use". It is not a level but a mode: the relay asks for xhigh effort and turns on the session's workflow orchestration, and leaving it turns that off.

Thinking has two switches of its own, per conversation, in the 🧠 context panel: Thinking (on or off, default on) and Thinking text (Summarized or Hidden, default summarized). Hidden only hides the text. Turning thinking off is the control that saves tokens, and it applies to the next CLI session, not mid-session. See Claude.

Added in 0.9.18 A Claude API chat has the same picker and controls. Its levels come from Anthropic's model list for the key: none and what the model reports, plus Ultracode on xhigh models, or only none for a model that reports no effort support. See Claude API.

DeepSeek Added in 0.9.17 #

DeepSeek's models always think, so there is no none. The picker offers low, high and max; high is the default. A different effort restarts the chat's Claude Code between turns. An effort from elsewhere, such as medium, is mapped onto these three. There are no Thinking controls. The mapping and the rest are on DeepSeek.

When an agent starts a session #

An agent that starts a session on a relay with create_session can pass model and effort. If it passes none, the new session follows the session the agent works in, as far as the target relay offers it (a [1m] Claude model matches its base model), and otherwise the target's default model. A Claude Cloud session without model gets the Claude Cloud tab's Default model and takes no effort. If the target does not offer the caller's effort for that model, the session uses the target's default effort. send takes the same two parameters; without them the session keeps its own model and effort.

Added in 0.9.13 A model the target relay does not list for the provider is refused before anything is created or sent, with the close matches; Claude also takes opus, sonnet and haiku, and a Copilot id with its effort, such as gpt-5.4-high, runs as that model with that effort. See Which models are accepted.

Added in 0.9.13 Any message that reaches a conversation without a model, from an agent or a script rather than the composer, runs on the conversation's model, effort and mode, and changes none of them. Before, a Copilot conversation got the first model of the catalog for such a message and kept it. When a Copilot conversation's model has left the catalog, such a message is refused with This conversation's model "…" is no longer available. Choose a model and send again. instead of switching to another model.

By provider #

Provider Model list Change mid-conversation Reasoning values Extra controls
GitHub Copilot, SDK engine Copilot CLI runtime Yes What the runtime reports for the model: none and minimal to xhigh, as the model has them Context window, where the model has a long window
GitHub Copilot, extension engine Copilot CLI runtime Yes The same list The same
OpenAI Endpoint's /models Until the first message By the model's name: gpt-5*, codex*: none, low, medium, high, xhigh; o1*, o3*, o4*: low, medium, high; others: none None
OpenAI Image Image models of the endpoint Until the first message Quality: auto, low, medium, high Size instead of context window
Claude Claude Agent SDK Yes none and what the model reports, plus Ultracode on xhigh models 1M context, Thinking, Thinking text
Claude API Added in 0.9.18 Anthropic's /v1/models for the key Yes As Claude, from Anthropic's list As Claude
Claude Cloud Claude's list plus the Default model Yes None to choose None
Cursor Cursor Agent SDK Yes What each model reports; some show none as default None
Grok Grok CLI No What the model reports, otherwise none, low, medium, high. Any value but none is passed to the Grok CLI as a hint, which may ignore it None
DeepSeek DeepSeek's /models Yes, between turns low, high (default), max for every model None; one window, shown as 1.05M