Windows: Codex launches tools with \\?\ namespace cwd, breaking pnpm/Node tooling
Summary
On Windows, Codex desktop is sometimes launching shells/tools with the workspace cwd set to the raw namespace path form \\?\C:\... instead of a normal DOS path like C:\....
That breaks Node ecosystem tools. In my case it caused pnpm to fail immediately with:
ERROR EISDIR: illegal operation on a directory, lstat 'C:'
This appears to be a Codex cwd normalization bug, not a repo-specific problem.
Environment
- OS: Windows
- Shell: PowerShell
- Workspace path:
C:\Users\brade\OneDrive\Desktop\vibecodr - Codex desktop app
Repro
- Open a workspace in Codex desktop such that the terminal/process cwd becomes
\\?\C:\Users\brade\OneDrive\Desktop\vibecodr - In the terminal, run:
Get-Locationnode -e "console.log(process.cwd())"pnpm -v
- Observe that PowerShell and Node report the cwd as the raw
\\?\C:\...path. - Observe that
pnpmfails withEISDIR: illegal operation on a directory, lstat 'C:'.
Verified Comparison
Using the same repo on the same machine:
- With cwd =
\\?\C:\Users\brade\OneDrive\Desktop\vibecodr node -e "console.log(process.cwd())"prints\\?\C:\Users\brade\OneDrive\Desktop\vibecodrpnpm -vfails withEISDIR: illegal operation on a directory, lstat 'C:'
- With cwd =
C:\Users\brade\OneDrive\Desktop\vibecodr node -e "console.log(process.cwd())"printsC:\Users\brade\OneDrive\Desktop\vibecodrpnpm -vworks normally
Expected Behavior
Codex should normalize Windows workspace cwd values before passing them to spawned shells/tools/processes.
Tools should receive a normal DOS path such as:
C:\Users\brade\OneDrive\Desktop\vibecodr
not the raw namespace-prefixed form:
\\?\C:\Users\brade\OneDrive\Desktop\vibecodr
Actual Behavior
Codex sometimes launches the terminal/processes with the raw \\?\ namespace path as cwd, which breaks pnpm and likely other Node tooling.
Impact
This breaks a lot of Codex desktop workflows on Windows because many app features eventually shell out to Node-based tools.
Likely Root Cause
Codex is probably preserving a Windows namespace path from internal file APIs and passing it through unchanged as the cwd for child processes.
Workaround
Manually cd to the normal path:
Set-Location -LiteralPath 'C:\Users\brade\OneDrive\Desktop\vibecodr'
or reopen the workspace from the normal path instead of the \\?\... path.
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗