192 lines
4.7 KiB
Markdown
192 lines
4.7 KiB
Markdown
|
|
# Model Mapping
|
||
|
|
|
||
|
|
**Different models for different roles. Advanced optimization.**
|
||
|
|
|
||
|
|
Claude Code uses different model "tiers" internally:
|
||
|
|
- **Opus** - Complex planning, architecture decisions
|
||
|
|
- **Sonnet** - Default coding tasks (most work happens here)
|
||
|
|
- **Haiku** - Fast, simple tasks, background operations
|
||
|
|
- **Subagent** - When Claude spawns child agents
|
||
|
|
|
||
|
|
With model mapping, you can route each tier to a different model.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Why Bother?
|
||
|
|
|
||
|
|
**Cost optimization.** Use a cheap model for simple Haiku tasks, premium for Opus planning.
|
||
|
|
|
||
|
|
**Capability matching.** Some models are better at planning vs execution.
|
||
|
|
|
||
|
|
**Hybrid approach.** Keep real Anthropic Claude for Opus, use OpenRouter for everything else.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Basic Mapping
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claudish \
|
||
|
|
--model-opus google/gemini-3-pro-preview \
|
||
|
|
--model-sonnet x-ai/grok-code-fast-1 \
|
||
|
|
--model-haiku minimax/minimax-m2
|
||
|
|
```
|
||
|
|
|
||
|
|
This routes:
|
||
|
|
- Architecture/planning (Opus) → Gemini 3 Pro
|
||
|
|
- Normal coding (Sonnet) → Grok Code Fast
|
||
|
|
- Quick tasks (Haiku) → MiniMax M2
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
Set defaults so you don't type flags every time:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Claudish-specific (takes priority)
|
||
|
|
export CLAUDISH_MODEL_OPUS='google/gemini-3-pro-preview'
|
||
|
|
export CLAUDISH_MODEL_SONNET='x-ai/grok-code-fast-1'
|
||
|
|
export CLAUDISH_MODEL_HAIKU='minimax/minimax-m2'
|
||
|
|
export CLAUDISH_MODEL_SUBAGENT='minimax/minimax-m2'
|
||
|
|
|
||
|
|
# Or use Claude Code standard format (fallback)
|
||
|
|
export ANTHROPIC_DEFAULT_OPUS_MODEL='google/gemini-3-pro-preview'
|
||
|
|
export ANTHROPIC_DEFAULT_SONNET_MODEL='x-ai/grok-code-fast-1'
|
||
|
|
export ANTHROPIC_DEFAULT_HAIKU_MODEL='minimax/minimax-m2'
|
||
|
|
export CLAUDE_CODE_SUBAGENT_MODEL='minimax/minimax-m2'
|
||
|
|
```
|
||
|
|
|
||
|
|
Now just run:
|
||
|
|
```bash
|
||
|
|
claudish "do something"
|
||
|
|
```
|
||
|
|
|
||
|
|
Each tier uses its mapped model automatically.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Hybrid Mode: Real Claude + OpenRouter
|
||
|
|
|
||
|
|
Here's a powerful setup: Use actual Claude for complex tasks, OpenRouter for everything else.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claudish \
|
||
|
|
--model-opus claude-3-opus-20240229 \
|
||
|
|
--model-sonnet x-ai/grok-code-fast-1 \
|
||
|
|
--model-haiku minimax/minimax-m2
|
||
|
|
```
|
||
|
|
|
||
|
|
Wait, `claude-3-opus-20240229` without the provider prefix?
|
||
|
|
|
||
|
|
Yep. Claudish detects this is an Anthropic model ID and routes directly to Anthropic's API (using your native Claude Code auth).
|
||
|
|
|
||
|
|
**Result:** Premium Claude intelligence for planning, cheap OpenRouter models for execution.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Subagent Mapping
|
||
|
|
|
||
|
|
When Claude Code spawns sub-agents (via the Task tool), they use the subagent model:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
export CLAUDISH_MODEL_SUBAGENT='minimax/minimax-m2'
|
||
|
|
```
|
||
|
|
|
||
|
|
This is especially useful for parallel multi-agent workflows. Cheap models for workers, premium for the orchestrator.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority Order
|
||
|
|
|
||
|
|
When multiple sources set the same model:
|
||
|
|
|
||
|
|
1. **CLI flags** (highest priority)
|
||
|
|
- `--model-opus`, `--model-sonnet`, etc.
|
||
|
|
2. **CLAUDISH_MODEL_*** environment variables
|
||
|
|
3. **ANTHROPIC_DEFAULT_*** environment variables (lowest)
|
||
|
|
|
||
|
|
Example:
|
||
|
|
```bash
|
||
|
|
export CLAUDISH_MODEL_SONNET='minimax/minimax-m2'
|
||
|
|
|
||
|
|
claudish --model-sonnet x-ai/grok-code-fast-1 "prompt"
|
||
|
|
# Uses Grok (CLI flag wins)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## My Recommended Setup
|
||
|
|
|
||
|
|
For cost-optimized development:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# .env or shell profile
|
||
|
|
export CLAUDISH_MODEL_OPUS='google/gemini-3-pro-preview' # $7.00/1M - for complex planning
|
||
|
|
export CLAUDISH_MODEL_SONNET='x-ai/grok-code-fast-1' # $0.85/1M - daily driver
|
||
|
|
export CLAUDISH_MODEL_HAIKU='minimax/minimax-m2' # $0.60/1M - quick tasks
|
||
|
|
export CLAUDISH_MODEL_SUBAGENT='minimax/minimax-m2' # $0.60/1M - parallel workers
|
||
|
|
```
|
||
|
|
|
||
|
|
For maximum capability:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
export CLAUDISH_MODEL_OPUS='google/gemini-3-pro-preview' # 1M context
|
||
|
|
export CLAUDISH_MODEL_SONNET='openai/gpt-5.1-codex' # Code specialist
|
||
|
|
export CLAUDISH_MODEL_HAIKU='x-ai/grok-code-fast-1' # Fast and capable
|
||
|
|
export CLAUDISH_MODEL_SUBAGENT='x-ai/grok-code-fast-1'
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Checking Your Configuration
|
||
|
|
|
||
|
|
See what's configured:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Current environment
|
||
|
|
env | grep -E "(CLAUDISH|ANTHROPIC)" | grep MODEL
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Common Patterns
|
||
|
|
|
||
|
|
**Budget maximizer:**
|
||
|
|
All tasks → MiniMax M2. Cheapest option that works.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claudish --model minimax/minimax-m2 "prompt"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Quality maximizer:**
|
||
|
|
All tasks → Gemini 3 Pro. Best context and reasoning.
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claudish --model google/gemini-3-pro-preview "prompt"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Balanced approach:**
|
||
|
|
Map by complexity (shown above).
|
||
|
|
|
||
|
|
**Real Claude for critical paths:**
|
||
|
|
Hybrid with native Anthropic for Opus tier.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Debugging Model Selection
|
||
|
|
|
||
|
|
Not sure which model is being used? Enable verbose mode:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
claudish --verbose --model x-ai/grok-code-fast-1 "prompt"
|
||
|
|
```
|
||
|
|
|
||
|
|
You'll see logs showing which model handles each request.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Next
|
||
|
|
|
||
|
|
- **[Environment Variables](../advanced/environment.md)** - Full configuration reference
|
||
|
|
- **[Choosing Models](choosing-models.md)** - Which model for which task
|