# Choose and Switch Models


kli runs against whichever model you select. You change that model in the running session with a command, and you make a choice stick across sessions by writing it into `settings.json`. This page covers both.

A model is named by its provider and id together, written `provider/model` (for example `anthropic/claude-opus-4-8`). For the full list of providers, see [Models & Providers](/kli/models/providers-and-transports). Before a provider's models appear, that provider needs a credential. See [Connect a Provider](/kli/guides/connect-a-provider) for that step.

## See which models you can use

Run `/models` to list every model you are authenticated for:

```
/models
```

Each line shows the `provider/model` reference and the model's display name. A line marked with `*` is the current selection. A line can also include a compact options marker, for example `options reasoning-effort`, naming the semantic options that model accepts. Pass a word to filter the list by provider id, model id, display name, or full reference:

```
/models opus
```

When nothing matches, the command says so rather than listing everything.

To see the providers themselves and their authentication state, run `/providers`:

```
/providers
```

Each line gives the provider id, its auth status (`yes` when a credential is available, `no` when it is missing, `local` when the provider needs none), and the count of models it offers. A provider with `auth no` registers no usable models, so its models will not appear in `/models`.

## Switch the model for this session

Give `/model` a reference to switch to it:

```
/model anthropic/claude-opus-4-8
```

The reference does not have to be exact. If the text you type matches exactly one available model by id or substring, kli selects it; you can drop the provider when the model id alone is unambiguous:

```
/model claude-opus-4-8
```

If your text matches more than one model, kli lists the candidates and changes nothing, so you can retype a longer reference. If it matches none, kli says so.

In the terminal UI, bare `/model` opens a menu over the available models with the current one marked. Running `/model` bare without the UI prints the current selection followed by the model list.

After a successful switch, kli prints a `Model:` system line confirming the new selection. The change applies from the next turn; it does not alter any earlier messages in the session.

## Set reasoning effort

`reasoning-effort` is the semantic option behind model thinking. Models whose `/models` line includes `options reasoning-effort` accept the levels `off`, `minimal`, `low`, `medium`, `high`, and `xhigh`. Set one with `/thinking`:

```
/thinking high
```

Run `/thinking` with no argument to print the current level. In the terminal UI, bare `/thinking` opens a menu over the levels when the current model supports `reasoning-effort`. `/thinking off` turns reasoning off for the current model.

You can also set the level in the same step as the model by appending it to a `/model` reference, separated by a space:

```
/model anthropic/claude-opus-4-8 high
```

Setting a non-`off` level on a model that does not support `reasoning-effort` is an error, and so is setting a level when no model is selected. Other semantic options are configured up front in `providers.json` model schemas and `settings.json` `defaultOptions`; `/thinking` is the interactive command for the option users change most often.

## Make a choice persist

The commands above change only the running session. To start every session on a chosen model and option set, write the choice into `settings.json`:

```json
{
  "defaultProvider": "anthropic",
  "defaultModel": "claude-opus-4-8",
  "defaultOptions": {
    "reasoning-effort": "high"
  }
}
```

`defaultProvider` and `defaultModel` take effect together: kli looks up that exact model at startup and selects it. `defaultOptions` is an object keyed by semantic option id. Each option must be supported by the selected model; unsupported options and invalid values are ignored with warnings rather than failing startup.

Set it in `settings.json` (global `~/.config/kli/settings.json`, project `<repo>/.kli/settings.json`; project wins) — see [Settings](/kli/config/settings). Put your usual default in the global file, then override it per repository when a particular codebase wants a different model or option set. A `/model` or `/thinking` command run during a session always takes precedence over these defaults for the rest of that session.

For the full set of `settings.json` keys, see the [settings reference](/kli/config/settings). For where the model selection sits in a turn, see [The Agent Loop](/kli/concepts/the-agent-loop).
