如果你同时用 Claude Code、Codex、Gemini CLI、OpenCode、OpenClaw、Hermes,最烦的往往不是模型本身,而是配置文件越来越像“抽屉迷宫”。
一个 provider 在 Claude 里是 JSON,在 Codex 里可能是 TOML,在 Gemini 里又变成 env;MCP、Skills、Prompt、会话历史各有一套目录;临时换一个 API 网关,还要担心把官方登录态覆盖掉。
CC Switch 做的事情很直接:用一个跨平台桌面应用,把这些 AI 编程工具的配置、切换、本地代理、扩展和会话入口统一收起来。它不是又一个聊天客户端,而更像 AI 编程工具链的“控制面板”。
项目基础信息
• Repo:farion1231/cc-switch
• 地址:https://github.com/farion1231/cc-switch
• Stars:102,662(GitHub API,2026-06-17T13:44:02.470522+00:00)
• Forks:6,794
• Open issues:1,487
• 主要语言:Rust
• License:MIT
• 最近 push:2026-06-16T14:01:57Z
• Topics:ai-tools, claude-code, desktop-app, open-source, rust, tauri, typescript, codex, mcp, provider-management, wsl-support, minimax, opencode, skills, skills-management, omo, openclaw, openclaw-ui, hermes, hermes-agent
仓库描述:A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Gemini CLI & Hermes Agent. Only official website: ccswitch.io
它解决的具体工程摩擦
CC Switch 最核心的价值,是把“模型供应商切换”从手改配置文件,变成一个可视化、可回滚、可审计的动作。
README 里明确支持七类应用:Claude Code、Claude Desktop、Codex、Gemini CLI、OpenCode、OpenClaw、Hermes。源码里的 src/config/appConfig.tsx 也把这七类写进了 APP_IDS。
这背后有几个真实痛点:
1. provider 配置格式不统一。Claude、Codex、Gemini、OpenClaw、Hermes 的配置文件格式和字段都不一样。
2. 切换第三方网关时,容易误伤官方登录态。Codex 尤其典型,auth.json 和 config.toml 的职责必须分开。
3. MCP、Skills、Prompts 分散在不同应用目录里,迁移和同步很容易乱。
4. 想做本地代理、格式转换、failover、用量记录时,单纯写一个前端 UI 不够,必须有后端状态管理和恢复机制。
所以这类项目的难点,不在“能不能把 API Key 存起来”,而在“改了 live config 以后,出错时能不能恢复”。
怎么跑起来 / 最小使用路径
对普通用户,README 给的是桌面应用路径。
macOS 可以直接用 Homebrew:
```bash
brew install --cask cc-switch
```
也可以从 GitHub Releases 下载对应安装包:Windows 用 .msi 或 portable zip,macOS 用 .dmg 或 .zip,Linux 用 AppImage 等 release 资产。
第一次使用的最小路径是:
1. 打开 CC Switch。
2. 点击 Add Provider,选择预设或创建自定义配置。
3. 在主界面选中 provider 后点击 Enable。
4. 或者通过系统托盘直接点 provider 名称快速切换。
5. 大多数 CLI 需要重启终端或重启对应 CLI 后生效;README 特别说明 Claude Code 支持热切换。
如果要从源码开发,package.json 里的入口很清楚:
```bash
pnpm install --frozen-lockfile
pnpm tauri dev
pnpm tauri build
```
前端单独调试可以跑:
```bash
pnpm run dev:renderer
pnpm run build:renderer
```
质量检查脚本包括:
```bash
pnpm typecheck
pnpm format:check
pnpm test:unit
```
如果打开本地代理接管,文档里的默认监听地址是:
```text
127.0.0.1:15721
```
Codex 接管时,文档示例会把本地配置指向:
```text
http://127.0.0.1:15721/v1
```
这里要特别注意:代理接管不是“只开一个本地端口”。它会修改 Claude、Codex、Gemini 的 live config,并依赖备份在停止代理时恢复。上线或日常使用前,必须确认备份和恢复链路正常。
核心能力拆解
1. 七类 AI 工具的 Provider 管理
src/config/appConfig.tsx 把应用分成:
• Claude
• Claude Desktop
• Codex
• Gemini
• OpenCode
• OpenClaw
• Hermes
Provider 命令层在 src-tauri/src/commands/provider.rs,能看到 get_providers、get_current_provider、add_provider、update_provider、delete_provider、switch_provider、import_default_config 等 Tauri command。
这说明它不是把所有工具都当成一个通用 JSON 存储,而是有明确的 app 类型解析和服务层。ProviderService 负责导入默认配置、切换 live 配置、处理 common config snippet 等行为。
2. Codex 登录态与路由配置分离
src-tauri/src/codex_config.rs 是我觉得最值得看的文件之一。
它把 Codex 的几个关键路径拆开:
• ~/.codex/auth.json
• ~/.codex/config.toml
• ~/.codex/cc-switch-model-catalog.json
更重要的是,源码里有两个不同写入路径:
• write_codex_live_atomic:同时处理 auth 和 config;如果第二步写 config 失败,会回滚第一步写入的 auth。
• write_codex_live_config_atomic:只写 config.toml,用于 provider 切换时不覆盖官方登录态。
这类细节很实用。很多 AI CLI 管理工具最容易翻车的点,就是把“认证状态”和“路由配置”混在一起写,最后用户一切 provider,官方登录没了。
3. OpenClaw 配置是单独适配,不是简单套 Claude 固定范式
src-tauri/src/openclaw_config.rs 显示 CC Switch 对 OpenClaw 的配置路径是:
```text
~/.openclaw/openclaw.json
```
它支持 JSON5,默认结构里有:
```json
{
"models": {
"mode": "merge",
"providers": {}
}
}
```
代码里还出现了 OpenClaw 的 agents.defaults、models.providers、env、tools.profile/allow/deny 等结构,并且有 openclaw_write_lock 和 atomic_write。
这说明它对 OpenClaw 的处理不是“把 endpoint 填进去就完事”,而是理解了 OpenClaw 这类 agent runtime 的模型、工具权限和默认 agent 配置。
4. MCP 和 Skills 做了能力边界
同样在 src/config/appConfig.tsx 里,SKILLS_APP_IDS 和 MCP_APP_IDS 都包含:
• Claude
• Codex
• Gemini
• OpenCode
• Hermes
但它们明确排除了 OpenClaw。
这个细节值得肯定。一个统一管理器最容易犯的错,是为了“全都支持”而把不适合的开关也塞进 UI。CC Switch 至少在源码层面把 MCP/Skills 的适用范围分开了。
Skills 命令层在 src-tauri/src/commands/skill.rs,能看到统一安装、卸载、备份、恢复、扫描未管理 Skills、从应用目录导入、检查更新等接口。README 里也写了默认 SSOT 目录:
```text
~/.cc-switch/skills/
```
卸载备份在:
```text
~/.cc-switch/skill-backups/
```
5. 本地代理不是玩具功能
README 和 docs 都把 Local proxy 放在很显眼的位置。它包含格式转换、auto-failover、circuit breaker、provider health monitoring、request rectifier。
src-tauri/src/services/proxy.rs 和 src-tauri/src/proxy/ 目录也能印证这件事:里面有 circuit_breaker、failover_switch、forwarder、provider_router、model_mapper、thinking_rectifier、不同 provider adapter、usage parser/logger 等模块。
这意味着它尝试解决的是一个更硬的问题:让不同 CLI 仍然以自己熟悉的协议发请求,但由 CC Switch 在本地完成路由、格式转换、失败切换和计费记录。
关键实现 / 目录 / 配置精读
这个 repo 的一级目录很有信息量:
• src/:React 前端、配置预设、hooks、组件、i18n、usage/session UI。
• src-tauri/:Rust 后端,负责 Tauri command、配置读写、本地代理、数据库、系统集成。
• docs/:用户手册、代理指南、Codex 路由指南、release notes。
• tests/:前端组件、hooks、config、integration 测试。
• .github/workflows/ci.yml:前后端 CI。
• assets/screenshots/:README 里的主界面和添加 provider 截图。

几个文件可以重点读:
src/config/appConfig.tsx
这里定义应用列表,也定义哪些 app 支持 MCP/Skills。它是前端能力边界的入口。
src-tauri/src/commands/provider.rs
这里是 provider 管理的 Tauri command 层。前端不是直接改文件,而是通过后端服务层去 list、add、update、delete、switch provider。
src-tauri/src/codex_config.rs
这里最能体现配置安全意识。Codex 的 auth、config、model catalog 被拆成不同职责,写入有 rollback 和 config-only 路径。
src-tauri/src/openclaw_config.rs
这里体现 OpenClaw 的适配深度:JSON5、models.providers、agents.defaults、tools profile、健康检查、写锁、原子写。
src-tauri/capabilities/default.json
默认 Tauri capability 只开放 core、opener、updater、process restart、dialog 和窗口控制等权限。默认能力集没有直接给前端任意 shell 或文件系统权限,这对桌面配置工具很关键。
.github/workflows/ci.yml
CI 分两条线:前端跑 pnpm typecheck、pnpm format:check、pnpm test:unit;Rust 侧在 Ubuntu 安装 GTK/WebKit 依赖后跑 cargo fmt --check、cargo clippy -- -D warnings、cargo test。
适合什么场景 / 不适合什么场景
适合:
• 同时使用多个 AI 编程 CLI 的开发者。
• 经常在官方 API、第三方 API 网关、本地代理之间切换的人。
• 需要统一管理 MCP、Prompts、Skills、会话历史、用量统计的人。
• 团队内部需要把 provider 配置、模型目录、代理 failover 做成可维护流程的人。
• 已经遇到过 Codex/Claude/Gemini 配置文件互相覆盖、登录态丢失、代理残留的人。
不适合:
• 只用一个官方客户端、也不切换模型供应商的人。
• 不愿让桌面应用改写 CLI 配置文件的人。
• 对本地代理接管、配置备份和恢复机制没有验证条件的生产环境。
• 只想要一个网页聊天界面的人。CC Switch 的重点不是聊天,而是工具链配置和路由管理。
还有一个边界:OpenClaw 虽然在 provider 管理里受支持,但源码里 MCP/Skills 面板默认不把 OpenClaw 放进去。采用前不要假设“所有能力对所有 app 都等价”。
上线前验证 checklist
如果要在自己的工作流里认真用 CC Switch,我会按下面这张清单验收。
安装与版本
• 从 release 安装后确认 About 面板版本与 GitHub release 对应。
• macOS Homebrew 安装路径跑通:brew install --cask cc-switch。
• 源码开发路径跑通:pnpm install --frozen-lockfile、pnpm tauri dev。
配置安全
• 切换 Claude / Codex / Gemini provider 前,记录原始配置文件位置。
• 对 Codex,重点检查 auth.json 是否没有被第三方 provider 切换误覆盖。
• 对 OpenClaw,检查 ~/.openclaw/openclaw.json 是否仍是可解析 JSON5。
• 确认 ~/.cc-switch/backups/ 和 ~/.cc-switch/skill-backups/ 的备份策略符合你的恢复预期。
本地代理
• 启动代理后确认监听地址是预期的 127.0.0.1:15721。
• 开启 takeover 后检查 Claude/Codex/Gemini live config 是否指向本地代理。
• 停止代理后确认 live config 已恢复,而不是残留本地代理地址。
• 至少模拟一次 provider 失败,观察 failover 和 circuit breaker 的记录。
质量门槛
• 前端:pnpm typecheck、pnpm format:check、pnpm test:unit。
• 后端:cargo fmt --check、cargo clippy -- -D warnings、cargo test。
• Linux 打包前确认 GTK/WebKit 系统依赖齐全。
权限与合规
• 阅读 src-tauri/capabilities/default.json,确认默认能力符合组织要求。
• 阅读 SECURITY.md,确认安全漏洞报告和响应承诺。
• MIT license 对二次开发和内部使用通常比较友好,但仍要检查团队合规流程。
二次开发最值得拆的实现细节
第一,拆它的 live config 写入策略。
Codex 的 auth/config 分离、失败回滚、config-only 写入,是非常值得复用的设计。AI CLI 生态里,很多工具都把“登录态”“provider 路由”“模型目录”“本地缓存”混在一个目录下,管理器必须按职责拆开写。
第二,拆它的 Tauri command 边界。
前端只表达用户操作,真正的配置读写、导入、切换、备份、恢复都在 Rust 服务层。这比前端直接拼路径写文件更容易审计,也更适合加锁、回滚和跨平台兼容。
第三,拆它的 proxy takeover ownership。
代理接管最怕两件事:一是停止代理后 live config 没恢复,二是下次接管时把“代理残留配置”当成原始配置备份。CC Switch 的 proxy service 里有 live backup、placeholder 检测、恢复和 provider 热切换逻辑,这个方向是对的。
第四,拆它的能力矩阵,而不是只看 UI。
APP_IDS、MCP_APP_IDS、SKILLS_APP_IDS 这些看似普通的数组,其实是产品边界。统一管理器不应该让所有 app 都假装支持同一组能力。
FAQ
Q:它会替代 Claude Code、Codex 或 Gemini CLI 吗?
不会。它更像这些工具的配置、代理和扩展控制台。真正的编码会话仍然发生在原 CLI 或桌面工具里。
Q:切换 provider 后要不要重启?
README 的说法是,多数工具需要重启终端或对应 CLI 才会生效;Claude Code 支持热切换。
Q:它能管理 OpenClaw 吗?
能管理 OpenClaw 的 provider 配置。源码里有独立的 openclaw_config.rs,默认路径是 ~/.openclaw/openclaw.json。但 MCP/Skills 面板的应用列表没有包含 OpenClaw,这一点要分清。
Q:本地代理是不是一定要开?
不一定。普通 provider 切换可以不依赖代理。代理主要用于本地路由接管、格式转换、failover、用量记录等更复杂场景。
Q:这个项目最大的风险是什么?
最大的风险不是 UI,而是配置写入。它会修改多个 CLI 的 live config,所以一定要验证备份、恢复、停止代理后的清理,以及 Codex 官方登录态是否保留。
最终判断
CC Switch 的价值,不在于“又多一个 provider 管理界面”,而在于它把 AI 编程工具链里最容易失控的几件事放到了一起:provider 切换、Codex 登录态保护、本地代理接管、MCP/Skills/Prompts 管理、会话和用量可视化、备份恢复。
如果你只用一个官方客户端,它可能显得重。但如果你每天在多个 CLI、多个 API 网关、多个 agent 工具之间切换,它解决的是非常真实的工程摩擦。
可以把它看成 AI 编程工具链的“控制平面”。采用前最该验证的不是 star 数,而是三件事:配置写入是否可回滚,代理接管是否能干净恢复,团队内部的密钥和权限边界是否能被接受。
如果这三件事过关,CC Switch 值得进入重度 AI 编程用户的工具箱。
如果你不想错过这类 AI 工程工具和前沿论文精读,建议把「Alten观AI」设为星标(⭐️)。微信每天通常只推送一次通知,星标后更不容易漏掉新文章。
上线前自查清单
• 先确认输入边界
• 哪些字段来自原始来源,哪些是后处理结果。
• 哪些失败会直接影响最终回答或执行动作。
• 再确认回滚路径
• 配置、索引、缓存和权限最好能单独回滚。
• 关键日志要能定位到一次具体调用。
后续我会继续精读 RAG、搜索、Agent 与大模型工程化相关论文/框架。如果你关心“论文里的方法到底怎么落到工程系统里”,欢迎关注 Alten观AI,也欢迎在评论区聊聊你遇到过的 RAG 难题。
夜雨聆风