Windows Desktop + WSL CUA sidecars should use isolated runtime home while preserving native pipe env

Open 💬 1 comment Opened Jun 10, 2026 by MisterRound

Summary

In Windows Desktop + WSL mode, Computer Use can work locally, but the product-generated CUA/browser-use node_repl sidecar path needs to use an isolated Windows runtime home while preserving the product-created CUA native pipe.

Without that split, the sidecar can use shared Desktop CODEX_HOME=%USERPROFILE%\.codex, create Windows .bat arg0 helpers under the same shared root as the WSL app-server's Linux helpers, and break normal WSL shell/tool execution.

Environment

Sanitized representative setup:

Product: Codex Desktop Windows Store app
Mode: Windows Desktop with app-server running in WSL
Desktop persistent CODEX_HOME: %USERPROFILE%\.codex
WSL view of same home: /mnt/c/Users/<user>/.codex
Computer Use plugin: openai-bundled computer-use

Working local workaround

CUA works locally when the Windows native sidecar is isolated from the shared Desktop home and still receives the native pipe:

[features].computer_use=true
CODEX_ELECTRON_ENABLE_WINDOWS_COMPUTER_USE=1
CODEX_NODE_REPL_PATH=%USERPROFILE%\.codex\node_repl_wsl.sh

The wrapper launches Windows node_repl.exe --disable-sandbox from:

CODEX_HOME=%USERPROFILE%\.codex\chrome-runtime-home

and discovers/forwards:

SKY_CUA_NATIVE_PIPE=1
SKY_CUA_NATIVE_PIPE_DIRECTORY=\\.\pipe\codex-computer-use-<uuid>

Validated local result

Through the supported computer-use-client.mjs bootstrap:

  • sky.list_apps() passed;
  • sky.list_windows() / get_window(...) / get_window_state(...) passed;
  • Calculator coordinate-click smoke passed and verified display update;
  • a 12-second hold-open smoke stayed responsive and closed cleanly;
  • Phone Link app flow reached and generated the QR code after fixing an unrelated local Bluetooth service dependency;
  • Photoshop 2026 clean-document UI-only drawing/text stress passed using CUA UI controls only, no scripts/shell/app-native automation/imported images;
  • sky.close() cleanly ended CUA;
  • shared %USERPROFILE%\.codex\tmp\arg0 remained WSL/Linux-only;
  • Windows .bat helpers appeared only under the isolated runtime home.

Failure modes without the split

Observed failure modes in the same setup:

  1. Product-generated Windows node_repl.exe -> codex.exe app-server --listen stdio:// sidecar uses shared CODEX_HOME=%USERPROFILE%\.codex.
  2. That sidecar creates .bat helpers under shared %USERPROFILE%\.codex\tmp\arg0.
  3. A live WSL app-server/thread remains pinned to a missing Linux helper dir under the same root.
  4. Normal shell/tool calls fail before /bin/bash starts with:
Io(Os { code: 2, kind: NotFound, message: "No such file or directory" })

Other partial-fix failure modes:

  • CUA pipe exists but SKY_CUA_NATIVE_PIPE_DIRECTORY does not reach computer-use-client.mjs, yielding Computer Use native pipe path is unavailable.
  • computer-use-client.mjs is missing because bundled marketplace/cache reconcile drift removed or hid the computer-use plugin.
  • A root metadata probe is misleading: the trusted computer-use-client.mjs bootstrap is the real capability gate.

Expected behavior

For Windows Desktop + WSL:

  • product-generated CUA/browser-use node_repl sidecars should use an isolated Windows runtime home, not shared Desktop CODEX_HOME;
  • the sidecar must still receive SKY_CUA_NATIVE_PIPE_DIRECTORY;
  • shared %USERPROFILE%\.codex\tmp\arg0 should remain WSL/Linux-only during WSL app-server sessions, or arg0 should be runtime-family namespaced;
  • no bare/shared-home node_repl.exe -> codex.exe app-server --listen stdio:// sidecar should be spawned for CUA/browser-use;
  • CUA release gates should validate at least one real action path, not just pipe creation or list_apps().

Related issues

  • #25301: original CUA unavailable / reason=wsl-disabled report.
  • #25317: shared arg0 helper poisoning and stale helper path ENOENT.
  • #26985: split persistent Desktop home from WSL runtime cache.
  • #24268: Windows/WSL bundled plugin path and cache materialization drift.
  • #21971: Chrome node_repl WSL path/trust mismatch.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗