Codex 会话记录显示为空白,通常是因为 model_provider 配置与历史会话文件中的 provider 字段不一致,从而触发了系统过滤机制。解决思路很明确:先确认 ~/.codex/sessions/ 目录下的 .jsonl 会话文件确实存在,再检查 config.toml 与会话文件里的 provider 是否一致,最后通过工具或手动方式统一 provider,并重建会话索引。

如果你发现 Codex 中的历史会话记录一片空白,通常并不是“聊天记录丢失”了,而是当前配置的 model_provider 与旧会话文件中保存的 provider 字段不匹配。只要两者不一致,Codex 就会主动将这些历史会话过滤掉,因此界面上看不到任何内容。实际上,本地 ~/.codex/sessions/ 目录中的 .jsonl 文件通常仍然完整存在,文件数量也没有减少,只是没有被正常展示出来。
确认会话文件是否真实存在
先打开终端,执行以下命令:
ls ~/.codex/sessions/ | head -n 5
如果输出中能看到一批 rollout-*.jsonl 文件,说明 Codex 会话数据仍然存在且未丢失。若终端提示 No such file or directory,那么问题就不是 provider 不匹配,而更可能是会话目录异常、路径错误或权限设置有问题。
【必须先确认这一步】 否则后续关于 provider 修复和索引重建的操作,都可能建立在错误判断之上。
检查当前 model_provider 配置
使用编辑器打开 ~/.codex/config.toml,找到 model_provider = "xxx" 这一行配置。
然后任选 sessions 目录下的一个 .jsonl 文件(例如最近生成的会话文件),通过 cat 或 code 命令打开,并搜索其中的 "provider" 字段:
cat ~/.codex/sessions/2026/*/rollout-*.jsonl | head -n 10 | grep provider
你通常会看到类似 {"provider":"openai"} 或 {"provider":"custom"} 这样的元数据内容。如果当前配置中的 model_provider 与这里的 provider 值不同,那么这就是 Codex 会话列表空白的根本原因。
一键修复 provider 元数据(推荐)
方法一:使用 codex-provider-sync 工具(更推荐,处理更稳妥)
1. 先执行安装:npm install -g codex-provider-sync
2. 然后运行同步命令:codex-provider-sync --fix-all
3. 当看到输出 Done syncing provider metadata. 后,务必完整退出 Codex Desktop,或者直接结束所有 codex 相关进程(ps aux | grep codex → kill -9 PID)
4. 最后重新启动 Codex,等待会话重新加载
方法二:手动批量替换(仅适合熟悉 sed 命令的用户)
cd ~/.codex/sessions && find . -name "*.jsonl" -exec sed -i 's/"provider":"[^"]*"/"provider":"your_current_provider"/g' {} +
⚠️ 注意:在 Linux 和 macOS 中,sed -i 的写法并不完全相同。macOS 必须写成 sed -i '',否则可能导致文件修改失败,甚至损坏原文件。
强制重建会话索引
第一步:删除旧的索引文件
rm ~/.codex/session_index.jsonl ~/.codex/history.jsonl
第二步:触发 Codex 自动重建索引
运行 codex --list-sessions —— 该命令会强制扫描 sessions/ 目录并重新生成索引。即使当前 provider 存在不匹配,部分版本也会尝试进行加载,或提供一定的兼容处理。
第三步:验证修复结果
执行 codex resume,查看是否已经列出历史会话 ID。如果能够正常显示,说明会话索引已经重建成功;如果仍然为空,请返回上一步,重新确认 provider 是否已经真正统一。
