用途:查找与探索 OpenAI Codex CLI 保存在本地的对话历史。Codex CLI 将会话以 JSONL rollout 文件存放在 $CODEX_ROOT(默认 $HOME/.codex)下,rollout 是权威数据,SQLite 只是可重建缓存。
主要能力:列出最近会话(可走 state_5.sqlite 的 threads 索引,或纯文件系统方式);用 rg 或 history.jsonl 按关键词搜索全部会话;把逻辑会话解析到当前 rollout 路径;将转录导出为 Markdown;用 codex resume、codex exec resume、codex fork、codex archive、codex unarchive、codex delete 恢复、分叉与管理会话。
存储位置:$CODEX_ROOT/sessions/YYYY/MM/DD/rollout-<ts>-<uuid>.jsonl 为完整转录;archived_sessions/ 为归档;state_5.sqlite 的 threads 表存元数据索引;thread_history_1.sqlite 为可重建投影;queue_1.sqlite 存待提交内容;history.jsonl 记录用户输入提示;session_index.jsonl 存线程名;config.toml 的 [history] persistence 控制是否保存。rollout 可能被 zstd 压缩为 .jsonl.zst,需 zstdgrep 或 zstdcat 处理。
用法要点:设置 CODEX_ROOT="${CODEX_HOME:-$HOME/.codex}"、CODEX_DB_ROOT="${CODEX_SQLITE_HOME:-$CODEX_ROOT}"。列表查询示例:sqlite3 -separator ' | ' "$CODEX_DB_ROOT/state_5.sqlite" "SELECT datetime(updated_at,'unixepoch','localtime'), substr(id,1,13), cwd FROM threads WHERE archived=0 ORDER BY updated_at DESC LIMIT 20;"。搜索示例:rg -l --glob 'rollout-*.jsonl' 'KEYWORD' "$CODEX_ROOT/sessions" "$CODEX_ROOT/archived_sessions"。恢复示例:codex resume <SESSION_ID>、codex exec resume <SESSION_ID> "prompt"、codex fork <SESSION_ID>。
限制与注意:history.jsonl 可能长期不再追加,codex exec 从不写入它,若其 mtime 早于最新 rollout 应改用 rg 或 threads.first_user_message。response_item 中的 user/developer 消息含 harness 注入,构建转录时应优先 event_msg/user_message 或 item_completed/UserMessage。当前分页文件用 item_completed,旧文件用 user_message/agent_message;桌面 alpha 语料存在畸形拆分记录,导出前需预检,不要用 fromjson? 静默掩盖失败。会话不会自动删除,归档与删除均为手动操作。codex exec --ephemeral 不产生任何持久化 rollout。codex migrate-rollouts 默认 dry-run,需 --apply 才改写。文件名时间戳为本地时间,文件内时间戳为 UTC。资料基于 codex-cli 0.153.4 验证。