把 Claude Code 的自定义配置同步到 cc-switch 模板,防止切换 provider 时配置被覆盖丢失。
cc-switch 切换 provider(含热切换)时,会用其数据库里的模板整体覆盖 ~/.claude/settings.json。凡是模板里没有的键都会被清掉,导致:
- 后装的插件(enabledPlugins)从
/plugin列表消失、需重新安装 worktree.bgIsolation、hooks、permissions、statusLine 等自定义配置被清- 自定义 pluginConfigs 等配置丢失
cc-switch 官方确认这是设计决策,不计划修复(GitHub issue 1198、1570、3631 均关闭),官方唯一方案是手动维护模板。
本工具用 diff 同步解决:以磁盘 ~/.claude/settings.json 为真相源,与 cc-switch 模板对比,把缺失的自定义配置合并进模板。
- env 跳过:cc-switch 管理 provider 专属配置(API key、base_url、模型映射),本工具不动
- 添加自动:磁盘有、模板无的键 → 自动加入模板,无风险
- 删除需确认:磁盘无、模板有的键 → 展示待删清单,
--yes确认后才删,避免误删被覆盖的配置 - 幂等:无差异时直接退出,不改库
通过插件 marketplace 安装(在 Claude Code 会话中执行):
/plugin marketplace add Spirit597/sync-config-to-ccswitch
/plugin install sync-config-to-ccswitch@sync-config-to-ccswitch
或使用 CLI:
claude plugin marketplace add Spirit597/sync-config-to-ccswitch
claude plugin install sync-config-to-ccswitch@sync-config-to-ccswitch安装后 /reload-plugins 生效。
需要 Python 3 和 cc-switch。
在 Claude Code 中触发(说"同步配置到 cc-switch"、"插件又丢了"等,或直接调用 /sync-config-to-ccswitch):
脚本自动完成:
- 读取磁盘
~/.claude/settings.json(跳过 env)与 cc-switch 模板 - 添加缺失键(自动)
- 展示待删清单(需
--yes确认后删除) - 每次写库前备份 cc-switch 数据库(保留 10 份)
[sync] 已添加 2 个键:
+ worktree
+ hooks
[sync] 检测到 1 个待删除项(磁盘已无,模板仍有):
- enabledPlugins:old-plugin@repo
[sync] 未执行删除。确认无误后加 --yes 重新运行。
cc-switch 的 provider 专属配置全在 settings_config.env.*(源码 pointer("/env/ANTHROPIC_BASE_URL") 证实)。env 之外的自定义键(enabledPlugins、worktree、hooks、permissions、statusLine、pluginConfigs、model、language、theme 等)不在 cc-switch 管理范围,是本工具同步的对象。
enabledPlugins 条目以 installed_plugins.json(cc-switch 不碰的权威清单)判断是否真卸载:插件仍在安装清单(user scope)即使磁盘暂时没有也保留;只有真卸载才删除。local scope 插件(绑定特定项目)不进全局模板。
- 每次写库前自动备份 cc-switch 数据库(保留最近 10 份),可回滚
- 不碰 env、不动 API key
- 删除需用户确认,避免误删
- 脚本幂等,无差异时不改库
| sync-config-to-ccswitch | ccswitch-sync | |
|---|---|---|
| 同步范围 | env 之外全部键(diff 即定义) | 白名单字段(enabledPlugins/statusLine 等) |
| 删除 | 需确认(防误删被覆盖配置) | 无 |
| 判断真卸载 | installed_plugins.json 权威判断 | 仅对比 enabledPlugins |