원클릭으로
faster-chrome-devtools-skill
Control Chrome directly via DevTools Protocol with snapshots, clicks, waits, and screenshots
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Control Chrome directly via DevTools Protocol with snapshots, clicks, waits, and screenshots
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Orchestrate psychology clinic workflows with AI-powered scheduling, WhatsApp automation, AFIP billing, and video consultations for Argentine practitioners
SaaS platform for psychology clinics with intelligent scheduling, WhatsApp automation, AFIP billing, videollamadas, and Claude AI integration
Build and customize the Sesión mental health practice management platform with appointment scheduling, WhatsApp automation, AFIP billing, and Claude AI integration
Orchestrate psychology clinic operations with AI-powered scheduling, WhatsApp automation, AFIP billing, and secure video consultations for Argentine mental health practitioners
Connect AI agents to a running Tabbit browser instance via Chrome DevTools Protocol (CDP) and control it through agent-browser
AI-powered mental health practice management platform for Argentina with WhatsApp automation, AFIP-compliant invoicing, and video consultations
| name | faster-chrome-devtools-skill |
| description | Control Chrome directly via DevTools Protocol with snapshots, clicks, waits, and screenshots |
| triggers | ["automate chrome browser tasks","take a screenshot of this webpage","click on an element in the browser","read the accessibility tree from chrome","navigate to a url and wait for it to load","inspect console errors in chrome","fill out a form in the browser","connect to a remote chrome instance"] |
Skill by ara.so — Devtools Skills collection.
An agent skill and CLI for controlling Chrome directly through the Chrome DevTools Protocol (CDP). Provides fast accessibility snapshots, element interaction, navigation with explicit timeouts, screenshot capture, and console/network inspection without heavy dependencies like Puppeteer or Playwright.
Install globally for all agents:
npx skills add zeke/faster-chrome-devtools-skill --global --all --yes
Requires Node.js installed. No additional dependencies needed.
The tool uses a lightweight background daemon that holds the CDP WebSocket connection open for 20 minutes, avoiding repeated Chrome access prompts. Connection details are stored in an owner-readable temp file with a random auth token.
Three connection modes:
chrome://inspect/#remote-debugging)--launchAll commands use node scripts/cdp.mjs <command> format.
# Navigate to URL with explicit timeout
node scripts/cdp.mjs navigate https://example.com --timeout 10000
# Navigate and wait for specific text
node scripts/cdp.mjs navigate https://github.com --wait-text "Pull requests"
# Navigate and wait for selector
node scripts/cdp.mjs navigate https://example.com --wait-selector "#main-content"
# List all open tabs
node scripts/cdp.mjs list-tabs
# Open new tab
node scripts/cdp.mjs open-tab https://news.ycombinator.com
# Switch to existing tab by ID
node scripts/cdp.mjs switch-tab <tab-id>
# Close current tab
node scripts/cdp.mjs close-tab
# Get compact accessibility snapshot with stable element references
node scripts/cdp.mjs snapshot
# Get full page text content
node scripts/cdp.mjs get-text
# Capture screenshot (JPEG by default for compression)
node scripts/cdp.mjs screenshot --path screenshot.jpg
# Capture WebP screenshot
node scripts/cdp.mjs screenshot --path screenshot.webp --format webp
# Capture PNG screenshot
node scripts/cdp.mjs screenshot --path screenshot.png --format png
# Full page screenshot
node scripts/cdp.mjs screenshot --path full.jpg --full-page
# Click by accessibility reference (from snapshot)
node scripts/cdp.mjs click --ref "button-login-123"
# Click by CSS selector
node scripts/cdp.mjs click --selector "button.submit"
# Fill input by accessibility reference
node scripts/cdp.mjs fill --ref "input-email-456" --value "user@example.com"
# Fill input by CSS selector
node scripts/cdp.mjs fill --selector "#email" --value "user@example.com"
# Type text (works in cross-origin frames via native CDP)
node scripts/cdp.mjs type "Hello world" --delay 50
# Wait for text to appear (default 30s timeout)
node scripts/cdp.mjs wait-text "Success" --timeout 15000
# Wait for selector to exist
node scripts/cdp.mjs wait-selector ".results-loaded"
# Wait for specific duration
node scripts/cdp.mjs wait --duration 2000
# Get console messages
node scripts/cdp.mjs get-console
# Get failed network requests
node scripts/cdp.mjs get-failed-loads
# Evaluate JavaScript
node scripts/cdp.mjs eval "document.title"
# Execute multi-line JavaScript
node scripts/cdp.mjs eval "
const links = Array.from(document.querySelectorAll('a'));
return links.map(a => ({ text: a.textContent, href: a.href }));
"
# Call raw CDP method
node scripts/cdp.mjs raw Runtime.evaluate '{"expression": "navigator.userAgent"}'
# Launch anonymous Chrome instance
node scripts/cdp.mjs snapshot --launch
# Connect to specific WebSocket endpoint
node scripts/cdp.mjs snapshot --ws-endpoint ws://localhost:9222/devtools/browser/xyz
# Connect to HTTP endpoint (auto-discovers WebSocket)
node scripts/cdp.mjs snapshot --http-endpoint http://localhost:9222
# Stop the daemon
node scripts/cdp.mjs stop
# Stop specific daemon by ID
node scripts/cdp.mjs stop --id <daemon-id>
# Stop all running daemons
node scripts/cdp.mjs stop --all
# Stop daemon for specific endpoint
node scripts/cdp.mjs stop --ws-endpoint ws://localhost:9222/devtools/browser/xyz
chrome://inspect/#remote-debugginglocalhost:9222 is listed# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
Set these environment variables:
export CLOUDFLARE_ACCOUNT_ID="your-account-id"
export CLOUDFLARE_API_TOKEN="your-api-token"
Then use:
node scripts/cdp.mjs snapshot --http-endpoint https://browser.run.cloudflare.com
The CLI automatically adds the required authentication headers.
// 1. Navigate and wait for content
// node scripts/cdp.mjs navigate https://news.ycombinator.com --wait-selector ".itemlist"
// 2. Get accessibility snapshot to find element references
// node scripts/cdp.mjs snapshot
// 3. Extract data with JavaScript
// node scripts/cdp.mjs eval "
const stories = Array.from(document.querySelectorAll('.athing')).slice(0, 5);
return stories.map(story => ({
title: story.querySelector('.titleline > a')?.textContent,
url: story.querySelector('.titleline > a')?.href
}));
// "
# Navigate to login page
node scripts/cdp.mjs navigate https://example.com/login --wait-selector "#username"
# Fill credentials
node scripts/cdp.mjs fill --selector "#username" --value "$USERNAME"
node scripts/cdp.mjs fill --selector "#password" --value "$PASSWORD"
# Submit form
node scripts/cdp.mjs click --selector "button[type=submit]"
# Wait for redirect
node scripts/cdp.mjs wait-text "Dashboard" --timeout 10000
# Take screenshot to verify
node scripts/cdp.mjs screenshot --path logged-in.jpg
# List current tabs
node scripts/cdp.mjs list-tabs
# Open new tab
node scripts/cdp.mjs open-tab https://github.com
# Work in new tab
node scripts/cdp.mjs snapshot
# Switch back to first tab
node scripts/cdp.mjs switch-tab <first-tab-id>
# Close current tab when done
node scripts/cdp.mjs close-tab
# Navigate to page
node scripts/cdp.mjs navigate https://example.com/status
# Take initial snapshot
node scripts/cdp.mjs snapshot > before.txt
# Wait some time
node scripts/cdp.mjs wait --duration 5000
# Take second snapshot
node scripts/cdp.mjs snapshot > after.txt
# Compare with diff tool
diff before.txt after.txt
# Navigate to page
node scripts/cdp.mjs navigate https://example.com
# Check for failed network requests
node scripts/cdp.mjs get-failed-loads
# Check console errors
node scripts/cdp.mjs get-console
# Take screenshot for visual inspection
node scripts/cdp.mjs screenshot --path debug.jpg
The snapshot command returns a compact tree with stable references:
{
"role": "WebArea",
"name": "Example Page",
"ref": "page-1",
"children": [
{
"role": "button",
"name": "Submit",
"ref": "button-submit-42",
"focusable": true
},
{
"role": "textbox",
"name": "Email",
"ref": "input-email-43",
"focusable": true,
"value": ""
}
]
}
Use the ref values with --ref flags in click and fill commands for reliable element targeting.
--remote-debugging-port=9222chrome://inspect/#remote-debugging shows the debugging portnode scripts/cdp.mjs stop to clean up stale daemons--wait-selector or --wait-text with navigate--full-page flag if content is below foldsnapshot first to get stable accessibility references--ref over --selector for reliabilitywait-selector before clicking/fillingCLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN are sethttps://browser.run.cloudflare.com--timeout values for slow pagesget-console and get-failed-loads to diagnose page errors