Home / Reference

Reference

Model switching, custom dialects, the local web dashboard, proxy operations, security model, and useful commands.

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:

Custom model mapping
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:

Custom Anthropic-compatible provider
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 presets

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

Local 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.

Dashboard scope

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_DIR isolation
  • 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_KEY and tokens never copied into config.json
ℹ Project-level config still works

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:

Package for sharing
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.