cc-switch 的命令行入口与交互形态规范:二进制布局、子命令分发、裸跑与交互模式、全局 flag,以及 config / add / templates 等子命令的用户可见行为。
工具 SHALL 以单个二进制 cc-switch 分发,采用子命令架构。顶层 SHALL 至少暴露以下子命令:add、list(别名 ls)、edit、remove(别名 rm)、use、config、templates、help、version。未识别的子命令 SHALL 以非零退出码退出并建议 cc-switch --help。
cc-switch --helpcc-switch foobarfoobar 未知、可查看 --helpcc-switch version执行 cc-switch(无参数)SHALL 等价于 cc-switch use(无参数),即进入交互式 provider 选择流程。
cc-switchcc-switch use(无参)在 stdin 为 tty 时 SHALL 展示编号列表让用户选择;若存在 default_provider,在列表中 SHALL 标注为默认,空输入(直接回车)SHALL 选中默认 provider;用户可输入编号或 provider 名。输入不匹配时 SHALL 重新提示(最多 3 次),全部失败后以非零退出码退出。
default_provider=foo,用户执行 cc-switch use 并直接回车foo 被选中、进入启动流程bar,用户输入 2 回车bar 被选中、进入启动流程bar 回车bar 被选中、进入启动流程claudecc-switch use <name> SHALL 直接选中指定 provider 并进入启动流程,无需任何 tty 交互。未指定 <name> 且 stdin 非 tty 时 SHALL 尝试使用 default_provider;若也未设置默认,SHALL 以非零退出码退出并提示需要显式 <name>。
cc-switch use foo 且 foo 已配置cc-switch use nonexistentnonexistent 不存在、建议 cc-switch list:</dev/null 重定向),用户执行 cc-switch use,且 default_provider=foofoo 启动default_provider,用户执行 cc-switch use<name> 或先设置默认 provider工具 SHALL 支持以下全局 flag:-v / --verbose(输出 trace 日志到 stderr)、--config <path>(等价于 CC_SWITCH_CONFIG 但优先级更高)、-h / --help。这些 flag SHALL 在任意子命令中可用。
CC_SWITCH_CONFIG=/a.yaml,用户执行 cc-switch --config /b.yaml list/b.yaml,忽略 env 中的路径cc-switch -v use fooconfig 子命令cc-switch config SHALL 提供 get / set / show 子命令:
config show:打印当前配置文件路径与内容(env value 脱敏为 ***)config set claude-path <path>:设置 claude_pathconfig set default <name>:设置 default_providerconfig get <key>:打印单个配置项值(同样脱敏 env value)cc-switch config showcc-switch config set default foofoo 存在,写入配置并打印确认;若不存在,非零退出cc-switch add <name> SHALL 支持三种用法:
--env KEY=VALUE(可重复)与 --description "..." 一次性填入;--from-template <tpl> 以内置模板为起点,tty 下逐 key 提示输入 value(显示 hint、回车接受 default);可与 --description 共存;--env / --from-template 时进入交互式自由向导,逐个提示输入 key/value(输入空 key 结束),tty 下可用。所有方式 MUST 最终落入同一份校验逻辑(至少一个 env key、provider 名合法)。--from-template 与 --env 可以组合使用——先以模板为骨架,--env 再覆盖或补充同名/新 key。value 输入阶段 MUST 允许用户输入 env:VAR_NAME 形式的引用(见 provider-config spec 对应 Requirement),工具 MUST NOT 在 add 阶段尝试解析该引用、MUST NOT 校验该 VAR 是否存在。
cc-switch add foo --env K1=v1 --env K2=v2 --description "desc"foo 被写入,env 含两个键,description=desccc-switch add foo,依次输入 K1 / v1 / K2 / v2 / 空键foo 被写入与一次性命令行等价的结构cc-switch add foo 且未提供任何 --env 或 --from-template--env KEY=VALUE 或 --from-templatecc-switch add official --from-template anthropic-official,依次对每个模板 key 按回车接受 default / 输入新 valueofficial 被写入,env 包含模板定义的所有 key,value 为用户确认后的值cc-switch add x --from-template openrouter --env ANTHROPIC_MODEL=anthropic/claude-opus-4 --non-interactivex 被写入,env 结构为"模板骨架 ∪ --env 覆盖",ANTHROPIC_MODEL 取自 --env;模板中未被 --env 提供的 key 保留模板 default 或占位空字符串(value 为空的 key 在落盘前 MUST 报错要求补齐)cc-switch add foo --env ANTHROPIC_API_KEY=env:MY_KEYenv:MY_KEY,不在 add 阶段校验 MY_KEY 是否存在cc-switch add foo --from-template nonexistentcc-switch templates listtemplates 子命令cc-switch templates SHALL 暴露两个子命令:list 与 show <tpl>。模板为内嵌资源,工具 MUST 不访问网络、MUST 不读取用户目录之外的文件。
cc-switch templates listcc-switch templates show openroutercc-switch templates show nonexistentcc-switch templates list二进制 SHALL 内嵌至少以下模板:anthropic-official、openrouter、deepseek、moonshot、zhipu、custom-base。每个模板 MUST 至少包含一条 env key;模板 key 列表 MUST 只描述键名与 hint/default,MUST NOT 预置任何真实 token 或 API key。
cc-switch templates list