Computer Use 1.0.1000451 cannot load @oai/sky because nodeRepl.env is empty on macOS 26
What version of the Codex App are you using (From “About Codex” dialog)?
Version 26.715.52143 (5591)
Computer Use plugin: 1.0.1000451
What subscription do you have?
Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm
macOS 26.5.1 (25F80), Apple Silicon
What issue are you seeing?
The bundled Computer Use plugin cannot initialize. Every Computer Use operation fails before accessing the target application because the plugin wrapper cannot locate the bundled @oai/sky runtime.
The runtime is installed inside the ChatGPT application bundle, but nodeRepl.env is an empty immutable object. Consequently, computer-use-client.mjs receives no NODE_REPL_NODE_MODULE_DIRS, creates an empty search-root list, and throws:
Computer Use could not load @oai/sky from the cua_node runtime
This reproduces with sky.list_apps() and when targeting Safari or Google Chrome. The failure occurs before application permissions or UI access are evaluated.
Diagnostic output from the running Node REPL:
{
"env": {},
"envExtensible": false,
"nodeReplEnvDescriptor": {
"value": {},
"writable": false,
"enumerable": true,
"configurable": false
}
}
The required runtime does exist at:
/Applications/ChatGPT.app/Contents/Resources/cua_node/lib/node_modules/@oai/sky/dist/project/cua/sky_js/src/targets/mac/create_client.js
The plugin-owned wrapper is installed at:
$HOME/.codex/plugins/cache/openai-bundled/computer-use/1.0.1000451/scripts/computer-use-client.mjs
No PII, credentials, or access tokens are included in this report.
What steps can reproduce the bug?
- On an Apple Silicon Mac, install and enable the bundled Computer Use plugin.
- Enable its MCP server and skill.
- Grant the Codex/ChatGPT desktop app Screen Recording and Accessibility permissions.
- Restart the desktop app and open a fresh Codex task.
- Invoke
@Computerand ask it to list the available applications, or run the documented plugin bootstrap:
if (!globalThis.sky) {
const { setupComputerUseRuntime } = await import(
"$HOME/.codex/plugins/cache/openai-bundled/computer-use/1.0.1000451/scripts/computer-use-client.mjs"
);
await setupComputerUseRuntime({ globals: globalThis });
}
await sky.list_apps();
- Observe the initialization error:
Computer Use could not load @oai/sky from the cua_node runtime
Troubleshooting already performed:
- Restarted the desktop app multiple times.
- Verified that Computer Use, its MCP server, and its skill are enabled.
- Tested both Safari and Google Chrome.
- Verified that the
@oai/skyruntime exists in the application bundle. - Verified that the runtime's
node_modulesdirectory is already registered withjs_add_node_module_dir. - Added another registered
node_modulespath;nodeRepl.envremained empty. - Confirmed that
nodeRepl.envcannot be modified because it is frozen and non-writable.
Session ID: not applicable / not available.
Token-limit and context-window usage: not relevant; the failure occurs during tool runtime initialization.
What is the expected behavior?
setupComputerUseRuntime() should locate the bundled @oai/sky runtime, initialize globalThis.sky, and allow list_apps() and get_app_state() to execute.
The Node REPL should expose its registered module roots through NODE_REPL_NODE_MODULE_DIRS, or the Computer Use wrapper should obtain them through another supported Node REPL API.
Additional information
This appears related to #26190, which reports missing NODE_REPL_NODE_MODULE_DIRS and failed @oai/sky resolution on Windows. This report covers the same failure class on macOS with a newer desktop and Computer Use plugin build.
The Node REPL internally knows the module directory: calling js_add_node_module_dir with the ChatGPT-bundled cua_node/lib/node_modules directory reports that it is already registered. However, that registration is not reflected in the immutable nodeRepl.env object consumed by computer-use-client.mjs.
There is no documented workaround because the Computer Use skill requires loading @oai/sky through the plugin-owned wrapper rather than importing the package directly.
7 Comments
I can independently reproduce this issue on a newer ChatGPT desktop build for macOS.
Environment
26.715.7071926.715.61943(build 5628)1.0.1000451@oai/sky:0.4.20v24.14.0Runtime result
Although
~/.codex/config.tomlcontains the expected Node REPL environment configuration:the running Node REPL exposes an empty immutable environment:
(
undefinedvalues are represented asnullabove for readability.)Attempting to add the missing properties at runtime fails with:
The bundled runtime itself is valid
The expected macOS entrypoint exists:
Importing it directly with the bundled Node.js succeeds:
The cached and app-bundled copies of
computer-use-client.mjsalso have identical SHA-256 checksums.Troubleshooting performed
@oai/skypackage and macOS entrypoint existconfig.tomlcontains the expected Node REPL environment values26.715.61943to26.715.70719The failure remains:
This confirms that the issue persists in
26.715.70719and appears to be caused by the Node REPL startup environment not being propagated into the immutableglobalThis.nodeRepl.envobject.Additional impact: the same empty
nodeRepl.envalso breaks both the bundled Browser plugin and the Chrome plugin.Browser / Chrome behavior
The failure occurs before any browser UI, Chrome extension, or Accessibility interaction.
Runtime inspection shows that the environment object is empty, so the trust information normally supplied through the Node REPL environment is also missing, including the trusted browser-client SHA-256 values and trusted code paths.
This suggests the regression is not specific to Computer Use itself. It appears to affect the shared Node REPL startup / trust-information propagation path used by Computer Use, Browser, and Chrome integrations.
Confirmed on the exact same build: ChatGPT
26.715.70719+ plugin1.0.1000451+@oai/sky 0.4.20+ Apple Silicon.codex doctorreportsjs_repl = falseand[mcp_servers.computer-use]ends upenabled = falseafter every restart.A few additional observations from digging on my end that might help narrow this down — they look like three separate but interlocking bugs on this build:
[mcp_servers.computer-use]on every restart, even if I runcodex mcp addwith an absolute path +enabled = true. After the next restart the block is back tocommand = "./Codex Computer Use.app/...",cwd = ".",enabled = false. Looks related to #33635..mcp.jsonuses relative paths (./Codex Computer Use.app/...withcwd = ".") that Codex resolves against the user's CWD (~/Documents/pptin my case) instead of the plugin directory. So even after (1) the command stays unresolvable and the server is re-disabled.Codex Computer Use.apphas an invalid code signature:``
`codesign --verify --deep --strict → invalid signature (code or signature have been modified)
Info.plist=not bound
Authority=(unavailable)
Runtime Version=26.1.0
nodeRepl.envAd-hoc re-signing gets LaunchServices to register the bundle, but the empty
from this issue still blocks@oai/skyfrom loading, soSkyComputerUseService` IPC connect times out anyway.In combination, this makes Codex Computer Use non-functional on
26.715.70719without manual intervention after every restart.uninstall + reinstallof the bundled Computer Use plugin does not help (matches what @hidakat already tried above).Environment for cross-reference:
js_repl = falseFollow-up to my earlier report: https://github.com/openai/codex/issues/34471#issuecomment-5039016783
I retested on a newer desktop/runtime combination and was able to get past the original
@oai/skyloading failure, but a second failure now appears atget_app_state().Current environment
26.721.31836(build5828)1.0.1000502@oai/sky:0.5.226.5.2(build25F84), Apple Silicon (arm64)Partial recovery of
nodeRepl.envThe bundled Node REPL kernel constructs the model-visible environment using:
The required Computer Use variables were present in the
node_repl,codex sandbox, and final JavaScript kernel process environments, butNODE_REPL_UNTRUSTED_ENV_ALLOWLISTwas absent, soglobalThis.nodeRepl.envremained an empty frozen object.For diagnostic purposes, I made only these config-level changes:
shell_environment_policy.include_onlyNODE_REPL_UNTRUSTED_ENV_ALLOWLISTcontaining only those existing variablesThe desktop app removes an unknown
NODE_REPL_UNTRUSTED_ENV_ALLOWLISTentry from[mcp_servers.node_repl.env]during startup reconciliation, so the diagnostic value only persisted when placed under the user-managed[shell_environment_policy.set]section.After resetting the JavaScript kernel:
globalThis.nodeRepl.envcontained the expected 14 variables and remained frozencomputer-use-client.mjssuccessfully loaded@oai/skysky.list_apps()succeeded and returned 45 applicationsI did not modify plugin code, trusted hash values, trusted path values, the app bundle, native-pipe checks, or code signing.
Remaining failure at
get_app_state()The next read-only smoke tests did not complete:
Sky Computer Use request timed outBoth macOS permissions are already enabled for the Computer Use app:
Relevant
SkyComputerUseServicelogs show:PermissionswindowScreenCaptureKit: Invalid frame statusCould not look up the Guardian Mach bootstrap rendezvous port.Code-signing observation on the current build
For both the installed service at
~/.codex/computer-use/Codex Computer Use.appand the copy bundled inside ChatGPT.app:Additional details:
com.openai.sky.CUAService2DC432GLL226.721.1000502_CodeSignature/CodeResourcesalso matches between both copiesSo the installed copy does not appear to have been locally modified relative to the bundled source.
This suggests the original empty-
nodeRepl.envproblem and the later Accessibility/ScreenCapture failure are separate layers: populating the untrusted env allowlist restores@oai/skyandlist_apps(), butget_app_state()still stalls in the signed Computer Use service / TCC / ScreenCapture path.Follow-up: functional recovery on ChatGPT
26.721.41059(build5848)Environment
26.721.41059(build5848)1.0.1000502@oai/sky:0.5.226.5.2(build25F84), Apple Silicon (arm64)Configuration retained from the previous test
The narrow config-level workaround described in my previous comment is still present:
shell_environment_policy.include_onlyNODE_REPL_UNTRUSTED_ENV_ALLOWLISTis set under[shell_environment_policy.set]I did not modify plugin code, trusted hashes, trusted paths, native-pipe checks, code signing, or either app bundle.
Results after updating and restarting
globalThis.nodeRepl.envcontains the expected 14 variables and remains frozencomputer-use-client.mjswrapper initializes successfullysky.list_apps()succeeds and returns 45 applicationsget_app_state()succeeds in about one second0770org.mozilla.firefox:https://example.com/https://example.com/App display-name targeting was occasionally unstable, but the documented bundle-ID fallback completed successfully.
This environment is now functionally recovered for both Computer Use and the Chrome plugin.
The recovery has been verified through end-to-end, reversible UI and browser automation tests—not only initialization or app enumeration.
Interpretation / caveats
This does not prove that
26.721.41059automatically fixes the original empty-nodeRepl.envproblem, because the narrow config workaround remains enabled. The Computer Use service and@oai/skyversions are also unchanged.The update is consistent with fixing the later
get_app_state()/ ScreenCapture failure, but I cannot isolate the app update from restart/process-state effects.I have not repeated the strict code-signature verification on this build, so I am not claiming that the earlier signing observation has been resolved.
Still reproducible on macOS with ChatGPT/Codex
26.727.40816, Computer Use1.0.1000550, and@oai/sky0.6.2.nodeRepl.envis empty and frozen, producing the sameComputer Use could not load @oai/sky from the cua_node runtimeerror. The bundled runtime is present and imports successfully outside the Node REPL bridge, and the installed app passes strict code-signature verification.Feedback/thread ID with diagnostics:
019fb9d2-ad28-7860-8583-9efcb482faceThe cause in my case was a custom restrictive
shell_environment_policyfiltering out the environment variables required by Codex’s Node REPL and Computer Use.The workaround is either:
shell_environment_policy; or[mcp_servers.node_repl.env]and setNODE_REPL_UNTRUSTED_ENV_ALLOWLISTunder[shell_environment_policy.set].After updating
config.tomland fully restarting the app, Computer Use started working.So if this issue occurs, check whether a custom
shell_environment_policy, especiallyinclude_only, is stripping Codex’s required environment variables.