Models & Customization
Select a model
Use a slash prefix or --model:
zo /sonnet 'Review this design'
zo --model opus 'Analyze the tradeoffs'
# Full OpenRouter IDs work without an alias
zo /openai/gpt-5.6-sol 'Explain this code'
zo --model anthropic/claude-sonnet-5 'Review this API'Selection priority is --model, a slash-prefixed model, default_model, then the built-in sol fallback.
Alias matching is case-insensitive and tries exact, substring, then fuzzy matches. Custom models are considered before built-ins, and ambiguous top fuzzy matches produce an error instead of a silent choice.
Built-in aliases
| Alias | OpenRouter model ID |
|---|---|
sol | openai/gpt-5.6-sol |
terra | openai/gpt-5.6-terra |
luna | openai/gpt-5.6-luna |
flash | google/gemini-3.7-flash |
geminipro | ~google/gemini-pro-latest |
gpt4.1 | openai/gpt-4.1 |
gpt4o | openai/gpt-4o |
gpt4omini | openai/gpt-4o-mini |
grok | x-ai/grok-4.6 |
haiku | anthropic/claude-3-haiku |
o1 | openai/o1 |
opus | anthropic/claude-opus-4.8 |
sonnet | anthropic/claude-sonnet-5 |
banana | google/gemini-3-pro-image-preview |
sol is the default text model. Image mode has a separate default, google/gemini-2.5-flash-image.
List the aliases active after applying your configuration with:
zo +list-modelsReasoning effort
zo --reasoning-effort low 'Summarize this proposal'
zo --chat --reasoning-effort xhigh 'Help me analyze this design'Supported values are auto, max, xhigh, high, medium, low, minimal, and none. auto leaves the setting to OpenRouter and the selected model; none explicitly requests no reasoning.
Priority is CLI flag, custom-model setting, global config, then the built-in high default. Reasoning effort applies to text and chat requests, not image mode.
reasoning_effort = "medium"Add or replace aliases
The [models] table maps short names to model IDs. It can add aliases, override built-ins, or disable a built-in with an empty value:
[models]
fast = "google/gemini-3.7-flash"
sonnet = "provider/other-sonnet"
opus = ""Custom models
Custom models add an optional system prompt and reasoning setting:
[[custom_models]]
name = "reviewer"
model = "anthropic/claude-sonnet-5"
system_prompt = "Review code concisely. Prioritize correctness, security, and concrete fixes."
reasoning_effort = "high"git diff | zo /reviewer 'Review these changes'
zo --chat /reviewer 'Help me review this project'Custom model names can override any alias with the same name. Omitting their reasoning setting inherits the global value; setting it to auto explicitly restores the provider/model default.
Use --verbose to print the resolved alias and model ID without pausing, or --debug to inspect and confirm the complete request settings.