Models and tiers
The cheap, mid, and strong tiers, why cheap is the default, and how free-text models resolve.
--model accepts a provider-neutral tier, a model ID, or an alias. The tier is the point: it means the same thing whichever CLI the crew runs.
The tiers#
| Tier | Claude Code | Codex | Grok |
|---|---|---|---|
cheap | claude-haiku-4-5 | gpt-5.6-luna | grok-4.7-build-fast |
mid | claude-sonnet-5 | gpt-5.6-sol | grok-4.6 |
strong | claude-opus-5 | gpt-6-astra | grok-4.7 |
pi has no fixed catalogue: its tiers are ranked from pi --list-models, and overrides use the provider/model IDs pi prints.
Cheap is the default#
Omitting --model recruits a cheap crew rather than falling through to whatever the native CLI happens to be configured with. Routine work never silently lands on an expensive model.
cheapcovers commits, tests, lint, formatting, docs, chores, renames, and mechanical edits.midis for a normal feature, or a change inside one area.strongis for design, debugging, and multi-file or long-context work.
captain crew --task "Debug the failure" --model strong
captain model Jack strongFree text and aliases#
Free text is matched to the closest model the chosen CLI offers: exact IDs and aliases first, then prefixes, substrings, and close spellings. Beyond the tier table, Claude Code also offers claude-fable-5-1 (fable); Codex also offers gpt-5.6-terra (terra) and gpt-5.5; Grok also offers grok-4.5.
Ambiguous or unknown text reports the options and creates nothing — no crew, no pane, no spend.
Overriding what a tier means#
A [models.<provider>] table in settings.toml redefines which model a tier resolves to:
[models.claude]
cheap = "fable"
[captain]
model = "strong"A tier value that matches no known model is kept literally and passed to that CLI as written, so a model newer than your installed release still works. [captain] model is the opposite: it resolves up front, so a typo fails loudly at launch instead of silently starting the wrong model.