Skip to main content

Composite Variants

Composite variants let you assign different CLIProxy providers to each model tier (opus/sonnet/haiku). For example: Codex for opus, Claude for sonnet, and Codex Mini for haiku — each with its own fallback and thinking budget. CLIProxy variants are user-defined provider configurations layered on top of a base provider. Simple variants inherit all settings from a base provider with optional overrides. Composite variants extend this by assigning different providers per model tier.

Simple Variants

Create a variant from a base CLIProxy provider:
Options available during creation:
  • Custom nickname
  • Model override
  • Droid target routing: ccs cliproxy create my-codex --provider codex --target droid
Variants are stored in ~/.ccs/config.yaml under cliproxy.variants and become available as profile names:
List all variants and their status:

Composite Variants

Composite variants let you assign different CLIProxy providers to each model tier (opus/sonnet/haiku). For example: Codex for opus, Claude for sonnet, and Codex Mini for haiku — each with its own fallback and thinking budget.

Quick Start

1

Create via wizard

2

Or via dashboard

Navigate to Dashboard → CLIProxy → Advanced Variant and choose the composite variant option.
3

Use the variant

How It Works

  • Each tier (opus/sonnet/haiku) maps independently to a provider + model pair
  • default_tier determines which tier ANTHROPIC_MODEL resolves to when no tier is specified
  • Routing uses the root CLIProxy URL with model-based routing (not provider-specific URLs)
  • Settings written to ~/.ccs/composite-<name>.settings.json

Type Definition

CLI Commands

Fallback Logic

Each tier supports an optional fallback block. On provider error (4xx/5xx, quota exceeded, rate limit, ECONNREFUSED):
  1. Detect which tier failed via model name in stderr
  2. Apply fallback provider + model for that tier only
  3. Retry the request with the updated config
Circular fallback is blocked — a fallback cannot point to the same provider + model as the primary.
Example tier with fallback:

Per-Tier Thinking

Override the thinking budget independently per tier via thinking in CompositeTierConfig. Priority (highest to lowest):
  1. CLI --thinking flag
  2. Per-tier thinking in composite config
  3. Global thinking config
  4. Provider defaults
Valid values: xhigh, high, medium, off, or a numeric token budget string.

Dashboard CRUD

Validation Rules

  • All 3 tiers required on create; partial updates allowed on edit
  • Each tier must have a valid provider and non-empty model
  • Circular fallback detection enforced at save time
  • kiro and ghcp providers require the Plus backend
Switch to the Plus backend if you need kiro or ghcp in any tier: set cliproxy.backend: plus in ~/.ccs/config.yaml.

Storage