Switch model and effort
Claude Code 2.x supports live switching without losing the conversation:
/model opus
/model sonnet
/model haiku
/model <any model ID from cc-dialect models cc-codex>
/effort low
/effort high
/effort xhigh
/effort max
Each dialect maps opus, sonnet, and haiku to its own three configured model IDs. The Codex preset maps them to Sol, Terra, and Luna. Use --opus-model, --sonnet-model, and --haiku-model to change that mapping.
Interactive choices are stored in the dialect's own configuration directory — changing cc-codex does not change regular claude, cc-kimi, or another dialect.
List live models from an authenticated instance:
cc-dialect models cc-codex
Presets and custom dialects
List presets included in your installed version:
cc-dialect presets
Override parameters while creating or updating a dialect:
cc-dialect create cc-my-codex \
--preset codex \
--model gpt-5.6 \
--opus-model gpt-5.6-sol \
--sonnet-model gpt-5.6-terra \
--haiku-model gpt-5.6-luna \
--effort-level auto \
--concurrency 3 \
--effort=true \
--tool-search=false \
--port 53170
For an Anthropic-compatible service, route the upstream through the dialect's isolated embedded proxy:
export MY_PROVIDER_TOKEN="..."
cc-dialect create cc-my-model \
--model my-model-id \
--base-url https://provider.example.com/api/anthropic \
--token-env MY_PROVIDER_TOKEN
cc-dialect shim install cc-my-model
Updating cc-dialect does not silently change existing dialects. Re-run cc-dialect create cc-kimi --preset kimi to apply the latest preset while preserving port, credentials, and history. Start a new conversation after changing the underlying model.
Detect configured dialects
Human-readable detection:
cc-dialect detect
cc-dialect detect codex
cc-dialect detect glm --running
JSON output for tooling:
cc-dialect detect --running --json
cc-dialect detect kimi --running --json
Silent exit-status check:
if cc-dialect detect glm --running --quiet; then
echo "A GLM Claude Code dialect is running"
fi
Exit status 0 means at least one matching dialect was found; 1 means none matched.
Web dashboard
cc-dialect web
cc-dialect web --no-browser
cc-dialect web --listen 127.0.0.1:8765
cc-dialect web --listen '[::1]:8765'
Without flags, the command binds an available ephemeral port on 127.0.0.1, prints the URL, opens the default browser, and remains in the foreground until Ctrl-C. --no-browser suppresses only browser launch. --listen accepts a numeric loopback IP and port; localhost, wildcard and LAN addresses, remote access, and reverse proxies are unsupported.
The dashboard shows safe views of presets, preset-backed and custom dialects, runtime health, tracked native launchers, and Cursor readiness. It can create or update dialects, start/stop/restart runtimes, manage tracked native launchers, and install or refresh the pinned Cursor runtime. A successful Cursor runtime update stops running Cursor dialects so stale bridges cannot continue; start them again explicitly.
Dialect edits validate first, stop the old runtime, save the replacement, and leave it stopped. Private local API keys, isolated auth and Claude Code state, history, shims, and stable ports are preserved where applicable. Edits replace only public dashboard fields, so use the CLI for custom configurations that rely on unexposed extra environment values, bridge/auth fields, or URL userinfo, query strings, or fragments.
OAuth login, Copilot install/login, live model listing, proxy logs, shim management, doctor diagnostics, remote access, and launching Claude Code sessions are not dashboard features.
Deleting a dialect or native launcher requires an exact typed-name confirmation. API responses omit credential contents and token values, expose only safe metadata, and sanitize upstream URLs.
Proxy lifecycle
Every proxied dialect has an independent lifecycle:
cc-dialect proxy cc-codex start
Start the embedded proxy
cc-dialect proxy cc-codex status
Check proxy state
cc-dialect proxy cc-codex logs
View proxy logs
cc-dialect proxy cc-codex stop
Stop the proxy
The proxy starts automatically when its generated command runs. OAuth credentials are scoped per dialect:
cc-dialect auth cc-codex codex
cc-dialect auth cc-kimi kimi
cc-dialect auth cc-claude claude
Supported embedded OAuth providers: codex, claude, kimi, antigravity, and xai.
Native Claude shortcuts
Install a lightweight shortcut for the normal Claude Code application without starting the proxy or changing its configuration:
cc-dialect native install cld --dangerous
cld
This launches Claude Code with --dangerously-skip-permissions using the regular ~/.claude settings, authentication, and history — a shortcut for your existing Claude Max setup, not an isolated dialect. Use dangerous mode only in directories you trust.
Installed launchers are tracked with their canonical path and content digest. A tracked launcher cannot be moved in place; remove and reinstall it to choose another path. Missing or externally modified files cannot be updated or removed. Older launchers are not discovered automatically and can be adopted only when their bytes exactly match what the current executable would generate for the current claude path and dangerous-mode setting.
Security
Proxy servers and SDK bridges bind only to 127.0.0.1. The dashboard accepts numeric loopback listeners only and requires the exact bound Host on every request; mutations also require the exact Origin and a per-process CSRF token. It is designed for one trusted local user, not remote or reverse-proxy exposure.
- Per-dialect
CLAUDE_CONFIG_DIRisolation - Secret-safe dashboard API responses omit keys, tokens, credential contents, and extra environment values
- Checked port allocation starting at
:43170 - Cursor/Copilot tools forwarded with
cc_tool_schema aliases - Claude Code permission prompts remain in control
CURSOR_API_KEYand tokens never copied intoconfig.json
The dialect's private claude/ directory is supplied via CLAUDE_CONFIG_DIR. Project-level .claude/ files in the repository you are working in continue to work normally.
File layout
State lives under ~/Library/Application Support/claude-dialects on macOS (or DIALECT_HOME when set):
config.json # dialects + tracked native-launcher registry
.state.lock # owner-only cross-process mutation lock
instances/
cc-codex/
auth/
claude/
proxy.yaml
proxy.pid
proxy.log
cc-kimi/
auth/
claude/
proxy.yaml
cc-cursor/
claude/
cursor-workspace/
cursor-bridge.pid
proxy.yaml
cursor-runtime/
cursor_bridge.mjs
node_modules/@cursor/sdk/
copilot-runtime/
copilot_bridge.mjs
node_modules/@github/copilot-sdk/
Useful commands
cc-dialect list
List configured dialects
cc-dialect show cc-codex
Show dialect details
cc-dialect web
Open the local dashboard
cc-dialect doctor
Diagnose configuration issues
cc-dialect remove cc-codex
Remove a dialect permanently
cc-dialect presets
List available presets
cc-dialect --version
Show version
To fully uninstall after removing all dialects:
rm ~/.local/bin/cc-dialect
rm -rf "$HOME/Library/Application Support/claude-dialects"
Build local assets
The compiled dashboard in internal/app/dashboard/dist/ is committed and embedded into the one Go binary. Node.js is not required for dashboard runtime or a normal make build/make install; contributors rebuilding the frontend need npm with Node.js 22.13.x or 24+ and must commit the refreshed dist/.
Create a shareable macOS archive instead of installing directly:
make assets VERSION=dev
ls artifacts/
(cd artifacts && shasum -a 256 -c SHA256SUMS)
Generates artifacts/cc-dialect_dev_darwin_arm64.zip and SHA256SUMS. These locally produced assets are not signed or notarized.