computer tool's screenshot/find/read_page/scroll consistently timeout with "document_idle" wait failure across ALL pages
Status Open
Maintainer reply None cached
Activity 4 comments · opened Sep 16, 2026
Description
Starting this morning, the computer tool's screenshot, find, read_page, and scroll actions consistently fail with a "document_idle" wait timeout (5s for screenshot, 45s for find/read_page), on EVERY page tested, not just one site.
Reproduction
- Navigate to any URL (tested: google.com, ebay.com, example.com, crowdworks.jp)
- Call
computerwith action=screenshot, orfind, orread_page, orscroll - Result: "Script injection timed out" or "Page still loading (executeScript waited 45000ms for document_idle)", every time, on a fully-loaded, idle page
What still works
javascript_tool(javascript_exec) - instant, reliablenavigate- works finecomputeraction=type- works fine
What is broken
computerscreenshot/find/read_page/scroll - always times outcomputerleft_click/key - report success but do NOT actually deliver events to the page (verified via before/after DOM state checks; only a JS-triggered.click()via javascript_tool actually works)
Investigation done
- Confirmed NOT page-specific: fails identically on google.com, example.com, ebay.com, crowdworks.jp
- Confirmed NOT network-related: checked
read_network_requests, zero pending requests on the affected tab - Tried: bringing the Chrome window to the foreground, restarting Chrome, fully quitting and restarting the Claude Code desktop app, toggling macOS Screen Recording permission off/on, new tabs, new tab groups - none of these fixed it
- This persisted across a full app + browser restart, which rules out simple local process state
- The day before, the exact same kind of browser automation (eBay listing creation/editing) worked completely normally, so this is a regression, not a pre-existing limitation
Environment
- macOS, Claude Code desktop app
- Claude in Chrome extension (mcp__claude-in-chrome__* tools)
Impact
Blocks any task that needs precise clicking, element lookup, or file upload via a file input (which requires a ref from find/read_page`). Has been blocking real e-commerce listing work for a full day.
4 Comments
Independent reproduction of this on a second macOS machine today (2026-09-24), filed with full detail as #96797.
Two details from that run that may narrow it down:
document_idlewait is demonstrably false. On the same tab at the same moment,javascript_toolreturnsdocument.readyState: "complete"with correct page text, whileget_page_text/read_page/findfail withexecuteScript waited 45000ms for document_idle. The two injection paths disagree about one idle tab — onexample.com, 1 KB of static HTML with no scripts.javascript_tool, thencomputerleft_clickon its coordinates: the tool returnsClicked at (215, 280)while the in-page counter stays at0andlocation.hrefis unchanged. The listener survives the call, so the JS world persisted — the event simply never arrived. This confirms the "report success but do NOT deliver events" behaviour in the original report, and it is the part that makes the bug unsafe rather than merely inconvenient: agent automation reports progress it did not make.Environment: Claude Code 2.1.281, Claude Chrome extension 1.0.94, Chrome 153.0.8010.53, macOS 26.6.2 (25G83). Survives a verified full restart of Chrome and Claude Code, a fresh tab group, and switching to a second browser via
/chrome.Correction from the reporter — this is NOT "all pages", and that changes the bug
Further testing on my side found the variable I had missed, and I want to correct
the record before anyone chases the wrong thing.
The extension here is running with host permissions withheld. From the Chrome
profile's
Secure Preferences,extensions.settings.<id>:So there is a finite allowlist of runtime-granted origins. Re-testing against it:
| Origin | In granted list? |
screenshot|get_page_text||---|---|---|---|
|
www.ebay.com(heavy, script-dense SPA) | yes | works, instant | works, instant ||
example.com(1 KB static, no scripts) | no | 5000ms injection timeout | 45000msdocument_idletimeout |The page that fails is the trivial one; the page that works is the heavy one. The
variable is host permission, not page state. My original "fails across all pages,
permissions ruled out" was wrong — I had only ever tested on
example.com,precisely because it was supposed to be the simplest possible control.
The bug that remains is the error reporting, and I'd argue it is worse than the
one I originally filed:
loading (executeScript waited 45000ms for document_idle)
is emitted for anreadyStateorigin the extension may never inject into, on a page whose
is
complete`. That message sends you to debug page load, SPA readiness, serviceworkers and browser restarts — none of which can ever fix it. It cost me most
of a day, and reading the other reports here, I don't think I'm alone.
permission state is known up front; this should fail immediately.
left_clickreturns success on a non-permitted origin while delivering noevent.** Measured: tool returns
Clicked at (215, 280), in-page listenercounter stays
0,location.hrefunchanged. A silent false success is thedangerous failure mode for agent automation — it reports work it did not do.
Suggested fix: when the target origin is not in
runtime_granted_permissions, fail fast with something likeNo host permission for https://example.com — grant site access via the extension, and makeicon or chrome://extensions
left_clickreturn that same error insteadof success.
This may or may not be the same root cause as the original report in this thread —
if others seeing it can check their own
runtime_granted_permissionsagainst theorigins they tested, that would separate the two cases quickly.
Second amendment: retracting the
Secure Preferencesdiagnostic (it gives false "permission is fine" readings)A second machine has now run the same experiment, and it breaks the check I
suggested in my previous comment while leaving the observation intact. Since
that check was the actionable part, please don't use it.
What replicated (MacBook, same day, Chrome 153.0.8010.53, Darwin 25.6.0,
extension 1.0.90):
| Origin |
get_page_text/screenshot||---|---|
|
www.ebay.com— heavy, script-dense | work, instantly ||
example.com— 1 KB static, 129 chars of body text | 45000msdocument_idle/ 5000ms injection timeout |Identical to my Mac Studio result. So the per-origin split is real and
reproducible across machines. Page weight and page state do not explain it: the
trivial page is the one that fails.
What did NOT replicate — and this is the important part:
On that machine
example.comIS present in Chrome'sruntime_granted_permissions.scriptable_host(both*://example.com/*and*://*.example.com/*),withholding_permissions: true, 28 granted hosts — andit still fails, while
ebay.comfrom the same list works.Therefore Chrome's
runtime_granted_permissionsdoes not reflect theextension's effective per-site permission, and my earlier "check your granted
list" snippet is unsound. On a profile like that one it reports the failing
origin as granted, so anyone following it concludes permission is fine and goes
back to debugging page readiness — exactly the hole I was trying to get people
out of. I'm sorry for publishing it; retracting it here.
Two further corrections to that snippet: it hardcodes the
Defaultprofile,which does not exist on that machine (the extension lives in
Profile 1), andI have not been able to locate an extension-internal permission store that would
explain the disagreement — grepping the extension's
Local Extension SettingsLevelDB turns up
example.comamong many unrelated bundled strings, so it isnot a usable allowlist either.
Status of the mechanism: unknown. Something gates injection per-origin,
Chrome's recorded grants are not it, and I can't currently name what is. What is
solid is the reproducible symptom and its shape.
None of this changes the three defects this issue is actually about, which
hold whatever the gate turns out to be:
waited 45000ms for document_idle)
on a page whosereadyStateis
complete` — sending everyone to debug page load, SPAs and browser restarts,none of which can fix it.
left_clickreturnsClicked at (x, y)while delivering no event to thepage (verified with an in-page listener: counter stays 0,
location.hrefunchanged). Silent false success is the worst failure mode for agent
automation.
The only reliable diagnostic I can now recommend is functional, not
file-based: in one session, try a known-good origin and the suspect origin
back to back. If one works and the other times out, it is not page readiness.
One caution I'd add, credit to the second reporter:
javascript_toolsucceedingon a failing page is not evidence about permissions either way — the
extension holds the
debuggerAPI permission, so that path may bypass whatevergates the others entirely. It's a usable escape hatch on an affected origin
(
document.body.innerText,querySelectorAll,fetchall work), but "JS readsthe page fine, so the extension must be broken" is an inference that led both of
us astray.
Third and final amendment: mechanism identified — host-permission denial, reported as a page-load timeout
The missing control has now been run on both machines, and it resolves the
contradiction in my previous two comments. Summary: my original diagnosis was
right for ordinary origins, and
example.com— the page I used as a control allday — is a separate anomaly that made it look refuted.
The row neither of us had run: an ordinary ungranted site
Measured on machine A (this one):
| Origin | In granted list? | Result |
|---|---|---|
|
www.ebay.com| yes | works, instantly ||
www.therealreal.com| yes | works;left_clickdelivered (page navigated/→/women) ||
clarity.dexcom.com| yes | works, instantly ||
en.wikipedia.org— ordinary, heavy, real page | no | 45000msdocument_idletimeout ||
example.com| no | 45000msdocument_idletimeout |Reported to me by machine B, independently, same day (Chrome 153.0.8010.53,
extension 1.0.90):
| Origin | State | Result |
|---|---|---|
|
www.ebay.com| granted | works ||
clarity.dexcom.com| granted mid-session via the extension UI | works immediately, nothing restarted ||
en.wikipedia.org| not granted | fails, 45s timeout ||
example.com| granted at Chrome level (both patterns) and re-added in the extension's own site-access UI | fails ||
www.example.com| granted via*://*.example.com/*| fails |That gives both controls:
restart of anything*.
with the identical 45s
document_idlemessage.So the gate is host permission, and the error message names page readiness
instead. That is the bug.
Narrowing my previous retraction
My second comment said Chrome's
runtime_granted_permissionsdoes not reflecteffective permission. That is still true as a warning — on machine B the file
lists
example.comas granted while it fails, so the file is not a safediagnostic. But the reason is narrower than I implied: it is
example.com'sanomaly, not a general disagreement between the record and the gate. For ordinary
origins the record and the behaviour agree on both machines.
A separate item:
example.comfails while granted at both layersWorth treating as its own defect. It fails with both
*://example.com/*and*://*.example.com/*present, and with the origin added through the extension'sown site-access UI. A plausible explanation is a hardcoded exclusion of the IANA
reserved documentation domain — if that is deliberate, it should say so rather
than time out for 45 seconds, because
example.comis the first thing anyonereaches for as a control, and it turns the canonical smoke test into a permanent
false negative. Both of us lost most of a day to exactly that.
One hypothesis already tested and killed, so nobody repeats it: a matcher
treating
*.domainas subdomains-only and excluding the apex would explain everyrow, but
www.example.comalso fails, andcurlconfirms it returns HTTP 200directly with zero redirects. It is a genuine subdomain. Not a matcher bug.
Version spread
Machine A: Chrome 153.0.8010.53, extension 1.0.94, Claude Code 2.1.281,
Darwin 25.6.0. Machine B: same Chrome and OS, extension 1.0.90. So the
behaviour spans at least two extension versions — not a single-build regression.
Unchanged — these are the actual fixes
45000ms for document_idle)
on a page whosereadyStateiscomplete.No host permission for <origin> — grant site access via theSuggested:
extension icon or chrome://extensions`.
The permission state is known up front; fail fast.
left_clickreturnsClicked at (x, y)on a non-permitted origin whiledelivering no event to the page. Verified both ways: on a permitted origin the
same call navigates the page; on a non-permitted one an in-page listener
records nothing and
location.hrefis unchanged. Silent false success is theworst failure mode for agent automation — it reports work it did not do.