Browser Use loses active pane binding after chat/browser detach
Open 💬 7 comments Opened May 2, 2026 by junierch
What version of the Codex App are you using (From “About Codex” dialog)?
26.429.20946
What subscription do you have?
Plus
What platform is your computer?
Windows
What issue are you seeing?
Feedback id 019de6fd-0cfe-7940-8fdd-a318d905f47f
Environment:
- Codex desktop app
- Browser Use plugin / in-app browser backend: iab
- Local page visible to user: http://127.0.0.1:4173/activity/overview
Observed:
- User can see the Browser pane with the page loaded.
- Agent attempts Browser runtime setup via setupAtlasRuntime({ backend: "iab" }).
- agent.browser.tabs.selected() fails with: "No active Codex browser pane available".
- Opening a new tab also fails with the same error.
- Resetting node_repl kernel does not restore the binding.
Likely trigger:
- User detached the chat/browser pane, after which the Browser tool no longer recognized the visible pane as attached to the current thread.
Expected:
- Browser Use should either reattach to the visible Browser pane for the active thread, or expose a clear recovery action.
- Error should distinguish "no pane exists" from "pane exists but is detached/not bound to this thread".
What steps can reproduce the bug?
1 - Send an instuction to open the browser
2 - From the chat on the left, click on the Open in mini window
3 - try to interact with the browser again
What is the expected behavior?
it should work
Additional information
_No response_
7 Comments
Additional Windows repro from Codex Desktop
26.429.3425.0.Environment:
10.0.262005.1.26100.8115openai-bundled/browser-use/0.1.0-alpha1http://localhost:3000/onboard#pricingObserved:
iabbootstrap succeeds enough to callagent.browser.tabs.selected().This site can't be reacheddata:text/html;charset=utf-8,...data:URL shows a Chromium error page for failed URLhttp://localhost:3000/onboard#pricingwithERR_TOO_MANY_REDIRECTS.http://localhost:3000/, inspect the page DOM, and click thePricingnav link, ending athttp://localhost:3000/#pricing.Expected:
This seems related to the active pane binding loss described here, but it is not identical: in this repro,
selected()returns a tab, just not the visible app tab.I’m seeing a closely related variant on macOS Codex Desktop.
When I ask an agent to use @Browser, then open that agent/chat in a new window, the Browser tab being used by the agent remains visible in the original Codex window but is not visible in the new window. So the agent/browser state appears to stay bound to the original window instead of following the detached/new window.
This makes it look like the new window has no active Browser tab even though the Browser session exists and is visible elsewhere.
This seems related to the active pane/window binding problem described here, but the user-visible symptom is specifically “Browser tab appears in original window, not the new window.”
I hit a closely related failure today with a more concrete trigger: a third-party popup/callback flow from the Codex in-app browser.
Environment
26.513.31313/ build2867Darwin 25.3.0)iab)openai-bundled/browser/0.1.0-alpha2/scripts/browser-client.mjsTrigger / reproduction pattern
Expected behavior
The popup should close and the original cart page should remain the active visible in-app browser tab. Browser automation should still be able to call:
Actual behavior
After confirming the popup:
about:blank.visibility.set(false)/visibility.set(true)both return successfully.await agent.browsers.get('iab').Observed failures:
Trying to hide/show the browser panel did not recreate a usable active pane:
Why this may be the same class of bug
This looks like an active-pane binding loss, but the trigger was not a manual detach/min-window action. It was a normal web popup/callback close flow. The UI still shows an in-app browser surface, but the automation layer no longer has an active pane to bind to, and it cannot recover by opening a new tab or navigating the current blank page.
Impact
Any workflow that uses a real web popup/callback flow can leave the in-app browser permanently stuck for the current thread/session. The practical recovery was to restart/recreate the in-app browser pane or the Codex app; API-level recovery attempts did not work.
I intentionally omitted site account, address, and other user-specific data from this report.
Additional current macOS reproduction on Codex Desktop
26.707.31123(build5042). This looks like the same active-pane binding/state synchronization bug, with an especially clear disagreement between the visible UI context and the Browser runtime.Environment
26.707.31123(build5042)26.707.311230.144.0-alpha.426.5.2(build25F84), arm64iab)http://localhost:8000/__dev-workbench/Reproduction
http://localhost:8000/__dev-workbench/.setupBrowserRuntime({ globals: globalThis }).await agent.browsers.get("iab").await browser.tabs.list()await browser.tabs.selected()await browser.user.openTabs()await (await browser.capabilities.get("visibility")).get()visibility.set(true),Actual behavior
Even while the Codex UI/context says the browser panel is open with one tab, the Browser runtime reports:
A recovery attempt partially works:
tabs.new()returns a tab (observed id3).tab.goto("http://localhost:8000/__dev-workbench/")succeeds.开发工作台.But presentation/binding does not recover:
visibility.set(true)returns without an error.visibility.get()still returnsfalse.tabs.list().selected()anduser.openTabs()return empty again.After manually reopening/toggling the Browser panel, the Codex UI context again reports one visible tab at the localhost URL, while the Browser runtime still returns the empty/false state above.
Expected behavior
tabs.list(),selected(), anduser.openTabs()should reflect it.visibility.set(true)succeeds,visibility.get()should returntrue, or the setter should report that presentation failed.Related reports
visibility.set(true)succeeding whilevisibility.get()remains false.No credentials, cookies, page contents beyond the localhost title, or private session data are included.
Additional Windows reproduction on Codex Desktop 26.707.3748.0, with bundled Browser plugin 26.707.31428.
This appears to be the same active-pane binding/state synchronization failure, with a concrete concurrent cross-thread trigger and matching IAB_LIFECYCLE evidence.
Environment
Trigger / reproduction
Relevant local log signatures
The target page happened to be a webmail site, but the failure occurred in Codex route/webview attachment and also affected about:blank/createTab, so it does not appear site-specific.
Hypothesis
There may be a race in shared right-panel webview ownership / restore-intent handling when multiple threads activate Browser Use concurrently or ownership changes quickly. Per-thread browser state exists, but the shared visible host can lose the route needed to restore the requesting thread.
Expected behavior
Current workaround
This confirms the issue still reproduces on a current Windows 26.707 build and adds a concurrency-related trigger plus the hasMissingRestoreIntent log signal.
I can reproduce a closely related user-facing manifestation on Windows 10, build 19045, with ChatGPT Codex Desktop App Version 26.707.31428
Reproduction:
During an agent-side diagnostic:
false.This appears related to the pane-binding/detachment problem reported here, but from the opposite direction: the backend still recognizes and controls the tab, while the Codex UI does not present/render the pane.
This may also share the sidebar webview lifecycle or rehydration cause discussed in #21824.
Additional Windows reproduction and code-level comparison for the active-pane / shared-right-panel lifecycle failure.
Environment
26.707.6957.026.707.8479.0iab)Observed failure
After cross-thread Browser use and rapid task switching, a tab could remain alive while the visible right-panel host was blank or bound to another task. In affected states, guest DOM/navigation evidence remained healthy, but the whole Codex window did not contain the guest pixels in the expected right panel. This is consistent with the UI/runtime disagreement already documented in this issue.
Version comparison
The official ASARs were inspected read-only:
26.707.6957.0:A728370E715DFA2E8AAA01D1E67C4C27087608CD8FA527D1B3D46CED78A3A8EB26.707.8479.0:8DDC04D44985CA64D59097A76E5871C1010EEB94D7305FD61C5B3F111D452DFFTwo relevant packed assets are byte-identical in both packages:
app-main-CnX2qEsn.js:2B30220B986AF70B4D24386A54FF4CCB6D21162615FC4723B5CFDF4FDB68BC49browser-sidebar-manager-BKDVnejf.js:F284A94D9ECEDA6A49E00EA9C0F2F81C3CD7044E45E5154C9D49FB02BB9201CFBoth main bundles also retain the same two agent-origin-only handoff branches. The newer staged package does not contain all-origin handoff preservation or bounded keyed registration recovery. This shows that the relevant lifecycle fix is not present in the newer package; it does not claim that every IAB crash has this single cause.
Fix design validated in a self-owned test image
handofftabs for both user and agent origins;0x0visible host, pulse it non-destructively, then rebuild only that exact host once if needed;Validation included synthetic lifecycle/race cases, ASAR round-trip checks, injected rollback failures, guest and whole-window pixel checks, and task A -> B -> A reattachment.
Sanitized report, reproduction checklist, version evidence, and fix design:
https://github.com/changshengjiuan13-eng/codex-desktop-iab-null-tail-recovery
No official Desktop binaries, Browser profile, authentication material, or private rollout data are included.