Command-Line Management Tool for Claude Code, Codex, Gemini, OpenCode & OpenClaw
Unified management for Claude Code, Codex, Gemini, OpenCode, and OpenClaw provider configurations, plus app-specific support for MCP servers, skills, prompts, local proxy routes, and environment checks.
This project is a CLI fork of CC-Switch.
🔄 The WebDAV sync feature is fully compatible with the upstream project.
Credits: Original architecture and core functionality from farion1231/cc-switch
- 🦞 OpenClaw switching is supported in the TUI.
- Added visible app controls in Settings.
- Your visible app choices now persist between sessions.
- Header tabs, keyboard switching, and terminal rendering are more polished in 5.1.1.
| Thanks to PackyCode for sponsoring this project! PackyCode is a reliable and efficient API relay service provider, offering relay services for Claude Code, Codex, Gemini, and more. PackyCode provides special discounts for our software users: register via this link and use promo code cc-switch-cli when recharging to get 10% off. |
| Thanks to RightCode for sponsoring this project! RightCode reliably provides routing services for models such as Claude Code, Codex, and Gemini. It features a highly cost-effective Codex monthly subscription plan and supports quota rollovers—unused quota from one day can be carried over and used the next day. RightCode offers a special deal for CC-Switch CLI users: register via this link and get 25% bonus pay-as-you-go credits on every top-up! |
| Switch | Settings |
|---|---|
![]() | ![]() |
Interactive Mode (Recommended)
cc-switch🤩 Follow on-screen menus to explore features.
Command-Line Mode
cc-switch provider list # List providers cc-switch provider switch <id> # Switch provider cc-switch provider stream-check <id> # Check provider stream health cc-switch config webdav show # Inspect WebDAV sync settings cc-switch env tools # Check local CLI tools cc-switch mcp sync # Sync MCP servers cc-switch proxy show # Inspect proxy routes and status # Use the global `--app` flag to target specific applications: cc-switch --app claude provider list # Manage Claude providers cc-switch --app codex mcp sync # Sync Codex MCP servers cc-switch --app gemini prompts list # List Gemini prompts cc-switch --app openclaw provider list # Manage OpenClaw providers # Supported apps: `claude` (default), `codex`, `gemini`, `opencode`, `openclaw`See the "Features" section for full command list.
Windows users: see Manual Installation below.
curl -fsSL https://github.com/SaladDay/cc-switch-cli/releases/latest/download/install.sh | bashThis installs cc-switch to ~/.local/bin. Set CC_SWITCH_INSTALL_DIR to change the target directory.
- If the target already exists, the installer prompts in TTY and refuses to overwrite in non-interactive shells unless
CC_SWITCH_FORCE=1is set. - On Linux, set
CC_SWITCH_LINUX_LIBC=glibcif you need the glibc build.
Manual Installation
# Download Universal Binary (recommended, supports Apple Silicon + Intel) curl -LO https://github.com/saladday/cc-switch-cli/releases/latest/download/cc-switch-cli-darwin-universal.tar.gz # Extract tar -xzf cc-switch-cli-darwin-universal.tar.gz # Add execute permission chmod +x cc-switch # Move to PATH sudo mv cc-switch /usr/local/bin/ # If you encounter "cannot be verified" warning xattr -cr /usr/local/bin/cc-switch# Download curl -LO https://github.com/saladday/cc-switch-cli/releases/latest/download/cc-switch-cli-linux-x64-musl.tar.gz # Extract tar -xzf cc-switch-cli-linux-x64-musl.tar.gz # Add execute permission chmod +x cc-switch # Move to PATH sudo mv cc-switch /usr/local/bin/# For Raspberry Pi or ARM servers curl -LO https://github.com/saladday/cc-switch-cli/releases/latest/download/cc-switch-cli-linux-arm64-musl.tar.gz tar -xzf cc-switch-cli-linux-arm64-musl.tar.gz chmod +x cc-switch sudo mv cc-switch /usr/local/bin/# Download the zip file # https://github.com/saladday/cc-switch-cli/releases/latest/download/cc-switch-cli-windows-x64.zip # After extracting, move cc-switch.exe to a PATH directory, e.g.: move cc-switch.exe C:\Windows\System32\ # Or run directly .\cc-switch.exePrerequisites:
- Rust 1.85+ (install via rustup)
Build:
git clone https://github.com/saladday/cc-switch-cli.git cd cc-switch-cli/src-tauri cargo build --release # Binary location: ./target/release/cc-switchInstall to System:
# macOS/Linux sudo cp target/release/cc-switch /usr/local/bin/ # Windows copy target\release\cc-switch.exe C:\Windows\System32\Manage API configurations for Claude Code, Codex, Gemini, OpenCode, and OpenClaw.
Features: One-click switching, multi-endpoint support, API key management, remote model discovery, and per-app diagnostics such as speed testing or stream health checks where supported.
cc-switch provider list # List all providers cc-switch provider current # Show current provider cc-switch provider switch <id> # Switch provider cc-switch provider add # Add new provider cc-switch provider edit <id> # Edit existing provider cc-switch provider duplicate <id> # Duplicate a provider cc-switch provider delete <id> # Delete provider cc-switch provider speedtest <id> # Test API latency cc-switch provider stream-check <id> # Run stream health check cc-switch provider fetch-models <id> # Fetch remote model listManage Model Context Protocol servers across Claude, Codex, Gemini, and OpenCode.
Features: Unified management, multi-app support, three transport types (stdio/http/sse), automatic sync, and live-config adapters for TOML and JSON targets.
cc-switch mcp list # List all MCP servers cc-switch mcp add # Add new MCP server (interactive) cc-switch mcp edit <id> # Edit MCP server cc-switch mcp delete <id> # Delete MCP server cc-switch mcp enable <id> --app claude # Enable for specific app cc-switch mcp disable <id> --app claude # Disable for specific app cc-switch mcp validate <command> # Validate command in PATH cc-switch mcp sync # Sync to live files cc-switch mcp import --app claude # Import from live configManage system prompt presets for AI coding assistants.
Cross-app support: Claude (CLAUDE.md), Codex (AGENTS.md), Gemini (GEMINI.md), OpenCode (AGENTS.md), OpenClaw (AGENTS.md).
cc-switch prompts list # List prompt presets cc-switch prompts current # Show current active prompt cc-switch prompts activate <id> # Activate prompt cc-switch prompts deactivate # Deactivate current active prompt cc-switch prompts create # Create new prompt preset cc-switch prompts edit <id> # Edit prompt preset cc-switch prompts show <id> # Display full content cc-switch prompts delete <id> # Delete promptManage and extend Claude Code/Codex/Gemini/OpenCode capabilities with community skills.
Features: SSOT-based skills store, multi-app enable/disable, sync to app directories, unmanaged scan/import, repo discovery.
cc-switch skills list # List installed skills cc-switch skills discover <query> # Discover available skills (alias: search) cc-switch skills install <name> # Install a skill cc-switch skills uninstall <name> # Uninstall a skill cc-switch skills enable <name> # Enable for current app (--app) cc-switch skills disable <name> # Disable for current app (--app) cc-switch skills info <name> # Show skill information cc-switch skills sync # Sync enabled skills to app dirs cc-switch skills sync-method [m] # Show/set sync method (auto|symlink|copy) cc-switch skills scan-unmanaged # Scan unmanaged skills in app dirs cc-switch skills import-from-apps # Import unmanaged skills into SSOT cc-switch skills repos list # List skill repositories cc-switch skills repos add <repo> # Add repo (owner/name[@branch] or GitHub URL) cc-switch skills repos remove <repo> # Remove repo (owner/name or GitHub URL) cc-switch skills repos enable <repo> # Enable repo without changing branch cc-switch skills repos disable <repo> # Disable repo without changing branchManage configuration backups, imports, and exports.
Features: Custom backup naming, interactive backup selection, automatic rotation (keep 10), import/export, common snippets, WebDAV sync.
cc-switch config show # Display configuration cc-switch config path # Show config file paths cc-switch config validate # Validate config file # Common snippet (shared settings across providers) # Tries to refresh live config when applicable (`--apply` is kept only as a compatibility flag) cc-switch --app claude config common show cc-switch --app claude config common set --snippet '{"env":{"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":1},"includeCoAuthoredBy":false}' cc-switch --app claude config common clear # Backup cc-switch config backup # Create backup (auto-named) cc-switch config backup --name my-backup # Create backup with custom name # Restore cc-switch config restore # Interactive: select from backup list cc-switch config restore --backup <id> # Restore specific backup by ID cc-switch config restore --file <path> # Restore from external file # Import/Export cc-switch config export <path> # Export to external file cc-switch config import <path> # Import from external file # WebDAV sync cc-switch config webdav show cc-switch config webdav set --base-url <url> --username <user> --password <password> --enable cc-switch config webdav jianguoyun --username <user> --password <password> cc-switch config webdav check-connection cc-switch config webdav upload cc-switch config webdav download cc-switch config webdav migrate-v1-to-v2 cc-switch config reset # Reset to default configurationInspect and control the local multi-app proxy used by supported apps.
Features: Persisted enable/disable switch, current route inspection, dashboard telemetry, and foreground serve mode for debugging.
cc-switch proxy show # Show proxy configuration and routes cc-switch proxy enable # Enable the persisted proxy switch cc-switch proxy disable # Disable the persisted proxy switch cc-switch proxy serve # Run the proxy in foregroundInspect environment conflicts and whether required local CLIs are installed.
cc-switch env check # Check environment conflicts cc-switch env list # List relevant environment variables cc-switch env tools # Check Claude/Codex/Gemini/OpenCode CLIsInteractive mode supports English and Chinese, language settings are automatically saved.
- Default language: English
- Go to
⚙️ Settingsmenu to switch language
Shell completions, environment management, and other utilities.
# Shell completions cc-switch completions <shell> # Generate shell completions (bash/zsh/fish/powershell) # Environment management cc-switch env check # Check for environment conflicts cc-switch env list # List environment variables # Self-update cc-switch update # Update to latest release cc-switch update --version vX.Y.Z # Update to a specific version- SQLite-backed state: Core data lives in
~/.cc-switch/cc-switch.db; legacy~/.cc-switch/config.jsonis kept only for older import and migration paths - Skills SSOT: Skill source files live in
~/.cc-switch/skills/, while install state and app enablement stay in the database - Safe Live Sync (Default): Skip writing live files for apps that haven't been initialized yet (prevents creating
~/.claude,~/.codex,~/.gemini,~/.config/opencode, or~/.openclawunexpectedly) - Atomic Writes: Temp file + rename pattern prevents corruption
- Service Layer Reuse: 100% reused from original GUI version
- Concurrency Safe: RwLock with scoped guards
CC-Switch Storage:
~/.cc-switch/cc-switch.db- Main database for providers, MCP, prompts, and app state~/.cc-switch/settings.json- Settings~/.cc-switch/skills/- Installed skill sources (SSOT)~/.cc-switch/backups/- Auto-rotation (keep 10)~/.cc-switch/config.json- Legacy JSON kept for compatibility and import flows
Live Configs:
- Claude:
~/.claude/settings.json(provider/common config),~/.claude.json(MCP),~/.claude/CLAUDE.md(prompts) - Codex:
~/.codex/auth.json(auth state),~/.codex/config.toml(provider/common config + MCP),~/.codex/AGENTS.md(prompts) - Gemini:
~/.gemini/.env(provider env),~/.gemini/settings.json(settings + MCP),~/.gemini/GEMINI.md(prompts) - OpenCode:
~/.config/opencode/opencode.json(providers + MCP + runtime config),~/.config/opencode/AGENTS.md(prompts) - OpenClaw:
~/.openclaw/openclaw.json(providers + env/tools/agents defaults),~/.openclaw/AGENTS.md(prompts)
Why doesn't my configuration take effect after switching providers?
First, make sure the target CLI has been initialized at least once (i.e. its config directory exists). CC-Switch may skip live sync for uninitialized apps; you will see a warning. Run the target CLI once (e.g. claude --help, codex --help, gemini --help, opencode --help, openclaw --help), then switch again.
This is usually caused by environment variable conflicts. If you have API keys set in system environment variables (like ANTHROPIC_API_KEY, OPENAI_API_KEY), they will override CC-Switch's configuration.
Solution:
-
Check for conflicts:
cc-switch env check --app claude
-
List all related environment variables:
cc-switch env list --app claude
-
If conflicts are found, manually remove them:
- macOS/Linux: Edit your shell config file (
~/.bashrc,~/.zshrc, etc.)# Find and delete the line with the environment variable nano ~/.zshrc # Or use your preferred text editor: vim, code, etc.
- Windows: Open System Properties → Environment Variables and delete the conflicting variables
- macOS/Linux: Edit your shell config file (
-
Restart your terminal for changes to take effect.
Which apps are supported?
CC-Switch currently supports five AI coding assistants:
- Claude Code (
--app claude, default) - Codex (
--app codex) - Gemini (
--app gemini) - OpenCode (
--app opencode) - OpenClaw (
--app openclaw)
Use the global --app flag to specify which app to manage:
cc-switch --app codex provider listHow do I report bugs or request features?
Please open an issue on our GitHub Issues page with:
- Detailed description of the problem or feature request
- Steps to reproduce (for bugs)
- Your system information (OS, version)
- Relevant logs or error messages
- Rust: 1.85+ (rustup)
- Cargo: Bundled with Rust
cd src-tauri cargo run # Development mode cargo run -- provider list # Run specific command cargo build --release # Build release cargo fmt # Format code cargo clippy # Lint code cargo test # Run testssrc-tauri/src/ ├── cli/ │ ├── commands/ # CLI subcommands (provider, mcp, prompts, skills, proxy, env, ...) │ ├── tui/ # Interactive TUI mode (ratatui) │ ├── interactive/ # Interactive entrypoint / TTY gate │ └── ui/ # UI utilities (tables, colors) ├── services/ # Business logic (provider, mcp, prompt, webdav, ...) ├── database/ # SQLite storage, migrations, backup ├── main.rs # CLI entry point └── ... # App-specific configs, proxy, error handling Contributions welcome! This fork focuses on CLI functionality.
Before submitting PRs:
- ✅ Pass format check:
cargo fmt --check - ✅ Pass linter:
cargo clippy - ✅ Pass tests:
cargo test - 💡 Open an issue for discussion first
- MIT © Original Author: Jason Young
- CLI Fork Maintainer: saladday


