## Why 用户订阅了多家 Claude Code 兼容的 coding plan 供应商(例如官方 Anthropic、各类第三方中转/代理服务),每家都通过不同的环境变量(如 `ANTHROPIC_API_KEY`、`ANTHROPIC_BASE_URL`、`ANTHROPIC_AUTH_TOKEN`、`ANTHROPIC_MODEL` 等)接入 Claude Code。在不同供应商之间切换时,用户需要手动 unset 旧变量、export 新变量、再启动 `claude`,容易漏设或残留,体验繁琐且易错。需要一个 CLI 工具让"选一个 provider → 跑起来 claude"变成一条命令。 ## What Changes - 新增一个 Go 语言 CLI 工具 `cc-switch`(二进制名),负责 provider 切换与 Claude Code 启动。 - 支持在本地配置文件中登记多个 provider,每个 provider 包含:名称、若干环境变量键值对、可选描述。 - 支持配置全局的 `claude` 可执行文件路径(默认从 `PATH` 中查找)。 - 提供 provider 的增删改查命令(`add` / `list` / `edit` / `remove` / `use`)。 - 支持 env 值使用 `env:VAR_NAME` 语法引用启动时父进程环境中的变量(避免把 API key 明文写进配置),启动时才解析;引用的变量不存在则拒绝启动。 - 内置常见 provider 的模板(Anthropic 官方、OpenRouter、DeepSeek、Kimi/Moonshot、智谱 GLM 等),通过 `cc-switch add --from-template ` 带出 env key 骨架;`cc-switch templates list/show` 可查阅。 - `use `(或交互式选择)子命令执行核心流程: 1. 计算所有 provider 的环境变量键名**并集**,在当前进程环境中 unset 掉这些键; 2. 再根据选中的 provider 设置其环境变量; 3. 以该环境启动配置的 `claude` 可执行文件(前台运行、继承 stdio、转发信号); 4. `claude` 退出后,从当前进程环境中再次 unset 这些键(相当于兜底清理)。 - 配置文件采用用户级路径(遵循 XDG 规范,默认 `~/.config/cc-switch/config.yaml`,可通过 `CC_SWITCH_CONFIG` 覆盖)。 - 首次运行自动创建空配置骨架并给出引导。 ## Capabilities ### New Capabilities - `provider-config`: 管理 provider 列表的本地持久化配置(增删改查、默认 provider、claude 路径设置、配置文件定位与初始化)。 - `provider-launch`: 执行"清理 → 注入 → 启动 claude → 再清理"的运行时流程,包含信号转发与退出码透传。 - `cli`: 基于子命令的命令行接口,将上述能力暴露给终端用户,包括交互式选择与非交互式调用两种模式。 ### Modified Capabilities ## Impact - 新建仓库代码结构:`cmd/cc-switch/`(入口)、`internal/config/`(配置读写)、`internal/provider/`(provider 模型与并集计算)、`internal/runner/`(claude 启动与信号处理)、`internal/cli/`(子命令装配)。 - 新增 Go module,依赖候选:`github.com/spf13/cobra`(子命令)、`gopkg.in/yaml.v3`(配置序列化);交互选择可选 `github.com/AlecAivazis/survey/v2` 或自实现简易 TUI。 - 新增配置文件契约:`~/.config/cc-switch/config.yaml`,用户在多机之间可同步。 - 不影响现有系统(新项目);不修改用户 shell profile,只在 `cc-switch` 子进程的环境中操作变量。