Codex Desktop hides a searchable recent pinned local task from default and pinned task lists
Summary
A Codex task from July 15, 2026 is still present locally and can be opened directly by ID or found via targeted search, but it does not appear in the default recent task list. I believed the task was pinned, but it also does not appear in pinned results. Re-pinning the task via Codex's thread tool reported success, but the task still did not appear in pinned/default listings.
This affected desktop visibility first noticed on July 16, 2026; I had also noticed related missing visibility on the mobile app earlier.
This appears related to #21128 and #26634, but may be a distinct failure mode because targeted search does find the task and the task should be recent enough to appear in chronological listing.
Affected task
- Task title:
Assess Hermes Agent contribution - Task ID:
019f6790-efb0-79b3-b9b2-9c6ea39d3752 - Host:
local - Project/workspace path:
/Users/<user>/Documents/Hermes Agent - Created: July 15, 2026, about 4:56 PM EDT
- Updated: July 15, 2026, about 5:22 PM EDT
- Status from direct read:
notLoaded - The task completed successfully and produced:
/Users/<user>/Documents/Hermes Agent/hermes_research.md/Users/<user>/Documents/Hermes Agent/hermes_issue_shortlist.md
What I expected
The task should appear in the Codex desktop app's default/recent task list for the Hermes Agent project, especially because it was updated recently. If pinned, it should also appear in the pinned task list.
What happened
The task was not visible in the app's normal list. It was only recoverable by targeted search/direct task ID.
Reproduction/evidence from local tools
list_projectsshows the Hermes Agent project exists:
- Project label:
Hermes Agent - Project path/id:
/Users/<user>/Documents/Hermes Agent
- Targeted task search works:
list_threads(query="Hermes")returns019f6790-efb0-79b3-b9b2-9c6ea39d3752- Title:
Assess Hermes Agent contribution - CWD:
/Users/<user>/Documents/Hermes Agent
- Direct thread read works:
read_thread(threadId="019f6790-efb0-79b3-b9b2-9c6ea39d3752")returns the completed task and its final answer.
- Direct navigation works:
navigate_to_codex_page(threadId="019f6790-efb0-79b3-b9b2-9c6ea39d3752")returned{ "navigated": true }.
- Default recent task listing omits the task:
list_threads(limit=20)did not include the Hermes task.- This is surprising because tasks with both newer and older
updatedAtvalues around July 15 were present, while the Hermes task's timestamp should place it between them.
- Pin behavior appears inconsistent:
set_thread_pinned(threadId="019f6790-efb0-79b3-b9b2-9c6ea39d3752", pinned=true)returned success.- But
list_threads(query="pinned")still did not include the Hermes task. list_threads(limit=20)still did not include the Hermes task after re-pinning.
- Local session index includes the task:
/Users/<user>/.codex/session_index.jsonlcontains:- ID:
019f6790-efb0-79b3-b9b2-9c6ea39d3752 - Name:
Assess Hermes Agent contribution - Updated:
2026-07-15T20:56:23.380762Z
Environment
- Codex desktop app on macOS
- macOS:
15.6.1(24G90) - Architecture: Apple Silicon / arm64
- Local Codex version metadata found in
~/.codex/version.json: latest_version:0.116.0last_checked_at:2026-03-25T09:33:00.794788Z
Impact
Tasks/projects appear missing even though they are still present locally. This is high-trust data: users may think work has been deleted or lost. In this case, a recently completed project task and its outputs were hidden from normal desktop/mobile discovery until searched by exact topic/ID.
Suggested investigation areas
- Default/recent task index filtering versus targeted search index.
- Pin-state persistence and whether pinned tasks are excluded by another filter.
- Project-scoped task visibility for local projects with spaces in the path, e.g.
Hermes Agent. - Cross-device sync/listing behavior between desktop and mobile.
- Whether
status: notLoadedtasks are incorrectly excluded from recent/pinned UI lists.
8 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
+1
I can confirm this as a recurring multi-thread pin/sidebar hydration failure on macOS.
Environment
26.715.21425(build5488)codex-cli 0.145.0-alpha.1827.0developer beta (26A5368g)Current recurrence
The Desktop sidebar displays only 9 pinned threads, while the durable local state contains 22 unique pinned thread IDs.
Host-side verification:
~/.codex/.codex-global-state.json: 22 unique pinned thread IDs~/.codex/state_5.sqlite: all 22 thread rows existhistory_mode=legacyPRAGMA quick_check:okThis has occurred at least twice:
Supported recovery attempt
After backing up the state, I cycled only the 13 hidden threads through the supported pin control:
No SQLite rows were edited.
During the re-pin operation, the Desktop log emitted exactly 13 warnings—one for every hidden pin:
Failed to refresh thread description: No Codex thread found for threadId: <redacted>The pin API reported success and the durable pin state was correct, but the Desktop UI later continued to display only the same 9 pins after an app relaunch.
Expected behavior
Every ID in the durable pinned-thread list that still has an unarchived, readable thread row should appear in the pinned sidebar. Restarting or relaunching Desktop should not return the sidebar to a partial subset.
Impact
This makes existing work appear deleted even though the threads remain healthy locally. Repeatedly cycling pin state is not a durable workaround and can obscure the underlying reproduction.
This appears closely related to #17253 and other reports where local thread state remains intact while Desktop enumeration and sidebar hydration diverge.
Additional reproduction: pin exists locally, sidebar rehydrates after pinning another task
I reproduced a closely related failure again on July 21, 2026 with a different local task.
Environment
26.715.7071927.0(26A5368g)arm64Affected task
OS - Family019eaa4f-79b3-7bc0-9118-0c7fc5f0fea8localnotLoadedDiagnostics and observed behavior
list_threads(query="OS - Family")returned no results.list_threads(query="family")search returned the task with the correct ID/title andstatus: notLoaded.pinned-thread-ids:21truepinned=false, thenpinned=true) returned success for both operations.OS - Familypin then appeared again.Interpretation
This provides additional evidence that the underlying thread and pin record are intact and that the failure is in sidebar/list hydration or refresh. It may also indicate that:
status: notLoadedcontributes to exclusion from normal/pinned listings;No direct database editing was performed.
July 24 recurrence: current active task is pinned in API state but absent from sidebar
The failure reproduced again on July 24, 2026, this time with the task that was currently open and active.
Confirmed state
A read-only
list_threads(limit=30)call returned:schemaVersion: 4pinnedThreadspinnedThreadspinnedIndex: 27activelocalcodexDespite that, the newly pinned task did not appear in the desktop pinned sidebar.
This is useful additional evidence because the affected task was not
notLoadedin this reproduction. The omission can therefore affect a currently active, readable task whose pin is already present in the app's own thread-list response.Crash / recovery behavior
I did not cycle the pin during this reproduction. Previous supported recovery attempts had unpinned and re-pinned hidden tasks, and the user now reports that asking Codex to repair the missing pins can cause the desktop app to crash.
I do not currently have a crash log proving which internal operation triggers the crash, so this should be treated as an observed correlation rather than a confirmed cause. Given that the durable/API-visible pin was already correct, repeated bulk pin mutations were intentionally avoided.
Updated interpretation
The failure now appears to be a divergence between:
pinnedThreadscollection returned by the app;It is not limited to missing database rows, archived threads, or
status: notLoadedtasks. A safe diagnostic or “reload pinned sidebar from authoritative state” action would be preferable to using repeated unpin/re-pin mutations as a workaround.July 28 recurrence on
26.721.41059: active local pin is present inlist_threadsbut absent from Desktop sidebarI can reproduce the same failure on a newer Desktop build, with a useful remote-control trigger/state distinction.
Environment
26.721.41059(build5848)codex-cli 0.146.0-alpha.3.126.5.2(25F84)arm64Confirmed backend state
A read-only
list_threads(limit=10)call returnedschemaVersion: 4and exactly twopinnedThreadsafter stale pins were removed:pinnedIndex: 1)hostId: local,status: active,pinnedIndex: 2)The affected local thread has a non-empty title, summary, cwd, and recent
updatedAt. Direct navigation to the thread succeeds, and the conversation remains fully usable once opened.Despite that, the affected local task is absent from the visible Local sidebar.
Recovery attempts that did not work
notLoadedghost pins so only the two valid active pins remainedAfter every step,
list_threadscontinued to return the affected local thread underpinnedThreads, but Desktop still did not render it in the Local sidebar.Additional trigger/context
This occurred while pairing and switching to a Linux Remote Control host. The remote task and local task coexist correctly in the backend response, but the local sidebar does not reconcile the local task afterward. This suggests the client-side connection/host filter or sidebar cache can diverge from the authoritative
pinnedThreadsresponse; it is not limited tonotLoadedthreads, stale DB rows, or failed pin persistence.Expected invariant
For the selected host, every readable, unarchived thread returned by the app's own thread index as
status: active,hostId: local, and a validpinnedIndexshould be rendered in the pinned/local sidebar without requiring a restart or unrelated pin mutation.I can reproduce the same failure on a newly created local project task, with one additional deterministic trigger: the affected task was created from another task through the official cross-task creation flow and displayed the banner “Sent by ChatGPT from another task”.
Environment
26.818.41509(build6962)26.4.1(build25E253)Reproduction
``
json
``{"pinned": true}
pinnedThreadsand the ordinarythreadsresult, even though direct thread read and task navigation still work.Additional checks
/), suggesting that cross-task creation may fail to persist or hydrate the normal project/sidebar association.The affected title, project path, task ID, and screenshots are omitted because they contain customer/workspace information. I can provide sanitized identifiers or logs privately if maintainers need them.
Expected behavior
A task created from another task should be a normal peer in sidebar/index behavior. Pinning should persist and place it in
pinnedThreads, regardless of whether it is active or idle. If pinning fails, the operation should return an error instead of reportingpinned: true.A Windows recurrence confirms that the authoritative task inventory and the rendered sidebar can remain divergent even after a cross-host identity collision is removed.
Environment
26.820.7780.00.149.1Authoritative state after recovery
A fresh
list_threads(limit=20)call returns the affected task underpinnedThreadswith all of the following:hostId: localstatus: activepinnedIndex: 1updatedAtAdditional read-only checks show:
Despite this, the task is absent from the visible Desktop sidebar. Direct navigation from another task opens the correct task, and the task can continue normally. After navigating away, it is still not discoverable from the sidebar.
Trigger and boundary
The task previously had a stale Remote SSH object with the same
thread_id, related to #38927. Archiving only that exact remote object repaired hostless navigation: the current local object became the first pinned item in the task API. It did not repair the rendered sidebar.Before the remote object was archived, Desktop logs showed sidebar workspace metadata requests attempting to resolve a Windows cwd through the Remote SSH host. Those requests failed with:
After archival, owner routing changed to the local host, but the sidebar did not rehydrate from the corrected task and pin state.
No rollout, database row, or global-state entry was edited. The task content remains intact.
Expected behavior
pinnedThreadswithpinnedIndex: 1must render in the selected local project's sidebar.This appears to be the sidebar-hydration phase that remains after the separate cross-host collision is resolved. Private identifiers, task content, project names, paths, addresses, and hostnames are omitted.