Models
ShipCode can assign a provider, model, and reasoning effort independently to planning, review, execution, and verification. App settings establish the defaults; project and issue overrides can replace them for a narrower scope.
The source of truth is model-catalog.ts, model-resolution.ts, and model-config-presets.ts.
Providers and models
| Provider | Curated models | Plan | Review | Execute | Verify |
|---|---|---|---|---|---|
| Claude CLI | opus, sonnet, haiku, fable, claude-fable-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-4-6, claude-haiku-4-5-20251001 | ✓ | ✓ | ✓ | ✓ |
| Codex CLI | gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.4, gpt-5.4-mini | ✓ | ✓ | ✓ | ✓ |
| Gemini CLI | gemini-2.5-pro, gemini-2.5-flash | ✓ | ✓ | ✓ | ✓ |
| Cursor CLI | auto | — | — | ✓ | — |
| Grok CLI | grok-4.5 | — | — | ✓ | — |
| OpenRouter | openrouter/auto, openrouter/free, anthropic/claude-sonnet-4.6, anthropic/claude-opus-4.8, anthropic/claude-fable-5, openai/gpt-5.6-sol, openai/gpt-5.6-terra, openai/gpt-5.6-luna, qwen/qwen3.6-plus | ✓ | ✓ | ✓ | ✓ |
Codex publishes its installed model catalog through codex debug models; the models above are ShipCode’s conservative fallback options when an older CLI cannot report capabilities. Cursor and Grok are execute-only because their headless CLIs cannot guarantee a read-only planning, review, or verification run.
The curated OpenRouter list is only a starting point. OpenRouter settings accept other catalog model IDs, and openrouter/auto can choose the upstream model per request. See OpenRouter for authentication and fallback behavior.
Pinned defaults
Pinned defaults are used when a CLI-backed phase or auxiliary task has no explicit model override. They can lag newly added catalog entries deliberately while fleet compatibility is verified.
| Lane | Provider | Pinned model |
|---|---|---|
| Pipeline phases | Claude | claude-fable-5 |
| PRD rewrite | Claude | claude-sonnet-4-6 |
| Issue triage | Claude | claude-haiku-4-5-20251001 |
| Pipeline phases | Codex | gpt-5.6-sol |
| PRD rewrite | Codex | gpt-5.6-luna |
| Issue triage | Codex | gpt-5.6-luna |
| Pipeline phases | Gemini | gemini-2.5-pro |
| Execution | Cursor | auto |
| Execution | Grok | grok-4.5 |
| Paid routing | OpenRouter | openrouter/auto |
| Free routing | OpenRouter | openrouter/free |
| Explicit fallback | OpenRouter | qwen/qwen3.6-plus |
The phase provider itself comes from app settings, then project overrides, then issue overrides. A model ID follows the same narrowing order. Use the desktop Settings → Pipeline panel for app defaults and project or issue settings for targeted overrides.
Slug aliases
Model fields accept canonical IDs or these case-insensitive shorthands. Bare Claude family aliases are rolling Claude CLI selections: the installed Claude CLI chooses the latest generation in that family. Versioned shorthands resolve to concrete IDs and remain pinned.
| Family | Aliases | Resolves to |
|---|---|---|
| Opus (latest) | opus | Rolling opus alias |
| Opus 4.8 | opus-4.8, opus4.8 | claude-opus-4-8 |
| Opus 4.7 | opus-4.7 | claude-opus-4-7 |
| Opus 4.6 | opus-4.6 | claude-opus-4-6 |
| Sonnet (latest) | sonnet | Rolling sonnet alias |
| Sonnet 4.6 | sonnet-4.6 | claude-sonnet-4-6 |
| Fable (latest) | fable | Rolling fable alias |
| Fable 5 | fable-5, fable5 | claude-fable-5 |
| Haiku (latest) | haiku | Rolling haiku alias |
| Haiku 4.5 | haiku-4.5 | claude-haiku-4-5-20251001 |
| Grok | grok, grok-4.5, grok4.5 | grok-4.5 |
| GPT-5.6 Sol | 5.6, gpt-5.6, 5.6-sol, sol | gpt-5.6-sol |
| GPT-5.6 Terra | 5.6-terra, terra | gpt-5.6-terra |
| GPT-5.6 Luna | 5.6-luna, luna | gpt-5.6-luna |
| GPT-5.5 | 5.5 | gpt-5.5 |
| GPT-5.4 | 5.4 | gpt-5.4 |
| GPT-5.4 Mini | 5.4-mini, mini | gpt-5.4-mini |
Unknown values are preserved as typed, which allows provider-native model IDs that are not in the curated fallback catalog.
Rolling Claude aliases are valid only when the selected provider is Claude CLI. OpenRouter requires a concrete OpenRouter model ID such as anthropic/claude-opus-4.8; ShipCode rejects bare Claude aliases before an OpenRouter request can be sent.
ShipCode records the concrete model reported by successful Claude stream-JSON runs. Interactive Claude sessions do not always expose that metadata. When they do not, the resolved-model field remains unavailable rather than recording the requested alias as if it were concrete evidence.
Existing saved concrete Claude IDs are not migrated to rolling aliases. A saved claude-opus-4-8 selection stays pinned until it is explicitly changed.
Presets
| Preset | Scope | Plan | Review | Execute | Verify |
|---|---|---|---|---|---|
claude | App or project | Fable 5 | Fable 5 | Fable 5 | Fable 5 |
codex | App or project | GPT-5.6 Sol | GPT-5.6 Sol | GPT-5.6 Sol | GPT-5.6 Sol |
hybrid | App or project | Fable 5 | GPT-5.6 Sol | GPT-5.6 Sol | GPT-5.6 Sol |
opus-combo | Project only | Opus 4.8 | GPT-5.6 Sol | GPT-5.6 Sol | GPT-5.4 Mini |
fable-combo | Project only | Fable 5 | GPT-5.6 Sol | GPT-5.6 Terra | GPT-5.6 Luna |
opus-combo and fable-combo are project-only because their concrete per-phase model IDs require project overrides; the app-wide preset path selects providers while keeping the pinned provider models. The Fable combo intentionally maps the deepest planning work to Fable, flagship review to Sol, sustained implementation to Terra, and fast verification to Luna.
Reasoning effort
ShipCode normalizes the shared none, minimal, low, medium, high, and xhigh choices to each provider’s supported controls.
| Provider or model | Effective choices | Normalization rules |
|---|---|---|
| Claude, except Fable 5 | None, Medium, High | Minimal/Low → None; Extra high → High |
| Fable 5 on Claude CLI | Medium, High | None/Minimal/Low → Medium; Extra high → High |
| Codex | Low, Medium, High, Extra high | None/Minimal → Low |
| Gemini | Low, Medium, High | None/Minimal → Low; Extra high → High |
| Cursor | None | The CLI selects reasoning automatically |
| Grok | None | The CLI selects reasoning automatically |
| OpenRouter Claude Sonnet 4.6 / Opus 4.6 / Opus 4.8 | None, High | Any non-None value uses adaptive thinking |
anthropic/claude-fable-5 on OpenRouter | Low, Medium, High, Extra high | None/Minimal → Low |
| Other OpenRouter models | Provider-dependent | The requested effort may be remapped upstream |
Fable 5 always uses adaptive thinking, so neither path offers a no-thinking mode for it: the Claude CLI exposes Medium and High budgets, and OpenRouter reports the model as mandatory-reasoning with Low through Extra high available, so a None selection is lifted to Low rather than switching reasoning off. A configured effort is normalized before the provider runs, and the effective value is what ShipCode records and displays.
See also
- Pipeline overview — where each model participates in a run
- Configuration — GitHub routing labels and repository setup
- OpenRouter — API-key setup, model overrides, and fallback order