Known issues

Open bugs and current limitations across the cdp tools, with workarounds where they exist.

Open bugs across the repository, currently all in the MCP tools.

Resolved Issues

click/type_text/hover/focus/press_key timeout units ambiguous

Resolved by interactionCtx: timeout values from 1 through 60 are seconds; values greater than 60 are treated as milliseconds. This preserves the documented seconds API while handling common agent inputs such as 5000 for 5 seconds.

Observed: 2026-04-05. click(selector: "a[href='/explore']", timeout: 5000) hung for 6+ minutes on github.com.

Files: cmd/cdp/mcp_tools.go, cmd/cdp/mcp_click_test.go

Extensions domain pipe requirement for list/install/uninstall

CDP Extensions-domain methods still require --remote-debugging-pipe and --enable-unsafe-extension-debugging, but the MCP extension tools no longer depend on that path for the common operations. list_extensions, install_extension, and uninstall_extension now fall back through chrome.developerPrivate or service-worker targets when the Extensions domain is unavailable over a remote-debugging port.

Files: cmd/cdp/mcp_extension_tools.go

-auto-discover=false made cdp do nothing

With -auto-discover=false and no -chrome-path or -remote-host, every action was a silent no-op: auto-discovery was what normally filled in chromePath or remoteHost, and the block implementing -js, -render, -extract, and -har was guarded on one of them being set.

cdp now resolves an installed executable through discovery.FindBestBrowser and launches it fresh, and exits 3 with No browser executable found when there is none. Verified: cdp -headless -auto-discover=false -url https://example.com -js 'document.title' prints Example Domain.

Files: cmd/cdp/main.go, cmd/cdp/main_test.go (TestCDP_AutoDiscoverDisabledRunsAction)

-har was discarded when cdp attached to a running browser

cdp -url … -har out.har printed Recording network traffic to:, exited 0, and wrote no file whenever auto-discovery found a browser already listening on the debug port. The save was guarded on recorder != nil, but -har-mode defaults to enhanced, which populates enhancedRecorder and leaves recorder nil.

Both modes now save on both paths. Verified against a browser confirmed listening: the default enhanced mode writes the file and reports Recorded 1 network requests.

Files: cmd/cdp/main.go (saveHAR), cmd/cdp/main_test.go (TestCDP_RemoteEnhancedHARWritesFile)

Differential capture did not record or compare

-diff-mode registered a capture and returned without launching a browser, so nothing completed it and -compare-with had no HAR to read. The recording step exited 0 throughout, so a pipeline never noticed.

Recording now goes through the normal HAR path into the differential working directory and calls CompleteCapture. Verified: two captures of the same page into one -diff-work-dir both reached Status: completed with Entries: 1, and the comparison wrote a report — 0 added, 0 removed, 1 modified requests.

Files: cmd/chrome-to-har/main.go, internal/differential/controller.go (TestCaptureDifferentialCompletesCapture)

churl accepted mirroring flags and ignored them

churl -r, -m, -l, -np, and -P parsed into fields nothing read, so churl printed a single page and exited 0 while the mirror directory stayed empty.

churl now defines none of those flags: it fetches one page per run and an attempt to mirror fails as a usage error, exiting 2. Verified: churl -r https://example.com prints flag provided but not defined: -r and exits 2.

Files: cmd/churl/main.go, cmd/churl/main_test.go (TestChurl_MirrorFlagsRejected)

Active Issues

1. click can hang on elements that trigger navigation

Symptom: click on a link that navigates the page may hang if the navigation changes the DOM before chromedp’s click action completes. The element becomes stale mid-action.

Workaround: Use evaluate with document.querySelector('a').click() for navigation-triggering clicks, or use navigate directly if the URL is known.

Files: the click tool in cmd/cdp/mcp_tools.go

2. Coverage snapshot on minimal-JS pages returns empty

Symptom: get_coverage after start_coverage on server-rendered pages (e.g., Hacker News) returns 0 files because there’s little/no JS to profile.

Not a bug: V8 coverage only tracks JavaScript execution.

Observed: 2026-04-05 on news.ycombinator.com.

3. extension_console/extension_evaluate fail for devtools-only extensions

Symptom: “no target found for extension” when calling extension_console or extension_evaluate on a DevTools panel extension (such as extension/coverage).

Root cause: DevTools-only extensions (with devtools_page but no background service worker) don’t create CDP-visible targets. There’s no chrome-extension:// target to attach to.

Workaround: Run a headed browser and open DevTools; the extension’s target exists only while a DevTools window is open. The error now says so when the extension is installed but has no target.

Observed: 2026-04-05, A998 extension test. Extension ID agmhhbefggjmejggmflmppmacnbmhnne.

Next steps

Last updated: 2026-09-23