Codex App cross-host handoff cannot discover matching saved project
What version of the Codex App are you using (From “About Codex” dialog)?
26.616.51431 (build 4212)
What subscription do you have?
Unknown / not relevant to local desktop handoff
What platform is your computer?
Darwin 25.4.0 arm64 arm (both source and destination are macOS hosts)
What issue are you seeing?
Cross-host thread handoff aborts immediately with:
No matching saved project was found on <destination-host>.
Both connected Macs have the same repository registered as a saved Codex project, with identical redacted path and projectId. Remote thread listing and cross-host messaging work, but handoff cannot discover the destination project.
The failure is returned synchronously, before an operationId is created, so get_handoff_status cannot be used. Restarting Codex on both hosts and reconnecting the remote host did not help.
What steps can reproduce the bug?
- Connect two macOS hosts in Codex App.
- On both hosts, save the same Git repository as a project at the identical path
/Users/<user>/Work/<repo>. - Verify on each host that
list_projects({})returns the project with:
projectId: "/Users/<user>/Work/<repo>"projectKind: "local"path: "/Users/<user>/Work/<repo>"hostId: "local"
- From a separate local helper thread, call:
handoff_thread({ threadId: "<source-thread>", destinationHostId: "<connected-remote-host>", followUpPrompt: "..." })
- Observe the immediate error:
No matching saved project was found on <destination-host>.
Additional verified facts:
- The source thread's
cwdis the saved project path. - A thread running on the destination host has the same
cwd. list_threadssuccessfully enumerates destination-host threads, proving the remote connection/thread index works.- Running
list_projects({})locally on each host returns the same three saved projects and identical IDs/paths; each host labels its own entrieshostId: "local". - The failure reproduced repeatedly, including after both Codex Apps were restarted.
This points to the host-qualified saved-project registration/discovery layer used by handoff_thread, rather than filesystem or Git path mismatch.
What is the expected behavior?
The destination host's matching saved project should be discovered, handoff_thread should return an operationId, and the source thread (plus associated Git state) should move to the destination host and run the follow-up prompt.
Additional information
Exact project paths, host names, destination IDs, and thread IDs are redacted because this is a public issue.
The local and destination list_projects views both show the project correctly, but neither exposes the other host's projects. It appears that hostId: "local" is relative to the calling host, while the cross-host handoff preflight is missing or failing to consume the destination's host-qualified project advertisement.
No project files were modified during diagnosis.
2 Comments
This needs a project-identity diagnostic before handoff aborts.
For each candidate destination host, the error should expose the compared fields:
The handoff matcher should probably treat local path as one signal, not the whole identity. Same path on two hosts can still fail if host-local project ids differ; same repo at different paths should be recoverable if the user confirms. Without the comparison receipt, there is no way to tell whether discovery, host routing, or project identity failed.
---
_Generated with ax._
I can reproduce this on two Apple-silicon Macs even after updating both hosts to the same Desktop build.
Environment:
26.820.809272.50.1 (Apple Git-155)Verified project identity:
/Users/<user>/Workspace/<repo>HEAD, and normalizedremote.origin.urlmatch.gitdirectoryObserved behavior:
handoff_threadfails immediately withNo matching saved project was found on <destination-host>.operationIdis createdlist_projectsonly enumerates its local projects and does not expose the destination host's saved projectThis appears distinct from #37624: both Macs use Git 2.50.1 and the origin lookup succeeds. It still looks like the Handoff preflight is not consuming the destination host's saved-project advertisement, even though the project is visible and usable on that host.
A supported diagnostic showing the source identity and destination candidates compared by Handoff would be very helpful. Please also clarify whether a destination project must be registered through any UI flow other than Add local project/Open folder.