1. 项目概述
如果你和我一样,日常开发中会同时用到 Claude Code、Codex CLI、Gemini CLI、OpenCode 和 OpenClaw 这些 AI 终端工具,那你一定也经历过类似的烦恼:每次想换个服务商或者测试不同的 API 端点,都得手动去改好几套配置文件。~/.claude/settings.json、~/.codex/config.toml、~/.gemini/settings.json…… 光是记住这些文件的位置和格式就够头疼了,更别提还要小心翼翼地替换密钥和 URL,生怕一个手抖把配置搞乱。
ccswitch-terminal这个工具,就是为了解决这个痛点而生的。它是一个纯粹的 Python 命令行工具,核心目标就一个:让你能用一个统一的命令,快速、安全地在多个 AI 工具的不同服务提供商(Provider)之间切换。比如,你可以把 OpenRouter 的配置命名为op,把 Google Vertex AI 的配置命名为vx,然后通过ccsw op或cxsw vx这样的短命令,瞬间切换所有相关工具的配置。它的设计哲学是“零依赖”,只使用 Python 3.9+ 的标准库,这意味着你不需要安装任何额外的pip包,开箱即用,也避免了依赖冲突的风险。
这个工具特别适合以下几类开发者:一是频繁在不同 AI 模型或 API 提供商之间切换进行对比测试的研究员或工程师;二是需要在不同环境(如开发、测试、生产)使用不同密钥的团队;三是像我这样,单纯觉得手动管理五六个工具的配置太麻烦,想要一个“一劳永逸”的自动化方案的懒人。接下来,我会详细拆解它的设计思路、核心用法以及我在实际使用中积累的一些独家技巧和避坑指南。
2. 核心设计思路与架构解析
2.1 为什么是“零依赖”与“仅标准库”
在决定采用这个方案之前,我也评估过其他路径,比如打包成pip包并声明依赖,或者用Go重写以获得更好的启动性能。但最终选择纯标准库实现,是基于几个非常实际的考量。
首先,部署复杂度降到最低。作为一个配置管理工具,它需要被安装到各种可能的环境里,包括那些网络受限、pip源不可靠,或者权限严格禁止安装第三方包的服务器。只依赖标准库意味着只要机器上有 Python 3.9 或更高版本,就能直接运行git clone和bootstrap.sh,没有任何额外的环境准备步骤。这对于需要快速在跳板机或临时容器内使用的场景至关重要。
其次,避免“依赖地狱”。很多优秀的 CLI 工具最终变得难以维护,就是因为其依赖树过于复杂或依赖的第三方库发生了破坏性更新。ccswitch的核心功能是文件操作(读写 JSON、TOML)、环境变量管理、进程调用和简单的数据库操作(SQLite),这些 Python 标准库都已提供成熟且稳定的支持。主动放弃第三方库,虽然意味着需要自己实现一些轮子(比如更精细的 TOML 解析),但也彻底消除了由上游依赖引入的不稳定因素,使得工具本身的行为在跨 Python 小版本时都高度可预测。
最后,控制安全边界。工具需要处理敏感的 API 密钥。引入第三方网络库或复杂的解析库,无形中扩大了攻击面。使用标准库,我能清晰地界定工具的数据流:它读取本地配置文件和环境变量,处理后写入另一批本地配置文件。整个过程中,除非用户显式配置,否则不会有任何网络请求,这极大地减少了潜在的安全风险。
2.2 核心架构:Provider 中心化与状态快照
ccswitch的架构围绕两个核心概念展开:Provider(提供商)和状态快照。
Provider是一个抽象的配置集合。它不仅仅是一个 API 密钥和 URL,而是针对ccswitch支持的所有工具(Claude Code, Codex CLI, Gemini CLI, OpenCode, OpenClaw)的一套完整配置。当你执行ccsw add openrouter ...时,你实际上是在定义一个名为 “openrouter” 的 Provider,它包含了 Claude、Codex、Gemini 等工具连接 OpenRouter 服务所需的所有参数。这些配置被集中存储在~/.ccswitch/providers.json和 SQLite 数据库~/.ccswitch/ccswitch.db中,与各个工具原始的、分散的配置文件完全隔离。
状态快照机制是保证操作可靠性的关键。ccswitch不会粗暴地覆盖工具的配置文件。在每次切换前,它会先为当前活跃的配置创建一个快照(记录在~/.ccswitch/ccswitch.db的历史表中)。当你使用ccsw rollback codex时,它就能精准地回退到切换前的 Codex 配置,而不是简单地切换到上一个 Provider。这对于调试和恢复意外操作至关重要。此外,对于 Codex CLI 的官方 ChatGPT 登录态,ccswitch提供了capture和login命令来专门管理其auth.json快照,实现了多官方账号在同一机器上的安全切换。
这种设计带来几个明显优势:
- 配置隔离:你的“工作配置”和“个人配置”可以并存,互不干扰。
- 原子性操作:切换要么完全成功,要么完全失败并保留原状态,避免了工具因配置不一致而“半死不活”的情况。
- 审计与回滚:所有切换操作都有历史记录,出问题时可以清晰地知道是谁、在什么时候、切换到了什么配置。
2.3 与各 CLI 工具的集成原理
ccswitch并不替代 Claude Code 或 Codex CLI 等工具本身,它只是一个“配置路由器”。它通过与这些工具约定的配置文件路径和格式进行交互。
- 对于 Claude Code 和 Gemini CLI:它们通常使用
~/.claude/settings.json和~/.gemini/settings.json这样的 JSON 文件。ccswitch在切换时,会根据目标 Provider 的配置,直接生成或修改这些 JSON 文件中的api_key、base_url等字段。对于 Gemini,它还会向~/.ccswitch/active.env写入环境变量,供包装脚本 (gcsw) 读取。 - 对于 Codex CLI:从 0.116 版本开始,Codex 支持了更灵活的
model_provider配置。ccswitch会向~/.codex/config.toml写入一个自定义的ccswitch_activeprovider 区块,指定base_url和env_key。这种方式比旧版本只覆盖openai_base_url更健壮,尤其是对于支持 HTTP Responses 但不支持 WebSocket 的中转服务。对于官方 ChatGPT 模式 (--codex-auth-mode chatgpt),ccswitch则会清理可能冲突的环境变量和配置项,将model_provider切回内置的openai。 - 对于 OpenCode 和 OpenClaw:这两个工具通常支持通过环境变量或特定目录下的配置文件来覆盖默认设置。
ccswitch采用“覆盖层”(Overlay)模式,在~/.ccswitch/generated/opencode/和~/.ccswitch/generated/openclaw/目录下生成对应的配置文件(如config.yaml)。当通过opsw或clawsw命令切换时,实质是让这些工具优先读取覆盖层下的配置。
注意:
ccswitch的bootstrap.sh脚本会为每个工具创建对应的 shell 包装函数(如ccsw,cxsw)。这些包装函数内部会调用ccswitch来修改配置,然后启动真正的 CLI 工具。这就是为什么直接运行ccsw op可以工作,而运行python3 ccsw.py op会报错——后者缺少了关键的“工具类型”参数。
3. 从零开始:完整安装与初始化实战
3.1 环境准备与工具预装
在安装ccswitch之前,必须确保你的系统已经准备好了它要管理的“乘客”——即那些 AI CLI 工具本身。
- Python 3.9+:这是硬性要求。在终端输入
python3 --version检查。如果你的系统版本较低,建议使用pyenv或conda来管理多版本 Python,这是开发者的标配技能。 - Git:用于克隆仓库。
- 目标 CLI 工具:你需要提前安装好并确保能在命令行中直接调用它们。以 macOS 和 Linux 为例:
- Claude Code: 通常通过
pip install claude-code或下载官方包安装。 - Codex CLI: 参考 OpenAI 官方文档安装,确保
codex命令可用。 - Gemini CLI: 通过
pip install google-generativeai安装命令行工具。 - OpenCode / OpenClaw: 根据其各自的 GitHub 仓库说明进行安装。
- Claude Code: 通常通过
一个快速的验证方法是打开终端,依次输入claude --version、codex --version、gemini --version等,看是否能正常输出版本信息。如果出现“command not found”,你需要先解决这些工具的安装和 PATH 配置问题。
3.2 执行一键安装脚本
ccswitch提供了极简的安装方式。打开你的终端,执行以下命令:
git clone https://github.com/Boulea7/ccswitch-terminal ~/ccsw bash ~/ccsw/bootstrap.sh source ~/.zshrc # 如果你使用 Zsh。如果是 Bash,则执行 source ~/.bashrc这三行命令完成了以下事情:
- 克隆仓库:将项目代码克隆到用户主目录下的
ccsw文件夹中。 - 运行引导脚本:
bootstrap.sh是这个工具的核心安装脚本。它会做几件重要的事:- 检查 Python 版本和必要的目录权限。
- 在
~/.ccswitch/下创建用于存放配置、状态和生成文件的目录结构。 - 在你的 shell 配置文件(
.zshrc或.bashrc)末尾添加一系列shell 函数。这些函数就是ccsw、cxsw、gcsw等快捷命令的本体。 - 为这些函数生成自动补全脚本(如果 shell 支持)。
- 重载 Shell 配置:让新添加的函数和自动补全立即生效。
重要提示:在运行bootstrap.sh之前,我强烈建议你先加上--dry-run参数预览它将要做的更改:
bash ~/ccsw/bootstrap.sh --dry-run这会打印出脚本计划修改的所有文件路径和将要添加的 shell 函数内容,让你做到心中有数,避免意外修改。
3.3 验证安装与理解 Shell 包装
安装完成后,输入ccsw -h或python3 ~/ccsw/ccsw.py -h,你应该能看到帮助信息。
此时,你的 shell 中已经存在了几个新的命令别名(实际上是函数):
ccsw: 默认对应claude子命令的快捷方式。即ccsw op等价于python3 ~/ccsw/ccsw.py claude op。cxsw: 对应codex子命令。gcsw: 对应gemini子命令。opsw: 对应opencode子命令。clawsw: 对应openclaw子命令。ccsw all: 对应all子命令,用于一次性切换所有工具。
这里有一个至关重要的细节:gcsw、opsw、clawsw这些包装器内部使用了eval来执行ccswitch的输出,以便将环境变量(如GEMINI_API_KEY)设置到当前的 shell 会话中。这意味着,如果你绕过包装器,直接使用python3 ccsw.py gemini op,这个命令只会打印出需要设置的环境变量命令,而不会实际执行它。你必须使用eval "$(python3 ccsw.py gemini op)"才能生效。因此,始终推荐使用包装器命令,它们更安全、更不易出错。
4. 配置你的第一个 Provider:以 OpenRouter 为例
现在,我们来配置第一个 Provider。我将以 OpenRouter 为例,因为它是支持多模型 API 的典型服务。这个过程会清晰地展示ccswitch管理配置的完整流程。
4.1 密钥管理:安全第一的原则
处理 API 密钥的首要原则是不要将明文密钥提交到版本控制系统或任何可能被共享的配置文件中。ccswitch强烈推荐使用环境变量引用的方式。
创建本地环境变量文件:在
~/ccsw/目录下,创建一个名为.env.local的文件。这个文件被.gitignore排除,不会被意外提交。cd ~/ccsw touch .env.local将真实密钥写入该文件:用你喜欢的文本编辑器打开
.env.local,填入从 OpenRouter 控制台获取的密钥。# ~/ccsw/.env.local # 格式:变量名=你的真实密钥(不要加引号) OR_CLAUDE_TOKEN=sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OR_CODEX_TOKEN=sk-or-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OR_GEMINI_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx注意:这里我使用了
OR_作为前缀,这只是个人习惯,你可以用任何有意义的变量名,如MY_CLAUDE_KEY。关键是保持一致性。
4.2 添加 Provider 并建立别名
密钥文件准备好后,就可以添加 Provider 了。ccswitch的add命令结构清晰,你需要提供 Provider 的名称和各个工具的端点信息。
ccsw add openrouter \ --claude-url 'https://openrouter.ai/api/v1' \ --claude-token '$OR_CLAUDE_TOKEN' \ --codex-url 'https://openrouter.ai/api/v1' \ --codex-token '$OR_CODEX_TOKEN' \ --gemini-key '$OR_GEMINI_KEY'命令参数解读:
openrouter: 这是你给这个 Provider 起的名字,后续切换时使用。--claude-url: Claude API 的兼容端点。OpenRouter 的 Anthropic 兼容端点通常是https://openrouter.ai/api/v1。--claude-token '$OR_CLAUDE_TOKEN':注意这里的单引号和美元符号。这告诉ccswitch:“Claude 的 token 来自名为OR_CLAUDE_TOKEN的环境变量”。ccswitch在运行时才会去解析这个变量,而不会存储明文。--codex-url和--codex-token: 同理,对应 OpenAI 兼容的端点。--gemini-key: 对应 Gemini 的 API 密钥环境变量。
执行成功后,你可以用ccsw list查看所有已配置的 Provider,用ccsw show openrouter查看其详细配置。
接下来,为它创建一个简短的别名。这是提升效率的关键一步。
ccsw alias op openrouter现在,你就可以用op这个短名来代表openrouter这个完整的 Provider 了。
4.3 执行切换与验证
现在进行第一次切换测试:
# 切换到 OpenRouter 配置 ccsw op # 切换 Claude Code cxsw op # 切换 Codex CLI gcsw op # 切换 Gemini CLI每个命令执行后,都应该有成功的提示。为了验证切换是否真的生效,我们可以用各 CLI 工具执行一个简单的查询:
# 验证 Claude Code claude “用一句话介绍你自己。” # 验证 Codex CLI (假设你用它进行对话) codex chat “你好,请用中文回复。” # 验证 Gemini CLI gemini generate-content --model gemini-2.0-flash-exp --prompt “Hello”如果这些命令能正常返回结果,且没有报错(如认证失败、连接错误),说明切换成功。你还可以直接查看工具的配置文件来确认:
cat ~/.claude/settings.json | grep api_key cat ~/.codex/config.toml | grep -A5 ccswitch_active你应该能看到配置文件中已经写入了正确的端点 URL,而 api_key 或 token 字段则是指向环境变量的引用或经过解析后的值。
5. 高级用法与场景化配置策略
5.1 多 Provider 与别名管理实战
在实际工作中,你很可能不止使用一个服务。比如,公司项目用 Azure OpenAI,个人项目用 OpenRouter,偶尔测试用 Google Vertex AI。ccswitch可以轻松管理这一切。
假设我们已经按照上述步骤配置好了openrouter(别名op)。现在来添加一个 Vertex AI 的配置:
准备 Vertex AI 密钥:在 Google Cloud Console 创建服务账号密钥,下载 JSON 文件。我们将其内容作为一个环境变量。
# 在 ~/ccsw/.env.local 中追加 VERTEX_CREDENTIALS_JSON='{"type": "service_account", ...}' # 粘贴完整的 JSON 内容 VERTEX_PROJECT_ID=your-gcp-project-id VERTEX_LOCATION=us-central1警告:将多行 JSON 作为环境变量需要小心处理引号和换行符。一个更稳妥的办法是将 JSON 保存为文件,然后在
ccswitch配置中引用文件路径,但当前版本可能更推荐使用环境变量。确保 JSON 字符串是单行的,并且引号被正确转义。添加 Vertex AI Provider:Vertex AI 的端点格式不同,且通常需要项目ID和位置。
ccsw add vertex \ --claude-url 'https://${VERTEX_LOCATION}-aiplatform.googleapis.com/v1/projects/${VERTEX_PROJECT_ID}/locations/${VERTEX_LOCATION}/endpoints/openapi' \ --claude-token '$VERTEX_CREDENTIALS_JSON' \ --codex-url 'https://${VERTEX_LOCATION}-aiplatform.googleapis.com/v1/projects/${VERTEX_PROJECT_ID}/locations/${VERTEX_LOCATION}/endpoints/openapi' \ --codex-token '$VERTEX_CREDENTIALS_JSON' \ --gemini-key '$VERTEX_CREDENTIALS_JSON' \ --claude-metadata 'vertex=true' \ --codex-metadata 'vertex=true'- 注意 URL 中使用了
${VERTEX_PROJECT_ID}和${VERTEX_LOCATION}的环境变量插值,这需要在ccswitch运行时这些变量已被定义。 --metadata参数可用于传递一些工具特定的额外信息,这里只是示例。
- 注意 URL 中使用了
创建短别名:
ccsw alias vx vertex
现在,你的命令行武器库就有了两个快捷开关:op和vx。切换就像拨动开关一样简单:
# 快速切换到 Vertex AI 进行测试 ccsw all vx # 一次性将所有工具切到 Vertex AI # 完成测试后切回 OpenRouter cxsw op # 只将 Codex 切回 OpenRouter5.2 Profile 功能:定义你的工作流
profile是ccswitch的一个强大功能,它允许你为不同的“工作场景”预定义一套工具偏好。比如,在“工作”场景下,你希望 Codex 使用公司代理 (vx),而 Claude 使用备用服务 (op);在“个人”场景下,所有工具都用 OpenRouter (op)。
# 创建一个名为 “work” 的 profile ccsw profile add work \ --claude op \ --codex vx,op \ # Codex 优先使用 vx (Vertex),如果失败则尝试 op --gemini vx \ --opencode op # 创建一个名为 “personal” 的 profile ccsw profile add personal \ --claude op \ --codex op \ --gemini op \ --opencode op # 查看 profile 定义 ccsw profile show work # 应用 “work” profile ccsw profile use work执行ccsw profile use work后,ccswitch会按照--codex vx,op的列表顺序,依次尝试切换 Codex 到vxProvider。如果vx的配置有问题(如密钥无效),它会自动尝试列表中的下一个 (op)。这为配置提供了冗余和灵活性。
profile非常适合固定在.zshrc或脚本开头,实现环境的一键初始化。
5.3 官方 Codex (ChatGPT) 账号的精细化管理
如果你同时使用官方 ChatGPT 和各类中转服务,ccswitch对 Codex CLI 的原生账号支持就显得尤为贴心。
场景一:保留一个干净的官方 ChatGPT 入口
# 添加一个特殊的 Provider,其认证模式为 chatgpt ccsw add pro --codex-auth-mode chatgpt # 切换到官方 ChatGPT cxsw pro这个proProvider 非常“干净”。它不会设置任何OPENAI_BASE_URL或OPENAI_API_KEY环境变量,而是将 Codex 的model_provider重置为内置的openai,从而让 Codex 使用其本地存储的官方账号登录态(~/.codex/auth.json)。
场景二:在同一台机器上管理多个官方账号假设你有两个 OpenAI 账号,一个用于工作 (pro-work),一个用于个人 (pro-personal)。
保存当前账号状态:首先,确保 Codex 已登录你的工作账号。
ccsw capture codex pro-work这条命令会将当前的
auth.json快照保存到pro-work这个 Provider 名下。登录并保存第二个账号:
ccsw login codex pro-personal这条命令会执行
codex logout,然后启动codex login流程让你登录个人账号,登录成功后自动捕获快照。在两个账号间切换:
cxsw pro-work # 切换到工作账号 cxsw pro-personal # 切换到个人账号ccswitch会在切换前刷新当前账号的快照,尽可能跟上 refresh token 的更新,降低 token 失效的概率。
场景三:共享上下文会话(高级用法)默认情况下,切换到官方 ChatGPT Provider (pro) 会进入一个独立的会话通道。如果你希望新会话能与其他中转 Provider 共享某些上下文(这需要 Codex 支持),可以使用sync和share命令进行更精细的控制。
# 开启同步模式,后续切换到官方账号时会尝试共享上下文 cxsw sync on cxsw pro # 这次切换会尝试写入共享通道 cxsw sync status # 查看状态 cxsw sync off # 关闭同步模式,后续切换回独立通道这个功能相对高级,通常在你明确需要跨 Provider 维持会话连续性时才使用。
6. 运维、诊断与故障排除实录
6.1 常用维护命令速查
即使工具设计得再健壮,日常运维和问题排查也是必不可少的。ccswitch提供了一组实用的诊断和恢复命令。
| 命令 | 用途 | 示例 |
|---|---|---|
ccsw doctor all | 全面体检。检查所有工具的配置、路径、Provider 定义以及密钥解析状态。这是出问题时第一个应该运行的命令。 | ccsw doctor all |
ccsw doctor codex op --deep | 深度检查。对指定工具和 Provider 进行更深入的探测,比如尝试连接 API 验证密钥有效性。 | ccsw doctor codex op --deep |
ccsw history --limit 10 | 查看操作历史。显示最近的切换记录,包括时间、工具、源 Provider 和目标 Provider。用于审计或回滚决策。 | ccsw history |
ccsw rollback codex | 回滚操作。将指定工具回退到上一次切换前的状态。前提是当前配置自上次切换后未被手动修改过。 | ccsw rollback claude |
ccsw repair all | 修复运行时租约。如果ccswitch进程被意外终止(如Ctrl+C),可能会留下锁文件,此命令用于清理。 | ccsw repair all |
ccsw import current codex rescued | 回收当前配置。如果你手动修改了 Codex 的配置并希望将其保存为一个新的 Provider,可以使用此命令。 | ccsw import current claude my-config |
ccsw run codex work -- codex exec “ls” | 单次运行。在指定的 Profile (work) 下运行一条 Codex 命令,但不会永久改变当前的活跃 Provider。适合脚本化任务。 | ccsw run claude personal -- claude “hello” |
6.2 典型问题排查与解决
以下是我在实际使用中遇到的一些典型问题及其解决方法。
问题一:执行gcsw op后,echo $GEMINI_API_KEY仍然为空。
- 原因:
gcsw是一个 shell 函数,它通过eval设置的环境变量仅对当前 shell 会话及其子进程有效。如果你是在一个脚本中运行gcsw op,或者在某个终端运行后新开了一个终端标签页,环境变量是不会传递过去的。 - 排查:
- 确认你是在同一个终端会话中执行
gcsw op和后续命令。 - 运行
type gcsw确认gcsw函数已正确加载。 - 直接运行
python3 ~/ccsw/ccsw.py gemini op,它会输出需要eval的命令。如果你必须绕过包装器,一定要用eval "$(python3 ~/ccsw/ccsw.py gemini op)"。
- 确认你是在同一个终端会话中执行
- 解决:对于需要持久化环境变量的场景(如 CI/CD),建议直接将密钥导出到环境,或者使用
ccswitch生成的配置,而不是依赖其包装器设置的环境变量。
问题二:切换时出现[claude] Skipped: token unresolved错误。
- 原因:Provider 配置中引用的环境变量(如
$OR_CLAUDE_TOKEN)在当前 shell 环境中不存在或为空。 - 排查:
- 运行
ccsw show openrouter查看配置,确认 token 字段确实是$OR_CLAUDE_TOKEN这样的引用格式。 - 运行
echo $OR_CLAUDE_TOKEN检查变量是否存在且非空。 - 检查
~/ccsw/.env.local文件是否存在,并且变量名拼写正确。 - 确保你已经在当前 shell 中
source了包含.env.local的文件,或者通过其他方式导出了变量。
- 运行
- 解决:最可靠的方法是在执行切换命令前,先导出变量:
export OR_CLAUDE_TOKEN=$(cat ~/ccsw/.env.local | grep OR_CLAUDE_TOKEN | cut -d'=' -f2)。或者,确保你的 shell 启动脚本(如.zshrc)会自动加载~/ccsw/.env.local。
问题三:Codex 切换后无法连接,提示Invalid base URL或认证错误。
- 原因:可能是 Codex 版本较旧,或者自定义
model_provider的配置格式不被支持。 - 排查:
- 运行
codex --version确认版本是否 >= 0.116。旧版本可能不支持model_provider配置块。 - 运行
ccsw doctor codex op --deep检查连接。 - 查看
~/.codex/config.toml,检查[model_providers.ccswitch_active]区块的base_url格式是否正确。
- 运行
- 解决:
- 升级 Codex CLI 到最新版本。
- 如果是自建中转,确保其完全兼容 OpenAI API 规范,特别是
/v1/chat/completions端点。 - 尝试使用
--codex-auth-mode chatgpt创建一个纯官方账号的 Provider 进行对比测试,以排除中转服务本身的问题。
问题四:想使用非默认的配置目录。
- 场景:某些情况下,你可能将 Claude Code 或 Codex 安装在了自定义位置,或者使用了
--config-dir参数。 - 解决:使用
ccsw settings命令覆盖默认路径。# 查看当前设置 ccsw settings get # 设置 Codex 的配置目录 ccsw settings set codex_config_dir /path/to/your/custom/.codex # 设置后,ccswitch 的所有操作将针对新路径 cxsw op
6.3 安全最佳实践与备份策略
- 密钥存储:始终坚持将原始密钥放在
~/ccsw/.env.local中,并在ccswitch配置中只引用环境变量名($VAR)。定期检查该文件的权限(应为600),确保只有你可读。 - 配置备份:
~/.ccswitch/目录下的providers.json和ccswitch.db包含了你的所有 Provider 定义和状态历史。定期备份这个目录。cp -r ~/.ccswitch ~/.ccswitch.backup.$(date +%Y%m%d) - 谨慎使用
--allow-literal-secrets:除非有特殊理由,否则不要使用这个标志。让密钥以明文形式持久化在ccswitch的数据库或配置文件中会增加泄露风险。 - 善用
--dry-run:在执行任何可能修改大量配置的命令(如bootstrap.sh、ccsw profile use)前,先使用--dry-run预览变更。 - 理解操作范围:
ccsw all <provider>会同时修改所有工具的配置。如果你只想测试某一个工具,请使用对应的子命令,如cxsw <provider>。