Remote project new-thread composer no longer exposes New worktree
What happened?
In Codex Desktop, when I start a new chat for a local project, the composer shows the run-location dropdown with options like:
- Work locally
- New worktree
- Cloud
When I start a new chat for a remote project, that dropdown is no longer present. The composer only shows a branch dropdown. I do not see any way to create a new remote-project thread in a fresh worktree from the new-thread composer.
This is a serious regression for parallel-agent workflows. Without a visible New worktree / New remote worktree option for remote projects, multiple remote threads appear to target the same remote checkout/path, so agents working in parallel can overlap in the same repo.
Why this matters
Worktrees are the isolation mechanism that lets multiple agents work on the same repo concurrently. For remote projects, this is even more important because the user may be connecting to a single SSH host/project path and expect Codex to create separate worktrees per thread.
Right now the apparent choices are:
- Start another remote-project thread against the same checkout, risking collisions, or
- Manually create a remote worktree and add/open that path as a separate remote project.
That removes the main benefit of thread-level worktree creation.
Expected behavior
The remote-project new-thread composer should expose a way to start in a new worktree, equivalent to local projects. For example:
- Work in current remote checkout
- New remote worktree
- Cloud, if supported/applicable
Starting a remote-project thread with New remote worktree should create a separate worktree on the remote host and bind the new thread to that path.
Actual behavior
For remote projects, the run-location dropdown is hidden and only the branch dropdown remains. I cannot find a visible path to create a remote worktree during thread creation.
Local source-code observations
I looked through the installed Codex app bundle and found code paths that suggest worktree creation is still explicit, not automatic:
threads-create-aB-XmjWR.jsonly creates a pending worktree whentarget.environment.type === "worktree"; otherwise it callsstart-conversationdirectly withhostId,cwd, andworkspaceRoots.pending-worktree-conversation-CgQZkMum.jsstarts the conversation after the pending worktree is ready, using the created worktree path ascwd/workspaceRoots.local-remote-dropdown-DnABqdXS.jsstill contains labels/logic forNew remote worktree, but the remote-project new-thread surface appears not to mount/show that dropdown.composer-DhWyK5QW.jsappears to passhideRunLocationDropdownin the remote-project new-thread flow, leaving only the branch selector visible.
So it does not look like “every remote thread is automatically a worktree”; it looks like direct remote threads are still possible and the UI no longer exposes the worktree path at creation time.
Related issues
- Related/open: openai/codex#27736
- Related/closed: openai/codex#27013
Environment
- Codex Desktop app
- Remote project connected over SSH/remote host
- Observed in the new-chat/new-thread composer for a remote project
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional source-level traceback
I dug further through the installed desktop app bundle and found the likely UI gating path that hides the run-location dropdown for remote-project new-thread creation.
In
composer-DhWyK5QW.js, the composer computes the footer prop like this:Readable version:
The important part is that the selected remote project path is supplied separately through
remoteConfig, but the dropdown visibility is decided by the generic local/projectless workspace-root state (fo,Ke,F). So the composer can know about a selected remote project for branch/project-path purposes, while still hiding the run-location dropdown because the generic footer logic thinks it is projectless /~/ explicitly hidden.Relevant surrounding values from the minified bundle:
The footer then receives
hideRunLocationDropdown: Zc. In the external footer chunk, that becomeshideModeDropdown, and the local/remote/worktree dropdown is rendered with:Separately, inside
local-remote-dropdown-DnABqdXS.js, the effective worktree option gate is:Where:
Jmeans the current target has a git rooteeis the passedallowWorktreepropIappears to be the relevant worktree feature/capability flagThe dropdown already has remote-aware labels:
So the problem does not appear to be missing remote-worktree UI strings or missing pending-worktree submit code. It looks like the remote-project new-thread composer is failing before that: the run-location dropdown is hidden by
Zc, and/orallowWorktreeis false in the footer path.I locally verified this by creating a patched copy of the app and changing only:
and:
That is not meant as a proposed production fix, just confirmation that the relevant UI gates are in this area. A proper fix should probably make the
Zc/allowWorktreelogic aware ofselectedRemoteProjectPath/remoteConfig.currentHostIdinstead of treating the remote-project composer like the generic projectless case.This was an issue for me, seems to be fixed in the latest update