Codex Thread Reader is a read-only Windows WPF tool for recovering and exporting local Codex Desktop threads, including threads that no longer appear in the Codex Desktop sidebar or search.
By default the app reads:
%USERPROFILE%\.codex\state_5.sqlite%USERPROFILE%\.codex\session_index.jsonl%USERPROFILE%\.codex\sessions\**\rollout-*.jsonl%USERPROFILE%\.codex\archived_sessions\**\rollout-*.jsonl
It does not write to .codex, repair Codex state, or call Codex APIs.
- Enumerates active, archived, hidden, and rollout-only threads.
- Groups threads by Codex project label, then Active/Archived state, with anchored threads sorted first inside their project.
- Searches thread metadata immediately and scans rollout transcript content in the background for slower full-thread matches.
- Shows recovery flags such as
Anchored,Archived,MissingFromSessionIndex,ExtendedPath,RolloutOnly,DbOnlyMissingFile, andLargeRollout. - Lets you persistently anchor a thread ID at the top of the list even when Codex Desktop cannot show it.
- Resolves sidebar titles from Codex's session index or rollout title events before falling back to compacted SQLite text.
- Supports System, Light, and Dark theme modes.
- Renders conversation messages as Markdown in the chat preview while keeping tool output as plain monospace text.
- Pages the chat preview with per-page message navigation so long rollouts remain scrollable and precise.
- Streams rollout JSONL so very large thread files are not loaded as raw text.
- Exports selected threads as:
thread.htmlthread.normalized.jsonthread.raw.jsonlhandoff.md
- Copies the handoff prompt to the clipboard after export.
dotnet test .\CodexThreadReader.slnx
dotnet publish .\src\CodexThreadReader\CodexThreadReader.csproj -c Release -r win-x64 --self-contained false /p:PublishSingleFile=true -o .\publishRun:
.\publish\CodexThreadReader.exeThread exports contain private conversation content, local paths, command output, and potentially secrets. The repository .gitignore excludes JSONL, SQLite, export folders, and .codex data. Do not commit generated exports.