settings.json 被代理接管覆盖导致插件配置丢失 - Claude Code
Quick fix
将 hooks、statusLine 等自定义字段放入「通用配置」面板,或升级至 v3.12.2+ 以修复旧版备份恢复逻辑。
Symptom
Section titled “Symptom”settings.json 文件会因为cc switch代理模式重置,导致plugin每次重启都是禁用,因为enabledPlugins 配置没了cc-switch 的本地代理(接管)模式工作原理是接管 `~/.claude/settings.json`。在切换供应商或开启/关闭代理时,程序会写入供应商的配置以使代理正常工作。早期版本(v3.12.2 之前)在恢复备份时使用了旧快照,导致 `statusLine`、`permissions`、`enabledPlugins` 等自定义字段丢失。该问题在 v3.12.2 中通过重构 Proxy Takeover Restore Flow 得到修复。
然而,即使升级到最新版本,核心设计仍未改变:cc-switch 采用「以数据库模板为源全量覆盖 live 文件」的策略,而非字段级合并。这意味着,如果第三方工具(如 Orca)或用户手动在 `settings.json` 中写入了不属于任何供应商模板的顶层字段,在切换供应商时这些字段仍会被覆盖抹掉。维护者明确表示,曾尝试在 v3.11.0 实现字段级合并,但因引入复杂的状态冲突问题而在 v3.11.1 回滚。当前推荐的做法是将共享配置通过「通用配置」功能在不同供应商间传递。
升级 cc-switch 至 v3.12.2 或更高版本,以获取重构后的 Proxy Takeover Restore Flow,避免恢复旧快照导致的问题。
在 cc-switch 中编辑当前 Claude 供应商,进入「通用配置」面板。
点击「从当前供应商提取」,将磁盘上 `~/.claude/settings.json` 中的 `hooks`、`statusLine`、`permissions`、`enabledPlugins` 等自定义字段提取到通用配置中。
保存配置。确保在新建或切换供应商时勾选「写入通用配置」(通常默认已勾选),这样切换时即可保留插件等共享数据。
如果需要在开启代理时修改环境变量等配置,请先在 cc-switch 中关闭代理功能,修改完成后再重新开启,以确保配置正确同步。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 15 个真实 issue
- #445请问下 为什么我开启代理后 本地settings.json里面的配置文件无法变化,无法切换代理商
- #938plugin失效问题
- #989严重 issue 开启代理服务后,claude code 本地 settings.json 被统一替代,固定环境变量不方便添加,目前 ccs 中没有入口,只能手动添加
- #1118.claude/settings.json 在开启/关闭 代理后被重置问题
- #1437【BUG】V3.12在开启本地代理时切换cluade供应商配置文件不会切换
- #1540Claude 接管模式可能会恢复旧的 `~/.claude/settings.json`,导致 `statusLine` 等自定义字段丢失
- #1691settings.json 文件会因为cc switch代理模式重置,导致plugin每次重启都是禁用,因为enabledPlugins 配置没了
- #1795[DISCUSS] 支持 pi coding agent
- #1827代理打开情况下切换/修改 provider 不会更新 .claude/settings.json
- #2027OpenAI Chat Completions 模式下,开启本地代理后模型映射会被自动清空
- #4274CC Switch overwrites entire settings.json on agent takeover, destroying user plugins/config
- #5363Claude Code built-in WebSearch returns 0 results and can stall via Codex OAuth proxy
- #6886代理接管模式:服务重启时恢复路径会把上一个 Provider 的 API Key 回写覆盖当前 Provider 的配置
- #6901切换供应商时全量覆盖 ~/.claude/settings.json,抹掉第三方工具(如 Orca)写入的 hooks 等字段
- #6902[Bug] Applying a partial Claude provider config destructively overwrites ~/.claude/settings.json even with takeover disabled
- 升级到最新版后,为什么我的 hooks 配置在切换供应商时还是会丢失?
- 最新版虽然修复了旧快照恢复的 bug,但底层仍采用全量覆盖策略。如果 `hooks` 等字段不在供应商配置或「通用配置」中,切换时就会被抹掉。请将这些第三方工具写入的字段提取到「通用配置」中。
- 开启代理后,为什么修改供应商的环境变量没有同步到 settings.json?
- 这是早期版本的已知问题。请尝试关闭 Claude 代理开关再重新开启,以触发配置更新。建议升级至 v3.12.2+ 以获得更稳定的代理同步体验。
- 关闭代理或重启电脑后,settings.json 里的配置被清空了怎么办?
- 这通常是因为代理关闭或服务重启时,恢复流程使用了旧的备份快照。升级至 v3.12.2+ 可解决此问题。若已是最新版,请检查是否因第三方工具写入的字段未加入「通用配置」而被覆盖。
- 为什么不直接修改代码,只覆盖 env 等代理相关字段,保留其他所有配置?
- 维护者表示曾在 v3.11.0 尝试过字段级合并方案,但引入了更复杂的状态冲突问题,因此在 v3.11.1 回滚。当前设计要求请求地址和 API Key 是供应商独有的,其他共享配置通过「通用配置」传递。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。