Codex Desktop sidebar shows no Projects or Recent tasks after update
Environment
- Codex Desktop:
26.721.3404.0 - Codex App Server:
0.146.0-alpha.3 - OS: Windows
- Host: local
- Authentication: API key
Description
After updating Codex Desktop, the left sidebar is permanently empty:
- Projects shows "No projects"
- Recent shows "No tasks"
The underlying projects and threads still exist. The project selector in the new-task composer lists all saved projects, and the backend thread API can list both current and historical threads. Newly created tasks also do not appear in the sidebar.
This appears to be a regression in the desktop app's local thread catalog synchronization rather than data loss.
Steps to reproduce
- Launch Codex Desktop
26.721.3404.0with an existing local thread history. - Observe that the left sidebar shows no Projects and no Recent tasks.
- Create a new task and select an existing project in the composer.
- Send one or more user messages.
- Return to the sidebar.
Expected behavior
- Saved projects that contain tasks appear under Projects.
- The new task and existing unarchived tasks appear under Recent.
Actual behavior
- The project selector correctly lists 7 saved projects.
- The backend task list correctly returns current and historical tasks.
- The sidebar still shows no Projects and no Recent tasks.
- New tasks remain absent after restart.
Diagnostics
The primary state database is intact:
- Database:
%USERPROFILE%\.codex\state_5.sqlite PRAGMA integrity_check:ok- 125 total thread rows
- 92 unarchived thread rows
- 33 archived thread rows
- 90 unarchived rows have
has_user_event = 1 - 2 newly created unarchived rows have
has_user_event = 0despite containing user messages
The desktop sidebar catalog is not being populated:
- Database:
%USERPROFILE%\.codex\sqlite\codex-dev.db local_thread_catalog: 0 rowslocal_thread_catalog_metadata.catalog_revision: 0local_thread_catalog_sync_state.initial_build_complete: 0local_thread_catalog_sync_state.watermark_updated_at:NULLlocal_thread_catalog_sync_state.last_full_reconciled_at:NULLlocal_thread_catalog_sync_state.observation_sequenceincreases when thread events occur, but no catalog rows are inserted
A no-op title update on the current task increased observation_sequence from 4 to 5 while local_thread_catalog remained at 0 rows.
Desktop logs show successful thread/list responses with no error code. No Thread catalog sync failed log entry is emitted.
Workarounds attempted
The following did not resolve the issue:
- Fully exit Codex, back up and rebuild Electron caches and
codex-dev.db, then restart. - Back up
state_5.sqliteand sethas_user_event = 1only for threads confirmed to contain user messages. - Wait for the catalog's cold-start/background synchronization and restart multiple times.
- Trigger a thread metadata event by writing the current title back unchanged.
After rebuilding codex-dev.db, the catalog remains empty and initial_build_complete never changes to 1.
Additional context
Before the rebuild, a backup of codex-dev.db contained only 2 stale local_thread_catalog rows even though the primary state database contained many valid unarchived threads. This suggests the full catalog scan was already incomplete before the catalog was rebuilt.
Because Projects in the sidebar appear to be derived from cataloged thread working directories, the empty catalog explains both symptoms: the composer can select saved projects, but the sidebar displays neither projects nor recent tasks.
No thread/session files were deleted, and the primary database remains readable and internally consistent.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
+1
I reproduced a closely related Windows project/sidebar state failure on a newer desktop build.
Unlike the original report, Recent was not completely empty in my case. Instead, all 13 local projects disappeared and their conversations were redistributed into Recent after an update/reboot. The conversations themselves were not deleted.
Environment
OpenAI.Codex_26.721.4979.0_x64__2p2nqsd0c76g026.721.410590.146.0-alpha.3.1Preserved data
state_5.sqlite: 108 threadsthread/listrequests completed successfullyMigration inconsistency
The strongest evidence comes from a backup created during the first occurrence, before any recovery script modified the state.
The global state listed these migrations as completed:
2026-07-13-local-projects2026-07-14-repair-metadata-local-projectsHowever:
local-projectswas emptyselected-projectwas absentThis suggests that the local-project migration was marked complete even though its resulting project registry was empty.
Catalog rebuild did not restore the projects
During the later occurrence, I reconstructed:
I also rebuilt the Desktop catalog.
local_thread_catalogincreased from 7 to 63 rows andinitial_build_completebecame1, but the Desktop still exposed zero local projects.Therefore, in this case, rebuilding
codex-dev.dbalone was not sufficient.State that restored the sidebar
With Codex Desktop fully closed, the projects reappeared only after repairing the following hydration metadata:
local-projects[projectId].rootPathsfrom its existingproject-writable-rootsactive-workspace-rootsfrom a string to an arrayselected-projectusing the matching local project UUIDAfter this repair, all 13 projects immediately reappeared and their conversations were grouped under the correct projects again.
This appears to be a synchronization or migration failure between:
state_5.sqlitesqlite/codex-dev.db/local_thread_cataloglocal-projectsrootPathsthread-project-assignmentsselected-projectThe migration completion markers may prevent automatic retry or self-repair when the resulting project state is empty or incomplete.
One caveat: an intermediate local recovery script used during the second investigation also omitted
rootPaths, so I am not claiming that every field in the later intermediate snapshot was produced exclusively by Codex. The pristine first-occurrence backup—wherelocal-projectswas empty while both project migrations were marked complete—is the strongest evidence of the application-side migration problem.I can provide sanitized state-key diffs and startup-log excerpts if useful. I am not attaching the raw state files or logs because they contain local paths and conversation metadata.
This issue is reproducible on another current Windows installation. A newly created user chat disappears from Recent, its project, and Search after a normal Codex restart, even though the conversation remains intact in the core database, session index, and rollout file.
This is additional evidence related to #21128, but the new-chat behavior cannot be explained by the global recent-50 limit because the affected chat is the newest interactive thread.
Environment
OpenAI.Codex 26.721.11231.026200.8973CODEX_HOME:%USERPROFILE%\.codexReproduction
Read-only diagnostic result
Core storage remains healthy:
Desktop local catalog state:
The newest affected interactive thread (ID redacted):
Across all 10 active interactive threads:
session_index.jsonl;local_thread_catalog;has_user_event = 0.The global project state is also still populated:
Interpretation
The new conversation is persisted correctly by the core thread store, but the Desktop local-thread catalog never completes its initial build or reconciliation. The catalog receives observations (
observation_sequence = 51) while remaining at one row with no watermark or completed reconciliation timestamp.The unexpected
has_user_event = 0on every real interactive thread may also explain why the catalog excludes them, but that is an inference rather than a confirmed cause.Expected behavior
local_thread_catalogshould complete its initial build and contain active interactive threads.state_5.sqliteand rollout files.No raw databases, transcript content, authentication files, thread IDs, project names, or local paths are included publicly. Redacted diagnostic fields can be provided if maintainers specify what is needed.