Repository navigation
Android Remote fails to verify trusted Windows projects due to case-sensitive path lookup #40002
Copy link
Copy link
Open
Labels
appIssues related to the Codex desktop appIssues related to the Codex desktop appbugSomething isn't workingSomething isn't workingconfigIssues involving config.toml, config keys, config merging, or config updatesIssues involving config.toml, config keys, config merging, or config updatesremotewindows-osIssues related to Codex on Windows systemsIssues related to Codex on Windows systems
Description
What version of the Codex App are you using (From “About Codex” dialog)?
26.818.3698.0
What subscription do you have?
Plus
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64
What issue are you seeing?
When starting a new Codex Remote chat from the ChatGPT Android app against a trusted project on a Windows host, Remote displays:
Can't verify project trust for C:\Users<user>\Codex-Orchestrator
The Windows host is connected normally and existing Remote threads can be resumed successfully. The failure occurs only when trying to start a new chat.
The project is already trusted in ~/.codex/config.toml, but the existing trust entry was stored using a lowercase Windows path:
[projects.'c:\users\<user>\codex-orchestrator']
trust_level = "trusted"
### What steps can reproduce the bug?
Android Remote attempts to open the project using the normal mixed-case Windows path:
C:\Users\<user>\Codex-Orchestrator
Adding a second trust entry whose casing exactly matches the path shown by Android immediately fixes the issue:
[projects.'C:\Users\<user>\Codex-Orchestrator']
trust_level = "trusted"
Both entries can coexist, and config/read returns them as separate keys.
I reproduced the same behavior with a second Windows project, so this is not project-specific.
Reproduction
Trust a local Windows project in Codex Desktop.
Confirm config.toml contains a lowercase trusted path such as:
[projects.'c:\users\<user>\example-project']
trust_level = "trusted"
Connect to the Windows PC using Codex Remote from the ChatGPT Android app.
Attempt to start a new Remote chat in that project.
Android displays:
Can't verify project trust for C:\Users\<user>\Example-Project
Add an additional exact-case trust entry:
[projects.'C:\Users\<user>\Example-Project']
trust_level = "trusted"
Retry New Chat from Android.
The chat now starts successfully.
Additional diagnostics
The failure occurs before thread creation.
During a failed attempt:
Android Remote connects successfully.
config/read succeeds.
Existing thread/resume requests succeed.
Android issues another config/read immediately before displaying the trust error.
No thread/start request is sent.
I also tested config/read using mixed-case, lowercase, uppercase, trailing-slash, drive-root, and omitted cwd values. Every request returned an equivalent configuration result containing the lowercase trusted project.
config/read does not return an effective trust result. It returns the config.projects map, so the caller must select the appropriate path entry.
A disposable configuration test confirmed that Windows paths differing only by case are preserved as separate keys by config/read.
This makes the behavior consistent with Android Remote performing a case-sensitive lookup similar to:
result.config.projects[requestedPath]?.trust_level
instead of normalizing/case-folding Windows paths before comparing them.
Workaround
Adding an exact-case duplicate entry to config.toml resolves the Android Remote failure immediately.
The workaround was reproduced successfully on two separate Windows projects.
### What is the expected behavior?
Windows project paths should be compared using Windows-appropriate case-insensitive path semantics when determining project trust.
For example, all of the following should resolve to the same trusted project:
C:\Users\<user>\Example-Project
c:\users\<user>\example-project
C:\USERS\<USER>\EXAMPLE-PROJECT
If a project is already trusted in `config.toml`, Android Remote should recognize that trust regardless of differences in path casing.
Starting a new Remote chat should proceed to `thread/start` without requiring a duplicate trust entry whose capitalization exactly matches the path presented to the mobile client.
### Additional information
Environment:
- Codex desktop app: 26.818.3698.0
- Active Codex CLI/app-server: 0.149.0-alpha.4
- Older fallback CLI also present: 0.130.0-alpha.5
- Host OS: Windows x64
- Remote client: ChatGPT Android app
- ChatGPT subscription: Plus
The Remote connection itself is healthy. Existing threads can be resumed from Android successfully. The failure occurs specifically when starting a new chat in an existing trusted Windows project.
During a failed attempt, Android successfully connects and issues `config/read`. No `thread/start` request follows the failed trust check.
Testing the installed app-server showed that `config/read` returns the same configuration regardless of whether `cwd` is mixed-case, lowercase, uppercase, has a trailing slash, points to the drive root, or is omitted.
The response contains the trusted project under the exact key casing stored in `config.toml`. `config/read` does not return a separate effective trust result, so the client appears responsible for locating the matching entry in `result.config.projects`.
A disposable configuration test confirmed that Codex preserves Windows paths that differ only by case as separate `config.projects` keys.
Verified workaround:
Adding a duplicate trust entry whose path casing exactly matches the path displayed by Android immediately resolves the problem.
For example:
[projects.'c:\users\<user>\example-project']
trust_level = "trusted"
[projects.'C:\Users\<user>\Example-Project']
trust_level = "trusted"
This workaround was reproduced successfully on two separate Windows projects.
Related issue #39855 also involves Windows Remote project-trust failures, but appears distinct: that report concerns projectless chats and a malformed generated path missing a directory separator. This report concerns existing saved/trusted projects and path casing during trust lookup.
<img width="1080" height="2520" alt="Image" src="https://github.com/user-attachments/assets/852f18fa-8d0e-45f1-a0ce-e3cbf8d50250" />Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
appIssues related to the Codex desktop appIssues related to the Codex desktop appbugSomething isn't workingSomething isn't workingconfigIssues involving config.toml, config keys, config merging, or config updatesIssues involving config.toml, config keys, config merging, or config updatesremotewindows-osIssues related to Codex on Windows systemsIssues related to Codex on Windows systems
Activity
unnamanama commentedon Aug 22, 2026
Independent confirmation of the same failure mode on another Windows project.
Observed behavior:
~/.codex/config.tomlusing an all-lowercase Windows path, e.g.:No Git/project changes were needed. This strongly suggests the Remote trust lookup is comparing Windows project-path keys case-sensitively instead of using Windows case-insensitive path semantics.
This is therefore reproducible independently and not specific to the project in the original report.
Alex24500 commentedon Aug 24, 2026
Confirmed on Windows with ChatGPT Android Remote.
Environment:
26.818.5229.00.149.0codex_chatgpt_android_remoteSymptoms:
The trusted entries created by Codex Desktop were lowercase:
Turakam83 commentedon Aug 25, 2026
I can confirm this issue on another Windows + Android setup, and I found an additional detail about the workaround.
Environment:
The symptoms were exactly the same:
My
config.tomlcontained trusted project paths in lowercase, for example:The actual Windows path shown/used by Remote is:
I first tried adding a second exact-case entry while keeping the lowercase entry:
In my case, this did NOT fix the issue. Android spent a long time trying to create the new thread and eventually failed again.
I then removed the lowercase entry completely and kept ONLY the correctly-cased entry:
After restarting Codex Desktop, creating new Codex Remote threads from Android started working normally again.
I reproduced the same problem across multiple projects.
So in my case, the reliable workaround is not to keep duplicate case variants, but to make sure there is only one trusted project entry and that its casing exactly matches the Windows path used by Remote.
This strongly suggests that Windows project trust lookup is currently case-sensitive somewhere in the Remote flow, and that duplicate paths differing only by case may also interfere with project selection.
robinschiro commentedon Aug 25, 2026
Confirming that only @Turakam83 's solution worked for me as a workaround for creating remote threads from an Android device to a project hosted on Windows. I needed to add a correctly-cased entry AND delete the original lowercase-only entry to get this to work again.
Alex24500 commentedon Aug 25, 2026
Temporary Windows/Android Remote fix
Fully close Codex Desktop.
Open:
%USERPROFILE%\.codex\config.tomlFind and delete the lowercase entry for the affected repository:
config.toml, reopen Codex Desktop, and retry creating the Remote thread in Full Access.Important: match the drive letter and every directory name character-for-character. Do not leave both the lowercase and correctly-cased entries—on some builds, duplicate case-equivalent entries still cause the trust check to fail.
The underlying bug appears to be that Android checks the raw
config.projectskeys case-sensitively, even though Windows paths are case-insensitive.pabloskihub commentedon Aug 27, 2026
Additional reproduction: Read Only → Full Access works, direct Full Access fails
I can consistently reproduce what appears to be a related Remote trust/session initialization issue with ChatGPT Android connected to Codex Desktop on Windows.
Environment
Behavior
Starting a new Remote chat with Full Access enabled from the beginning fails with the project trust verification error.
This happens both with newly created workspaces and with existing projects that are already usable normally in Codex Desktop.
However, I found a reliable workaround:
Hello.So the important distinction seems to be:
Full Access during thread creation → trust failurebut:
Read Only during thread creation → thread starts → switch to Full Access → worksThis suggests the failure may be happening specifically during the initial Remote trust/session initialization before the thread is created, rather than being a real filesystem permission or Remote connectivity problem.
Additional UI symptom
There is another unusual behavior that started at the same time.
A Remote-created chat that would normally appear in Codex Desktop using its chat title is instead displayed in the Recent list using its generated local workspace path, for example:
C:\Users\<user>\Documents\Codex\2026-08-27\<generated-chat-folder>The actual conversation itself works once it has been initialized through the Read Only workaround.
This makes me wonder whether the Remote thread is being incorrectly associated with the generated workspace path instead of its normal thread/project identity.
Control observations
Related issues
This may overlap with:
The Read Only → Full Access workaround may provide an additional clue because it appears to bypass only the initial trust gate while leaving the resulting Full Access session fully functional.
I can provide additional screenshots or test a specific diagnostic sequence if useful.
Etoiline commentedon Aug 27, 2026
Superseded by #41197, which contains the complete Windows/Android reproduction, the two-phone retest, the working Mac control, and the diagnostics.
evolsb commentedon Aug 27, 2026
A macOS reproduction corroborates the broader raw exact-key preflight mechanism (separate from Windows case folding). On Android
1.2026.230, the original Git project is exactly trusted and present in hostproject/list, but a newly generated projectless/worktree execution path fails beforethread/start. An exact trust write beginning only 0.326 ms after target birth still landed too late for the client decision. Host-created worktrees succeed.Full redacted timing evidence: #39678 (comment)
This suggests the durable fix should use effective/server-side project identity (including linked-worktree source resolution) rather than a client lookup equivalent to
config.projects[requestedPath].mlohri commentedon Aug 28, 2026
Confirmed independently on Windows with Codex Desktop package 26.820.9563.0 (client 26.820.71523; app-server 0.150.0) and ChatGPT Android Remote.
The Remote connection succeeds, but creating a new chat fails after “creating the chat on the remote machine” with the localized error:
The saved desktop project path uses normal mixed casing, while the trusted entry in config.toml was all lowercase. Host diagnostics show the Android Remote client connects and performs config/read/filesystem reads, but no thread/start request follows the failed trust check.
Adding a duplicate trusted entry whose casing exactly matches the saved Windows project path makes both exact-case and lowercase keys resolve as trusted in a fresh app-server config/read. This further supports Windows path casing as the trust-lookup boundary.
No account identifiers, tokens, raw logs, or private repository content are included.
sergeliatko commentedon Aug 28, 2026
Independent confirmation on a newer Windows build: this remains reproducible with Codex Desktop
26.825.4187.0and bundled Codex CLI/app-server0.150.0-alpha.12.2.Environment:
10.0.26200.0x6426200.92781.2026.230 (32)Additional diagnostics:
The project saved by Codex Desktop uses the normal mixed-case path:
C:\Users\<user>\PhpstormProjects\<repository>The corresponding trusted entry in the user configuration is stored in lowercase:
c:\users\<user>\phpstormprojects\<repository>A direct
config/readusing the Desktop app's bundled runtime under the actual Windows account returns the lowercase entry withtrust_level = "trusted".The Desktop project registry identifies the mixed-case path as the saved local Git repository.
Desktop logs show Remote Control enabling successfully with no
remoteControl/enableerrors.The user-facing project-trust rejection occurs before the requested Remote task starts.
No repository changes were required or attempted.
I did not alter
config.tomlor test the exact-case duplicate-entry workaround.This supplies another reproduction on a newer Desktop/app-server release and is consistent with a case-sensitive lookup of the raw
config.projectskeys rather than Windows-appropriate path comparison.Tomodo1773 commentedon Aug 29, 2026
I can confirm this issue on Windows with ChatGPT Android Remote.
Environment:
26.825.4187.00.150.0-alpha.12.2The issue affected all 16 saved local Windows projects on the host. Their existing trust entries used lowercase paths.
I added correctly-cased duplicate trust entries for all saved Windows projects while keeping the original lowercase entries. After updating
config.toml, creating a new Full Access chat from Android worked successfully.Unlike some reports above, I did not need to remove the lowercase entries. This suggests duplicate entries may behave differently depending on configuration or project state, even on the same Desktop build.
DavidTheArchitect commentedon Aug 29, 2026
Confirming this independently on Codex Desktop 26.825.x / codex-cli 0.150.0 (Windows 11 x64, official ChatGPT Android app). A project that had been trusted for weeks failed with this error, and adding an exact-case duplicate entry alongside the existing lowercase one immediately restored new Remote chats. Both keys coexist fine.
Two details that may save others some time:
config/readre-readsconfig.tomlfrom disk on every call, so the exact-case entry takes effect immediately. There is no need to restart Codex Desktop orcodex.exeafter editing the file. I verified this against an isolated app-server:config/read, append the entry,config/readagain, and the new key is present in the second response.wuseal commentedon Sep 5, 2026
Adjacent workaround for the generated-Worktree-path variant
The exact-case
config.tomlworkaround in this issue remains relevant to theWindows path-casing failure. For the related failure where Android rejects a
fresh generated
~/.codex/worktrees/<id>/<repo>path, an exact trust entry isnot reusable because every attempt allocates a new ID.
I confirmed a host-side workaround on macOS with ChatGPT desktop
26.831.21537and bundled Codex CLI/app-server0.152.1:project through the native
create_threadaction, withenvironment: { type: "worktree" }and only the user's self-contained taskas the new prompt.
fork_thread, which copies the parent conversation.The host-created task bypassed the mobile preflight, produced a registered
detached worktree linked to the original repository, preserved a clean source
checkout, and contained no parent-chat history. The detailed cross-platform
trust-ordering discussion is in #39678.
Limitations: a pending
clientThreadIdis not a realthreadIdand should notbe used for pin/read/wait calls or retried blindly. The completed task can later
drop out of the normal list, so this is a task-start workaround rather than a
fix for trust routing or durable discovery.
No repository-specific identifiers or private source details are included here.
aferende commentedon Sep 10, 2026
Additional confirmation with a Windows + Android Remote setup, with one extra detail involving Windows/WSL aliases for the same project.
I had the same repository trusted under both a native Windows path and a WSL
/mnt/c/...path, for example:Codex Desktop on Windows could open the project normally, but creating a new Codex Remote chat from Android failed with a trust error that referenced the WSL-style path:
I also tried keeping multiple Windows/WSL casing variants, but that did not help.
The workaround that fixed it was to remove every WSL
/mnt/c/...trust entry for that repository and keep only one native Windows entry:After restarting Codex Desktop, creating a new Remote chat from Android worked immediately.
Other projects on the same machine were unaffected.
This looks related to the case-sensitive trust lookup already discussed here, but suggests another edge case: trust resolution may also become ambiguous when the same physical Windows directory is present in
config.tomlunder both native Windows and WSL/mnt/c/...aliases. Normalizing Windows/WSL aliases before project trust evaluation may avoid this.cbjjensen commentedon Sep 10, 2026
Confirmed this is still reproducible on Windows 10 with Codex Desktop 26.903.9818.0 (bundled CLI/app-server 0.153.4) and ChatGPT Android Remote.
Diagnostics:
Workaround that resolved it:
Replace the lowercase trust table header with the exact path casing returned by environment/info:
[projects.'C:\Users<user>\workspace<repo>']
trust_level = "trusted"
Confirm config/read now returns that exact-cased key.
Restart Codex Desktop.
After that, Android Remote could start a new chat in the project. This confirms the case-sensitive Remote lookup is still present in desktop build 26.903.9818.0.
Apartman36 commentedon Oct 13, 2026
Confirmed: the exact-case, per-project trust-entry workaround works on my Windows host with Codex Remote from the ChatGPT Android app.
Can't verify project trust.config.tomlalready contained a trusted parent directory, but it did not contain exact-case trust entries for the individual project directories.[projects.'...']entry withtrust_level = "trusted"for each, preserving the exact casing of each Windows path.The additional detail in this case is that trusting the parent directory alone did not satisfy the Remote trust check; explicit entries for the individual projects with matching path casing resolved the observed failure.