Repository navigation
Codex Desktop Windows+WSL creates in-app browser WebView despite wsl-disabled and spams git-repo-watcher EISDIR #32183
Description
What version of the Codex App are you using?
Codex Desktop for Windows.
Release shown in logs:
26.707.31428
Windows package path observed in logs:
OpenAI.Codex_26.707.3748.0_x64__2p2nqsd0c76g0
What platform is your computer?
Windows with WSL2 Ubuntu. Codex Desktop is using a WSL-backed project/workspace.
Representative sanitized paths:
WSL project path: /home/<wsl-user>/projects/<repo>
Windows UNC path observed in logs: \\wsl$\Ubuntu\home\<wsl-user>\projects\<repo>
Dev server URL: http://localhost:5173
What issue are you seeing?
Codex Desktop on Windows appears to mishandle the in-app browser and Git watcher when the active project lives inside WSL.
The app previously exited unexpectedly shortly after the in-app browser WebView was created for a localhost dev server. After restart, logs still show the in-app browser availability resolving to wsl-disabled, while the UI/session lifecycle continues to bind in-app browser routes and create WebViews. At the same time, the Git repo watcher repeatedly fails with EISDIR against \\wsl$\Ubuntu\... paths.
This looks like a Windows Desktop + WSL compatibility issue, not a project-code issue.
What steps can reproduce the bug?
- Use Codex Desktop on Windows with a project stored in WSL, e.g.
/home/<wsl-user>/projects/<repo>. - Run a frontend dev server inside WSL, e.g.
http://localhost:5173. - Open the Codex in-app browser / browser sidebar for that localhost URL.
- Observe Desktop logs around Browser Use / IAB lifecycle and Git repo watcher.
- In my repro, Codex Desktop exited unexpectedly shortly after the in-app browser WebView was created/attached.
- After restart, the same environment continued to log
reason=wsl-disabledwhile still emittingIAB_LIFECYCLEroute/binding events.
Expected behavior
If in-app browser support is disabled for WSL:
browser_use_availability_resolved available=false reason=wsl-disabled
Codex Desktop should not proceed to create/bind in-app browser WebViews for that WSL task in a way that can destabilize or crash the app.
The Git repo watcher should either correctly watch WSL project Git paths or gracefully disable/degrade watching without repeatedly logging EISDIR.
Actual behavior
The logs show in-app browser availability explicitly disabled for WSL:
2026-07-10T14:37:43.297Z info [electron-message-handler] browser_use_availability_resolved available=false browserPane=true platform=Windows reason=wsl-disabled release=26.707.31428
Despite that, in-app browser lifecycle/session routing still occurs:
2026-07-10T14:37:43.297Z info [electron-message-handler] IAB_LIFECYCLE received browser sidebar owner sync ...
2026-07-10T14:37:43.300Z info [browser-session-registry] IAB_LIFECYCLE captured session route ...
2026-07-10T14:47:31.442Z info [electron-message-handler] IAB_LIFECYCLE renderer created browser sidebar webview ... initialUrl=http://localhost:5173/
The Git watcher repeatedly fails on WSL paths:
warning [git-repo-watcher] Failed to watch git path errorCode=EISDIR errorMessage="EISDIR: illegal operation on a directory, watch '\\\\wsl$\\Ubuntu\\home\\<wsl-user>\\projects\\<repo>\\.git'"
path=/home/<wsl-user>/projects/<repo>/.git
There is also evidence of Windows/WSL path conversion problems in the bundled plugin reconciliation path:
errorMessage="ENOENT: no such file or directory, access 'C:\\mnt\\c\\Users\\<windows-user>\\.codex\\plugins\\cache\\openai-bundled\\chrome\\26.707.31428'"
marketplacePath=/mnt/c/Users/<windows-user>/.codex/.tmp/bundled-marketplaces/openai-bundled/.agents/plugins/marketplace.json
platformFamily=unix
pluginName=chrome
Mitigations already tried
Disabled the external Chrome plugin in Codex config while leaving the in-app browser plugin enabled:
[plugins."chrome@openai-bundled"]
enabled = false
[plugins."browser@openai-bundled"]
enabled = trueVerified codex plugin list reports:
chrome@openai-bundled installed, disabled 26.707.31428
Disabled/removed the external Chrome extension from the user's Chrome profile. Later logs changed from:
isExtensionInstalled=true
chromeExtensionSyncAction=keep_installed
to:
isExtensionInstalled=false
chromeExtensionSyncAction=keep_user_managed
This appears to resolve the external Chrome-extension side path, but the WSL in-app browser lifecycle and Git watcher issues remain.
User impact
The user cannot safely use Codex Desktop's in-app browser for a WSL-based frontend dev workflow. The current workaround is to run the dev server in WSL and open localhost in an external Chrome/Edge browser instead of the Codex in-app browser.
Related issues
This seems related to, but not an exact duplicate of:
- Windows App: WSL file links and built-in browser preview do not work for WSL projects #30565: Windows App WSL file links and built-in browser preview do not work for WSL projects.
- WSL agent: bad cwd and Chrome/Computer Use unavailable #30435: WSL agent bad cwd and Chrome/Computer Use unavailable.
- Browser Use Node REPL fails in Windows Desktop app with WSL workspace due to unmapped sandboxCwd #29639: Browser Use Node REPL fails in Windows Desktop app with WSL workspace due to unmapped sandboxCwd.
- Computer Use is unavailable in Windows Desktop when app-server runs in WSL (
reason=wsl-disabled) #25301: Computer Use unavailable in Windows Desktop when app-server runs in WSL (reason=wsl-disabled). - Codex Desktop Windows+WSL resolves bundled plugin cache as invalid C:\mnt\c path #24268: Windows+WSL resolves bundled plugin cache as invalid
C:\mnt\cpath. - Windows desktop Summary tab shows false GitHub CLI / PR status errors for WSL repos and logs git watcher ENOENT on .git paths #17991: Windows desktop Summary tab shows WSL Git watcher path issues, though that issue reports
ENOENTrather thanEISDIR.
This issue is specifically about the combination of:
browser_use_availability_resolved ... reason=wsl-disabled,- continued
IAB_LIFECYCLEroute/WebView creation for the WSL task, - repeated
git-repo-watcher EISDIRon\\wsl$\Ubuntu\...Git paths, - an earlier unexpected Desktop exit immediately after opening the in-app browser for a WSL-hosted localhost page.
Requested investigation
Please investigate:
- Why
IAB_LIFECYCLEproceeds afterbrowser_use_availability_resolved available=false reason=wsl-disabled. - Whether the Windows Desktop Git watcher is incorrectly using Windows
fs.watchsemantics on WSL UNC directories. - Whether the
C:\mnt\c\...path conversion during bundled plugin reconciliation is related to the same Windows/WSL path handling issue. - Whether Codex Desktop should explicitly suppress or disable the in-app browser button/pane for WSL tasks until this path is supported.
Privacy note
Local user names, exact project names, and thread IDs have been redacted. The snippets above contain only sanitized method names, feature state, package family/version, and error strings needed to diagnose the product behavior.
Activity
github-actions commentedon Jul 10, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
tompw89 commentedon Jul 11, 2026
Adding a fresh reproduction after a complete Codex Desktop restart on the same release family.
Environment
OpenAI.Codex_26.707.3748.0_x6426.707.31428/home/<wsl-user>/projects/<repo>0.144.1CODEX_HOME=C:\Users\<windows-user>\.codex_wslFresh restart result
Settings > Browser shows:
The fresh Desktop log resolves availability as:
This is despite all of the following:
browser_use=truein_app_browser=truenode_replMCP present and enablednode_repl.exeand Nodev24.14.0BROWSER_USE_AVAILABLE_BACKENDS="chrome"A no-op
node_repl/jscall still fails before JavaScript executes:The same Codex home also previously logged both adjacent WSL path failures described here:
Important isolation
Workspace Dependencies were repaired separately. Settings now reports primary runtime
26.709.11516; bundled Node and Python resolve and execute successfully. The missing extensionless Linuxcodex-code-mode-hostwas restored from the signed installed Desktop package and hash-verified. After that repair and a full Desktop restart, the Browser result remainedreason=wsl-disabledand the Node REPL call retained the samesandboxCwdfailure.This therefore does not appear to be caused by an absent primary workspace runtime. The remaining failure is the WSL Browser eligibility gate plus the Windows/WSL
sandboxCwdbridge.aussiDavid commentedon Jul 15, 2026
I’m seeing what looks like the same underlying issue on a newer Codex Desktop build.
Environment:
OpenAI.Codex_26.707.9981.0_x6410.0.26200\\wsl.localhost\<WSL_DISTRO>\home\<WSL_USER>\<REPO_NAME>Observed behavior:
Application Errorevent forChatGPT.exe.git-repo-watcherwarnings before/around the restarts.Representative redacted log line:
Other failing paths included:
One fresh app session generated thousands of these
EISDIRwatcher errors within minutes.I have not confirmed the in-app browser/WebView part of this issue in my case. The strongest signal I found is the
git-repo-watcherloop on WSL UNC paths, and it correlates with repeated desktop app restarts.gilmarvitor commentedon Jul 16, 2026
I'm seeing the same git-repo-watcher failure pattern reported here, but inside a valid WSL Git repository (not a non-repository workspace). In my environment, the watcher repeatedly fails with EISDIR trying to watch
\\wsl$\Ubuntu\home\<wsl-user>\workspace\<workspace>\.git, very similar to what @aussiDavid reported in this issue.Environment:
Unlike the non-Git-repository directory scenario (which I already reported separately in issue #32695, related to git-init-watcher), this case occurs inside a valid, active WSL Git repository, and the error rate is much higher.
Measurement observed in my session: approximately 11.9 EISDIR warnings per second, which projects to roughly 41,631 failures per hour, producing around 44 MiB of logs from these repeated warnings alone.
This suggests the issue is not just cosmetic: the logging I/O volume and the indefinite retry of watching a
\\wsl$\...UNC path seem to indicate that the Windows-side watcher is using fs.watch semantics incompatible with this type of path, without any backoff or disabling after permanent failures.I did not try to work around this by moving the project to Windows or switching the agent to run natively on Windows, since that would not address the underlying watcher issue.
This could potentially be addressed with one of the approaches already suggested in this and related issues: running the watcher in the same environment as the filesystem (inside WSL), using a WSL-compatible backend, or implementing backoff/disabling of the watcher after detecting a permanent EISDIR-type failure for this kind of path.