Codex Desktop Projects sidebar shows "No chats" for projects with older non-archived conversations
What version of the Codex App are you using (From “About Codex” dialog)?
Codex Desktop 0.135.0-alpha.1 / Windows app package OpenAI.Codex_26.527.3686.0
What subscription do you have?
Current ChatGPT/Codex account; exact subscription plan is not shown in the issue form.
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
The Codex Desktop Projects sidebar can show "No chats" for a project even when that project still has existing, non-archived local conversations.
I observed this after a Codex Desktop update. Several projects in the sidebar were shown as having no chats, but the conversations were still present locally and were not archived. Querying the app-server with thread/list filtered by the project cwd returned the expected conversations.
Affected example project paths:
- D:\code\gaiyea\gaiyea-admin-backend\healthy-living-backend
- D:\data\project\backend\codex-pet-bridge
- D:\data\project\backend\ncds-license-issuer-backend
- D:\data\project\backend\scoliosis-accessment-backend
Observed behavior:
The Projects sidebar appears to load a limited recent conversation set first, and then group only those recent conversations by project cwd. If a project's conversations are older and not included in that recent set, the project is displayed as "No chats", even though it has non-archived historical conversations.
This is misleading because it makes users think conversations were deleted or automatically archived.
What steps can reproduce the bug?
- Have multiple local Codex Desktop projects with historical conversations.
- Let some project conversations become older so they are no longer included in the sidebar's recent conversation cache.
- Open Codex Desktop and look at the Projects sidebar.
- Some projects show "No chats".
- Query the app-server directly using thread/list with the same project's cwd and archived=false.
- The conversations are returned, proving that the project does have non-archived conversations.
In my local testing, after manually moving old non-archived conversations back into the recent index, the same projects appeared correctly in the Projects sidebar again. That suggests the issue is recent-list-based grouping rather than missing or archived conversations.
What is the expected behavior?
The Projects sidebar should not rely only on a recent conversation cache to decide whether a project has chats.
Expected behavior options:
- When expanding a project, query conversations by that project's cwd with pagination.
- If a project would otherwise show "No chats", perform a fallback cwd query for that project.
- At minimum, distinguish between "No recent chats" and "No chats in this project".
A project should not display "No chats" when it has non-archived conversations available through app-server thread/list by cwd.
Additional information
This was reproduced on Windows. The relevant sessions were not all archived. The issue was confirmed by comparing the Codex Desktop sidebar with app-server thread/list results filtered by cwd.
The current behavior is especially confusing after an app update because users may believe project conversations disappeared or were automatically archived.
18 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
#25463 looks closely related. My report may be another reproduction of the same underlying local indexing/listing consistency issue, but with one additional observation:
On Windows, the affected conversations are still non-archived and are returned by the app-server when calling thread/list with the project cwd filter. However, the Projects sidebar still renders "No chats" when those conversations are older than the sidebar's recent conversation set.
So this may specifically be caused by the Projects sidebar grouping only a limited recent conversation list instead of querying history by project cwd, or at least not doing a fallback cwd query when a project appears empty.
Windows data point and copied-app workaround confirmation.
I reproduced the same failure mode on Windows Desktop and tested the renderer workaround on a copied app, not on the installed WindowsApps package.
Environment tested:
OpenAI.Codex_26.527.7698.0_x64__2p2nqsd0c76g0codex-cli 0.136.0-alpha.226.527.3686.0had the same renderer target/signature.webview/assets/app-server-manager-signals-Bpaj8VHp.jsLocal evidence:
thread/listby exact projectcwdcould return the expected non-archived threads.No chatsbecause the affected threads were outside the loaded global recent window.Mechanism:
The renderer initial sidebar refresh still contains a global recent-window call:
Patching that call in a copied app to use the existing all-thread pagination helper restored the hidden project chats:
Note the trailing spaces in the replacement above are intentional in my local patch so the replacement stays byte-length preserving for the packed generated JS asset.
Windows deployment approach that worked:
C:\Program Files\WindowsApps\OpenAI.Codex_*in place.appdirectory to a user-writable location, for example:%USERPROFILE%\.codex\patched-main\app.app\resources\app.asar.Codex.exewith:CODEX_HOME=%USERPROFILE%\.codexCODEX_ELECTRON_USER_DATA_PATH=%USERPROFILE%\.codex\patched-main\electron-user-dataCODEX_HOME.Observed result:
CODEX_HOMEshowed the previously hidden project chats.CODEX_HOMEalso launches from the copied app path.%USERPROFILE%\.codex\patched-main\app, notWindowsApps.app.asar:This is not a proper upstream fix. It is only a diagnostic/workaround patch and can increase startup/sidebar load for users with many local threads.
The product fix should probably keep the normal global recent list for the generic
Chatssection, but fetch project history separately when a project is expanded, using project-scoped pagination such asthread/list({ cwd, archived: false, cursor, limit }).No chatsshould only be rendered after a project-scoped query completes empty.Thanks for confirming the Windows reproduction and the renderer-side cause. I will leave this issue open for upstream tracking, since the workaround is useful for diagnosis but not a proper product fix. The expected fix should still be project-scoped pagination/fallback querying before rendering "No chats".
I can confirm this on Codex App Version 26.527.60818 (3437) on MacOS Sequoia 15.7.7 (24G720).
Via search function I can find chats/threads from those projects but clicking on them opens nothing (just seeing the background with the logo instead of the chat which should actually be visible).
Update with more feedback depth (working locally):
I can reproduce a very similar issue on macOS, with additional evidence that this is not data loss but a Codex Desktop UI hydration/routing bug.
Environment:
0.136.0-alpha.2Observed UI behavior:
No chats/Keine Chats.Local data checks:
state_5.sqlitecontains the affected original thread rows.cwdvalues pointing to the correct local project directories.~/.codex/sessions/.session_index.jsonlalso contains the affected thread IDs.thread/readon one affected original thread works and returns the full conversation history.Concrete experiment:
thread/readfor the same thread ID succeeds and returns the conversation turns.updated_at/updated_at_msinstate_5.sqlitedid not fix the UI; app-server later reconstructed the original timestamps from rollout/session metadata.This strongly suggests:
Expected behavior:
thread/read/thread/resume, even if that thread is not currently present in the sidebar's recent-thread cache.No chats.Impact:
This made it look as if many local project chats had disappeared. Recovering and proving that the data was still present required substantial local debugging across Codex local state, session index files, rollout JSONL files, app-server calls, and Desktop logs.
I would also like to raise a billing/support concern:
debugging this product regression consumed a significant amount of paid Codex/API usage and subscription quota. Since the usage was spent investigating a Codex Desktop bug rather than normal productive work, I would appreciate guidance on reimbursement or account credit for the wasted usage.
I can confirm the same/similar issue on macOS with the German UI.
Environment / local evidence:
0.135.0(exact About dialog version not checked yet)Keine Chatseven though their old chats still exist locally.Observed behavior:
Keine Chats.Read-only local audit:
~/.codex/sessionscontains 121 rollout JSONL files.~/.codex/session_index.jsonlcontains 109 thread entries.~/.codex/state_5.sqlitecontains 121 rows inthreads.cwdvalues, andarchived = 0.This strongly looks like sidebar/project indexing or cwd-to-project mapping drift, not data loss.
Expected behavior:
cwd, the project sidebar should not renderKeine Chats.Impact:
The UI makes it look like old project chats disappeared after the update, which is alarming. Local audit shows the chat data is still present, so a non-destructive index repair/recovery path would be very helpful.
Privacy note: I am intentionally not posting full local paths, screenshots, or thread titles that may contain private business context.
I have been using Codex to debug itself. Its report
Subject: Codex Desktop hides older local project chats after restart, even though local data is intact
I am seeing a Codex Desktop bug on Windows where older local chats disappear from their projects in the sidebar after restarting Codex. The affected projects show "No chats", but the chats still exist locally.
Symptoms:
Local data checks:
Specific test thread IDs:
Tests performed:
Conclusion:
This appears to be caused by Codex Desktop itself during startup/index rebuild. The user did not archive, delete, or corrupt the chats. Codex is rebuilding or pruning local sidebar/thread state and excluding older active local threads from project sidebar eligibility. Manual edits to state_5.sqlite, session_index.jsonl, and .codex-global-state.json are ignored or overwritten by Codex. A real prompt works because it appends a new event through Codex's normal path.
Requested fix:
Please add or repair a durable local-session reindex path so Codex Desktop scans all active rollout files and active state_5.sqlite threads, honors archived = 0 and cwd matching saved project roots, and shows those chats under the correct project without requiring a new prompt. Ctrl+G search, app-level thread listing, and the project sidebar should agree. Older threads should not be hidden just because they predate newer metadata such as thread_source = user.
And more Details from the Codex Chat. *
Codex Desktop Sidebar Missing Chats: Debug History And Conclusions
Date: 2026-06-04
Summary
Older local Codex chats disappear from their saved project groups in the Codex Desktop sidebar after restarting Codex. The projects show
No chats, but the underlying chat data still exists locally. This is not caused by the user archiving or deleting the chats, and it is not caused by missing rollout files.The strongest conclusion from the tests is that Codex Desktop itself is rebuilding or pruning local sidebar/index state on startup, and that rebuilt state excludes some older active local threads. Manual edits to the local SQLite database, session index, and global desktop state were either ignored or overwritten by Codex on startup. A real user prompt works because it appends a new event through Codex's normal thread path, after which the chat remains visible.
User-Visible Symptoms
Observed sidebar state:
SharepointTest,CheckAppStore,BambuLab,Bugs,NDA Process,SlingShotMU,JourneyLog, andFacebook History ViewershowedNo chats.Ctrl+Gsearch could find chats from those projects even when the sidebar saidNo chats.Pinnedsection.Environment And Local Stores
Observed Codex local data root:
Relevant local files and databases:
Earlier
codex doctoroutput showed the local rollout inventory was internally consistent:That means the issue is not that the local session files are missing or that the archive count is wrong.
Important Thread IDs Used In Tests
SharepointTest:CheckAppStore:Both rows existed in
state_5.sqlite, hadarchived = 0, had rollout paths, and had the correct projectcwd:Test 1: Pin And Unpin Hidden Chats
Action:
Result:
Conclusion:
Test 2: Real Prompt Makes A Chat Stay Visible
Action:
Result:
Conclusion:
Test 3: Manually Update Chat Timestamps
Action:
SharepointTestandCheckAppStore.state_5.sqlite, tablethreads:updated_at,updated_at_mssession_index.jsonl:updated_atTest timestamp values:
Immediate read-back showed both stores had been updated:
Result:
state_5.sqlitehad reverted the two test rows back to their March rollout-derived timestamps.session_index.jsonlstill retained the June timestamps.Final read-back after Codex startup:
Conclusion:
state_5.sqlite.updated_at_ms.session_index.jsonlis not the source of truth for this startup rebuild.state_5.sqlitethread metadata from another source, most likely rollout JSONL history, and it overwrote the timestamp edits.Test 4: Add Missing Desktop Permission Metadata While Codex Was Running
Observation:
.codex-global-state.jsonunder:SharepointTestandCheckAppStorethread IDs did not have entries there.Action:
Result:
Conclusion:
.codex-global-state.jsonwhile Codex is running is not durable.Test 5: Add Missing Desktop Permission Metadata While Codex Was Fully Closed
Action:
Codexprocesses to exit..codex-global-state.jsonstopped changing.heartbeat-thread-permissions-by-identries.Helper log:
Result:
Conclusion:
.codex-global-state.jsonand removed the manually added entries.Test 6: App-Level Thread Search
Action:
Result:
state_5.sqlite.Conclusion:
Additional Clues
Older hidden threads often have:
Newer visible threads often have:
This may be part of the migration/indexing bug, but it is not proven to be the sole cause. Some older BambuLab chats with
thread_source = NULLbecame visible after normal app activity, so the long-term fix should not rely only on this one field.Conclusions
codex doctor.archived = 0), and had correct projectcwdvalues.state_5.sqliteandsession_index.jsonldid not restore the sidebar.state_5.sqlitetimestamp edits while leavingsession_index.jsonlunchanged, which indicates Codex Desktop startup is rebuilding SQLite state from another source.heartbeat-thread-permissions-by-identries did not restore the sidebar. Codex removed those entries on startup even when they were added while Codex was fully closed.Long-Term Fix Requested
Codex Desktop should provide a durable local-session reindex/repair path that:
C:\Users\sean_\.codex\sessions,state_5.sqlite.threadsrows wherearchived = 0,cwdvalues that match saved project roots,thread_source,Ctrl+Gsearch, app-level thread listing, and project sidebar eligibility consistent,No chatsfor projects that have active local threads.Temporary Workarounds
The least invasive temporary workaround is to open an old chat and send a minimal no-op prompt such as:
This uses Codex's normal event path and appears to survive restarts, but it changes the chat history.
Pin/unpin is less durable. It can temporarily reattach hidden chats to projects, but the repair is lost after restarting Codex.
Manual edits to SQLite,
session_index.jsonl, or.codex-global-state.jsonare not reliable because Codex Desktop rewrites or ignores that state during startup.Thanks everyone for the additional Windows and macOS confirmations.
Based on the reports above, this seems to be broader than only the Projects sidebar rendering "No chats". The affected threads are still present locally, non-archived, and readable through app-server APIs such as thread/list or thread/read, but Codex Desktop may fail to include them in project-scoped listings and may also fail to hydrate/open them from search results.
The common pattern appears to be older local threads, often created by older Codex versions or missing newer metadata, being excluded during startup reindex/migration or from the initial recent-thread cache. A real prompt or fork can make the thread visible again because it goes through the normal app event path, but that is only a workaround and modifies history.
Expected upstream fix:
It would also be helpful to provide a safe "repair/reindex local chats" action so users do not need to edit SQLite/session files or send no-op prompts to recover old project chats.
Hi everyone, I'm tracking the same Codex Desktop missing-thread/sidebar-history issue on macOS.
For those affected here: did you eventually get all hidden project threads back in Desktop? If yes, what exact method worked durably for you?
Examples I'm trying to distinguish:
codex resume --all <thread-id>rehydrated itsession_index.jsonl/state_5.sqlite/.codex-global-state.jsonfixed itlistAllThreadspatch fixed itIn my case, the missing project threads still exist in
~/.codex/sessionsandstate_5.sqlite, but Desktop does not hydrate them back into the project sidebar after restart. Any confirmed durable fix would help. Please do not share private session contents; sanitized method/results are enough.Windows 10 here: copied-app renderer patch worked; official restart/reindex did not.
I avoided editing
.codexdata entirely. No SQLite/session_index/global-state/JSONL/mtime/source/thread_source edits, and no recovery bump prompt.What worked was a side-by-side copied Codex app using the real
%USERPROFILE%\.codex, with only the copied renderer bundle patched:limit: 50 * recentConversationPageCount->limit: 5000limit: 50->limit: 5000This restored hidden project chats in the patched copy. Reopening the official unpatched Store app loses the fix, as expected, because the official bundle is unchanged.
So for your list:
app bundle patch fixed it, specifically aRecent5000variant. I did not needlistAllThreadsfor this test, though that style of patch also seems conceptually closer to the real product fix.Caveats: copied app will not auto-update; do not run official and patched app simultaneously against the same
.codex; 5000 is a workaround and may be slower for huge histories. Proper upstream fix should be project-scoped pagination/fallback before showingNo chats.On Windows.
I got them back by asking Codex to mark them all as pinned.
But as soon as you unpin them, next load they are gone again.
UNLESS you type something in each one to bring back to being current.
I can confirm the same issue on macOS with an additional workaround signal: pinning a hidden old thread makes it visible and openable.
Environment:
codex-cli 0.137.0-alpha.4codex --version:codex-cli 0.128.0Observed behavior:
macos,能编译, or转油.codex://threads/<threadId>routes to a blank thread view.Concrete examples from local state, all non-archived:
019e6c95-b790-7152-a19b-e16ca75fa517, created 2026-05-28, project cwd under a localcodex-taxicheckout,archived = 0019e7841-6f6d-7852-9bcc-33442fe09005, created 2026-05-30, same project,archived = 0019e8907-1a65-7b52-bb50-700bec63fc23, created 2026-06-02, title/preview related to macOS build, same project,archived = 0Local verification:
state_5.sqlite.threadscontains the affected rows witharchived = 0and the expectedcwd.~/.codex/sessions/...rollout JSONL files exist for the affected thread IDs.read_threadsucceeds for affected threads and returns their turns/messages.list_threadssearch does not find at least some affected old threads by obvious title keywords.codex://threads/<threadId>opens a blank view.019e7841-6f6d-7852-9bcc-33442fe09005, it appears in the sidebar and opens correctly.Relevant app log clue after opening the pinned/deep-linked thread:
This makes it look like the route/thread ID is recognized, but the Desktop UI does not hydrate/render older unpinned threads unless they are forced into the sidebar cache by pinning.
Expected behavior:
cwdshould be discoverable in project sidebar/search.thread/readcan read it, even if it is outside the current recent-thread/sidebar cache.Workaround confirmed:
I am still hitting this on macOS with a newer Codex Desktop build.
Environment:
26.602.40724(CFBundleVersion3593)26.4.1(25E253)arm64~/.codex/state_5.sqlite,~/.codex/sessions,~/.codex/archived_sessionsObserved behavior:
Local evidence from this machine:
This strongly matches the suspected recent-window/sidebar hydration problem. Even after archiving some old threads, there are still many active threads outside the first 50 recent items, and the app UI does not provide a reliable way to load/show the full project history.
I also checked the current app bundle for this build. The relevant code path still appears to exist in the webview bundle:
That chunk still contains
runRecentConversationRefresh/listRecentThreads(...)logic. This seems consistent with earlier reports that the Desktop sidebar initializes from a bounded recent thread list instead of loading all local project threads or paging until the full relevant project history is available.Impact:
updated_at, or patchingapp.asarare not acceptable long-term fixes.Requested fix:
state_5.sqlite+sessions/**/*.jsonl), so users do not need to manually edit SQLite/global state or patch the app bundle.Appears to be fixed.
Version 26.608.12217 • Released 9 Jun 2026
Adding a macOS datapoint after updating to the latest Desktop build.
Environment:
~/.codexRecovery status on my affected project:
state_5.sqlitestill has 251 active/non-archived rows with the expected project cwd.~/.codex/sessions.So my current result is: 26.608.12217 looks like a partial recovery, not a full recovery. Pinning/forcing recency may still be useful as a workaround, but I do not see full historical project recovery yet.
Update from Windows as of June 15, 2026:
26.609.4994.0No chatsnow display their older non-archived conversations normally.I also verified that this is no longer explained by my earlier local workaround. Some affected conversations have again fallen outside the first 100 non-archived threads by
updated_at:ncds-api-backend: its only thread is currently around position 113ncds-base-backend: its four threads are around positions 105–115ncds-police-backend: threads extend to around position 120Despite this, the projects are still displaying their conversations correctly. This suggests that the newer Windows build now performs project-scoped loading, pagination, or an equivalent fallback instead of relying only on the initial recent-thread window.
So, on Windows
26.609.4994.0, this appears to be fixed. However, since there is still a report of only partial recovery on macOS26.608.12217, I will leave the issue open for maintainer confirmation and additional cross-platform verification.