---
title: Known issues
description: Open bugs and current limitations across the cdp tools, with workarounds where they exist.
icon: triangle-exclamation
---

# Known issues

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

- [Troubleshooting](/docs/troubleshooting) — symptoms that have a workaround today.
- [How cdp works](/docs/how-cdp-works) — which surfaces are settled and which
  are still moving.
- [Command reference](/docs/commands) — the documented behavior these deviate
  from.
