Codex Desktop sidebar shows no Projects or Recent tasks after update

Open 💬 4 comments Opened Jul 24, 2026 by 951286182
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

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

  1. Launch Codex Desktop 26.721.3404.0 with an existing local thread history.
  2. Observe that the left sidebar shows no Projects and no Recent tasks.
  3. Create a new task and select an existing project in the composer.
  4. Send one or more user messages.
  5. 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 = 0 despite containing user messages

The desktop sidebar catalog is not being populated:

  • Database: %USERPROFILE%\.codex\sqlite\codex-dev.db
  • local_thread_catalog: 0 rows
  • local_thread_catalog_metadata.catalog_revision: 0
  • local_thread_catalog_sync_state.initial_build_complete: 0
  • local_thread_catalog_sync_state.watermark_updated_at: NULL
  • local_thread_catalog_sync_state.last_full_reconciled_at: NULL
  • local_thread_catalog_sync_state.observation_sequence increases 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:

  1. Fully exit Codex, back up and rebuild Electron caches and codex-dev.db, then restart.
  2. Back up state_5.sqlite and set has_user_event = 1 only for threads confirmed to contain user messages.
  3. Wait for the catalog's cold-start/background synchronization and restart multiple times.
  4. 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.

View original on GitHub ↗

4 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #34076
  • #35087

Powered by Codex Action

shun1249844726 · 1 month ago

+1

okhs0712 · 1 month ago

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

  • Windows 11 x64
  • Installed package: OpenAI.Codex_26.721.4979.0_x64__2p2nqsd0c76g0
  • UI release reported in Desktop logs: 26.721.41059
  • Bundled app-server: 0.146.0-alpha.3.1

Preserved data

  • state_5.sqlite: 108 threads
  • Active: 100
  • Archived: 8
  • Session and rollout files were intact
  • thread/list requests completed successfully
  • The global-state file persisted unchanged across launches

Migration 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-projects
  • 2026-07-14-repair-metadata-local-projects

However:

  • local-projects was empty
  • the active workspace path still existed
  • selected-project was absent

This 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:

  • 13 UUID-based local projects
  • 78 local thread-to-project assignments
  • 28 active projectless threads

I also rebuilt the Desktop catalog. local_thread_catalog increased from 7 to 63 rows and initial_build_complete became 1, but the Desktop still exposed zero local projects.

Therefore, in this case, rebuilding codex-dev.db alone was not sufficient.

State that restored the sidebar

With Codex Desktop fully closed, the projects reappeared only after repairing the following hydration metadata:

  1. Populate each local-projects[projectId].rootPaths from its existing project-writable-roots
  2. Normalize active-workspace-roots from a string to an array
  3. Restore selected-project using the matching local project UUID
  4. Reopen Codex Desktop

After 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.sqlite
  • sqlite/codex-dev.db / local_thread_catalog
  • local-projects
  • rootPaths
  • thread-project-assignments
  • selected-project

The 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—where local-projects was 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.

moayadstar · 25 days ago

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

  • Codex Desktop package: OpenAI.Codex 26.721.11231.0
  • Windows 11 Pro 25H2 x64
  • OS build: 26200.8973
  • Effective CODEX_HOME: %USERPROFILE%\.codex

Reproduction

  1. Create and use a new local Codex chat.
  2. Confirm that it is visible during the current app session.
  3. Exit Codex normally and reopen it.
  4. The new chat is absent from Recent, its project, and Search.
  5. Close Codex and inspect the state databases in read-only mode.

Read-only diagnostic result

Core storage remains healthy:

core_integrity: ok
threads_total: 68
threads_active: 68
interactive_active: 10
session_index_entries: 12

Desktop local catalog state:

catalog_exists: True
catalog_integrity: ok
catalog_rows: 1
catalog_id_column: thread_id
initial_build_complete: 0
watermark_updated_at: null
last_full_reconciled_at: null
observation_sequence: 51

The newest affected interactive thread (ID redacted):

updated: 2026-08-02 21:44:07 local time
source: vscode
agent_role: empty
archived: false
has_user_event: 0
rollout_file_exists: true
present_in_session_index: true
present_in_local_thread_catalog: false

Across all 10 active interactive threads:

  • all 10 rollout files exist;
  • all 10 IDs are present in session_index.jsonl;
  • only 1 of 10 appears in local_thread_catalog;
  • all 10 unexpectedly have has_user_event = 0.

The global project state is also still populated:

local_projects: 6
thread_project_assignments: 9
sidebar_project_thread_orders: 6
thread_workspace_root_hints: 66
projectless_thread_ids: 1

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 = 0 on every real interactive thread may also explain why the catalog excludes them, but that is an inference rather than a confirmed cause.

Expected behavior

  • A newly created interactive chat containing user messages should persist with the correct user-event metadata.
  • local_thread_catalog should complete its initial build and contain active interactive threads.
  • Missing/stale catalog state should trigger an automatic full reconciliation from state_5.sqlite and rollout files.
  • Search, Recent, and Projects should not all hide a thread that the core store can still read.

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.