v0.36.2

Reasoning

Reasoning levels control how much internal reasoning a model does before responding. Cast combines /v1/models metadata when an endpoint provides it with a configured provider dialect for the request shape.

Levels

LevelDescription
offNo reasoning — standard completion
lowMinimal reasoning
mediumBalanced reasoning (often the default)
highDeep reasoning
maxMaximum reasoning effort

For models that report reasoning as a binary toggle (on/off without effort levels), the options are simply off and on.

Setting the Level

CLI

cast -r high "refactor this function"
cast --reasoning medium "explain the session module"

Interactive

/reasoning

Opens a picker if the model supports reasoning controls. If the provider doesn't expose reasoning metadata, a message explains that the model uses its own default.

Provider protocol

/reasoning-format selects how Cast sends reasoning controls for the active saved provider. auto is the default and detects known endpoint hosts. Choose an explicit format when a compatible proxy uses a nonstandard host or needs a forced protocol.

Supported formats include OpenAI (reasoning_effort), OpenRouter (reasoning.effort), DeepSeek, Kimi, Qianfan, Qwen/DashScope, Together, xAI, Z.ai, Huawei ModelArts, and MiniMax. Generic OpenAI-compatible endpoints receive a conservative reasoning_effort request when reasoning is enabled and no control when it is off.

Saved

The reasoning level is saved to ~/.cast/settings.json per model. Switching models triggers a new reasoning selection if the new model supports different options.

How Reasoning Metadata is Discovered

Cast fetches the model list from the configured provider's /v1/models endpoint. OpenRouter exposes a rich reasoning field per model:

{
  "id": "qwen/qwen3-235b-a22b",
  "reasoning": {
    "mandatory": false,
    "default_enabled": true,
    "supported_efforts": ["high", "medium", "low"],
    "default_effort": "medium"
  }
}

When present, Cast reads this metadata to determine:

Many OpenAI-compatible providers omit this metadata. Their request dialect is still selected from the provider configuration, so their native reasoning controls and streaming reasoning fields can be normalized for the TUI and web UI.

Think Block Parsing

Some models (Qwen, DeepSeek) output reasoning in <think> blocks rather than through a structured API field. cast parses these blocks automatically:

<think>
Let me analyze this step by step...
</think>

Here's my analysis...

The thinking content is displayed separately in the TUI and excluded from the main response.

Provider Behavior

The exact off request depends on the selected dialect. For example, OpenRouter receives reasoning: { enabled: false }, OpenAI receives reasoning_effort: "none", and providers that use a thinking flag receive their native disabled value. MiniMax reasoning is always enabled; Cast requests its split-reasoning stream format so reasoning and answer text remain separate.

When the provider doesn't report reasoning capabilities (unknown), cast sends no reasoning params, letting the provider use its own default.