一个 44 MB 的绿色 exe,左边一列列出十几个 AI 编程工具,右边是供应商卡片。点一下卡片左上角那个小图标,客户端配置文件里的三个键就换了值。

cc-switch 干的就是这件事。它自己不接模型,作用是给 Claude Code、Codex 这类命令行工具换供应商。这篇文章只查两件事:启用供应商时它改的是哪个文件,路由模式又在本地起了什么。

cc-switch 是干什么的

打开后左边是应用列表,右栏是当前应用的供应商卡片。侧栏一共 12 个应用入口,下面还有一排工具页。

应用入口    Claude Code / Claude Desktop / Codex / Gemini CLI / Grok Build
            OpenCode / OpenClaw / Hermes / Pi / MiniMax Code
工具页      MCP / Skills / 提示词 / 会话 / 授权中心 / 用量统计 / 应用 / 设置

供应商这一层有三个模式,界面上用一段话解释了区别:

模式界面原话请求走哪
直连CC Switch 不经手任何请求,客户端直接连所选供应商客户端 → 供应商
路由请求经 CC Switch 转发,可热切换供应商,支持故障转移与格式转换客户端 → 本地代理 → 供应商
聚合多家供应商的模型同列在 /model,在客户端内即可切换客户端 → 本地代理 → 多家

这个工具在焚.com 上的六维评分是 9.9,六项里有四项满分。

维度权重得分
热度动量25%10.0
开发活跃25%10.0
社区响应15%9.3
文档质量15%10.0
发布节奏10%10.0
风险控制10%10.0
147,011 星    9,700 fork    1,492 个未关闭 issue
73 个 release    291 位贡献者    仓库 101,480 KB
MIT 许可    建仓 2025-08-04

绿色版就两个文件,1.61 秒出界面

官方给了 msi 和 Portable.zip 两种。便携包解压完只有两个文件,不用装、不写注册表,放在 D 盘任意目录双击就行。

CC-Switch-v4.0.17-Windows-Portable.zip   17,322,841 字节
解压后
  cc-switch.exe    44,319,232 字节
  portable.ini             50 字节   (内容两行:注释 + portable=true)

从 Popen 到 WebView2 调试端口就绪   1.61 秒
页面标题                          Claude Code 供应商切换器
页面地址                          http://tauri.localhost/

它是 Tauri 写的,界面其实是本地网页,所以能用调试端口直接读 DOM。这个特性对写自动化的人有用,也说明它的 UI 层跟系统 API 之间只隔一层 IPC。

添加供应商:106 个预设分五组

点「添加供应商」,第一屏是一排分类标签加搜索框,可以按名字或网址找,比如 kimi、智谱、openrouter。表单藏在顶部的「自定义配置」里。底下按来源分组,一共 106 个预设。

预设总数     106
  账号登录        4     Claude Official、Codex、GitHub Copilot、xAI Grok
  模型厂商       16     DeepSeek、Kimi、MiniMax、千问AI平台、火山引擎、百度千帆…
  第三方平台     75     OpenRouter 一类的中转
  云服务商        7     Azure、AWS Bedrock 一类
  本地            4     Ollama、LM Studio 一类
  跨应用统一      2

自定义入口   第一屏顶部「自定义配置」

预设不是简单填个地址,它带了该供应商的模型映射和鉴权方式。这也是它比手写环境变量省事的地方:换供应商只要点一下,不用记每家是 ANTHROPIC_AUTH_TOKEN 还是 OPENAI_API_KEY。

按下启用,它改的是哪个文件

加完一个自定义供应商后,列表里会出现卡片。注意启用方式:点卡片左边那个方形图标,不是右边的播放三角(那个是连通性测试)。点对之后,%USERPROFILE%\.claude\settings.json 立刻被写出来。

文件   C:\Users\<用户名>\.claude\settings.json
大小   163 字节

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-wb2a-...cfe3",
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:7863/v1",
    "CLAUDE_CODE_AUTO_MODE_SERVER": "0"
  }
}

切换前后对比,变的是 ANTHROPIC_BASE_URL 和 ANTHROPIC_AUTH_TOKEN 两个值,第三个键 CLAUDE_CODE_AUTO_MODE_SERVER 一直是 0。整个文件是覆盖写,不是合并:如果原来的 settings.json 里有别的自定义键,切换后会被这份三键模板替掉。

切换到「实测中转」     ANTHROPIC_BASE_URL = https://api.example.com
切换到「本地 7863」    ANTHROPIC_BASE_URL = http://127.0.0.1:7863/v1
两次写入都是 163 字节,结构完全一致

这句话的意思是:它的备份机制(欢迎页提到会把原配置存成名为 default 的供应商)值得先确认一遍再用,否则你手写的 hooks、permissions 这些配置可能在第一次切换时消失。

路由模式:本地多一个 15721 端口

切到路由模式后,设置里的「本地路由」页会亮起来。服务默认监听 127.0.0.1:15721,界面上有三个计数:总请求数与成功率,外加活跃连接。

设置 → 本地路由
  服务状态      运行中 · 已运行 0 分钟
  监听地址      127.0.0.1
  监听端口      15721
  总请求数      0    成功率 0.0%    活跃连接 0
  正在使用路由的应用 · 0
  「没有应用在用路由。在应用页的『路由』或『聚合』页签里进入。」

最后那行是重点。切了模式标签,不等于应用已经走进路由。界面上明确写着「正在使用路由的应用 · 0」,客户端配置还没被改到这个代理上。

此时读 settings.json,ANTHROPIC_BASE_URL 仍然是供应商地址,没有变成 15721。所以「点一下路由模式,Claude Code 就自动走代理」这个动作,在 v4.0.17 上不成立,至少按界面上的这条路径不成立。

拿 Anthropic 格式敲代理,回来的是 502

为了看这个代理到底有没有在转发,直接对它发一个 Anthropic 格式的 /v1/messages 请求,带 x-api-key 和 anthropic-version 两个头。两次都返回 502,错误体是结构化的 JSON。

POST http://127.0.0.1:15721/v1/messages
{"model":"kimi-k2.8-preview","max_tokens":32,"messages":[...]}

上游是 https://api.example.com 时:
502 {"error":{"message":"请求转发失败: 上游请求失败:
     client error (Connect): dns error: 不知道这样的主机。(os error 11001)",
     "type":"proxy_error"}}

上游是 http://127.0.0.1:7863/v1 时:
502 upstream connect failed: 由于目标计算机积极拒绝,无法连接。(os error 10061)

第二条值得追一下。同一个地址用 curl 直连是通的:

curl http://127.0.0.1:7863/v1/models -H "Authorization: Bearer sk-..."
IPv4  -> 200
IPv6  -> 200

netstat -ano | findstr 7863
  TCP  0.0.0.0:7863  LISTENING  6192

端口在听,两个协议栈都能连,代理却报「积极拒绝」。可能是它把 /v1 又拼了一次,也可能是连接目标被解析成了别的地址。这一条没有继续挖,所以结论只到「路由转发到本地 OpenAI 兼容端点,在 v4.0.17 上没跑通」为止。

副作用是能验证计量:用量统计页把这两次失败也记了下来。

用量统计(当天)
  总成本 $0.00    总请求数 2
  真实消耗 Tokens 0    缓存命中率 0.0%
  请求日志
    16:26:25  502  供应商 实测中转  模型 kimi-k2.8-preview
    16:26:25  502  供应商 实测中转  模型 claude-sonnet-4-5

连 502 都按供应商和模型分开记,说明这个面板是真的在解请求,不只是转发字节。

什么时候值得装,什么时候别装

场景结论依据
手上有好几家中转,经常换值得106 个预设 + 一键改写 settings.json
只想用一个官方账号没必要多一层面板,收益为零
想让它做协议转换要谨慎路由模式在本地端点上没跑通
配置里有自定义 hooks先备份切换是覆盖写 163 字节模板
要在多台机器同步不行配置就写在用户目录里

测试环境是 Windows 10 22H2、cc-switch v4.0.17、便携版,只有一个 Claude Code 供应商被真实启用过。

  • 未验证:Codex、Gemini CLI 等其余应用的配置文件写入路径。只测了 Claude Code 的 settings.json。
  • 未验证:聚合模式的 /model 列表合并。
  • 未验证:自动故障转移。界面上有这一栏,没有造两个上游去触发。
  • 未验证:路由模式跑通后的实际效果,卡在上游连接这一环。
  • 未验证:从旧版本升级时,原配置是否真的被存成 default 供应商。

另外它需要联网读供应商列表和检查版本,离线环境下只能看到已缓存的卡片。