Computer Use is unavailable in Windows Desktop when app-server runs in WSL (`reason=wsl-disabled`)
Summary
Codex Desktop on Windows can successfully use Remote Control while the app-server is configured to run in WSL, but Computer Use / Browser Use is explicitly marked unavailable in the same setup.
The important distinction is that Remote Control worked, but Computer Use did not. Logs show the availability gate returning reason=wsl-disabled, followed by native helper startup failures because the Windows Computer Use helper paths are unavailable.
Environment
Sanitized representative setup:
Product: Codex Desktop Windows Store app
Package family: OpenAI.Codex_26.527.x_x64__2p2nqsd0c76g0
Desktop release string in logs: 26.527.31326
OS: Windows 11 x64
Mode: Desktop configured to run app-server in Windows Subsystem for Linux
Codex home: Windows profile path mounted into WSL as /mnt/c/Users/<user>/.codex
Relevant config shape:
[desktop]
runCodexInWindowsSubsystemForLinux = true
integratedTerminalShell = "wsl"
keepRemoteControlAwakeWhilePluggedIn = true
[plugins."computer-use@openai-bundled"]
enabled = true
The plugin was later disabled manually to avoid repeated failures, but the root issue reproduced while Computer Use was enabled.
Observed behavior
Remote Control status reads succeeded:
remoteControl/status/read ... errorCode=null
Computer Use / Browser Use was unavailable in the same Desktop session:
browser_use_availability_resolved available=false browserPane=true platform=Windows reason=wsl-disabled release=26.527.31326
The native Computer Use helper then failed to start:
[computer-use-native-pipe] computer-use notify config ensure finished platform=win32 reason=missing-helper-path status=skipped
[computer-use-native-pipe] computer-use native pipe startup failed errorMessage="Windows Computer Use helper paths are unavailable" platform=win32
Trying to toggle the Computer Use plugin from Settings also failed once because plugin/marketplace refresh had concurrently modified config:
Failed to update plugin enabled state
Configuration was modified since last read. Fetch latest version and retry.
That config-write conflict is tracked separately, but it made the Computer Use failure harder to recover from through the UI.
Steps to reproduce
- Install Codex Desktop from the Microsoft Store on Windows.
- Configure Desktop to run Codex in WSL:
[desktop]
runCodexInWindowsSubsystemForLinux = true
integratedTerminalShell = "wsl"
- Enable Remote Control and verify the machine can be reached remotely.
- Enable the bundled Computer Use plugin.
- Open Settings > Computer use or try to use browser/computer-control functionality.
- Observe that Remote Control can work, but Computer Use remains unavailable with
reason=wsl-disabledand helper-path startup failures.
Expected behavior
If Windows Desktop + WSL is a supported Desktop mode, Computer Use should either:
- work by bridging from the WSL app-server to the Windows native helper in a supported way, or
- be clearly marked unsupported before the user enables it, with an actionable message explaining that Computer Use currently requires Windows-native app-server mode.
The current behavior is ambiguous: Remote Control works, the Computer Use plugin is visible/toggleable, but the availability gate disables browser/computer-use due to WSL and the helper startup reports missing paths.
Actual behavior
- Remote Control works in the WSL-backed Desktop profile.
- Computer Use is not usable in that same profile.
- Logs show
reason=wsl-disabledandWindows Computer Use helper paths are unavailable. - The UI does not provide a safe one-click path to switch into a Windows-native Computer Use profile without risking shared state/config issues.
Root cause hypothesis
Computer Use currently appears to require Windows-native helper paths and a Windows-native runtime contract, while the active Desktop profile launches the app-server inside WSL.
That creates a split runtime:
- Desktop host process is Windows.
- App-server/runtime is Linux/WSL.
- Codex home/state/config live under a Windows profile path but are accessed as
/mnt/c/...from WSL. - Computer Use helper is Windows-native and not exposed to the WSL-backed runtime as an available capability.
The product has enough plumbing for Remote Control to work in this mode, but Computer Use appears gated off by design or by incomplete bridge implementation.
Suggested fixes
- Add an explicit capability matrix for Desktop runtime modes:
Windows-native app-server: Remote Control yes/no, Computer Use yes/no, Browser Use yes/no
WSL app-server: Remote Control yes/no, Computer Use yes/no, Browser Use yes/no
- If Computer Use is unsupported in WSL mode, hide/disable the toggle and show a direct explanation:
Computer Use currently requires Windows-native agent mode.
- If Computer Use is intended to work in WSL mode, pass a stable Windows helper path/capability contract into the WSL-backed app-server instead of failing with
missing-helper-path.
- Provide a safe built-in switch path from WSL-backed Desktop to Windows-native Computer Use mode that does not reuse incompatible SQLite/plugin/cache paths blindly.
- Add a release-gate smoke test for this exact setup:
Windows Desktop + WSL app-server
Remote Control enabled
Computer Use plugin enabled
browser_use_availability_resolved should be either available=true or UI should say unsupported before enabling
- Avoid surfacing this as a generic plugin failure; the user-visible reason should distinguish unsupported WSL runtime mode from missing/corrupt helper installation.
Related issues
- #25194: Windows Computer Use helper path failure / Connect computer crash symptoms.
- #25216: Windows Desktop + WSL umbrella/release-gate issue.
- #24268: Windows+WSL bundled plugin cache path can be synthesized as invalid
C:\mnt\c\.... - #24065: Settings/plugin config writes can fail with
configVersionConflictduring plugin/marketplace refresh.
Privacy note
All user names, exact local thread/project names, and raw logs are redacted. The snippets above contain only sanitized method names, feature state, package family/version, and error strings needed to diagnose the product behavior.
5 Comments
I may have hit the same Windows bundled-plugin state issue in #25220. A full destructive clean reinstall of both Codex app + CLI and removing stale .codex folders fixed it for me. I posted details there to avoid duplicating the thread.
Update from newer Windows Desktop builds: I can now make Computer Use work in a Windows Desktop + WSL setup, but only when four separate gates are satisfied. This changes the issue from "CUA is simply unavailable in WSL mode" to "CUA works if the Windows native sidecar is isolated from the WSL Desktop home and still receives the product native pipe."
Working local shape:
Desktop process/user env:
The wrapper launches Windows
node_repl.exe --disable-sandboxfrom an isolated runtime home:and dynamically discovers/passes the product-managed pipe:
Validated operations through the supported
computer-use-client.mjspath:setupComputerUseRuntime({ globals: globalThis })sky.list_apps()sky.list_windows()sky.get_window(...)sky.get_window_state(...)sky.launch_app(...)sky.press_key(...)sky.click(...)sky.drag(...)sky.close()Recent local proof:
\\.\pipe\codex-computer-use-<uuid>list_appssmoke passed and closed cleanlyCtrl+N, brush drags, Type tool click, typed text layer, verification screenshot/text, clean close%USERPROFILE%\.codex\tmp\arg0remained WSL/Linux-onlynode_repl.exe -> codex.exe app-server --listen stdio://sidecars were presentFailure modes that still need product fixes:
node_replsidecars use sharedCODEX_HOME=%USERPROFILE%\.codex, they can create Windows.batarg0 helpers in the shared WSL app-server helper root and break shell execution.SKY_CUA_NATIVE_PIPE_DIRECTORY,computer-use-client.mjsfails withComputer Use native pipe path is unavailable.nodeRepl.nativePipeCreateConnectionType === undefinedis not enough to declare CUA broken; the trustedcomputer-use-client.mjsbootstrap is the real capability gate.computer-use-client.mjs; that is a plugin reconciliation failure, not proof that CUA app control failed.Suggested product behavior:
CODEX_HOME.SKY_CUA_NATIVE_PIPE_DIRECTORYinto that isolated runtime.%USERPROFILE%\.codex\tmp\arg0WSL/Linux-only, or namespacearg0helpers by runtime family.list_apps().Thank you for the detailed analysis. My God why should anyone have to go through this.
I finally gave up and run Windows Native with the desktop app, with tricks in my repo builds to allow my WSL testing to still be fast.
And of course there is always the CLI...but overall it is shameful how broken the WSL integration is.
I agree. I don't want to let Codex run on Windows outside of WSL installing garbage in my pristine Windows 11 installation, so the Chrome and Computer Use plugins are just teasers at this point. If OpenAI doesn't have any employees who like Windows, they can hire me and I'll use Windows 100% of the time to make sure that new release features work on Windows in WSL (or are hidden in the UI until they work).
Adding a current repro that still hits the same
reason=wsl-disabledgate on a newer Windows Desktop build.Environment
Relevant config:
Observed behavior
I can open the in-app browser pane and load an authenticated page, but the WSL-backed agent cannot inspect or claim it.
Current browser runtime checks:
Key Desktop log line:
The app still records the browser sidebar / webview lifecycle, so the visible browser pane exists:
Computer Use native pipe startup appears to happen on the Windows host:
But the WSL-backed agent still gets no browser backends.
Related marketplace/path symptom
The generated bundled marketplace contains only these plugins:
The same session also logs the invalid
C:\mnt\c\...path synthesis pattern during Chrome reconcile:Impact
This blocks me from using Codex Desktop’s in-app browser for authenticated page inspection while the agent runs in WSL mode. The browser is visually usable, but not exposed to the agent as a controllable backend.
Expected behavior
If Browser/Computer Use is unsupported in WSL-backed Desktop sessions, the app should say that directly and not expose an ambiguous browser pane for agent-inspection workflows. If it is intended to work, the Windows helper/native-pipe/browser capability needs to be bridged into the WSL-backed runtime so
agent.browsers.list()is not empty.