跳转到内容

Codex provider 写回会重置 live UI settings from config.toml - cc-switch

Quick fix

升级到 cc-switch v4.0:切换供应商只改地址、Key、模型、协议几个关键字段,不再整份覆盖 ~/.codex/config.toml,其余配置原样保留。

报错原文
provider routing 本身切换成功,但不属于 provider 的 Codex live settings 会被旧的 provider snapshot 覆盖。典型会丢的内容包括:personality、[desktop] 里的主题、accent color 等桌面偏好、[mcp_servers] 这类 context entries

在 v3.x 中,cc-switch 把数据库里首次导入或上次保存的供应商快照当作唯一事实源(SSOT)。切换或启用供应商时,write_codex_live_config_atomic / write_live_with_common_config 通过原子重命名对整个 ~/.codex/config.toml 做全量替换(Full Replacement),live 文件只是快照的投影。因此凡是不在供应商快照里的字段——包括后来在 Codex UI 里修改的 personality、[desktop](如 mac-menu-bar-enabled = false)、[mcp_servers]、[hooks.state] 的 trusted_hash、[projects.*]、[permissions.*] 等——都会在写回时被抹掉;切到官方空模板时 config.toml 甚至被重置为 0 字节空文件。Common Config(共享配置片段)本可缓解此问题,但它是按供应商 opt-in 的(meta.commonConfigEnabled),第三方供应商和内置官方供应商常常未开启,导致 [desktop] 这类应用级设置双向丢失。另外,通用配置弹窗中的「从编辑内容提取」按钮(useCodexCommonConfig.ts 的 handleExtract)会立即调用 setCommonConfigSnippet 持久化,并无条件触发 sync_current_provider_for_app,仅点一下“提取”就静默全量覆写磁盘上的 live 文件。同一根因的另一种变体是手动修改被重置:有用户手动把 wire_api 改为 "chat" 后又被重建回 "responses",维护者说明手动改动会被 SSOT 覆盖属于 v3.x 的设计行为(该 MiMo 场景在 v3.16.4 已通过预设重做解决)。

  1. 升级到 cc-switch v4.0 或更高版本。v4.0 重写了配置写入方式:切换供应商、开关路由、重启 CC Switch 时只替换地址、Key、模型、协议这几个关键字段,其余内容(插件、主题、[projects]、MCP、注释等)原样保留,也不再用旧快照或备份整份覆盖配置文件;「从编辑内容提取」按钮已被移除,保存通用配置片段只写数据库,不再覆写 ~/.codex/config.toml。

  2. 升级后如曾丢失配置,可从首次启动 cc-switch 时导入的默认供应商卡片中找回当时的原始配置,再从本地旧备份(如有 ~/.codex/config.toml 的旧副本)手动合并被抹掉的字段(如 [desktop] mac-menu-bar-enabled = false、[hooks.state] 等)。

  3. 若暂时无法升级、仍停留在 v3.x:把需要跨供应商保留的内容放入「共享配置片段」(编辑供应商 → 共享配置面板 → 从当前供应商提取),并确认所有供应商的 commonConfigEnabled 均已启用;注意此方式对 [hooks.state]、Codex 升级后新增的字段覆盖不全,且不要在通用配置弹窗里随意点「从编辑内容提取」(3.20.0 中该按钮会静默覆写 live 文件)。

ToolCodex
Version3.16.1 - 3.20.0(受影响范围;v4.0 起修复)
PlatformsWindowsmacOS
切换供应商后 Codex 反复要求重新信任 hooks(trusted_hash 丢失)怎么办?
这是因为 v3.x 全量重建 config.toml 时抹掉了 Codex 自己维护的 [hooks.state]。升级到 v4.0 后切换只替换关键字段,[hooks.state] 会被保留,不会再重复弹信任提示。
我手动改了 config.toml(比如 wire_api = "chat"),为什么又被重置了?
在 v3.x 中 config.toml 由 cc-switch 作为唯一数据源统一重建,手动改动会被覆盖,这属于设计行为;相关字段需通过应用内的供应商设置调整。注意 MiMo 场景在 v3.16.4 起预设已改为原生走 /responses 端点,wire_api = "responses" 是预期且可用的配置;v4.0 起手动修改的非关键字段也不再被覆盖。
「从编辑内容提取」按钮安全吗?为什么点了一下配置就被改了?
在 3.20.0 及之前的版本,点击该按钮会立即调用 setCommonConfigSnippet 持久化并触发 sync_current_provider_for_app,静默全量覆写 ~/.codex/config.toml,并非纯前端预览。v4.0 已移除该按钮,保存片段只写数据库,不再触碰磁盘 live 文件。
Codex 桌面版的「Show in menu bar」(mac-menu-bar-enabled = false)切换供应商后又被打开了,如何避免?
这是 [desktop] 表被供应商快照覆盖所致,且共享配置片段按供应商 opt-in,第三方与官方供应商往往未启用导致双向丢失。升级到 v4.0 即可:切换只改关键字段,[desktop] 等应用级设置原样保留。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。