Codex provider 写回会重置 live UI settings from config.toml - cc-switch
Quick fix
升级到 cc-switch v4.0:切换供应商只改地址、Key、模型、协议几个关键字段,不再整份覆盖 ~/.codex/config.toml,其余配置原样保留。
Symptom
Section titled “Symptom”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 已通过预设重做解决)。
升级到 cc-switch v4.0 或更高版本。v4.0 重写了配置写入方式:切换供应商、开关路由、重启 CC Switch 时只替换地址、Key、模型、协议这几个关键字段,其余内容(插件、主题、[projects]、MCP、注释等)原样保留,也不再用旧快照或备份整份覆盖配置文件;「从编辑内容提取」按钮已被移除,保存通用配置片段只写数据库,不再覆写 ~/.codex/config.toml。
升级后如曾丢失配置,可从首次启动 cc-switch 时导入的默认供应商卡片中找回当时的原始配置,再从本地旧备份(如有 ~/.codex/config.toml 的旧副本)手动合并被抹掉的字段(如 [desktop] mac-menu-bar-enabled = false、[hooks.state] 等)。
若暂时无法升级、仍停留在 v3.x:把需要跨供应商保留的内容放入「共享配置片段」(编辑供应商 → 共享配置面板 → 从当前供应商提取),并确认所有供应商的 commonConfigEnabled 均已启用;注意此方式对 [hooks.state]、Codex 升级后新增的字段覆盖不全,且不要在通用配置弹窗里随意点「从编辑内容提取」(3.20.0 中该按钮会静默覆写 live 文件)。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 7 个真实 issue
- #3695Codex provider 写回会重置 live UI settings from config.toml
- #3700Codex provider 写回会重置 live UI settings from config.toml
- #4332mimo模型适配问题,peizhi
- #5770Codex config.toml is fully overwritten when switching providers, causing hooks.state trust data to be lost
- #6400bug(codex): provider switch drops [desktop] mac-menu-bar-enabled = false
- #6875[Bug] 切换/启用 Codex Provider 时全量覆盖 config.toml 与 auth.json,导致外部新增配置与 Token 丢失且无物理文件备份
- #6879[Bug] Codex/Claude/Gemini 在通用配置弹窗中点击「从编辑内容提取」会直接持久化并静默覆写本地 live 配置文件
- 切换供应商后 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。本站不分发任何软件。