Home / Providers

Provider guides

Choose a provider and follow its complete setup block. Each becomes its own shell command with isolated local proxy state and Claude Code history; provider credential storage depends on the route.

Overview

Presets encode provider defaults; dialect names become shell commands. The recommended command name is a convention — each provider can have multiple independently named dialects.

Provider Presets Authentication Command
OpenAI Codexcodex-sol, codexChatGPT OAuthcc-codex
Z.ai GLMglmZAI_API_KEYcc-glm
Moonshot KimikimiKimi OAuthcc-kimi
Google GeminigeminiGoogle OAuth (Antigravity)cc-gemini
xAIgrokxAI OAuthcc-grok
MiniMaxminimaxMINIMAX_API_KEYcc-minimax
DeepSeekdeepseekDEEPSEEK_API_KEYcc-deepseek
Cursorcursor-composer, etc.Cursor API keycc-cursor
GitHub Copilotcopilot-auto, etc.Copilot logincc-copilot
Anthropic ClaudeclaudeAnthropic OAuthcc-claude
Mixed / multi-providermixed-frontierSeveral OAuth loginscc-mixed

Mixed / multi-provider dialects

Claude Code pins every subagent to a model tier — opus, sonnet, or haiku — and each tier maps to a model ID. Because one dialect can hold OAuth credentials for several providers at once, you can point each tier at a different provider. The result is a single Claude Code session whose agents run on different providers: the main agent on one model, opus-tier subagents on another, sonnet-tier on a third — all in the same conversation.

The mixed-frontier preset runs Claude Fable 5.1 as the main model and spreads the tiers across OpenAI, Moonshot, and xAI:

Tier / role Model Provider OAuth login
Main + subagentclaude-fable-5-1Anthropiccc-dialect auth cc-mixed claude
/model opusgpt-6-solOpenAI Codexcc-dialect auth cc-mixed codex
/model sonnetkimi-k3Moonshot Kimicc-dialect auth cc-mixed kimi
/model haikugrok-4.7xAI Grokcc-dialect auth cc-mixed xai

Because the tiers span providers, authenticate each one into the same dialect — one command per provider:

Multi-provider dialect
cc-dialect create cc-mixed --preset mixed-frontier
cc-dialect auth cc-mixed claude
cc-dialect auth cc-mixed codex
cc-dialect auth cc-mixed kimi
cc-dialect auth cc-mixed xai
cc-dialect shim install cc-mixed
cc-mixed

cc-dialect create and cc-dialect doctor report which providers still need a login, and cc-mixed refuses to start until every tier's provider is authenticated — it never silently serves a partial set. The web dashboard shows a per-provider authentication status for the dialect. Override any tier with --opus-model, --sonnet-model, or --haiku-model to build your own mix. Mixing is currently limited to the five OAuth providers; model IDs are current defaults and roll over as providers ship new versions.

Provider terms still apply

Mixing providers in one session runs each request against that provider's own subscription and usage terms. Claude Dialects is an independent, unofficial project and is not affiliated with or endorsed by any provider.

OpenAI Codex

codex-sol · codex

Use codex-sol for GPT-6 Sol as the main, subagent, opus, and sonnet model, with GPT-6 Luna on haiku:

GPT-6 Sol preset
cc-dialect create cc-codex --preset codex-sol
cc-dialect auth cc-codex codex
cc-dialect shim install cc-codex
cc-codex

Use --preset codex instead to lead with GPT-6 Astra (gpt-6-astra) for the main, subagent, and opus routes, with Sol on sonnet and Luna on haiku. There is no requestable gpt-6 family id. Both routes authenticate through ChatGPT OAuth. Astra and Sol are listed on the team, plus, and pro Codex catalogs; the free catalog lists Luna.

Troubleshooting auth_unavailable

If cc-codex reports 503 auth_unavailable after ChatGPT OAuth already succeeded, do not re-authenticate immediately. An upstream HTTP 502 or 503 can put that model's credential into a short CLIProxyAPI cooldown, usually about one minute. Retries during the cooldown can fail almost instantly without another OpenAI request, so auth_unavailable does not necessarily mean the OAuth credential is missing.

Run cc-dialect doctor. For an authenticated Codex dialect, it inspects recent auth/logs/error-v1-messages-*.log and proxy.log entries and distinguishes the upstream HTTP failure from a fast cooldown retry. When the log identifies the failing model, the diagnostic suggests a different configured /model tier — for example, Haiku/Luna when Sol failed on codex-sol, where sonnet is also Sol. You can also run cc-dialect proxy cc-codex restart to clear the generated proxy's in-memory cooldown or inspect the full output with cc-dialect proxy cc-codex logs. A restart cannot make an overloaded HTTP endpoint available.

Why the native Codex CLI may still work

The native Codex CLI uses a WebSocket upstream, while a Codex dialect sends Claude Code's requests through CLIProxyAPI's HTTP upstream. A model such as Sol can therefore fail over HTTP while it still works in the native Codex CLI.

Z.ai GLM

glm

GLM uses Z.ai's Anthropic-compatible API and current GLM-5.3 flagship:

GLM-5.3 setup
export ZAI_API_KEY="your_zai_api_key"
cc-dialect create cc-glm --preset glm
cc-dialect shim install cc-glm
cc-glm

Maps opus → glm-5.3, and both sonnet and haiku → glm-5.3-flash. GLM-5.3 and GLM-5.3-Flash both hold 1,000,000 tokens, so the dialect window is 1,000,000 — no smaller tier remains on the route. GLM-5.3 runs three effort levels — low, high, and max. Z.ai folds medium into high and xhigh into max, and converts a request to disable thinking into low rather than honoring it. Flash uses the same effort scale.

glm-5.3 answered on a live GLM Coding Plan key on 2026-08-15, though Z.ai's model page still reads "The GLM-5.3 API is coming soon" — a pay-as-you-go key may still be refused, which is untested. If yours is, --model glm-4.7 --subagent-model glm-4.7 --opus-model glm-4.7 --context-window 200000 falls back to the newest model the endpoint serves under its own name. Restate the fallback model's real window (200,000), not the preset's 1,000,000 — the model overrides change the route, so the window has to be restated or the dialect is left uncalibrated. Pinning glm-5.2 does nothing: Z.ai resolves retired model IDs forward, answering glm-5.2 with glm-5.3, and rejects only IDs it does not recognize at all.

GLM-4.5-Air (the original cheaper option) held only 131,072 tokens and is no longer served under its own name — Z.ai resolves it to GLM-4.7 (verified 2026-08-15). An existing cc-glm with that old tier and its 131,072-token window is already being answered by GLM-4.7, so re-running cc-dialect create cc-glm --preset glm --context-window 1000000 updates sonnet and haiku to GLM-5.3-Flash and lifts the window to 1,000,000. A dialect created against the previous preset (sonnet on glm-5-turbo, haiku on glm-4.7, window 200,000) is not rewritten in place — re-creating with that same command updates both lower tiers to Flash and lifts the window to 1,000,000. cc-dialect doctor reports both as preset drift, naming the tiers and window the preset has since changed, with that same command — restating a moved window through --context-window.

Moonshot Kimi

kimi

Kimi authenticates through Moonshot's OAuth flow:

Kimi K3 setup
cc-dialect create cc-kimi --preset kimi
cc-dialect auth cc-kimi kimi
cc-dialect shim install cc-kimi
cc-kimi

The rolling kimi preset uses Kimi K3 as its main model. Keep effort at auto — K3 uses max by default. sonnet and haiku select Kimi K2.7 Code Highspeed and Kimi K2.6.

Google Gemini

gemini

Gemini uses Google OAuth through CLIProxyAPI's Antigravity provider:

Gemini Pro Agent setup
cc-dialect create cc-gemini --preset gemini
cc-dialect auth cc-gemini antigravity
cc-dialect shim install cc-gemini
cc-gemini

Uses gemini-pro-agent as the main and opus model, gemini-3.8-flash-high for sonnet, and gemini-3.5-flash-lite for haiku.

xAI Grok

grok

The grok preset maps every Claude Code tier to Grok 4.7 (grok-4.7) through xAI OAuth:

Grok 4.7 setup
cc-dialect create cc-grok --preset grok
cc-dialect auth cc-grok xai
cc-dialect shim install cc-grok
cc-grok

Grok 4.7 advertises low, medium, high, and xhigh reasoning. The former grok-build-0.1 and grok-composer-2.5-fast model IDs are no longer offered on the grok.com OAuth surface. cc-dialect doctor gives dialects still using either retired route a recreate command targeting --preset grok.

MiniMax

minimax
MiniMax M3 setup
export MINIMAX_API_KEY="your_minimax_api_key"
cc-dialect create cc-minimax --preset minimax
cc-dialect shim install cc-minimax
cc-minimax

Maps every Claude Code model alias to MiniMax-M3 (1,000,000-token context).

DeepSeek

deepseek
DeepSeek v4 setup
export DEEPSEEK_API_KEY="your_deepseek_api_key"
cc-dialect create cc-deepseek --preset deepseek
cc-dialect shim install cc-deepseek
cc-deepseek

Main, subagent, and opus → deepseek-v4-pro; sonnet and haiku → deepseek-flash.

Cursor

cursor-composer · cursor-grok · cursor-mix · cursor-auto

Cursor dialects use a local OpenAI-compatible bridge backed by the official @cursor/sdk:

Composer 2.5 setup
cc-dialect cursor install
export CURSOR_API_KEY="your_cursor_api_key"

cc-dialect create cc-cursor --preset cursor-composer
cc-dialect shim install cc-cursor
cc-cursor

# Check bridge status
cc-dialect cursor status
cc-dialect models cc-cursor

Available presets:

  • cursor-composer — Composer 2.5 with Fast/Standard menu mappings
  • cursor-composer-fast — explicitly forces Composer 2.5 Fast
  • cursor-grok — Cursor Grok 4.7 (grok-4.7)
  • cursor-mix — Composer 2.5, Grok 4.7, and Kimi K3 across the Opus, Sonnet, and Haiku tiers
  • cursor-auto — Cursor's auto selection
ℹ SDK bridge details

Each Cursor dialect reserves two localhost ports: one for the embedded proxy and one for the SDK bridge. Tools are forwarded with cc_tool_ schema aliases to prevent Composer from calling Cursor-native schemas. Claude Code permission prompts remain in control.

The SDK's local agent store is scoped to one Claude Code turn and deleted when the turn finishes or goes idle; the same Cursor agent is reused across tool-call steps within that turn. Every bridge launch starts from an empty parent store directory. Streaming chat completions emit SSE output incrementally — headers and the role chunk before the run starts, then text deltas as they arrive, with a keepalive heartbeat and per-request timing in cursor-bridge.log. Summary and thinking progress stays visible but travels on a separate reasoning_content channel, which the proxy turns into Anthropic thinking blocks: Claude Code shows it as collapsed thinking rather than keeping it as assistant text, so a thinking-heavy session no longer fills its context window with reasoning that is resent on every following turn. The bridge logs faults raised outside a request to cursor-bridge.log and keeps serving. A bridge that dies anyway is reported as crashed by cc-dialect proxy <name> status and cc-dialect doctor, which point at cc-dialect proxy <name> logs.

Both SDK bridges pass the conversation to their model as flattened text, with past tool calls and results introduced by neutral TOOL HISTORY <tool>: and RESULT HISTORY <tool>: label lines. The preamble tells the model never to reproduce those labels, and the bridge also filters its replies: a reply line matching a label exactly — the label, one tool name, a closing colon, and nothing else — is dropped along with the rest of that reply, and the suppression is recorded in cursor-bridge.log or copilot-bridge.log. The former ASSISTANT TOOL CALL and CLAUDE CODE TOOL RESULT labels remain filter-only for replies generated from older prompts. Label text inside a fenced code block, indented, or used mid-sentence is left alone, so a reply explaining the transcript format is unaffected, as are tool calls themselves — those travel as structured calls rather than as this text.

GitHub Copilot

copilot-auto · copilot-mai · copilot-codex

Install and authenticate the Copilot SDK once:

cc-dialect copilot install
cc-dialect copilot login
cc-dialect copilot status
cc-dialect copilot models

Create a general Copilot dialect:

Copilot auto setup
cc-dialect create cc-copilot --preset copilot-auto
cc-dialect shim install cc-copilot
cc-copilot

Available presets: copilot-auto, copilot-mai (MAI-Code-1.1-Flash, mai-code-1.1-flash), copilot-codex (GPT-6 Sol, gpt-6-sol), copilot-claude (Claude Sonnet 5 with Haiku 4.5, claude-haiku-4.5), and copilot-gemini (Gemini 3.8 Flash, gemini-3.8-flash).

Claude Code's /model picker sends dashed IDs such as claude-opus-5-5 and claude-fable-5-1. Copilot names those models with dots (claude-opus-5.5). A Copilot dialect registers the dotted ID as the upstream name and, unless that dashed ID is already in the catalog, a second entry that accepts the dashed form. Dotted IDs keep working. Non-Claude IDs and other bridges are left alone.

Replies are filtered for imitated transcript framing exactly as the Cursor bridge does, with suppressions recorded in copilot-bridge.log. A text-only turn is retried only when it combines corroborating unfenced transcript signals — such as conversation roles plus tool markup, or a USER: section plus an interrupted-tool tail — while a lone role-heading or tool-markup example remains ordinary output. If a turn starts but produces no text or tool call within five minutes, the bridge also resends the full prompt once in a fresh SDK session. Ordinary answers, fenced examples, partial output, SDK errors, tool calls, and disconnected clients are not retried; two attempts retain the previous ten-minute worst-case bound. Because recovery resends the complete long-context prompt, it also consumes a second turn of Copilot allowance. cc-dialect copilot install pins @github/copilot-sdk 1.0.22 and @github/copilot 1.0.98. The SDK no longer installs the copilot executable, so the CLI package is what cc-dialect copilot login runs. After a cc-dialect update changes either pin, run cc-dialect copilot install before launching an existing Copilot dialect — a mismatched runtime is rejected rather than used, and cc-dialect copilot status reports a missing or non-executable login command as well as a wrong SDK version.

Anthropic Claude

claude

The claude preset routes Claude Code through the embedded proxy with a separate Anthropic OAuth login:

Isolated Claude OAuth setup
cc-dialect create cc-claude --preset claude
cc-dialect auth cc-claude claude
cc-dialect shim install cc-claude
cc-claude

Unlike a native shortcut, cc-claude has private settings, credentials, and history. Maps main and opus to Claude Fable 5.1 (claude-fable-5-1), with Sonnet 5 (claude-sonnet-5) and Haiku 4.5 (claude-haiku-4-5) for lower tiers.