用 cc-switch 在多家 AI 供应商间一键切换,并彻底告别权限弹窗
Contents
起因
用 Claude Code 和 Codex 这类 AI CLI 工具久了,最烦的不是模型不够聪明,而是两件事:
- 供应商不得不频繁切换。现在各家供应商都不太稳定:有的限制每日使用量,有的限制每周使用量,写代码写到一半额度就见底了,只能换一家继续。GLM、Kimi、DeepSeek、各种中转站……来回切是常态。
- 切换不能中断会话。AI 辅助写代码,上下文和对话历史都长在会话里,一旦中断重开,前面聊的全白费。所以理想的工具必须做到:换供应商,会话还活着。
- 每次执行命令都要弹权限提示。改个文件弹一次,跑个
git status又弹一次,一天下来几百次确认,手都按酸了。
这篇文章介绍我用的一整套解法:cc-switch 负责切换供应商(会话不断),allowlist 配置负责告别权限弹窗。
需求
- 一个工具统一管理多个供应商的 API URL 和 API Key(GLM、Kimi、DeepSeek、中转站……)
- 在不同供应商之间快速切换,不手动改配置文件
- 切换时不丢原有配置,出问题能一键回滚
- 切换不断会话,AI CLI 里的上下文保持连续
- 启动
claude/codex时不再有权限弹窗,或者只保留极少的必要确认
cc-switch 切换供应商
cc-switch(GitHub: farion1231/cc-switch)是一个开源跨平台桌面工具(Tauri + Rust),支持 Windows / macOS / Linux。它不只管 Claude Code 和 Codex,还能切换 OpenCode、Gemini CLI、Claude Desktop 等多个 AI CLI 的供应商。
安装
Windows:在 Releases 下载 .msi 安装包或 .zip 便携版(遇到 SmartScreen 提示选"仍要运行")。
macOS:
|
|
Linux:提供 .deb、.rpm、.AppImage。
⚠️ 安全提醒:项目方多次警告存在假冒网站骗取付费和账号。只从 github.com/farion1231/cc-switch 的 Releases 页面下载,任何要求付费的"cc-switch 客户端"都是假的。
添加供应商
打开 cc-switch,添加新供应商时可以选择:
- 预设模板:内置 DeepSeek、GLM、Kimi、Qwen 等常见供应商模板,填入 API Key 即可
- 自定义:手动填 Base URL、API Key、模型名称
一键切换(会话不断)
在供应商列表中点击启用,cc-switch 会自动把配置写入对应的工具配置文件:
- Claude Code →
~/.claude/settings.json - Codex →
~/.codex/config.toml
切换前 cc-switch 会自动备份当前配置(保留最近 10 个备份),出问题可以一键回滚。
这里最关键的一点是:切换供应商不需要重启 AI 会话。cc-switch 修改的是配置文件,而 Claude Code 会在下一次请求时读到新配置——也就是说,额度用完了在托盘里点一下切换到另一家,当前会话的上下文、对话历史全部保留,AI 继续接着上一条消息干活,对话无缝衔接。Codex 侧稍麻烦一点:切换后新开的会话直接生效,已开的会话需要 /quit 重进,但重进后用 codex resume 即可恢复之前的会话,上下文同样不丢。
和手动改配置的区别
手动改配置文件,需要先找到文件位置、记住 JSON/TOML 语法、改完还要验证格式没写错。cc-switch 把这些都包进了一个图形界面里,点两下就搞定,而且所有配置存在本地 ~/.cc-switch/ 目录,不上传任何数据。
权限提示问题
cc-switch 解决的是"供应商怎么切",但"权限弹窗"是另一个问题。
为什么会有权限弹窗
Claude Code 和 Codex 默认是安全优先的设计:每当 AI 要执行一个可能有副作用的操作(写文件、跑命令、访问网络),都会弹窗让你确认。这个设计本身是对的,但日常使用中,大量操作是重复且无害的(比如 git status、ls),每次都确认就非常打断心流。
Claude Code 的解决方案
方案一:危险模式(不推荐日常使用)
|
|
这个参数跳过所有权限提示,AI 可以不经确认执行任何命令。参数名里带 “dangerously” 不是吓唬人的——如果你的工作目录里有重要数据,AI 一个误操作就没了。
适用场景:Docker 容器、CI 环境、一次性沙箱。
方案二:allowlist 白名单(推荐)
在 ~/.claude/settings.json(用户级)或 .claude/settings.json(项目级)中配置 permissions.allow:
|
|
匹配规则:
- 精确匹配:
Bash(git status) - 前缀匹配(加
:*):Bash(npm run test:*)匹配npm run test、npm run test -- --watch等 deny优先级高于allow,可以用来兜底禁止危险操作- 项目级配置放
.claude/settings.json(可提交到 git),个人偏好放~/.claude/settings.json或.claude/settings.local.json(不提交)
这样 Claude Code 执行白名单内的命令时直接执行不弹窗,白名单外的仍然会确认。
方案三:中间模式
|
|
自动批准文件编辑,但 Bash 命令仍需确认。适合"改文件不想弹窗,但跑命令还是确认一下"的场景。
Codex 的解决方案
Codex 的配置在 ~/.codex/config.toml。
方案一:危险模式
|
|
方案二:配置文件
|
|
approval_policy可选值:untrusted(每次都问)、on-failure(沙箱拒绝时才问)、on-request(AI 主动请求时才问)、never(从不问)sandbox_mode可选值:read-only(只读)、workspace-write(可写工作区)、danger-full-access(完全访问)
on-failure + workspace-write 是日常开发中"安全和效率兼顾"的组合:AI 在沙箱内自由活动,只有越界操作才弹窗。
方案三:全自动模式
|
|
等价于 --sandbox workspace-write --approval on-failure。
实际使用建议
最佳实践:Docker 沙箱 + git 双保险
如果你想彻底告别权限弹窗(包括 --dangerously-skip-permissions 都不心疼),核心思路是:把权限锁在特定范围里,而不是靠弹窗逐条确认。
我的做法是把 AI CLI 跑在 Docker 容器里:
- 容器只挂载当前项目目录,AI 能碰到的只有这个工作区,容器外的任何东西它都看不见
- 项目用 git 管理,AI 的所有改动都有 diff 可看、可回滚——改坏了
git checkout一键还原 - 在这个隔离环境里,直接
--dangerously-skip-permissions跑,权限弹窗彻底消失
容器负责空间隔离(AI 只能动工作区),git 负责时间回溯(任何改动可回滚),两层合起来,权限就已经被锁死在特定范围内了,比一条条点确认更安全、也更省心。
|
|
我的日常配置
日常开发:Claude Code 用 allowlist 白名单模式(方案二),只允许常用的只读命令和项目目录内的编辑操作。
跑 CI 或脚本:用 --dangerously-skip-permissions,但在 Docker 容器里跑,目录隔离。
切换供应商:cc-switch 常驻系统托盘,随时点击切换。
注意事项
- 不要把 API Key 提交到 git:cc-switch 的配置在本地,但
~/.claude/settings.json和.claude/settings.json里的环境变量如果被同步到云端或提交到版本库,Key 就泄露出去了 - allowlist 宁可少不要多:宁可在白名单外多确认几次,也不要图省事把所有
Bash(*)都加进去 - Codex 修改 config.toml 后要重启终端:Claude Code 支持热加载,Codex 需要重启才能生效
- cc-switch 只管切换不管权限:权限配置仍然是各自工具自己的事,两边要分别配
总结
| 工具 | 配置文件 | 推荐方案 |
|---|---|---|
| 供应商切换 | cc-switch(GUI) | 一键切换,会话不断,自动备份 |
| Claude Code 权限 | ~/.claude/settings.json |
allowlist 白名单 |
| Codex 权限 | ~/.codex/config.toml |
on-failure + workspace-write |
这套组合下来,“额度见底切供应商不断会话"和"日常操作不弹权限窗"这两件最打断心流的事,基本都解决了。
参考链接
Author 软件开发大郭
LastMod 2026-09-07