Mac app hides older local conversations after update because bogus root-level `status` sessions flood recent local history
What version of the Codex App are you using (From “About Codex” dialog)?
26.415.30602 (1773)
What subscription do you have?
Pro
What platform is your computer?
Darwin 25.4.0 arm64 arm
What issue are you seeing?
After updating and/or relaunching the Codex Mac app, all older local conversations disappeared from the sidebar. Only cloud conversations were visible, plus the new conversation I started to investigate this issue. This new conversation persisted across all restarts while investigating.
The local data was not deleted. The older conversations were still present on disk in ~/.codex/sessions, and they also existed in ~/.codex/state_5.sqlite.
What appears to be happening is:
- At some point the app created a large number of bogus local sessions with:
source='cli'cwd='/'first_user_message/ title values likestatus,atus,tus,us,s,status/status,us/status- In my case there were about
100of these bogus root-level sessions. - They were newer than my real local conversations, with timestamps from April 16-17, 2026.
- I had not been using the Codex CLI recently, so these do not seem to correspond to intentional CLI usage.
- The app appears to only load a recent subset of local conversations. I saw telemetry/log evidence of
thread_count_loaded_recent=50, and because the bogus sessions occupied that recent window, the real local conversations were pushed out of view. - The app also logged warnings like
No cwd found for local task conversationId=...for those bogus thread IDs.
Things that did not fix it:
- Restarting the app
- Clearing app-side cache/storage
- Rebuilding or deleting
state_5.sqlite - Rebuilding or deleting
session_index.jsonl(when present) - Archiving the bogus rows in
state_5.sqliteonly
DB-only fixes were not durable because on relaunch the app re-imported the bogus sessions from ~/.codex/sessions.
Workaround that worked
- Back up
~/.codex/state_5.sqlite. - Identify the bogus rollout JSONL files under
~/.codex/sessions/...that correspond to the root-levelstatus/atus/tus/us/ssessions. - Move those bogus rollout files out of
~/.codex/sessionsto a backup/quarantine folder. - Mark the matching rows in
~/.codex/state_5.sqliteas archived. - Relaunch the app.
After removing those bogus rollout files and re-archiving the matching DB rows, the older local conversations reappeared.
What steps can reproduce the bug?
- Start with an existing Codex Mac app setup that already has many local conversations stored in
~/.codex/sessions. - Update the Codex Mac app.
- Quit and relaunch the app.
- Open the sidebar and compare local history.
- Observe that older local conversations are missing, while cloud conversations and the current/new local conversation still appear.
- Inspect
~/.codex/state_5.sqliteafter relaunch. - Observe many newly created local rows with
source='cli',cwd='/', and titles / first messages likestatus,atus,tus,us,s.
Manual reproduction attempt
If the above doesn't repro, the symptom can likely be reproduced by seeding bogus local session rollouts and relaunching Codex:
- Start with a Codex Mac app profile that already has real local conversations in
~/.codex/sessions. - Add at least
50newer bogus rollout files under~/.codex/sessions/...that look like local CLI/TUI sessions with:
source="cli"originator="codex-tui"cwd="/"- user message / title values like
status,atus,tus,us, ors
- Remove or rebuild
~/.codex/state_5.sqliteso the app re-imports session history from~/.codex/sessions. - Relaunch Codex.
- Observe that older real local conversations disappear from the sidebar, while newer cloud/current conversations still appear.
What is the expected behavior?
Existing local conversations should still appear in the sidebar after updating and relaunching the Mac app. The app should not generate bogus root-level status sessions that displace real local conversation history.
Additional information
_No response_
12 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
+1
Hi,
Could you share with me a few of those bogus sessions file please?
You can send them on
jif@openai.comto make things easierIn the meantime we will make sure the rest get fixed
@jif-oai I just sent the bogus session files via email.
As I mentioned in my email, I noticed this issue happened again today when I tried to prepare the session files for you.
For this recurrence I found 359 bogus local session files under ~/.codex/sessions. They consistently looked like:
Recovery this time was just:
That restored the missing local chats. I did not need to modify the SQLite database like I did last time.
Possible lead: CodexBar may be generating these bogus local
statussessions.I can’t prove that yet, but this is why I suspect it:
source="cli"/originator="codex-tui"are unlikely to be from me directly runningcodex.~/.codex/sessionshadcwd="/"and first-user-message values likestatus,atus,tus,us,s.launchAtLogin=1,refreshFrequency=fiveMinutes, andselectedMenuProvider=codex.codexand send/status:So CodexBar seems like a plausible way these local CLI-style
statussessions could be created in the background.That said, I do not think this fully explains the user-visible failure by itself, because moving the bogus session files out of
~/.codex/sessionsand restarting Codex was enough to restore my missing local chats. So even if CodexBar is the trigger, Codex desktop still seems involved in how those bogus sessions are imported/rendered and end up hiding real local chats.Version note: on April 20, 2026 I updated CodexBar twice (
0.21and then0.22). I don’t know which version originally created the bad sessions, but it was likely older than0.21.I'll post an update here if it happens again (while CodexBar is version
0.22or later).+1, exact same issue. My real threads were still present in ~/.codex/state_5.sqlite, but the Desktop sidebar was effectively replaced by bogus local sessions with titles like status, atus, tus, us, and s, often with cwd='/' and empty git metadata. The app kept re-importing them from ~/.codex/sessions, so simple DB cleanup did not hold across restarts.
What finally fixed it for me was the workaround described here: quit Codex Desktop, quarantine the matching bogus rollout .jsonl files from ~/.codex/sessions, archive the exact matching bogus rows in state_5.sqlite, then relaunch. After that, my real projects and threads came back.
I also use the CodexBar, in case that helps narrow down the trigger or code path.
I hit a very similar issue on macOS, with one extra detail: it happened live while Codex was open, not only after restart/update.
Environment:
What happened:
No chats.Local data was still present:
I also had Chronicle enabled, so I have screen-history evidence:
No chatsfor most projects while Codex was still open.~/.codex.I tried restarting Codex, checkpointing SQLite WAL files, and rebuilding
thread-workspace-root-hintsin~/.codex/.codex-global-state.json; the sidebar did not recover.This looks like the Desktop sidebar/index losing project chat associations even though the local thread/session data remains intact.
Update after further local investigation: my current recurrence looks like the same general sidebar/index failure class, but in my case the flood is mostly Symphony-generated Codex threads rather than
statussessions.Additional local evidence:
What I found:
state_5.sqlitehas ~209 thread rows and~/.codex/sessionshas ~206 rollout files.No chatsaround Apr 28, 2026 11:39 PM HST.codex ... app-serverprocesses were running and holding~/.codex/state_5.sqliteopen.Closest related issue I found is #17304. The overlap is that temporary/derived/non-human sessions can dominate or confuse Desktop project sidebar grouping even while real local session data still exists. My variant seems to be: Symphony-created Codex threads are persisted into the same thread store as human sessions, and then the project sidebar/index or workspace-root hints get rebuilt incorrectly under that load/concurrency.
So I would refine the hypothesis here from “sessions are gone” to: Desktop is mixing automation-generated threads with human-visible conversations in a way that can corrupt or starve the project sidebar grouping/index.
Will this be fixed anytime soon? have multiple dozen of chats no longer showing in the codex desktop app after this update every though they actually exist...
same issue here
I can confirm the same failure mode on another macOS machine, and the local evidence points to CodexBar as a likely trigger.
Local shape of the bogus sessions:
The matching rollout JSONL files looked like CLI sessions started only for a status-like prompt:
source="cli",cwd="/", and a first user message such asstatus,atus,tus,us, ors. They then occupied the Desktop sidebar's recent/local history window and hid older real conversations even though the real threads were still present instate_5.sqlite.In this case, the safest workaround was not to edit SQLite directly. This worked:
status/atus/tus/us/ssessions appear.After manually archiving the bogus sessions, the previously missing older conversations immediately reappeared in the sidebar.
This UI-based archive path seems safer for users than directly editing
~/.codex/state_5.sqlite, because it uses Codex Desktop's own archive operation and avoids touching rollout files. If the bogus sessions are re-imported after restart, then the stronger workaround mentioned above in this issue may still be needed: quarantine the matching bogus rollout.jsonlfiles from~/.codex/sessionsand archive the exact matching DB rows.I also opened a matching CodexBar issue here: https://github.com/steipete/CodexBar/issues/953
Adding another data point from Codex Desktop on macOS, observed on 2026-06-23.
Symptoms:
No cwd found for local task conversationId=..., growing by MBs over short windows.~/.codex/logs_2.sqlitedid stop the diagnostic log DB from growing, but did not fix the UI freezing. So this appears to be a separate local-thread/history issue.Local state evidence from
~/.codex/state_5.sqlite:archived=0 AND source='cli' AND cwd='/' AND has_user_event=0.status:status,atus,tus,us,s.No cwd foundwarning pattern.Local mitigation that stopped the freeze/log loop:
source='cli' AND cwd='/' AND has_user_event=0rows.No cwd foundspam stopped, log growth dropped from MB bursts to tiny normal increments, and CPU settled.I would not recommend this SQLite trigger/guard as a real user-facing fix, but it points to possible upstream fixes:
statusfragment sessions during import/backfill.thread/listskip or repair local tasks with no resolvable cwd instead of repeatedly logging them.No cwd foundwarning so one bad history cluster cannot freeze the UI.repair local historycommand for this class of local-state corruption.Happy to provide more sanitized query output if useful.