Repository navigation
[Windows] Computer Use surface is incorrectly gated to Darwin, leaving @oai/sky unregistered #43594
Description
Environment
OS: Microsoft Windows NT 10.0.19045.0 x64
Codex Appx: 26.901.6511.0
Bundled/plugin version: 26.901.51231
@oai/sky: 0.6.26
@oai/cua: 0.2.4
@oai/browser-desktop: 0.1.1
Summary
The Windows Computer Use backend appears to be present and functional, but the Codex main-process CUA surface-selection logic excludes the computer surface because of a Darwin-only platform gate.
As a result, normal startup produces:
CUA_REPL_ENABLED_SURFACES="browser"
The unified-computer-use runtime then starts with:
browser=true
computer=false
Consequently, the sky Trusted RPC service is not registered.
Minimal reproduction
- Start Codex normally on Windows.
- Inspect the active CUA runtime state:
await cua.getState();Observed:
apps: []
browsers: 3
- Import and call the Windows Computer Use API:
const { sky } = await import("@oai/sky");
await sky.list_apps();
await sky.list_windows();Both calls fail with:
Error: Trusted RPC service is not configured: sky
Expected behavior
When the Computer Use feature is enabled and the Windows native backend is available, the computer surface should be included in the CUA surface list.
The runtime should receive:
CUA_REPL_ENABLED_SURFACES="browser,computer"
and initialize with:
browser=true
computer=true
The Trusted RPC mapping should then include:
browser -> @oai/browser-desktop/service
sky -> @oai/sky/service
Actual behavior
Read-only inspection of the Codex main-process bundle found selector logic equivalent to:
let computerSurfaceEligible =
browserEligible &&
runtimePaths.platform === "darwin" &&
features.computerUse &&
computerUsePaths.enabled &&
computerUsePaths.serviceAppPath != null;
let surfaces = [];
if (browserEligible && browserBackends.length > 0) {
surfaces.push("browser");
}
if (computerSurfaceEligible) {
surfaces.push("computer");
}On this Windows system:
runtimePaths.platform = "win32"
Therefore the platform condition evaluates false and the selected surfaces are:
["browser"]
The .mcp.json writer then stores:
CUA_REPL_ENABLED_SURFACES="browser"
unified-computer-use/scripts/launch.mjs consequently derives:
browser=true
computer=false
and does not register:
sky -> @oai/sky/service
Diagnostic evidence
The following backend components were verified to exist and initialize:
- @oai/sky package
- @oai/sky/service
- Windows codex-computer-use.exe
- Windows native helper
- Native named pipe
- Native pipe startup reported startup ready
- Materialized Computer Use plugin files
- Bundled unified-computer-use runtime
The third-party browser-use/browser-harness Skill was also checked. It does not register or override sky and does not participate in NODE_REPL_TRUSTED_SERVICES.
Decisive isolated A/B experiment
No app.asar, feature flag, active .mcp.json, system environment variable, registry entry, cache, or third-party plugin was modified.
A separate fresh CUA child was started with the following environment variable set before process creation:
CUA_REPL_ENABLED_SURFACES=browser,computer
The fresh child actually reported:
setupOptions.browser=true
setupOptions.computer=true
Its Trusted RPC mapping included:
browser -> @oai/browser-desktop/service
sky -> @oai/sky/service
The following calls then succeeded:
await sky.list_apps();
await sky.list_windows();list_apps() successfully enumerated existing Windows applications, including Microsoft Edge, ChatGPT, Explorer, Chrome, Blender, Task Manager, Photoshop, OBS, and others.
list_windows() successfully enumerated the current Windows windows.
This confirms that, when the computer surface is enabled:
Windows @oai/sky backend: working
Windows native helper: working
Native pipe: working
Trusted RPC sky service: working
The isolated child was subsequently terminated.
The active .mcp.json remained unchanged. Its SHA256 before and after the experiment was identical:
E00CE9939E26DA8C5958F21B94F23575AF8976FF374765AE0B5EA1F3484F963F
No persistent environment variables were changed.
Why this is likely not an installation or environment issue
The same installed Windows backend, native helper, named pipe, and @oai/sky package successfully handled both list_apps() and list_windows() in a fresh child process when browser,computer was supplied before launch.
The failure occurs only in the normal Codex startup path, where the main process selects:
CUA_REPL_ENABLED_SURFACES="browser"
before unified-computer-use is launched.
The evidence suggests that the main-process CUA surface-selection logic is gating the computer surface to Darwin, even though the Windows Computer Use backend is present and functional.
Request for investigation
Please inspect the main-process CUA surface-selection path, especially:
cuaReplSurfaces
Windows computerUseNodeRepl path
platform gating around the computer surface
CUA_REPL_ENABLED_SURFACES generation
The intended fix is not asserted here; the request is to verify whether the Windows surface-selection logic is incorrectly constrained by the Darwin platform check.
Activity
github-actions commentedon Sep 7, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
cezaronx commentedon Sep 8, 2026
Additional confirmation from the affected Windows installation: after a full Codex restart with
CUA_REPL_ENABLED_SURFACES=browser,computerpresent in the parent process environment, fresh Codex tasks still reportedapps: []with Chrome/in-app-browser surfaces available but no native apps. The internally managed CUA child was still launched browser-only.This reproduced in two fresh tasks after the restart. It also clarifies that the isolated-child A/B described above is a useful root-cause diagnostic, but is not a working full-Codex workaround: the normal main-process/managed-child startup path still selects or rewrites the surface set to browser-only.
AIR55745 commentedon Sep 10, 2026
I found a working workaround on the affected Windows installation for this issue.
Verified workaround
Rename the bundled Computer Use skill file so Codex does not load it:
After doing this and starting a fresh Codex task, Computer Use began working normally again on Windows. This is different from the earlier
CUA_REPL_ENABLED_SURFACES=browser,computerexperiment: setting that environment variable in the parent process did not fix normal Codex startup, while renamingskill.mddid.So, at least on this affected installation, the failure appears to involve the loaded
computer-useskill path/configuration in addition to (or interacting with) the Windows CUA startup behavior described in the issue.This is only a workaround, not a proposed upstream fix. When an official Codex/Computer Use fix ships, the workaround should be removed/restored so it does not mask or conflict with the updated bundled skill. The rollback is simply the reverse rename, e.g.:
For anyone still blocked by native Windows Computer Use, this workaround has been verified to restore functionality on one affected system.
qiuiu727 commentedon Sep 13, 2026
Additional Windows reproduction on Codex AppX 26.908.4834.0, with computer-use and unified-computer-use plugin version 26.908.40834.
Observed during troubleshooting:
computer-use native pipe startup readywithplatform=win32.plugin_install_succeeded ... pluginName=computer-use.cua.getState()checks in the affected conversation returnapps: []and only the Codex In-app Browser.CUA_REPL_ENABLED_SURFACES=browserandNODE_REPL_TRUSTED_SERVICES={"browser":"@oai/browser-desktop/service"}(no sky mapping).The successful native-pipe startup occurred before the plugin reinstall; the same Desktop process remained running afterward. Earlier Desktop restarts/new-conversation attempts had also been reported unsuccessful, but this is not a controlled clean-profile reproduction. Native-pipe readiness alone does not prove end-to-end desktop automation works.
Environment caveat: this installation uses a scoped proxy launcher and has undergone local troubleshooting (including proxy-environment changes in the CUA launcher and disabling third-party account-switcher takeover/UI injection). Therefore these observations should not be treated as proof of a single upstream cause. No forced native-surface registration or platform-gate workaround is being proposed here.
Could maintainers clarify whether Windows native Computer Use is expected through the unified CUA path or a separate node_repl path in this build, and why a ready Windows native pipe plus successfully installed plugin can still leave the conversation browser-only? Sanitized diagnostic summary only; no credentials, account identifiers, full logs, or private conversation content are attached.
gonzalo-izquierdo commentedon Sep 14, 2026
Still reproducible on Codex 26.908.40834 / Windows 10 22H2.
I can confirm that this issue still occurs on a newer Codex build.
Environment
@oai/cua: 0.2.4@oai/sky: 0.6.32@oai/cua-repl: 0.1.0UI configuration
Observed behavior
cua.initialize()/cua.getState()returns:The two browsers are Chrome and the Codex in-app browser.
Both native Sky calls fail with:
for:
Runtime configuration
The normal installed/runtime environment contains:
There is no:
mapping.
I verified that:
@oai/sky/serviceis installedservice.jsexistsNODE_REPL_TRUSTED_CODE_PATHScodex-computer-use-swift.exeis runningThe resolved Sky service is under:
and is inside the configured trusted module path.
Additional isolated diagnostic
I also tested a temporary child process with:
and it reported:
However, my isolated child experiments were not able to complete
sky.list_apps()because reproducing the full trusted RPC / node_repl bootstrap outside the normal Codex startup path was unsuccessful.Therefore I am not claiming that the isolated test independently proves that the native Sky backend works on my installation.
The relevant reproduction is that the normal Codex startup on 26.908.40834 still omits Sky from
NODE_REPL_TRUSTED_SERVICES, returnsapps=[], and exposes only browser surfaces despite Computer Use + Any App being enabled.This appears consistent with the surface-selection / Sky registration issue described here.
I can provide additional read-only diagnostics if useful.
park12347789 commentedon Sep 15, 2026
Additional Windows reproduction on Codex Desktop 26.908.9136.0 / unified-computer-use 26.908.70816 (2026-09-15). Computer Use is enabled, but
await cua.getState()returnsapps: []while browser surfaces work. The installed bundled.mcp.jsoninitially containsCUA_REPL_ENABLED_SURFACES: "browser"andNODE_REPL_TRUSTED_SERVICEScontains only the browser service. I changed that value tobrowser,computer, restarted Codex, and it was automatically rewritten back tobrowser; the native app inventory remained empty. The plugin/runtime files and Windows helper are present. Please investigate why the Windows startup path selects or rewrites the surface list to browser-only, and why the runtime documentation advertisesgetApp/listAppswhile the actualcuaobject in this session has neither function. No credentials or private files are included.cybermikan commentedon Sep 16, 2026
Additional Windows reproduction from Codex Desktop build/plugin 26.908.70816 (2026-09-16). This closely matches the issue and adds session/approval evidence.
Observed normal Codex session:
apps: []cua.getApp/cua.listAppsare not exposed.mcp.jsonmaterializesCUA_REPL_ENABLED_SURFACES="browser"Backend isolation:
@oai/skybridge is functionalsky.list_apps()returns real Windows applicationssky.list_windows()sees a running native application window (FORGE PERSONAL, version 1.2.95)Controlled reversible cache test:
.mcp.jsonCUA_REPL_ENABLED_SURFACESfrombrowsertobrowser,computerapps: [];getApp/listAppsremained unavailableApproval/elicitation finding:
@oai/skyprocess can enumerate the native app/window but screenshot correctly stops withComputer Use requires app approval but elicitations are unavailablenode_replhost suppliesnodeRepl.createElicitation(...); the isolatedcreate_client({target:"windows"})process lacks that host RPC/request metadataThis suggests two distinct pieces are healthy (Windows native Sky backend and native pipe) while the active Codex CUA session/facade is not registering/exposing the Windows computer surface and its legitimate elicitation binding. A post-materialization
.mcp.jsonedit is not sufficient for an already-created session.No FORGE files, Codex binaries, runtime binaries, or persistent environment variables were modified. This regression was noticed immediately after a Codex Desktop update; native Windows Computer Use had been working on the same machine before that update.
Please consider checking the Windows CUA session/facade registration path in addition to
.mcp.jsongeneration, including when the computer surface and trustedskyservice are bound to the Codexnode_replelicitation channel.cybermikan commentedon Sep 16, 2026
One additional timeline detail that may help distinguish a pure CUA regression from an updater/materialization race:
On the affected machine, native Windows Computer Use was working normally immediately before an in-app Codex Desktop update. The user clicked the update; Codex shut itself down, but there was no visible update-progress UI and the client did not automatically relaunch. Because there was no indication whether background update work had completed, the user manually launched Codex again. The browser-only native-CUA failure was observed after that update/relaunch cycle.
We cannot establish that the manual relaunch occurred before the updater had fully completed, so this should not be treated as the proven cause. However, it may be worth checking whether plugin/runtime materialization or CUA capability registration can race with an in-progress update/relaunch, and whether an interrupted/incomplete post-update initialization can leave the unified-computer-use session materialized as browser-only.
Separately, the updater UX gave no progress/completion/relaunch indication after shutting down the client. Even if unrelated to this CUA regression, an explicit update progress/completion state or automatic relaunch could prevent ambiguous partial-update states and make similar regressions easier to diagnose.
cybermikan commentedon Sep 16, 2026
Product/update UX suggestion based on this regression: please consider providing a supported user-facing rollback option for Codex Desktop updates.
For example, Settings > Updates could retain the immediately previous known-good Desktop/runtime/plugin bundle and offer
Revert to previous versionwhen a new update causes a regression. Ideally this would be an atomic rollback of the compatible app + runtime/plugin set, with the option to pause re-installation of the problematic update until a newer build is available.This would be especially useful for Computer Use regressions, where a new build can block workflows that were working immediately before the update. It would also be safer than users manually downgrading AppX/MSIX packages or mixing app/runtime/plugin versions.
Related updater UX improvements that would help:
Update completestate;Safe to relaunchindication;In this case the previous version had working Windows native Computer Use, while the post-update session became browser-only. A supported rollback mechanism would have allowed immediate recovery while preserving a clean diagnostic path for the regression.
cybermikan commentedon Sep 16, 2026
We now have the exact Windows Desktop update boundary from read-only AppX deployment history:
26.908.4834.0— Windows native Computer Use was working before the update.26.908.9136.0.2026-09-16 02:57:37local time.apps: []; native app access unavailable), while the isolated Windows@oai/skybridge can still enumerate native Windows apps/windows.The previous AppX path was recorded as:
C:\Program Files\WindowsApps\OpenAI.Codex_26.908.4834.0_x64__2p2nqsd0c76g0Windows package history indicates that previous package was moved under
WindowsApps\Deleted\...and deletion was attempted. No complete previous installer/MSIX or matching old runtime/plugin bundle remains locally, so we are not attempting an unsupported manual rollback.This gives a relatively narrow regression window:
26.908.4834.0->26.908.9136.0. If possible, please diff Windows CUA surface/session registration, unified-computer-use plugin materialization, and trusted Sky/node_repl elicitation binding across these builds.cybermikan commentedon Sep 16, 2026
Additional intermittent/session-dependent behavior observed on the same Windows setup:
A newly created Codex chat/session last night was able to see native Windows Computer Use / FORGE PERSONAL, but a newly created chat/session today fails again with:
cua.getState()->apps: []cua.listApps->cua.listApps is not a functionNo system, FORGE, runtime, cache, plugin, or configuration changes were made during this latest check.
This is important because it suggests the post-update build may not be permanently incapable of native Windows CUA. Native capability appears to have been successfully registered in at least one fresh session and then unavailable again in another fresh session. That may point to intermittent/session-dependent capability registration, initialization, feature materialization, or trusted Sky/node_repl binding rather than a consistently broken Windows backend.
Please consider checking differences in session bootstrap/capability registration when a fresh chat is created, including why one session can receive the native computer surface while another receives browser-only CUA on the same installation.
cybermikan commentedon Sep 16, 2026
More precise timeline from the intermittent reproduction: this occurred in a NEW Codex chat/session created that morning, not an old chat carried across the update.
At ~06:30 the new chat explicitly reported:
Computer Use is ready. There are currently no open desktop applications.This indicates that Computer Use was surfaced/available to that fresh chat at session start.Later in the SAME fresh chat/session, while the user could visibly see FORGE PERSONAL open on the Windows desktop, Codex could no longer discover/control it and reported
apps: []. The user therefore had a native FORGE window visibly open, while the CUA channel claimed there were no discoverable native apps/windows.No FORGE/runtime/cache/plugin/config changes were made to intentionally cause that transition.
This strengthens the possibility of a session-lifetime/bootstrap/registration problem: a fresh chat can initially expose Computer Use, yet native Windows app discovery can subsequently be unavailable in that same session. Please check whether the native computer surface / Sky service / approval binding can be lost or fail to complete after initial session bootstrap, rather than assuming this only affects chats created before an update.
somethingaw commentedon Sep 22, 2026
Still reproducible on Codex Desktop 26.915.4065.0
I can confirm that this issue is still present in the current Windows Codex Desktop package.
The failure is still in the main-process Computer Use surface-generation path rather than in the Windows native runtime itself.
Current observed behavior
A live probe of the current Computer Use session exposes only the browser surface.
The following Windows Computer Use API objects are not registered:
There are also no injected Windows
cua.computer.*usage instructions in the active session.As a result, the session cannot enumerate, launch, or control native Windows applications such as Calculator or IntelliJ IDEA.
Root cause in 26.915.4065.0
Read-only inspection of the currently installed package identifies the relevant main-process bundle as:
The current build still contains two Darwin-specific checks.
The Windows feature path is capable of starting the native pipe and helper runtime, but the
So()surface-generation path still computescomputerSurfaceEnabledusing a condition equivalent to:On Windows:
so the condition is always false.
The resulting path is:
This explains why forcing:
does not fix the issue.
Those flags can enable the REPL/runtime path, but they cannot make the original Windows surface-selection expression produce the
"computer"surface.Native runtime is not the blocker
The important distinction is that this does not appear to be a Windows native runtime startup failure.
The Windows feature path can successfully initialize the native pipe and helper runtime.
The failure occurs later when the main process generates the enabled CUA surfaces.
Therefore the current behavior is effectively:
Patch dry-run result
I also performed a non-destructive dry-run against the installed
app.asar.The
OnlyComputerUseSurfacepatch logic:The installed MSIX /
app.asarremains unchanged.This provides additional evidence that the remaining Darwin-only surface condition is the direct blocker in
26.915.4065.0.Expected behavior
When Windows Computer Use is enabled and its native runtime is available, the surface-selection path should allow:
so that
@oai/cua-replregisters the Windows Computer Use service and exposes:Conclusion
The issue originally reported here remains reproducible in Codex Desktop
26.915.4065.0.The current evidence points specifically to a client-side surface-generation/platform-gating omission rather than:
computerUsefeature state;computerUseNodeRepl;The remaining blocker is that the normal Windows startup path still cannot generate the
"computer"surface while the surface eligibility condition remains Darwin-only.awkwardss commentedon Sep 24, 2026
Additional upgrade-regression confirmation on Windows:
26.915.31945. Codex successfully used@oai/sky/sky.list_apps(), discovered QQ Music, and interacted with its native UI.26.917.62051on 2026-09-24, native applications stopped being exposed.await cua.getState()returnsapps: [], while the browser surface is present.cua.listWindows,cua.listApps,cua.getApp, andcua.launchAppare allundefined.requirements.tomloverride and nocomputer_usedisable entry inconfig.toml.This is a before/after reproduction on the same Windows machine. It appears consistent with the normal Windows startup path selecting a browser-only surface and failing to register the native
skyservice.The regression window appears to be between
26.915.31945and26.917.62051.