Codex++ 插件市场修复失败:config.toml TOML parse failed 的解决方法

摘要:本文详细介绍了 Codex++ 插件市场修复失败并提示 config.toml TOML parse failed 错误的完整解决方案。文章分析了常见的 TOML 语法错误原因(如重复定义配置段、JSON 格式误用、Windows 路径转义错误等),提供了一键修复的 PowerShell 脚本,并指导用户如何验证配置问题、安全恢复原有配置,最终确保插件市场功能恢复正常。

一、问题现象

在 Windows 上使用 Codex++ 时,点击“插件市场修复”或“一键修复”后,出现以下报错:

插件市场修复失败:config.toml TOML parse failed

有时还会伴随以下现象:

  • Codex++ 可以打开,但插件市场无法注册;
  • “工具与插件”页面无法正常使用;
  • Codex 启动后长时间停留在 Logo 页面;
  • 重启 Codex++ 后问题依旧;
  • 本地插件目录存在,但配置状态显示“未注册”。

此时通常不是插件目录本身损坏,而是 Codex 的配置文件:

C:\Users\<你的用户名>\.codex\config.toml

存在 TOML 语法错误,导致 Codex++ 无法读取和修改配置。


二、问题原因

config.toml 是 Codex 使用的 TOML 配置文件。

常见错误包括:

1. 重复定义配置段

例如:

[mcp_servers.test]
command = "node"

[mcp_servers.test]
command = "python"

同一个配置段不能重复声明。

2. 把 JSON 内容直接写进 TOML

错误示例:

{
  "model": "deepseek-v4-flash"
}

正确的 TOML 写法应为:

model = "deepseek-v4-flash"

3. Windows 路径中的反斜杠转义错误

可能出错的写法:

command = "C:\Users\23670\test.exe"

推荐改成:

command = "C:/Users/23670/test.exe"

或者使用 TOML 单引号字符串:

command = 'C:\Users\23670\test.exe'

4. 字符串缺少引号

错误:

base_url = https://api.example.com/v1

正确:

base_url = "https://api.example.com/v1"

5. 手动修改配置时漏写括号、引号或换行格式错误

只要 config.toml 中有一处语法错误,Codex++ 就可能无法继续注册插件市场。


三、解决思路

处理流程如下:

  1. 关闭 Codex 和 Codex++;
  2. 备份原来的 config.toml
  3. 将损坏配置移走;
  4. 创建一个最小且合法的 TOML 配置;
  5. 重新启动 Codex++;
  6. 再次执行插件市场修复;
  7. 修复成功后,逐段恢复原配置。

这样既能恢复 Codex++,也不会直接丢失原有配置。


四、一键修复 PowerShell 脚本

打开 Windows PowerShell,复制并执行以下完整脚本:

$CodexHome = "$env:USERPROFILE\.codex"
$Config = Join-Path $CodexHome "config.toml"
$Stamp = Get-Date -Format "yyyyMMdd-HHmmss"

# 1. 关闭 Codex 和 Codex++
Get-Process -ErrorAction SilentlyContinue |
Where-Object {
    $_.ProcessName -match "Codex|codex-plus-plus"
} |
Stop-Process -Force -ErrorAction SilentlyContinue

Start-Sleep -Seconds 2

# 2. 确保 .codex 目录存在
New-Item -ItemType Directory -Path $CodexHome -Force | Out-Null

# 3. 备份并移走损坏的配置
if (Test-Path $Config) {
    $Backup = Join-Path $CodexHome "config.toml.bad-$Stamp"
    Move-Item -Path $Config -Destination $Backup -Force
    Write-Host "旧配置已备份到:" $Backup -ForegroundColor Yellow
}

# 4. 创建最小、合法、无 BOM 的 TOML 文件
$Utf8NoBom = New-Object System.Text.UTF8Encoding($false)

[System.IO.File]::WriteAllText(
    $Config,
    "# Temporary clean Codex configuration`r`n",
    $Utf8NoBom
)

Write-Host "`n当前配置内容:" -ForegroundColor Green
Get-Content $Config

Write-Host "`n配置文件信息:" -ForegroundColor Green
Get-Item $Config |
Select-Object FullName, Length, LastWriteTime

执行成功后,会生成新的配置文件:

C:\Users\<你的用户名>\.codex\config.toml

其内容只有:

# Temporary clean Codex configuration

这是一份合法的最小 TOML 配置。

原来的配置不会被删除,而是备份为类似:

config.toml.bad-20260729-225000

五、重新启动并修复插件市场

完成上面的 PowerShell 操作后:

  1. 重新启动 Codex++;
  2. 打开“关于”页面;
  3. 再次点击“插件市场修复”或“一键修复”;
  4. 等待修复完成;
  5. 点击“重启 Codex++”;
  6. 打开“工具与插件”,检查插件市场是否恢复。

如果不再出现:

config.toml TOML parse failed

说明配置文件问题已经解决。


六、如何验证问题是否来自 config.toml

若系统已安装 Python 3.11 或更高版本,可以使用内置的 tomllib 检查 TOML 语法。

在 PowerShell 中执行:

@'
import pathlib
import tomllib

path = pathlib.Path.home() / ".codex" / "config.toml"

try:
    with path.open("rb") as f:
        tomllib.load(f)
    print("config.toml 语法正常")
except Exception as e:
    print("config.toml 语法错误:")
    print(e)
'@ | py -

如果配置有问题,通常会显示:

Invalid value at line xx, column xx

或者:

Cannot declare (...) twice

根据提示的行号检查原配置即可。


七、恢复原有模型或 MCP 配置

修复成功后,不建议直接把整个备份文件覆盖回去,否则原来的 TOML 错误也会一起恢复。

建议使用记事本或 VS Code 打开备份文件:

notepad "$env:USERPROFILE\.codex\config.toml.bad-时间"

然后逐段复制以下配置到新的 config.toml

  • 模型名称;
  • 模型供应商;
  • API Base URL;
  • MCP 服务;
  • 项目信任配置;
  • 其他自定义选项。

每恢复一部分,就重启一次 Codex++ 验证。

这样可以快速定位到底是哪一段配置有问题。


八、不要直接删除整个 .codex 目录

不建议执行:

Remove-Item "$env:USERPROFILE\.codex" -Recurse -Force

因为 .codex 目录中可能还包含:

  • 用户配置;
  • 模型供应商信息;
  • MCP 配置;
  • 会话相关数据;
  • 插件市场信息;
  • 其他 Codex 本地状态。

本次问题只需要处理:

C:\Users\<你的用户名>\.codex\config.toml

即可。


九、最终结论

当 Codex++ 出现:

插件市场修复失败:config.toml TOML parse failed

并且 Codex 长时间停留在启动 Logo 页面时,应优先检查:

%USERPROFILE%\.codex\config.toml

最稳妥的处理方式是:

关闭进程
→ 备份损坏配置
→ 创建最小合法配置
→ 重启 Codex++
→ 修复插件市场
→ 逐段恢复旧配置

本次实际问题通过重置 config.toml 后已成功解决。

更多推荐