工具 SHALL 按如下优先级解析配置文件路径:$CC_SWITCH_CONFIG > $XDG_CONFIG_HOME/cc-switch/config.yaml > ~/.config/cc-switch/config.yaml。若目标文件不存在,SHALL 在首次需要写入时创建父目录(权限 0700)与空骨架文件(权限 0600)。读操作遇文件不存在 MUST 返回"空配置"而非错误。
CC_SWITCH_CONFIG、XDG_CONFIG_HOME,也从未运行过 cc-switchcc-switch list 成功执行,输出 "(no providers configured)" 提示,且不在磁盘创建任何文件cc-switch add foo ... 且配置文件从未被创建~/.config/cc-switch/(权限 0700)与 config.yaml(权限 0600),并写入新增 providerXDG_CONFIG_HOME=/tmp/xdg 已设置/tmp/xdg/cc-switch/config.yaml 作为配置文件路径CC_SWITCH_CONFIG=/custom/path.yaml 已设置/custom/path.yaml0644chmod 600配置文件 SHALL 使用 YAML 编码,顶层字段包括:claude_path(string,可选)、default_provider(string,可选)、providers(map,key 为 provider 名)。每个 provider SHALL 包含 env(map[string]string,必填且至少一个键)与可选 description(string)。Provider 名 SHALL 为非空且仅含字母、数字、-、_。
default_provider: fooenv 字段为空 mapProvider 的 env map 中,value 为字符串类型;若 value 严格匹配正则 ^env:[A-Za-z_][A-Za-z0-9_]*$,SHALL 被识别为"间接引用",表示"启动时从父进程环境中读取名为 VAR_NAME 的变量的值作为实际 value"。所有其他 value MUST 被视为字面字符串,不做任何展开。引用仅在"启动阶段"解析(见 provider-launch spec),在 list -v / config show / config get 等展示命令中,引用 value 按原字符串展示(不脱敏、不展开),让用户一眼识别"这一项是指针"。
env.FOO 值为 hellohello;list -v 显示脱敏后的 he*** 或等价样式env.ANTHROPIC_API_KEY 值为 env:MY_ANTHROPIC_KEYMY_ANTHROPIC_KEY 的引用;list -v 显示 env:MY_ANTHROPIC_KEY(按原字符串,不脱敏、不解析)env.FOO 值为 env: 或 env:1NAME(不符合正则)工具修改配置文件时 SHALL 采用"写临时文件 → fsync → 重命名"模式;MUST 不允许部分写入后崩溃导致的文件损坏。
cc-switch add 写入 config.yaml 过程中进程被强制终止config.yaml 要么保留原内容、要么是完整的新内容,不会出现截断或空文件工具 SHALL 支持以下 provider 管理操作:
default,可选 -v 显示 env 键名(value 脱敏)default_provider,default_provider 字段 SHALL 被一并清空所有写操作 SHALL 在修改成功后原子落盘。
cc-switch add official --env ANTHROPIC_API_KEY=sk-xxx --env ANTHROPIC_BASE_URL=https://api.anthropic.comproviders.official.env 写入两个键,cc-switch list 能列出 officialofficial 的 provider,用户再次 cc-switch add official ...edit 或换一个名字cc-switch list -v*** 或前 4 位 + ***,不打印完整 valuedefault_provider=foo,用户执行 cc-switch remove foofoo 被删除,default_provider 被置空,cc-switch list 不再展示 default 标记cc-switch remove nonexistent工具 SHALL 支持通过 cc-switch config set claude-path <path> 命令设置 claude_path;支持 ~ 展开;SHALL 在设置时校验路径存在且可执行,不通过则拒绝写入。未设置时后续启动流程回落到 exec.LookPath("claude")。
cc-switch config set claude-path ~/.claude/local/claude 且该文件存在且可执行claude_path 被写入展开后的绝对路径cc-switch config set claude-path /not/exist工具 SHALL 支持通过 cc-switch config set default <name> 设置默认 provider,前提是该 provider 存在。cc-switch use 在未指定 <name> 且处于非 tty 环境时 SHALL 使用默认 provider;tty 下仍进入交互选择(默认值为 default_provider)。
foo provider,执行 cc-switch config set default foodefault_provider: foo 被写入配置cc-switch config set default bar 且 bar 不存在