Help us improve
Share bugs, ideas, or general feedback.
From bopen-tools
Interacts with a live Chrome browser session via the Chrome DevTools Protocol. Reads page content, clicks elements, executes JS, navigates, and takes screenshots. Requires explicit user approval.
npx claudepluginhub b-open-io/claude-plugins --plugin bopen-toolsHow this skill is triggered — by the user, by Claude, or both
Slash command
/bopen-tools:chrome-cdpThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Lightweight Chrome DevTools Protocol CLI. Connects directly via WebSocket — no Puppeteer, no extensions, instant connection, handles 100+ tabs. Operates on the user's **live browser session** with existing logins and state.
Controls Chrome via DevTools Protocol for navigating, clicking, typing, multi-tab management, and content extraction with auto-screenshots.
Controls local Chrome/Chromium via CDP for signed-in profiles, anonymous sessions, screenshots, console logs, network capture, form filling, uploads, downloads, and PDF export.
Connects to Chrome DevTools via the chrome-devtools-mcp server for debugging web pages, automating browser interactions, analyzing performance, and inspecting network requests.
Share bugs, ideas, or general feedback.
Lightweight Chrome DevTools Protocol CLI. Connects directly via WebSocket — no Puppeteer, no extensions, instant connection, handles 100+ tabs. Operates on the user's live browser session with existing logins and state.
Chrome with remote debugging enabled. If list fails with "Chrome remote debugging not enabled", run the enable command to open the settings page:
bun ${SKILL_PATH}/scripts/cdp.ts enable
Then tell the user: "I've opened Chrome's remote debugging settings. Please toggle the switch to enable it, then I'll try again."
Bun runtime (already available in this environment).
Auto-setup flow: Always try list first. If it fails, run enable and ask the user to toggle. Then retry list.
Trigger on explicit user approval to:
Do NOT activate speculatively. The user must ask you to interact with Chrome.
All commands use bun ${SKILL_PATH}/scripts/cdp.ts. The <target> is a unique prefix of the targetId shown by list. Copy the prefix exactly as shown.
bun ${SKILL_PATH}/scripts/cdp.ts list
Always run list first to see available tabs and get target prefixes.
bun ${SKILL_PATH}/scripts/cdp.ts snap <target>
Returns a semantic tree of the page — roles, names, values. Best for understanding page structure without raw HTML noise.
bun ${SKILL_PATH}/scripts/cdp.ts eval <target> "document.title"
bun ${SKILL_PATH}/scripts/cdp.ts eval <target> "document.querySelectorAll('h1').length"
bun ${SKILL_PATH}/scripts/cdp.ts eval <target> "[...document.querySelectorAll('a')].map(a => a.href).join('\\n')"
Runs in the page context — full DOM access, can call page functions, read variables.
bun ${SKILL_PATH}/scripts/cdp.ts nav <target> "https://example.com"
Navigates and waits for page load (up to 30s).
bun ${SKILL_PATH}/scripts/cdp.ts click <target> "button.submit"
bun ${SKILL_PATH}/scripts/cdp.ts click <target> "[data-testid='login-btn']"
bun ${SKILL_PATH}/scripts/cdp.ts type <target> "Hello world"
Uses Input.insertText — works in cross-origin iframes where JS eval is blocked.
bun ${SKILL_PATH}/scripts/cdp.ts shot <target>
Saves to /tmp/screenshot.png.
bun ${SKILL_PATH}/scripts/cdp.ts html <target> # full page
bun ${SKILL_PATH}/scripts/cdp.ts html <target> ".sidebar" # specific selector
bun ${SKILL_PATH}/scripts/cdp.ts stop # all daemons
bun ${SKILL_PATH}/scripts/cdp.ts stop <target> # specific daemon
DevToolsActivePort file when remote debugging is enabled1. bun cdp.ts list # see what's open
2. bun cdp.ts snap 6BE827FA # understand the page
3. bun cdp.ts eval 6BE827FA "document.title" # extract specific data
4. bun cdp.ts click 6BE827FA ".btn-submit" # interact