切换供应商后 settings.json 配置丢失 - CC Switch
Quick fix
使用「共享配置片段」功能提取并保留 hooks/statusLine 等自定义字段,切换时自动带走。
Symptom
Section titled “Symptom”切换后发现 hooks 字段被完全覆盖/丢失,相关插件、自动化脚本、hooks 行为全部失效CC Switch 在切换供应商时会用所选供应商的配置重写 `~/.claude/settings.json`,这是有意的设计行为。由于供应商配置只包含 env、model 等供应商相关字段,写入时只保留 cc-switch 内置字段,用户手工添加的 hooks、enabledPlugins、statusLine 等字段会被完全覆盖或清空。该问题在 v3.8.3 至 v3.19.2 等多个版本中长期存在。v3.11.0 曾引入「部分字段合并」机制,但在 v3.11.1 中被回退(commit `859f4137`),恢复了完全覆盖模式。维护者确认这是设计行为,推荐使用「共享配置片段」功能来保留共有数据。此外,部分用户在用过第三方镜像/路由后无法切换供应商,可能与 v3.16.2 修复的「代理占位符 backup/restore 循环」有关——之前若代理停止时把占位符残留在 Live 配置中,会导致切换变成空操作。
在 CC Switch 中编辑当前供应商,找到「共享配置」面板。
点击「从当前供应商提取」,将 enabledPlugins、hooks、statusLine 等共有字段提取为共享配置。
保存后,切换到其他供应商时,共享配置会自动合并写入 settings.json,自定义字段不再丢失。
如果使用 VSCode 且切换不生效,检查 CC Switch 设置中是否开启了「写入通用配置」选项。若 VSCode 中单独写了插件配置,该功能不会改写插件配置,需确保不单独写插件配置或手动同步。
如果使用 Codex 且 trust_level 等项目相关配置在切换后丢失,目前需在每次新项目首次确认后重新提取共享配置,或使用 PostToolUse hook 自动恢复。
临时方案:使用 Claude Code 的 PostToolUse hook 自动恢复丢失的字段。创建恢复脚本并在 settings.json 中添加 hook 条目,每次工具调用后自动补回缺失字段。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 15 个真实 issue
- #1280用过第三方claude code镜像服务之后无法切换提供商
- #3946切换 provider 后 hooks 字段丢失,插件及自定义脚本失效
- #5887提示Claude 配置文件不存在
- #480[Bug] 切换 Provider 后 settings.json 中的 statusLine 配置丢失
- #804切换供应商在vscode中不生效
- #4897claude桌面版1M上下文的配置问题
- #479settings.json配置覆盖问题
- #1031请求添加settings.json文件, "保留用户自定义字段"
- #1218>_进入终端不起作用
- #1277[Bug] 非代理模式下切换供应商导致 enabledPlugins 配置丢失
- #29793.15Bug:ccs错误写入claude的配置与显示的不同
- #6324重写 ~/.claude/settings.json 时清空用户配置(enabledPlugins/statusLine 等),导致 Claude Code 插件被禁用
- #2871Workaround: auto-restore settings.json fields (statusLine, permissions, hooks) via PostToolUse hook
- #4947首次安装cc-switch原始 settings.json 被覆盖
- #6340[Bug][已定位根因] 统一 Codex 会话历史对 OpenAI Official 静默失效:显式 model_provider 使注入被拒、官方历史迁移 gate 永不通过(#4710/#5467 补充)
- 切换供应商后 settings.json 里的 statusLine 配置消失了怎么办?
- 这是 CC Switch 的设计行为,切换时会重写 settings.json。请使用「共享配置片段」功能:编辑供应商 → 共享配置面板 → 「从当前供应商提取」,即可把 statusLine 等共有字段随切换自动带走。
- 原始 settings.json 被覆盖后还能找回吗?
- 可以。CC Switch 首次运行时会把所有配置读取到 default 供应商中,原始配置完整保存在首次启动时导入的默认供应商中,可随时找回。
- 在 VSCode 中切换供应商后 claudecode.environmentVariables 没有变化怎么办?
- 检查 CC Switch 设置中是否开启了「写入通用配置」功能。如果 VSCode 中单独写了插件配置,该功能不会改写插件配置;不单独写插件配置时功能是有效的。
- CC Switch 界面的 >_ 按钮打开的终端里 Claude 不可用怎么办?
- 内置终端的 shell 环境可能与常用终端不同,node/claude 的路径可能未配置。建议直接从系统终端(PowerShell、iTerm2 等)运行 claude,CC Switch 会将配置写入 settings.json,系统终端可以正常读取到。
- 提示「Claude 配置文件不存在」怎么办?
- CC Switch 管理的是 Claude Code CLI 的配置目录(如 Windows 的 %USERPROFILE%\.claude\settings.json),不是 Claude Desktop。请确认 Claude Code CLI 已安装并在终端运行过一次 claude 命令以生成 ~/.claude 目录。如果使用 WSL,CC Switch 的配置文件目录需指向 WSL 的 .claude 目录。
- 切换供应商后 enabledPlugins 被设为 null 导致插件全部禁用怎么办?
- v3.11.1 回退了部分字段合并机制导致此问题。可通过通用配置(共享配置片段)传递插件数据,或使用代理模式(代理模式下切换不写入 live 配置,不触发此问题)。
- Codex 的 trust_level 等项目相关配置在切换后丢失怎么办?
- trust_level 与项目相关,切换供应商时会被替换。目前采用共享配置片段的话,每启动一个新项目需提取一遍。也可考虑使用 PostToolUse hook 自动恢复。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。