[macOS][Chrome] openTabs succeeds but claimTab hangs until JS kernel reset
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
Research direction
Start with the browser.user.openTabs() and browser.user.claimTab() entry points and trace the packaged browser-control/native-messaging path on macOS. Reproduce the provided sequence, then verify that claimTab() either returns a controllable tab or rejects within a bounded timeout with an actionable error.
Written by the indexing model from the issue text.
Description
Disclosure: This issue is being submitted by the user's Codex assistant, at the user's explicit request and on their behalf. No browsing history, page content, account data, session transcript, or logs are attached.
Environment
- Codex / ChatGPT desktop app:
26.803.41515 - Bundled Codex CLI:
0.147.0-alpha.6.5 - Bundled Chrome plugin:
26.803.41515 - Google Chrome:
151.0.7922.108 - ChatGPT Chrome extension:
1.2.27236.6274 - Extension ID:
hehggadaopoacecdllhhajmbjkdcmajg - Platform (
uname -mprs):Darwin 25.5.0 arm64 arm - macOS:
26.5.1(build25F80) - Chrome profile:
Default - Subscription: signed-in ChatGPT account; exact plan was not checked
What issue are you seeing?
The official Chrome browser-control path can reliably discover existing Chrome tabs with browser.user.openTabs(), but browser.user.claimTab(tabInfo) never returns when passed the exact tab object returned by openTabs().
The call remains pending until the outer Node/browser-control execution times out and resets the JavaScript kernel:
js execution timed out; kernel reset, rerun your request
This prevents the tab from becoming controllable, so screenshot and DOM operations cannot start reliably.
This is not a basic extension-installation or tab-discovery failure: the extension/native-host checks pass and openTabs() returns the live tabs.
What steps can reproduce the bug?
- On macOS, start the current Codex/ChatGPT desktop app.
- Enable the official Chrome plugin and extension in Chrome's
Defaultprofile. - Open a normal HTTPS page in Chrome.
- Initialize the official packaged browser client.
- Run:
const tabs = await browser.user.openTabs(); // succeeds
const tab = await browser.user.claimTab(tabs[0]); // never returns
- Wait for the outer execution timeout.
- The JS kernel is reset instead of
claimTab()returning a tab or a bounded error.
The same failure remained after retrying from a new Codex task and a fresh Chrome Default-profile window.
What is the expected behavior?
After openTabs() returns a live tab, claimTab() should promptly return a controllable tab. If the claim cannot succeed, it should reject within a bounded timeout with an actionable error identifying the failing layer.
Troubleshooting already completed
All four packaged Chrome diagnostics passed:
- Chrome running
- extension installed and enabled in
Default - native host manifest present
- expected native-messaging origins and manifest path valid
Also tested:
- reinstalled the Chrome plugin
- restarted Chrome
- restarted Codex/ChatGPT desktop
- performed a full macOS restart
- reproduced in a new Codex task
- opened a fresh
Default-profile Chrome window using the packaged troubleshooting script - cleared a possible stale local browser-control process and retried
This Mac uses a local system proxy. Direct access to ab.chatgpt.com timed out, while a proxy-aware Node test reached the endpoint promptly (HTTP 403). Running the browser-control client in that proxy-aware environment still left claimTab() hanging, so the claim failure is not explained solely by ambient endpoint reachability.
Related issues and distinguishing behavior
- #31706:
openTabs()succeeds, butclaimTab()fails immediately withBrowser is not available. Here,claimTab()hangs until kernel reset. - #34472: stale-session lock and explicit lock symptoms. No equivalent stale-session error was returned here.
- #36278:
claimTab()succeeds and the later DOM read hangs. Here, the hang occurs duringclaimTab()itself.
Additional information
No external Playwright/CDP workaround was used to control Chrome. No browser databases, cookies, saved passwords, history, page contents, or authenticated account data were read or included in this report.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.5k
- Avg merge
- 1m
- Merged PRs (30d)
- 1k
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openai/codex
-
enhancement remote
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
bug CLI windows-os
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
macOS sandbox blocks hw.optional.arm64 sysctl, causing Flutter to misdetect Apple Silicon as x64 Openbug CLI sandbox
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
bug CLI TUI
Difficulty 2/5 1-3 hours Newbie friendliness 90/100
-
CLI config enhancement skills
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 1/5 Under an hour Newbie friendliness 72/100
bevyengine/bevy#25861 ·
-
comp-datalake
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ClickHouse/ClickHouse#121222 ·
-
A-linter
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
oxc-project/oxc#26863 ·