Codex Chrome plugin: `Browser is not available` after `openTabs()` breaks `claimTab` / `tabs.get` / controlled tab workflows
Summary
The Codex Desktop Chrome plugin (chrome@openai-bundled) intermittently loses its extension browser handle after lightweight tab discovery succeeds. browser.user.openTabs() can list live Chrome tabs, but subsequent tab-control operations such as browser.user.claimTab(...), browser.tabs.get(...), or controlling a newly-created tab frequently fail with:
Browser is not available: <browser-id>
This makes Chrome-backed workflows unreliable for tasks that depend on the user's existing Chrome session.
Environment
- Product: Codex Desktop
- Plugin:
chrome@openai-bundled - Local plugin version:
26.623.141536 - Extension ID from local plugin metadata:
hehggadaopoacecdllhhajmbjkdcmajg - Platform observed: macOS / Codex desktop
- Date observed: 2026-07-09
What worked
- Browser setup completed using the packaged
scripts/browser-client.mjsflow. await browser.documentation()returned normally.await browser.user.openTabs()repeatedly returned live Chrome tabs, including the target ChatGPT tab.- At times, creating a new controlled tab and navigating to the target ChatGPT conversation URL also succeeded.
What failed
After successful lightweight discovery, direct tab control frequently failed:
await browser.user.openTabs(); // succeeds and returns target tab(s)
await browser.user.claimTab(targetTabInfo); // often fails
// Error: Browser is not available: <browser-id>
Similar failures occurred with:
await browser.tabs.get(tabId);
await browser.tabs.new(); // sometimes succeeds, but later page interaction fails
A fresh agent.browsers.get("extension") may temporarily allow another openTabs() call, but the next tab-control call can invalidate the handle again.
Impact
A user requested a batch workflow in an existing signed-in ChatGPT conversation:
- Reuse a long prompt template from the conversation.
- Replace only the
main character/主角色为:{{...}}slot for each name. - Submit each prompt.
- Save each generated image to a local folder.
This should be a straightforward Chrome plugin task because it depends on existing Chrome login state. The workflow became unusable because the plugin could see the tabs but could not reliably claim/control them.
Expected behavior
If openTabs() returns a tab from the selected extension-backed Chrome browser, claimTab() or tabs.get() should reliably return a controllable Tab, or fail with a specific recoverable reason. The browser handle should not become unavailable immediately after successful discovery.
Actual behavior
The plugin repeatedly returned:
Browser is not available: <browser-id>
after successful openTabs() calls, forcing repeated browser reinitialization without a stable recovery path.
Suggested diagnostics
- Check whether the extension backend/browser ID is being invalidated between discovery and session-bound tab-control commands.
- Check session/turn metadata handling around
claimUserTab,getTabs,createTab, andattachcalls. - Consider making
claimTab()refresh/reselect the extension backend automatically when the browser handle disappears after a successfulopenTabs()result. - Return a more actionable error when the backend has closed or the extension/native host session has rotated.
Notes
This was observed while using the documented Chrome plugin flow, not external Playwright, AppleScript, or Computer Use.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗