proposal.md 3.2 KB

Why

用户订阅了多家 Claude Code 兼容的 coding plan 供应商(例如官方 Anthropic、各类第三方中转/代理服务),每家都通过不同的环境变量(如 ANTHROPIC_API_KEYANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_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 <name> --from-template <tpl> 带出 env key 骨架;cc-switch templates list/show 可查阅。
  • use <provider>(或交互式选择)子命令执行核心流程:
    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 子进程的环境中操作变量。