2025-09-01 15:33:24 +08:00
# Claude Code & Codex 供应商切换器
2025-08-04 22:16:26 +08:00
2025-10-30 16:23:00 +08:00
[](https://github.com/farion1231/cc-switch/releases)
2025-09-10 15:26:21 +08:00
[](https://github.com/farion1231/cc-switch/releases)
2025-09-13 17:54:21 +08:00
[](https://tauri.app/)
2025-08-27 22:26:07 +08:00
2025-08-31 17:17:22 +08:00
一个用于管理和切换 Claude Code 与 Codex 不同供应商配置的桌面应用。
2025-08-04 22:16:26 +08:00
2025-10-13 11:30:23 +08:00
> v3.5.0 :新增 **MCP 管理**、**配置导入/导出**、**端点速度测试**功能,完善国际化覆盖,新增 Longcat、kat-coder 预设,标准化发布文件命名规范。
2025-10-02 09:59:38 +08:00
> v3.4.0 :新增 i18next 国际化( 还有部分未完成) 、对新模型( qwen-3-max, GLM-4.6, DeepSeek-V3.2-Exp) 的支持、Claude 插件、单实例守护、托盘最小化及安装器优化等。
2025-10-03 20:03:55 +08:00
> v3.3.0 : VS Code Codex 插件一键配置/移除( 默认自动同步) 、Codex 通用配置片段与自定义向导增强、WSL 环境支持、跨平台托盘与 UI 优化。(该 VS Code 写入功能已在 v3.4.x 停用)
2025-09-22 22:50:07 +08:00
> v3.2.0 :全新 UI、macOS系统托盘、内置更新器、原子写入与回滚、改进暗色样式、单一事实源( SSOT) 与一次性迁移/归档。
2025-09-01 15:33:24 +08:00
2025-09-13 17:54:21 +08:00
> v3.1.0 :新增 Codex 供应商管理与一键切换,支持导入当前 Codex 配置为默认供应商,并在内部配置从 v1 → v2 迁移前自动备份(详见下文“迁移与归档”)。
2025-08-27 22:26:07 +08:00
2025-09-13 17:54:21 +08:00
> v3.0.0 重大更新:从 Electron 完全迁移到 Tauri 2.0,应用体积显著降低、启动性能大幅提升。
2025-08-04 22:16:26 +08:00
2025-10-13 11:30:23 +08:00
## 功能特性( v3.5.0)
- **MCP (Model Context Protocol) 管理**:完整的 MCP 服务器配置管理系统
- 支持 stdio 和 http 服务器类型,并提供命令校验
- 内置常用 MCP 服务器模板(如 mcp-fetch 等)
- 实时启用/禁用 MCP 服务器,原子文件写入防止配置损坏
- **配置导入/导出**:备份和恢复你的供应商配置
- 一键导出所有配置到 JSON 文件
- 导入配置时自动验证并备份,自动轮换备份(保留最近 10 个)
- 带有详细状态反馈的进度模态框
- **端点速度测试**:测试 API 端点响应时间
- 测量不同供应商端点的延迟,可视化连接质量指示器
- 帮助用户选择最快的供应商
- **国际化与语言切换**:完整的 i18next 国际化覆盖,默认显示中文,可在设置中快速切换到英文,界面文案自动实时刷新。
2025-10-03 20:03:55 +08:00
- **Claude 插件同步**:内置按钮可一键应用或恢复 Claude 插件配置,切换供应商后立即生效。
2025-10-13 11:30:23 +08:00
- **供应商预设扩展**:新增 Longcat、kat-coder 等预设,更新 GLM 供应商配置至最新模型。
2025-10-02 09:59:38 +08:00
- **系统托盘与窗口行为**: 窗口关闭可最小化到托盘, macOS 支持托盘模式下隐藏/显示 Dock, 托盘切换时同步 Claude/Codex/插件状态。
- **单实例**:保证同一时间仅运行一个实例,避免多开冲突。
2025-10-13 11:30:23 +08:00
- **标准化发布命名**: 所有平台发布文件使用一致的版本标签命名( macOS: `.tar.gz` / `.zip` , Windows: `.msi` / `-Portable.zip` , Linux: `.AppImage` / `.deb` )。
2025-08-06 23:18:09 +08:00
2025-08-14 14:43:27 +08:00
## 界面预览
### 主界面
2025-08-21 23:23:08 +08:00
2025-08-14 14:43:27 +08:00

### 添加供应商
2025-08-21 23:23:08 +08:00
2025-08-14 14:43:27 +08:00

2025-08-06 23:18:09 +08:00
## 下载安装
2025-08-27 22:26:07 +08:00
### 系统要求
- **Windows**: Windows 10 及以上
- **macOS**: macOS 10.15 (Catalina) 及以上
2025-10-12 23:17:05 +08:00
- **Linux**: Ubuntu 22.04+ / Debian 11+ / Fedora 34+ 等主流发行版
2025-08-27 22:26:07 +08:00
2025-08-06 23:18:09 +08:00
### Windows 用户
2025-10-12 23:17:05 +08:00
从 [Releases ](../../releases ) 页面下载最新版本的 `CC-Switch-v{版本号}-Windows.msi` 安装包或者 `CC-Switch-v{版本号}-Windows-Portable.zip` 绿色版。
2025-08-06 23:18:09 +08:00
2025-08-10 15:07:26 +08:00
### macOS 用户
2025-08-06 23:18:09 +08:00
2025-10-12 22:38:47 +08:00
**方式一:通过 Homebrew 安装(推荐)**
```bash
brew tap farion1231/ccswitch
brew install --cask cc-switch
```
更新:
2025-10-12 23:17:05 +08:00
2025-10-12 22:38:47 +08:00
```bash
brew upgrade --cask cc-switch
```
**方式二:手动下载**
2025-10-12 23:17:05 +08:00
从 [Releases ](../../releases ) 页面下载 `CC-Switch-v{版本号}-macOS.zip` 解压使用。
2025-08-29 14:40:40 +08:00
2025-08-29 15:37:26 +08:00
> **注意**:由于作者没有苹果开发者账号,首次打开可能出现"未知开发者"警告,请先关闭,然后前往"系统设置" → "隐私与安全性" → 点击"仍要打开",之后便可以正常打开
2025-08-10 15:07:26 +08:00
### Linux 用户
2025-10-12 23:17:05 +08:00
从 [Releases ](../../releases ) 页面下载最新版本的 `CC-Switch-v{版本号}-Linux.deb` 包或者 `CC-Switch-v{版本号}-Linux.AppImage` 安装包。
2025-08-06 23:18:09 +08:00
## 使用说明
1. 点击"添加供应商"添加你的 API 配置
2025-09-13 17:54:21 +08:00
2. 切换方式:
- 在主界面选择供应商后点击切换
- 或通过“系统托盘(菜单栏)”直接选择目标供应商,立即生效
3. 切换会写入对应应用的“live 配置文件”( Claude: `settings.json` ; Codex: `auth.json` + `config.toml` )
4. 重启或新开终端以确保生效
5. 若需切回官方登录,在预设中选择“官方登录”并切换即可;重启终端后按官方流程登录
2025-10-30 16:23:00 +08:00
### MCP 配置说明( v3.5.x)
- 管理位置:所有 MCP 服务器定义集中保存在 `~/.cc-switch/config.json` (按客户端 `claude` / `codex` 分类)
- 同步机制:
- 启用的 Claude MCP 会投影到 `~/.claude.json` (路径可随覆盖目录而变化)
- 启用的 Codex MCP 会投影到 `~/.codex/config.toml`
- 校验与归一化:新增/导入时自动校验字段合法性( stdio/http) , 并自动修复/填充 `id` 等键名
- 导入来源:支持从 `~/.claude.json` 与 `~/.codex/config.toml` 导入;已存在条目只强制 `enabled=true` ,不覆盖其他字段
2025-09-13 17:54:21 +08:00
### 检查更新
- 在“设置”中点击“检查更新”,若内置 Updater 配置可用将直接检测与下载;否则会回退打开 Releases 页面
2025-08-04 22:16:26 +08:00
2025-09-22 22:50:07 +08:00
### Codex 说明( SSOT)
2025-08-31 17:17:22 +08:00
- 配置目录:`~/.codex/`
2025-09-13 17:54:21 +08:00
- live 主配置:`auth.json` (必需)、`config.toml` (可为空)
2025-08-31 17:17:22 +08:00
- API Key 字段:`auth.json` 中使用 `OPENAI_API_KEY`
2025-09-13 17:54:21 +08:00
- 切换行为(不再写“副本文件”):
- 供应商配置统一保存在 `~/.cc-switch/config.json`
- 切换时将目标供应商写回 live 文件(`auth.json` + `config.toml` )
- 采用“原子写入 + 失败回滚”,避免半写状态;`config.toml` 可为空
- 导入默认:当该应用无任何供应商时,从现有 live 主配置创建一条默认项并设为当前
- 官方登录: 可切换到预设“Codex 官方登录”,重启终端后按官方流程登录
2025-09-01 15:33:24 +08:00
2025-09-22 22:50:07 +08:00
### Claude Code 说明( SSOT)
2025-09-01 15:33:24 +08:00
- 配置目录:`~/.claude/`
2025-09-13 17:54:21 +08:00
- live 主配置:`settings.json` (优先)或历史兼容 `claude.json`
2025-09-01 15:33:24 +08:00
- API Key 字段:`env.ANTHROPIC_AUTH_TOKEN`
2025-09-13 17:54:21 +08:00
- 切换行为(不再写“副本文件”):
- 供应商配置统一保存在 `~/.cc-switch/config.json`
- 切换时将目标供应商 JSON 直接写入 live 文件(优先 `settings.json` )
- 编辑当前供应商时,先写 live 成功,再更新应用主配置,保证一致性
- 导入默认:当该应用无任何供应商时,从现有 live 主配置创建一条默认项并设为当前
- 官方登录: 可切换到预设“Claude 官方登录”,重启终端后可使用 `/login` 完成登录
2025-09-22 22:50:07 +08:00
### 迁移与归档(自 v3.2.0 起)
2025-09-13 17:54:21 +08:00
2025-09-22 22:50:07 +08:00
- 一次性迁移:首次启动 3.2.0 及以上版本会扫描旧的“副本文件”并合并到 `~/.cc-switch/config.json`
2025-09-13 17:54:21 +08:00
- Claude: `~/.claude/settings-*.json` (排除 `settings.json` / 历史 `claude.json` )
- Codex: `~/.codex/auth-*.json` 与 `config-*.toml` (按名称成对合并)
- 去重与当前项:按“名称(忽略大小写)+ API Key”去重; 若当前为空, 将 live 合并项设为当前
- 归档与清理:
- 归档目录:`~/.cc-switch/archive/<timestamp>/<category>/...`
- 归档成功后删除原副本;失败则保留原文件(保守策略)
- v1 → v2 结构升级:会额外生成 `~/.cc-switch/config.v1.backup.<timestamp>.json` 以便回滚
- 注意:迁移后不再持续归档日常切换/编辑操作,如需长期审计请自备备份方案
2025-08-31 17:17:22 +08:00
2025-10-30 16:23:00 +08:00
## 架构总览( v3.5.x)
- 前端( Renderer)
- 技术栈: TypeScript + React 18 + Vite + TailwindCSS
- 数据层: TanStack React Query 统一查询与变更(`@/lib/query` ) , Tauri API 统一封装(`@/lib/api` )
- 事件流:监听后端 `provider-switched` 事件,驱动 UI 刷新与托盘状态一致
- 组织结构: 按领域拆分组件( providers/settings/mcp) , 动作逻辑下沉至 Hooks( 如 `useProviderActions` )
- 后端( Tauri + Rust)
- Commands( 接口层) : `src-tauri/src/commands/*` 按领域拆分( provider/config/mcp 等)
- Services( 业务层) : `src-tauri/src/services/*` 承载核心逻辑( Provider/MCP/Config/Speedtest)
- 模型与状态:`provider.rs` (领域模型)+ `app_config.rs` (多应用配置)+ `store.rs` (全局 RwLock)
- 可靠性:
- 统一错误类型 `AppError` (包含本地化消息)
- 事务式变更(配置快照 + 失败回滚)与原子写入(避免半写入)
- 托盘菜单与事件:切换后重建菜单并向前端发射 `provider-switched` 事件
- 设计要点( SSOT)
- 单一事实源:供应商配置集中存放于 `~/.cc-switch/config.json`
- 切换时仅写 live 配置( Claude: `settings.json` ; Codex: `auth.json` + `config.toml` )
- 首次缺省导入:当某应用无任何供应商时,会从已有 live 配置生成默认项
- 兼容性与变更
- 命令参数统一: Tauri 命令仅接受 `app` (值为 `claude` / `codex` )
- 前端类型统一:使用 `AppId` 表达应用标识(替代历史 `AppType` 导出)
2025-08-04 22:16:26 +08:00
## 开发
2025-08-27 22:26:07 +08:00
### 环境要求
- Node.js 18+
- pnpm 8+
- Rust 1.75+
- Tauri CLI 2.0+
### 开发命令
2025-08-04 22:16:26 +08:00
```bash
# 安装依赖
2025-08-06 23:18:09 +08:00
pnpm install
2025-08-04 22:16:26 +08:00
2025-08-27 22:26:07 +08:00
# 开发模式(热重载)
pnpm dev
# 类型检查
pnpm typecheck
# 代码格式化
pnpm format
# 检查代码格式
pnpm format:check
2025-08-04 22:16:26 +08:00
2025-10-30 16:23:00 +08:00
# 运行前端单元测试
pnpm test:unit
# 监听模式运行测试
pnpm test:unit:watch
2025-08-04 22:16:26 +08:00
# 构建应用
2025-08-27 22:26:07 +08:00
pnpm build
# 构建调试版本
pnpm tauri build --debug
```
### Rust 后端开发
```bash
cd src-tauri
# 格式化 Rust 代码
cargo fmt
# 运行 clippy 检查
cargo clippy
# 运行测试
cargo test
2025-08-04 22:16:26 +08:00
```
## 技术栈
2025-09-13 17:54:21 +08:00
- **[Tauri 2 ](https://tauri.app/ )** - 跨平台桌面应用框架(集成 updater/process/opener/log/tray-icon)
2025-08-27 22:26:07 +08:00
- **[React 18 ](https://react.dev/ )** - 用户界面库
- **[TypeScript ](https://www.typescriptlang.org/ )** - 类型安全的 JavaScript
- **[Vite ](https://vitejs.dev/ )** - 极速的前端构建工具
- **[Rust ](https://www.rust-lang.org/ )** - 系统级编程语言(后端)
2025-10-30 16:23:00 +08:00
- **[TanStack Query ](https://tanstack.com/query/latest )** - 前端数据获取与缓存
- **[i18next ](https://www.i18next.com/ )** - 国际化框架
2025-08-06 23:18:09 +08:00
## 项目结构
```
2025-10-30 16:23:00 +08:00
├── src/ # 前端代码 (React + TypeScript)
│ ├── components/ # React 组件( providers/settings/mcp/ui 等)
│ ├── hooks/ # 领域动作与状态(如 useProviderActions)
│ ├── lib/
│ │ ├── api/ # Tauri API 封装( providers/settings/mcp 等)
│ │ └── query/ # TanStack Query 查询/变更与 client
│ ├── i18n/ # 国际化资源
│ ├── config/ # 供应商/MCP 预设
│ └── utils/ # 工具函数
2025-08-27 22:26:07 +08:00
├── src-tauri/ # 后端代码 (Rust)
2025-08-23 21:13:25 +08:00
│ ├── src/ # Rust 源代码
2025-10-30 12:33:35 +08:00
│ │ ├── commands/ # Tauri 命令定义(按域拆分)
│ │ ├── services/ # 领域服务( Provider/MCP/Speedtest 等)
│ │ ├── mcp.rs # MCP 同步与规范化
│ │ ├── migration.rs # 配置迁移逻辑
2025-08-27 22:26:07 +08:00
│ │ ├── config.rs # 配置文件管理
│ │ ├── provider.rs # 供应商管理逻辑
│ │ └── store.rs # 状态管理
│ ├── capabilities/ # 权限配置
2025-08-23 21:13:25 +08:00
│ └── icons/ # 应用图标资源
2025-08-27 22:26:07 +08:00
└── screenshots/ # 界面截图
2025-08-06 23:18:09 +08:00
```
2025-08-04 22:16:26 +08:00
2025-08-27 22:26:07 +08:00
## 更新日志
查看 [CHANGELOG.md ](CHANGELOG.md ) 了解版本更新详情。
2025-08-29 15:37:26 +08:00
## Electron 旧版
[Releases ](../../releases ) 里保留 v2.0.3 Electron 旧版
如果需要旧版 Electron 代码,可以拉取 electron-legacy 分支
2025-08-27 22:26:07 +08:00
## 贡献
2025-10-13 11:30:23 +08:00
欢迎提交 Issue 反馈问题和建议!
2025-08-27 22:26:07 +08:00
2025-10-30 16:23:00 +08:00
提交 PR 前请确保:
- 通过类型检查:`pnpm typecheck`
- 通过格式检查:`pnpm format:check`
- 通过单元测试:`pnpm test:unit`
2025-09-15 21:49:32 +08:00
## Star History
[](https://www.star-history.com/#farion1231/cc -switch&Date)
2025-08-04 22:16:26 +08:00
## License
2025-08-27 22:26:07 +08:00
MIT © Jason Young