Models
Each harness keeps a model list and a default model. Agent steps pick from that list, type any other id, or use the default.
Which model a step uses
Section titled “Which model a step uses”When a step runs, the model is:
- the step’s Model, if set;
- otherwise the harness’s default model;
- otherwise none.
If a model is chosen, the harness’s Model arguments (--model {{model}} for most CLIs) are added to the command. If there’s no model, no model flag is passed and the CLI uses whatever it’s configured to use. API harnesses fall back to claude-opus-5 (Claude API) when neither is set; the OpenAI-compatible harness sends whatever is set.
The resolved model is shown on the step in the run view, the run graph and the step’s log (Claude Code · opus).
The step model picker
Section titled “The step model picker”In the pipeline editor, Harness & model → Model shows:
- a Default chip, labelled with the harness’s default model (e.g.
Default: sonnet). Choosing it clears the step’s model, so the step follows the harness default if you change it later; - one chip per model in the harness list;
- a text box: Or type a custom model id. Anything typed there is used as-is, even if it isn’t in the list;
- a refresh chip (Pull the latest models) for harnesses with a model list source. It fetches and saves the harness’s list.
Lists longer than 12 models collapse to the first 12 plus a +N more chip (Show fewer to collapse again), and the text box becomes Search all models or type a custom id with autocomplete over the full list. The selected model always stays visible.
Changing a step’s harness clears its model.
Editing the list
Section titled “Editing the list”In the harness editor, Models is a chip input:
- type an id and press Enter, , or Tab to add it; pasting a comma- or space-separated list adds them all;
- Backspace in the empty input removes the last model;
- click ★ on a chip to make it the default; click × to remove it. Removing the default makes the first remaining model the default.
The first six models (default highlighted) are shown on the harness card.
Fetching the latest models
Section titled “Fetching the latest models”Harnesses with a model list source have a Models button on their card and a Fetch latest button in the editor.
| Button | What it does |
|---|---|
| Models (card) | Fetches the list and saves it to the harness immediately. Toasts Name: N models (M new). |
| Fetch latest (editor) | Fetches the list into the editor. Nothing is saved until you click Save. |
Either way, the new list replaces the old one. The default model is kept if it’s still in the list, otherwise the first model becomes the default.
Sources per harness:
| Harness | Source |
|---|---|
| Claude Code | Anthropic Models API (needs ANTHROPIC_API_KEY); aliases without digits such as opus, sonnet, haiku are kept |
| OpenAI Codex CLI | codex debug models |
| Gemini CLI | GET https://generativelanguage.googleapis.com/v1beta/openai/models with GEMINI_API_KEY |
| Cursor Agent | cursor-agent models |
| OpenCode | opencode models |
| Pi | pi --list-models (its provider model table becomes provider/model ids) |
| Claude API | Anthropic Models API |
| OpenAI-compatible API | GET {base URL}/models |
| GitHub Copilot CLI, Aider, Amp, Goose | none — edit the list by hand |
| Simulator | fixed: fast, realistic, flaky |
A command source must exit 0 within 30 seconds. Its output can be JSON ({"models": […]}, {"data": […]} or an array of strings or objects with slug, id or name) or text with one model per line. Headers ending in :, # comments, bullets and trailing labels like - Fast model or (current) are handled. JSON entries with "visibility": "hide" are skipped, and entries are sorted by priority when present. A models/ prefix is removed.
Errors you may see:
Set ANTHROPIC_API_KEY (or add it to the harness env) to fetch models from the Anthropic API— Claude Code’s list comes from the API, which needs a key in the app’s environment. Detection and model fetching don’t see Settings → Environment variables.<command> <args> failed: …— the list command exited non-zero.<Name> returned no models— the source answered with an empty list.<Name> has no model list source configured.
You can set a model list source on any CLI harness in its editor (Model list source: None, Command, Anthropic API, OpenAI API).