| name | chrome-devtools |
| description | Browser automation with Puppeteer CLI scripts. Use for screenshots, performance analysis, network monitoring, web scraping, form automation, or encountering JavaScript debugging, browser automation errors. |
| license | Apache-2.0 |
Chrome DevTools Agent Skill
Browser automation via executable Puppeteer scripts. All scripts output JSON for easy parsing.
Quick Start
CRITICAL: Always check pwd before running scripts.
Installation
Step 1: Install System Dependencies (Linux/WSL only)
On Linux/WSL, Chrome requires system libraries. Install them first:
pwd
cd .claude/skills/chrome-devtools/scripts
./install-deps.sh
Supports: Ubuntu, Debian, Fedora, RHEL, CentOS, Arch, Manjaro
macOS/Windows: Skip this step (dependencies bundled with Chrome)
Step 2: Install Node Dependencies
bun install
npm install
Step 3: Install ImageMagick (Optional, Recommended)
ImageMagick enables automatic screenshot compression to keep files under 5MB:
macOS:
brew install imagemagick
Ubuntu/Debian/WSL:
sudo apt-get install imagemagick
Verify:
magick -version
Without ImageMagick, screenshots >5MB will not be compressed (may fail to load in Gemini/Claude).
Test
bun navigate.js --url https://example.com
Available Scripts
All scripts are in .claude/skills/chrome-devtools/scripts/
CRITICAL: Always check pwd before running scripts.
Script Usage
Core Automation
navigate.js - Navigate to URLs
screenshot.js - Capture screenshots (full page or element)
click.js - Click elements
fill.js - Fill form fields
evaluate.js - Execute JavaScript in page context
Analysis & Monitoring
snapshot.js - Extract interactive elements with metadata
console.js - Monitor console messages/errors
network.js - Track HTTP requests/responses
performance.js - Measure Core Web Vitals + record traces
Usage Patterns
Single Command
pwd
cd .claude/skills/chrome-devtools/scripts
bun screenshot.js --url https://example.com --output ./docs/screenshots/page.png
Important: Always save screenshots to ./docs/screenshots directory.
Automatic Image Compression
Screenshots are automatically compressed if they exceed 5MB to ensure compatibility with Gemini API and Claude Code (which have 5MB limits). This uses ImageMagick internally:
bun screenshot.js --url https://example.com --output page.png
bun screenshot.js --url https://example.com --output page.png --max-size 3
bun screenshot.js --url https://example.com --output page.png --no-compress
Compression behavior:
- PNG: Resizes to 90% + quality 85 (or 75% + quality 70 if still too large)
- JPEG: Quality 80 + progressive encoding (or quality 60 if still too large)
- Other formats: Converted to JPEG with compression
- Requires ImageMagick installed (see imagemagick skill)
Output includes compression info:
{
"success": true,
"output": "/path/to/page.png",
"compressed": true,
"originalSize": 8388608,
"size": 3145728,
"compressionRatio": "62.50%",
"url": "https://example.com"
}
Chain Commands (reuse browser)
bun navigate.js --url https://example.com/login --close false
bun fill.js --selector "#email" --value "user@example.com" --close false
bun fill.js --selector "#password" --value "secret" --close false
bun click.js --selector "button[type=submit]"
Parse JSON Output
bun performance.js --url https://example.com | jq '.vitals.LCP'
bun network.js --url https://example.com --output /tmp/requests.json
Execution Protocol
Working Directory Verification
BEFORE executing any script:
- Check current working directory with
pwd
- Verify in
.claude/skills/chrome-devtools/scripts/ directory
- If wrong directory,
cd to correct location
- Use absolute paths for all output files
Example:
pwd
cd .claude/skills/chrome-devtools/scripts
Output Validation
AFTER screenshot/capture operations:
- Verify file created with
ls -lh <output-path>
- Read screenshot using Read tool to confirm content
- Check JSON output for success:true
- Report file size and compression status
Example:
bun screenshot.js --url https://example.com --output ./docs/screenshots/page.png
ls -lh ./docs/screenshots/page.png
- Restart working directory to the project root.
Error Recovery
If script fails:
- Check error message for selector issues
- Use snapshot.js to discover correct selectors
- Try XPath selector if CSS selector fails
- Verify element is visible and interactive
Example:
bun click.js --url https://example.com --selector ".btn-submit"
bun snapshot.js --url https://example.com | jq '.elements[] | select(.tagName=="BUTTON")'
bun click.js --url https://example.com --selector "//button[contains(text(),'Submit')]"
Common Options
All scripts support:
--headless false - Show browser window (default: true)
--close false - Keep browser open after script
--timeout 30000 - Timeout in milliseconds (default: 30000)
--help - Show script-specific help
Troubleshooting
Browser fails to launch (Linux):
./install-deps.sh
Large screenshots:
- Enable ImageMagick for automatic compression
- Use
--max-size to set custom threshold
- Or capture specific element instead of full page
Element not found:
- Use
snapshot.js first to discover selectors
- Check if element is dynamically loaded (wait longer)
- Try XPath if CSS fails
Script not found:
- Verify you're in the correct directory
- Check script name spelling
- Use absolute path:
bun /path/to/scripts/navigate.js