Browser and Chrome plugins fail at bootstrap: TypeError Cannot redefine property: process
What version of the Codex App are you using (From “About Codex” dialog)?
ChatGPT/Codex Desktop 26.707.71524 (build 5263)
Bundled plugins:
browser@26.707.71524chrome@26.707.71524
What subscription do you have?
Authenticated ChatGPT account in the desktop app. Exact plan omitted.
What platform is your computer?
macOS 26.5.1 (build 25F80), Apple Silicon / arm64.
What issue are you seeing?
Both the Codex in-app Browser and Chrome plugin fail deterministically during browser runtime bootstrap, before browser discovery or navigation begins:
TypeError: Cannot redefine property: process
at .../scripts/browser-client.mjs:33:22
at SourceTextModule.evaluate
at importResolved (.../kernel.js:905:27)
The failing code in the bundled client is:
globalThis.process = processShim;
globalThis.global = globalThis.global ?? globalThis;
globalThis.global.process = processShim;
The trusted JavaScript runtime intentionally installs a locked process facade first:
Object.defineProperty(runtimeContext, "process", {
value: trustedProcess,
writable: false,
configurable: false,
enumerable: false,
});
Since ESM executes in strict mode, the assignment to globalThis.process throws immediately.
This affects both browser surfaces because their browser-client.mjs files are byte-identical:
SHA-256:
57ee77a283eb230c6c6d47353af13a25cec4c331b511868c8fbf7ccd3dd1b2f6
What steps can reproduce the bug?
- Open ChatGPT/Codex Desktop 26.707.71524 on macOS arm64.
- Install and enable either the bundled Browser or Chrome plugin.
- Start a fresh Codex task.
- Ask Codex to use
@Browseror@Chrome. - Run the plugin's documented bootstrap:
``js``
const { setupBrowserRuntime } = await import(
"/Users/<user>/.codex/plugins/cache/openai-bundled/browser/26.707.71524/scripts/browser-client.mjs"
);
await setupBrowserRuntime({ globals: globalThis });
- The dynamic import throws
Cannot redefine property: process. No browser backend is queried.
Frequency: 100%. Reproduced repeatedly with both bundled plugins.
What is the expected behavior?
The trusted bundled browser client should import successfully without mutating or replacing the locked global process facade, then continue to Browser/Chrome discovery and setup.
Additional information
Differential tests:
- The exact unmodified
browser-client.mjsimports successfully in an ordinary Node child process. - It fails only when evaluated in the trusted Codex runtime where
processis intentionally non-writable and non-configurable. - A proof copy that keeps the process shim module-local imports past this collision. It then correctly fails the later trust check because the copy is not a trusted bundled client.
- App and plugin versions match, so this is not a stale cross-version plugin cache.
- Reinstalling the plugins, restarting Chrome and the app, and using a fresh task do not change the result.
This appears distinct from reports where the client imports and later fails with browser-client is not trusted or a native-pipe error: here the original trusted client throws during module evaluation, before the native bridge is inspected.
Suggested fix:
- Keep the kernel's locked
processfacade; do not make it writable/configurable. - Make the browser client's Node polyfill module-local (and, if needed, use a module-local
globalproxy) instead of assigning toglobalThis.process. - Add an integration test that imports the trusted browser client in a runtime where
globalThis.processis already non-writable/non-configurable, asserts that the global is unchanged, and verifies setup reaches browser discovery.
2 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
TITLE: Chrome bundled plugin: stale cache migration, non-atomic uninstall, and native host provisioning failure on Windows
Summary
The bundled Chrome plugin had two consecutive failures:
26.623.141536) survived repair, reset, uninstall/reinstall, and application updates. Its browser client failed during trusted-module evaluation with:26.707.91948) still did not provision the Windows Native Messaging host. The extension therefore continues to display “Download ChatGPT”, and Chrome discovery fails with:A plugin uninstall attempt also failed non-atomically, leaving a partially deleted cache.
Environment
19045.646626.707.12708.00.144.526.707.91948150.0.7871.1251.2.27203.26575_0019f66dc-0f03-7ce1-a1ef-5b43af4a716eInitial stale-cache state
The active cached Chrome plugin was:
It contained 375 files and used this browser-client SHA-256:
The client contained an unconditional assignment equivalent to:
Importing it in the trusted runtime failed before browser discovery or extension communication.
The configured bundled marketplace was also stale and contained the same old Chrome package. Therefore, deleting only the active cache would have reconstructed the same broken version.
The stale cache persisted after:
Controlled regeneration
The stale Chrome cache and bundled marketplace were moved to a reversible quarantine with SHA-256 inventories before and after the move.
Results:
After restart, Codex regenerated the marketplace and materialized:
The hash was present in
NODE_REPL_TRUSTED_BROWSER_CLIENT_SHA256S. The unsafe global process assignment was absent.The regenerated browser client imported successfully and
setupBrowserRuntime()completed. This confirms that the original trusted-runtime collision was fixed by the current package.Extension and profile checks
The official extension checker reported:
Chrome was running with only the intended user profile open.
The extension was previously installed only in Profile 9 while Local State selected Profile 8. After closing the other profiles and restarting, Profile 9 became correctly selected.
Native host failure
The official native-host checker reported:
Both were absent:
The current plugin package contains both:
Nevertheless, the host was not created after:
Both connection attempts returned:
No manual execution of
installManifest.mjs, Registry editing, or native-host repair was performed.Non-atomic uninstall
Attempting to uninstall the bundled Chrome plugin from the UI failed.
The official plugin-management uninstall call also returned:
The failed uninstall left this partial state:
chrome@openai-bundledchanged toenabled = falsebrowser-client.mjs: removedclassic-level.node: retainedBecause the manifest had already been removed, subsequent uninstall attempts could not complete.
The 60 residual files were moved to a second verified quarantine. After restart, Codex reconstructed the complete 375-file package from the official marketplace, while keeping the plugin disabled. Re-enabling it still did not provision the native host.
Expected behavior
Impact
Suggested regression tests
processfacade.No private browsing data, cookies, credentials, page contents, or account information are required to reproduce this issue.
:::