Mobile remote-created worktree thread is not associated with project in Codex Desktop sidebar
Summary
A thread created from ChatGPT mobile through Codex remote access exists locally and can be opened by deeplink, but it does not appear in the Codex Desktop project sidebar.
This looks like a project/thread association issue rather than data loss.
Environment
- Codex Desktop: 26.513.31313, build 2867
- Codex CLI: 0.131.0-alpha.9
- OS: macOS
- Flow: ChatGPT mobile app -> Codex remote connection -> local Desktop host
- Thread mode: worktree
Steps to Reproduce
- On ChatGPT mobile, connect to a local Codex Desktop host through remote access.
- Open an existing project from that host.
- Start a new thread in worktree mode.
- Let the thread run normally.
- On the Desktop app, open the same project sidebar.
- Try to find the newly created thread.
Expected Behavior
The thread created from mobile remote access should appear in the same project sidebar on Codex Desktop.
Actual Behavior
The thread does not appear in the Desktop project sidebar.
However, the thread is present in local state and can be opened directly via deeplink:
codex://threads/<redacted-thread-id>
Local Evidence
The thread exists in the local SQLite state:
id=<redacted-thread-id>
archived=0
cwd=/Users/<user>/.codex/worktrees/<worktree-id>/<repo-name>
thread_source=NULL
The rollout JSONL also exists locally:
/Users/<user>/.codex/sessions/<date>/rollout-<timestamp>-<redacted-thread-id>.jsonl
The issue appears to be that the thread is not associated with the canonical project root:
/Users/<user>/<projects>/<repo-name>
In this case, the thread was created under a temporary Codex worktree path, but the Desktop sidebar did not map it back to the original project.
Related Issues
Possibly related:
- https://github.com/openai/codex/issues/10522
- https://github.com/openai/codex/issues/14519
- https://github.com/openai/codex/issues/21128
- https://github.com/openai/codex/issues/20833
- https://github.com/openai/codex/issues/21581
Notes
This is not a request for a local workaround. The expected product behavior is that threads created through mobile remote access remain visible in the corresponding Desktop project sidebar.
13 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I’m seeing the same issue from the ChatGPT iOS app.
Environment/details I can confirm:
This makes it look like the mobile-created Codex thread is real and can execute on the host, but Codex Desktop is not associating it with the visible project/thread history. From the user point of view it feels like the Codex chats “disappear” after being started on mobile, even though the file changes were actually applied.
Expected behavior: a task/thread started from ChatGPT mobile through remote access should appear in the same project/thread list in Codex Desktop so it can be resumed from the Mac.
This is blocking because mobile-started tasks become hard to inspect or continue later from Desktop.
I can confirm a very similar failure mode on Windows, with one extra detail that may help narrow down the indexing/backfill path.
Environment
codex-cli 0.141.0session_meta.cli_version:0.140.0-alpha.19session_meta.cli_version:0.142.0-alpha.1User-visible behavior
A project thread that was first started from mobile briefly appeared in Codex Desktop, then disappeared from the Desktop project/sidebar view after restarting Codex Desktop.
The conversation was not deleted. Its rollout JSONL transcript still existed locally under
.codex/sessions/..., andhistory.jsonlalso still referenced the same session id.Local state before repair
For the affected thread:
Other user-visible local project threads on the same host were generally indexed as:
So this looked like the thread existed, but was filtered out / not classified as a normal user thread in the Desktop thread list.
Important additional observation
Updating only
state_5.sqlitewas not durable. I first changed the affected row to:and appended the missing
session_index.jsonlentry. The Desktop list still did not show it immediately, and shortly afterward the SQLite row was written back to the old values:The cause appears to be that the rollout JSONL
session_metaline also had:After updating all three durable sources together:
session_index.jsonlentrystate_5.sqlite.threadstomodel_provider=customapi,thread_source=usersession_meta.model_providerto match the local visible providerCodex Desktop's thread list started showing the thread again.
Why this may be useful
This suggests the Desktop/app-server may be rebuilding or refreshing
state_5.sqlite.threadsfrom rolloutsession_meta, and that mobile/remote-created threads can be persisted with a provider/source shape that later causes them to disappear from the Desktop-visible user/project thread list.A robust product fix probably needs to treat these fields as recoverable/migratable metadata, not as a reason to hide an otherwise valid unarchived local user thread. At minimum, startup/backfill could repair missing
session_index.jsonlrows and normalizethread_source/ provider metadata for mobile remote-created local project threads, or avoid filtering them out solely because those fields differ from the current Desktop provider.All paths/thread ids above are intentionally redacted, but I can provide the exact local field layout if useful.
I am seeing a closely related variant on macOS.
A thread is visible from Codex mobile / remote history, but it is not showing where expected in Codex Desktop for the corresponding project. The underlying local data is intact; the issue appears to be Desktop project/sidebar association when the recorded cwd is a Codex-managed worktree path that no longer exists.
Sanitized local evidence:
<redacted>Codex Desktopvscode0.142.0-alpha.6/Users/<user>/.codex/worktrees/cb17/dotfilesstate_5.sqlite.threads:archived = 0source = vscodethread_source = NULLrollout_pathpoints to an existing JSONL under~/.codex/sessions/...session_index.jsonlhas an entry for the thread./Users/<user>/.codex/worktrees/cb17/dotfiles-> missing/Users/<user>/.codex/worktrees/9662/dotfilesI audited local state and found this pattern:
~/.codex/worktrees/...So this looks like the product-visible failure occurs when a Codex-managed worktree thread remains unarchived after its worktree cwd is gone. Mobile/history can still surface the session from the rollout/index data, but Desktop does not map it back to the canonical project root.
Expected behavior:
If a local thread is unarchived and its rollout JSONL exists, Desktop should still surface it in a recoverable place even when the recorded Codex-managed worktree cwd is missing. Ideally Desktop would map the thread back to the canonical Git repository/project root, or show it in a "missing worktree / needs recovery" state rather than hiding it from the project sidebar.
I can reproduce this on macOS with an ordinary local checkout (not a Codex-managed worktree), which suggests the problem is broader than worktree-to-project mapping.
Environment
0.144.1GPT-5.6-Sol/Users/<user>/Projects/<repo>Reproduction and evidence
cwd. One was reported asnotLoadedand the other asidle.This is therefore not data loss, a missing checkout, or an incorrect worktree path. The remote-created threads are present and associated with the exact existing project directory, but the Desktop project/sidebar view is not being invalidated, refreshed, or populated consistently.
Expected behavior
Every thread created through mobile Remote for a local project should appear automatically in that project's Desktop sidebar, including the first threads created for a newly opened project. A
notLoadedremote-created thread should not be excluded if it is active, unarchived, and has a valid projectcwd.A useful implementation check may be whether Desktop subscribes to thread-created/thread-list-invalidated events from the remote-control app-server and re-queries the affected project, rather than relying only on its existing local sidebar cache.
---
This issue comment was generated by LazyCodex.
Tag: lazycodex-generated
I can reproduce this on macOS with Codex CLI/app-server
0.144.1, using an ordinary existing checkout rather than a Codex-managed worktree.Flow:
Sanitized host-side evidence:
The affected thread is also absent from Desktop per-thread UI metadata (client-id/description/workspace-root-hint maps), while the app can still load it directly by ID.
A normal visible thread in the same installation is classified with
thread_source=user. This strengthens the existing evidence that remote-created user threads can be durably stored but omitted from Desktop indexing/classification even whencwdis valid and no worktree mapping is involved.Expected: a user thread created through Mobile Remote should be classified/indexed like other user threads and immediately appear in the host Desktop sidebar. Startup/backfill should also repair already-persisted unarchived threads with this metadata shape.
I did not edit SQLite/JSONL locally because the app-server may rebuild the row from durable metadata, and a supported product-side backfill is preferable.
I can reproduce the same issue on Windows 11 with WSL2.
A remote-created thread runs correctly and is stored locally, but it does not appear under the corresponding project in the Codex Desktop sidebar.
Environment:
0.145.0-alpha.30/home/<user>/repos/<project>What I verified:
.codex/sqlite/state_5.sqlite./mnt/c/Users/<user>/.codex/sessions/<date>/rollout-<timestamp>-<thread-id>.jsonl.codex://threads/<thread-id>.codex://new?path=...flow does not make the thread appear in the sidebar.The missing state appears to be the UI/project association. For the affected thread, these bindings were not created:
thread-project-assignmentsprojectless-thread-idsthread-workspace-root-hintsSo the thread itself is intact, but the sidebar has no project binding it can use to display it.
This looks like the same underlying indexing/association bug, now also reproducible on Windows + WSL2 rather than only macOS.
I can reproduce this exact failure on macOS with a mobile Remote-created thread. This occurrence adds a useful persistence detail: the app-server rewrites a local metadata repair back to the invalid value.
Environment
26.519.41501(build3044)26.5.2, arm64cli_version:0.146.0-alpha.9.2User-visible behavior
This is not transcript loss and not a missing working directory.
Sanitized host-side evidence before repair
Nearby normal, visible user threads in the same database have:
Repair/backfill observation
After making a SQLite backup, I changed only the affected row from
thread_source=NULLtothread_source=user.thread_source=NULL.This suggests the invalid classification is being regenerated from another durable source or cached thread metadata. A one-time SQLite edit is therefore neither sufficient nor durable.
Expected product behavior
thread_sourceis null.Thread ID, repository name, account information, absolute paths, and transcript content are intentionally redacted.
I can confirm this remains reproducible on macOS with the current ChatGPT/Codex desktop app, and I have a before/after release boundary from the same machine that may help isolate the regression.
Environment
26.803.41515(bundle build6321)26.4.1(25E253), Apple Silicon / arm64Current reproduction
On August 7, I created three tasks from ChatGPT iOS Remote in the same existing local project.
Read-only host checks show that each missing Remote-created task:
~/.codex/state_5.sqlitewitharchived=0;cwd;idle/loadable status;source=vscodeandthread_source=NULL;thread-project-assignmentsand from that project'ssidebar-project-thread-orders.This is not task loss, Remote execution failure, or an incorrect project path. The missing step is Desktop sidebar registration/order insertion.
Before/after boundary
The same machine has older Remote-created tasks from July 14–22. Those older tasks have the same relevant persisted shape:
source=vscodethread_source=NULLcwdthread-project-assignmentsentryHowever, every one of those older Remote-created tasks is present in the project's persisted
sidebar-project-thread-orders, and they were surfaced by Desktop.The local app logs establish this release boundary:
26.72126.721.41059to26.727.40816on July 3126.727.5135126.803.41515still reproducesDesktop-created tasks after July 31 are still inserted into sidebar order, so this is specific to externally/Remote-created tasks rather than a general list cap or project-order failure.
Likely regression
The evidence points to the
26.727Desktop sidebar/catalog changes no longer registering newly synchronized Remote tasks in the desktop-owned project order.thread_source=NULLis not independently causal because the older working Remote tasks have the same value; it appears to be a marker of the Remote creation path whose missing explicit association was previously tolerated or backfilled.There were no Remote-created samples on this machine between July 23 and August 2, so a coincident iOS/backend change cannot be excluded absolutely. However, the tasks still arrive on the Mac with the same metadata, remain loadable, and resolve to the correct project through the desktop service. That makes the Mac sidebar ingestion path the stronger explanation.
Expected behavior: a task created through iOS Remote for an existing local project should be registered in the host Desktop sidebar exactly like a task created from Desktop. If explicit sidebar metadata is missing, Desktop should fall back to the durable task
cwd/project inference already used by its thread-list service and backfill the association.I can confirm this still reproduces on current macOS Desktop build
26.803.61601(bundle build6396).Impact / severity: I would rate this as high severity for users who rely on Remote. Nearly every task I start through Remote on either iPhone or iPad is affected. I use Codex heavily across devices, so when I return to Desktop, the project history is systematically incomplete. I have to manually discover and pin each missing task, and until I do, the UI gives the reasonable impression that work may have been lost. This breaks the core cross-device workflow rather than an occasional edge case.
This occurrence adds two useful details:
cwdand are returned by the Desktop thread-list service with the correct local project ID.notLoadedand do not reliably appear in their project sidebar. Pinning makes them accessible, but does not repair normal project grouping.The local sidebar catalog also appears stuck rather than merely delayed:
Newer Remote-created tasks exist in the authoritative state and are returned by the app's task-list service, but they are absent from this catalog.
I also inspected the packaged Desktop JavaScript. The
turn/startednotification handler effectively does:It does not hydrate the conversation, buffer the event, or retry it. By contrast, the
thread/status/changedhandler has a path that callshydrateActiveThread(threadId)for a missing active thread.That suggests a two-stage failure:
Possible fix direction:
turn/startedconversations instead of dropping the event.thread/listinto the sidebar catalog.initial_build_complete = 0.turn/startedarrives before, or without,thread/started.Possibly related conversation-initialization race: #18471
Related stalled sidebar catalog report: #35088
Thread IDs, task titles, project names, account details, and absolute paths are intentionally omitted.
cc @etraut-openai
Confirming the same user-facing problem on macOS with ChatGPT on iPhone. Whenever I start a new Codex chat through Remote Control on my phone, the task never appears in the macOS Codex sidebar. The task continues to work on mobile, but because it is not discoverable in the desktop app I am forced to finish the work from my phone instead of handing it back to the Mac.
Expected: a task created through mobile Remote Control should appear under the same project in the macOS Codex sidebar and be resumable there.
Actual: the mobile-created task remains absent from the desktop UI. This has happened consistently rather than as a one-off refresh delay.
Additional Windows reproduction (observed 2026-08-21):
Environment
26.818.313381.2026.209Observed behavior
This suggests the thread data is preserved but the Windows recent-thread/project index or session synchronization becomes stale. The sign-out/sign-in recovery appears to force a full rehydration.
Impact
Remote is used to start fixes while away from the computer, then review/test/deploy them later on desktop. If completed tasks disappear from the visible pending/recent workflow, users can miss review work or create duplicate tasks.
A self-healing reconciliation or a user-facing “refresh/reindex conversations” action would be preferable to requiring reauthentication.