Codex macOS: native in-app Browser intermittently fails to attach to the visible tab

Summary

On this macOS machine, Codex’s native Browser / in-app-browser plugin is intermittent. The same workflow sometimes works, but other times the callable control tool is absent or it controls an isolated tab while the user-visible in-app Browser stays on a blank New Tab.

This is not a website-login or network-reachability problem: the target pages were reachable when the Browser session attached. It blocks browser-based QA and interaction because the agent cannot reliably control the tab the user sees.

Environment

  • Platform: macOS, Codex desktop app
  • Surface: native in-app Browser (not Chrome or an external browser)
  • We keep this machine and its Codex/bundled-plugin updates current; we are not intentionally pinning an old Codex or Browser-plugin version.
  • Observed across multiple separate Codex tasks on the same machine (including July 10 and July 13, 2026).

Observed failure modes

1. Browser instructions are present, but the callable control tool is missing

A task can have the Browser skill and an ambient visible in-app Browser tab, but the callable control surface mcp__node_repl__js is not registered in that task. In that state, it is impossible to connect to or control the in-app Browser from the task.

Starting a fresh task through the Browser plugin’s Try now entry made the tool available later, which makes this look like attachment/registration state rather than a missing installation.

2. The control session can navigate a tab that never appears in the visible pane

After the tool became available, bootstrap succeeded and the iab browser binding could be obtained. The controller could create a tab, set visibility, and navigate it. It reported the expected URL and title, but the user-visible Codex browser pane remained a blank New Tab.

3. Verification then finds no attachable user tab

When checked after the blank-pane symptom:

  • iab.user.openTabs() returned an empty list
  • iab.tabs.list() returned an empty list
  • no selected tab existed

So there was no tab object to claim, navigate, or verify. The controlled browser session and the visible Codex pane appeared to be out of sync.

Minimal reproduction pattern

  1. Open Codex desktop and show the in-app Browser.
  2. Start a task that explicitly requests the native Browser plugin.
  3. Try to obtain the iab binding and inspect tabs.
  4. Depending on the task/session, one of these happens:
    • the callable control tool is absent despite the Browser instructions being present;
    • a newly created/navigated tab is reported by automation but not rendered in the visible pane;
    • tab discovery returns no user tabs and no controllable tabs, leaving nothing to claim.
  5. Starting a fresh Browser-enabled task can change the result without changing the target site or credentials.

Expected behavior

The native Browser plugin should be consistently callable when requested, and an iab tab opened or claimed by the controller should correspond to the tab shown in Codex’s visible in-app Browser pane.

Related but not identical report

I found a Windows report where Browser became disconnected after reinstalling the Chrome extension and a bundled-plugin marketplace rebuild failure:

That report has a different OS and trigger. This report is specifically about intermittent macOS task/session attachment and visible-pane synchronization for the native in-app Browser.

Browser plugin issue — technical reference

I explicitly invoked the bundled in-app Browser plugin:

[@Browser](plugin://browser@openai-bundled)

The Browser skill is available and instructs Codex to control the browser exclusively through the Node REPL tool, mcp__node_repl__js, using the plugin’s browser-client.mjs runtime.

However, this tool is not exposed in the session:

typeof tools["mcp__node_repl__js"]
// "undefined"

Tool discovery also does not expose a tool_search capability to lazily load it:

typeof tools.tool_search
// "undefined"

As a result, the Browser plugin can be selected but cannot be initialized or used to navigate to a URL. The skill explicitly prohibits falling back to other browser automation tools when the user has explicitly selected Browser.

Expected behavior: when the Browser skill is available, mcp__node_repl__js (or a documented equivalent) should also be callable so the browser runtime can be initialized and a tab can be opened.