[macOS] Chrome plugin bootstrap fails with "Cannot redefine property: process" in node_repl
Summary
The bundled Chrome plugin cannot initialize in Codex Desktop on macOS. Browser-client bootstrap fails immediately inside the bundled node_repl with:
Cannot redefine property: process
This happens before Chrome backend discovery or listing open tabs. Reinstalling the Chrome extension/plugin does not fix it.
Environment
- macOS 26.2 (25C56), arm64
- Codex Desktop / ChatGPT app: 26.707.71524, build 5263
- Bundled codex-cli: 0.144.2
- Bundled Node used by Browser Use: v24.14.0
- Chrome plugin: 26.707.71524
- Google Chrome: 150.0.7871.115
- ChatGPT Chrome Extension: 1.2.27203.26575_0
- Selected Chrome profile: Default
Steps to reproduce
- Install and enable the bundled Chrome plugin in Codex Desktop.
- Install and enable the official ChatGPT Chrome Extension in the active Chrome profile.
- Open Chrome.
- Start a Codex task and ask it to use Chrome.
- The Chrome skill initializes browser-client with:
const { setupBrowserRuntime } = await import("<chrome-plugin>/scripts/browser-client.mjs");
await setupBrowserRuntime({ globals: globalThis });
Expected behavior
Browser-client initializes successfully and agent.browsers.get("extension") can list open Chrome tabs.
Actual behavior
The dynamic import fails immediately:
Cannot redefine property: process
Resetting the JavaScript kernel, waiting, retrying, opening a new Chrome window, and fully reinstalling the Chrome extension/plugin do not change the result.
Diagnostics
The Chrome-side checks all pass:
- Chrome is installed and running.
- The extension is installed and enabled in the selected Default profile.
- The native messaging host manifest exists and allows the expected extension origin.
- The same
browser-client.mjsimports successfully under the app-bundled ordinary Node executable and exportssetupBrowserRuntime.
The failure is specific to importing the bundle inside the managed node_repl. The generated bundle begins by assigning a process shim:
globalThis.process = processShim;
globalThis.global = globalThis.global ?? globalThis;
globalThis.global.process = processShim;
In the managed node_repl, process appears to be a protected/reserved global, so this assignment throws before setupBrowserRuntime can run.
This looks like a compatibility issue between the bundled Chrome plugin artifact and the managed Node REPL runtime rather than an extension or native-host installation problem.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗