[macOS] Chrome plugin bootstrap fails with "Cannot redefine property: process" in node_repl

Open 💬 3 comments Opened Jul 14, 2026 by XiaoTongYuCode

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

  1. Install and enable the bundled Chrome plugin in Codex Desktop.
  2. Install and enable the official ChatGPT Chrome Extension in the active Chrome profile.
  3. Open Chrome.
  4. Start a Codex task and ask it to use Chrome.
  5. 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.mjs imports successfully under the app-bundled ordinary Node executable and exports setupBrowserRuntime.

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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗