起因

用 Claude Code 和 Codex 这类 AI CLI 工具久了,最烦的不是模型不够聪明,而是两件事:

  1. 供应商不得不频繁切换。现在各家供应商都不太稳定:有的限制每日使用量,有的限制每周使用量,写代码写到一半额度就见底了,只能换一家继续。GLM、Kimi、DeepSeek、各种中转站……来回切是常态。
  2. 切换不能中断会话。AI 辅助写代码,上下文和对话历史都长在会话里,一旦中断重开,前面聊的全白费。所以理想的工具必须做到:换供应商,会话还活着。
  3. 每次执行命令都要弹权限提示。改个文件弹一次,跑个 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

1
2
brew tap farion1231/ccswitch
brew install --cask cc-switch

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 statusls),每次都确认就非常打断心流。

Claude Code 的解决方案

方案一:危险模式(不推荐日常使用)

1
claude --dangerously-skip-permissions

这个参数跳过所有权限提示,AI 可以不经确认执行任何命令。参数名里带 “dangerously” 不是吓唬人的——如果你的工作目录里有重要数据,AI 一个误操作就没了。

适用场景:Docker 容器、CI 环境、一次性沙箱。

方案二:allowlist 白名单(推荐)

~/.claude/settings.json(用户级)或 .claude/settings.json(项目级)中配置 permissions.allow

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  "permissions": {
    "allow": [
      "Bash(git status)",
      "Bash(git diff:*)",
      "Bash(git log:*)",
      "Bash(npm run test:*)",
      "Bash(npm run build)",
      "Read(src/**)",
      "Edit(src/**)"
    ],
    "deny": [
      "Bash(rm -rf *)"
    ]
  }
}

匹配规则:

  • 精确匹配:Bash(git status)
  • 前缀匹配(加 :*):Bash(npm run test:*) 匹配 npm run testnpm run test -- --watch
  • deny 优先级高于 allow,可以用来兜底禁止危险操作
  • 项目级配置放 .claude/settings.json(可提交到 git),个人偏好放 ~/.claude/settings.json.claude/settings.local.json(不提交)

这样 Claude Code 执行白名单内的命令时直接执行不弹窗,白名单外的仍然会确认。

方案三:中间模式

1
claude --permission-mode acceptEdits

自动批准文件编辑,但 Bash 命令仍需确认。适合"改文件不想弹窗,但跑命令还是确认一下"的场景。

Codex 的解决方案

Codex 的配置在 ~/.codex/config.toml

方案一:危险模式

1
codex --dangerously-bypass-approvals-and-sandbox

方案二:配置文件

1
2
approval_policy = "on-failure"
sandbox_mode = "workspace-write"
  • approval_policy 可选值:untrusted(每次都问)、on-failure(沙箱拒绝时才问)、on-request(AI 主动请求时才问)、never(从不问)
  • sandbox_mode 可选值:read-only(只读)、workspace-write(可写工作区)、danger-full-access(完全访问)

on-failure + workspace-write 是日常开发中"安全和效率兼顾"的组合:AI 在沙箱内自由活动,只有越界操作才弹窗。

方案三:全自动模式

1
codex --full-auto

等价于 --sandbox workspace-write --approval on-failure

实际使用建议

最佳实践:Docker 沙箱 + git 双保险

如果你想彻底告别权限弹窗(包括 --dangerously-skip-permissions 都不心疼),核心思路是:把权限锁在特定范围里,而不是靠弹窗逐条确认

我的做法是把 AI CLI 跑在 Docker 容器里:

  1. 容器只挂载当前项目目录,AI 能碰到的只有这个工作区,容器外的任何东西它都看不见
  2. 项目用 git 管理,AI 的所有改动都有 diff 可看、可回滚——改坏了 git checkout 一键还原
  3. 在这个隔离环境里,直接 --dangerously-skip-permissions 跑,权限弹窗彻底消失

容器负责空间隔离(AI 只能动工作区),git 负责时间回溯(任何改动可回滚),两层合起来,权限就已经被锁死在特定范围内了,比一条条点确认更安全、也更省心。

1
2
3
4
5
6
# 示例:在项目目录里起容器跑 claude
docker run -it --rm \
  -v $(pwd):/workspace \
  -w /workspace \
  your-claude-image \
  claude --dangerously-skip-permissions

我的日常配置

日常开发:Claude Code 用 allowlist 白名单模式(方案二),只允许常用的只读命令和项目目录内的编辑操作。

跑 CI 或脚本:用 --dangerously-skip-permissions,但在 Docker 容器里跑,目录隔离。

切换供应商:cc-switch 常驻系统托盘,随时点击切换。

注意事项

  1. 不要把 API Key 提交到 git:cc-switch 的配置在本地,但 ~/.claude/settings.json.claude/settings.json 里的环境变量如果被同步到云端或提交到版本库,Key 就泄露出去了
  2. allowlist 宁可少不要多:宁可在白名单外多确认几次,也不要图省事把所有 Bash(*) 都加进去
  3. Codex 修改 config.toml 后要重启终端:Claude Code 支持热加载,Codex 需要重启才能生效
  4. cc-switch 只管切换不管权限:权限配置仍然是各自工具自己的事,两边要分别配

总结

工具 配置文件 推荐方案
供应商切换 cc-switch(GUI) 一键切换,会话不断,自动备份
Claude Code 权限 ~/.claude/settings.json allowlist 白名单
Codex 权限 ~/.codex/config.toml on-failure + workspace-write

这套组合下来,“额度见底切供应商不断会话"和"日常操作不弹权限窗"这两件最打断心流的事,基本都解决了。

参考链接