使用指定的 CC-Switch 供应商启动 Claude Code,可同时运行多个不同供应商的 Claude Code 实例,不影响 CC-Switch 的全局激活状态。
- 实例级隔离:每个 Claude Code 实例使用独立 settings 文件启动,互不影响
- 只读访问 cc-switch 数据库,不修改原配置
- 支持交互式选择供应商,同名供应商自动提示选择
- 交互选择支持鼠标:悬停跟随高亮、左键点击直接选中、鼠标移出列表恢复键盘高亮的那一行(终端不支持时自动退化为纯键盘操作)
- 自动过滤
PATH、HOME等系统关键环境变量,防止误覆盖系统设置 - 防止全局 env 泄漏:合并 cc-switch 通用配置与供应商特有配置得到完整 env,置空全局
~/.claude/settings.json的泄漏 key 再用完整 env 覆盖,既避免切换残留或手改导致旧供应商 env 串入本实例,又保留通用工具开关 - 启动时打印实际命令,方便复制到其他终端直接运行
- 为每个实例注入
CC_SWITCH_PROVIDER_ID环境变量,供外部工具识别当前供应商 - 配套 PowerShell 脚本生成带 DiceBear 首字母图标的快捷方式,双击即用
- 零依赖,仅使用 Node.js 内置模块(
node:sqlite等)
只支持使用原生
Anthropic Messages协议的供应商。
本工具通过 claude --settings 注入供应商配置启动,Claude Code 直连供应商端点,不经过 CC-Switch 的本地路由,因此只支持使用原生 Anthropic Messages 协议的供应商。
effortLevel等非 env 枚举字段无法隔离。
effortLevel 等非 env 枚举字段无法靠 settings 隔离(null/"" 会被 strip 后继承全局),仍会跟随当前激活供应商。
settings/settings_<id>.json文件含 API Key 等敏感信息,已通过.gitignore忽略,请勿提交到远程代码仓库
cc-launcher/
├── docs/ # 文档(英文 README、更新日志)
├── icons/ # 快捷方式图标,运行时生成(已 gitignore)
├── settings/ # 运行时生成的 settings 文件(已 gitignore)
├── cc-launcher.mjs # 主脚本,读取 cc-switch 数据库并启动 Claude Code
└── create-shortcut.ps1 # PowerShell 脚本,为指定供应商创建快捷方式
- Node.js 22.13 或更高版本(使用
node:sqlite内置模块,实验性警告已自动屏蔽) - 已安装 CC-Switch 并配置过至少一个
claude供应商 - 已安装
Claude CodeCLI 并加入 PATH
运行期间请勿删除
settings/settings_<id>.json该类文件是实例隔离的配置来源,删除后 CC-Switch 切换供应商时 env 会被覆盖、失去隔离效果
# 交互选择供应商
node cc-launcher.mjs
# 指定供应商
node cc-launcher.mjs "xxx"
# 指定供应商并透传参数给 Claude Code
node cc-launcher.mjs "xxx" --continue
# 省略供应商名(进入交互选择)并透传参数
node cc-launcher.mjs --continue编辑 create-shortcut.ps1 顶部配置区:
# CC-Switch 里的供应商名称
$ProviderName = ""
# 快捷方式的起始位置(项目目录)
$WorkingDirectory = "F:\AI\workspace\Claude"运行脚本,会在项目目录下生成 <清理后名>_<hash>.lnk(供应商名清理非法字符并加 8 位 hash 后缀,防止不同名清理后塌缩覆盖),$ProviderName 为空时生成通用快捷方式 CC-Launcher.lnk。脚本还会调用 DiceBear API 生成首字母图标(随机背景色)作为快捷方式图标,下载失败则回退默认图标;生成后提示「输入 1 回车重新生成,其他输入回车退出」。
powershell -ExecutionPolicy Bypass -File .\create-shortcut.ps1双击快捷方式即可启动 Claude Code(指定了 $ProviderName 则直接使用该供应商,否则进入交互选择)。
node cc-launcher.mjs [供应商名称] [Claude Code 额外参数...]| 参数位置 | 说明 |
|---|---|
| 第 1 个参数 | CC-Switch 中的供应商名称(可选)。省略或以 - 开头时进入交互选择,此时该参数也作为额外参数透传 |
| 后续参数 | 透传给 Claude Code CLI,例如 --continue、--resume 等 |
-
检查数据库:确认
~/.cc-switch/cc-switch.db存在 -
解析供应商:
- 未传名称 -> 列出所有
Anthropic Messages协议的claude供应商交互选择 - 找到唯一匹配 -> 直接使用
- 找到多个同名 -> 交互选择具体项
- 未找到 / 选中项协议不兼容 -> 重新选择
- 未传名称 -> 列出所有
-
过滤环境变量:合并「通用配置 env + 供应商特有 env」得到完整 targetEnv,对其做过滤——跳过系统关键变量(
PATH、HOME、USERPROFILE等),非字符串值置空为""(Claude Code 视为未设置,避免回退全局值)配置来源:cc-switch 的配置分两处存——通用配置(对所有供应商共享的 env,如
CLAUDE_CODE_USE_POWERSHELL_TOOL等工具行为开关)存于数据库settings表common_config_claude,供应商特有配置(ANTHROPIC_BASE_URL等真实端点)存于providers.settings_config;cc-switch 切换时合并两者写入全局~/.claude/settings.json(common 覆盖供应商同名 key)。本工具复刻此 env 合并(受meta.commonConfigEnabled门控:true= 跟随 common、false= opt-out 不合并),common 胜出以保证改 common 后true供应商跟随新值,否则通用开关缺失会被隔离逻辑置空丢失隔离机制:cc-launcher 不改激活态,全局
~/.claude/settings.json的env会泄漏到本实例(cc-switch 切换时写入,用户手改或切换残留时可能与 DB 不同步);故直接读该文件的 env,把这些 key 在生成的 settings 里置空("",Claude Code 视为未设置、不被 strip)以抵消泄漏,再用完整 targetEnv 覆盖限制(仅复刻 env):本工具只合并 common 的
env,不合并其非 env 字段(hooks、permissions、enabledPlugins、statusLine、theme等)。Claude Code 对数组型字段(hooks、permissions.allow/deny/ask)跨 settings 来源是拼接而非覆盖,而 cc-launcher 叠在全局~/.claude/settings.json之上,既无法用"置空"隔离它们(数组没有 env 那种""不回退机制,disableAllHooks是全杀),也无法干净应用——强行写入会与全局残留重复执行。故这些非 env 字段依赖全局泄漏(可能陈旧/丢失);如需它们随供应商正确生效,请用 cc-switch 切换 -
写 settings 文件:将完整 settings 对象写入
settings/settings_<id>.json -
启动 Claude Code:通过
claude --settings <file>启动,额外参数透传;启动前打印实际命令(方便复制到其他终端),并向子进程注入CC_SWITCH_PROVIDER_ID环境变量(供外部工具识别当前供应商)