问题背景
想必佬们在使用 Codex 时,偶尔会遇到 resume 找不到很久以前会话的情况。
一种常见原因是 pwd 不一致,也就是当前工作目录与之前启动 Codex 时的工作目录不同。这个问题不在本文讨论范围内 通常可以用 VS Code 打开 ~/.codex/sessions,搜索关键字找到历史会话,文件第一行会记录 session_id。
Provider 变更导致的恢复问题
如果佬们经常使用中转站,可能一天内会切换多个 API Provider。修改 config.toml 中的 Provider 后,resume 很可能不再显示此前使用其他 Provider 的会话 即使强制执行 codex resume,也可能出现如下错误:
你会发现,会话仍然尝试使用旧的 Provider,而不是跟随当前的 config.toml。这是因为 OpenAI 在会话历史的 JSONL 文件和 SQLite 数据库中记录了创建会话时的 provider_id。
TUI 恢复历史会话时,如果 config.toml 中已经删除或修改了旧 Provider,Codex 就可能因为找不到配置,或者使用旧 Provider 搭配错误的 API Key 而报错。
修复工具
这里分享一个一键修复的 Python 脚本和快捷命令配置。它能够自动备份并同步修改 JSONL 会话日志与 SQLite 数据库:
fix-codex-session.zip (2.3 KB)
参数说明
通常只需输入会话 ID,其他参数均有默认行为:
<session_id>(必填):要修复的会话 ID,支持模糊匹配,输入末尾几位即可。-n/--new-provider(选填):指定新 Provider;未提供时,自动读取当前config.toml中正在使用的model_provider。-o/--old-provider(选填):指定要替换的旧 Provider;未提供时,自动分析会话日志第一行。--no-backup(选填):跳过备份;默认会在同级目录生成.jsonl.bak和state_5.sqlite.bak备份文件。
配置快捷命令
为了在终端的任意目录中直接调用脚本,可以配置快捷命令。
Windows(PowerShell)
- 在 PowerShell 中打开配置文件:
notepad $PROFILE
- 将以下函数写入配置文件并保存:
# Codex session fix utility
function fix-codex-session {
python "$HOME\.codex\fix_session.py" @args
}
- 重新加载配置:
. $PROFILE
- 之后即可在任意路径运行:
fix-codex-session <session_id>
Linux
在终端执行以下命令,将别名写入 ~/.bashrc 并重新加载:
echo 'alias fix-codex-session="python3 ~/.codex/fix_session.py"' >> ~/.bashrc
source ~/.bashrc
之后同样可以全局调用:
fix-codex-session <session_id>


