Loading...
Loading...
Control Chrome browser via CLI for testing, automation, and debugging. Use when the user needs browser automation, screenshots, form filling or page inspection.
npx skill4agent add juanibiapina/browse-cli browsebrowse --help # Full help
browse <group> # Group help (tab, scroll, page, wait, dialog, emulate, form, perf)
browse --list # All 60+ tools
browse --find <term> # Search tools# 1. Open new tab with URL
browse tab.new "https://example.com"
# 2. Read page to get element refs (currently visible)
browse page.read
# 3. Click by ref or coordinates
browse click --ref "e1"
browse click --x 100 --y 200
# 4. Type text
browse type --text "hello"
# 5. Screenshot
browse screenshot --output /tmp/shot.png# Open new tab (preferred for new pages)
browse tab.new "https://example.com"
# Navigate in current tab (only when tab is already open)
browse navigate "https://other-page.com"tab.newnavigatebrowse tab.list
browse tab.new "https://google.com"
browse tab.switch 12345
browse tab.close 12345
# Named tabs (aliases)
browse tab.name myapp # Name current tab
browse tab.switch myapp # Switch by name
browse tab.named # List named tabsbrowse window.list # List all windows
browse window.new # New window
browse window.new --url "https://example.com" # New window with URL
browse window.new --incognito # New incognito window
browse window.focus 12345 # Focus window by ID
browse window.close 12345 # Close window
browse window.resize --width 1920 --height 1080 # Resize current window# CDP method (real events) - default
browse type --text "hello"
browse click --x 100 --y 200
# JS method (DOM manipulation) - for contenteditable
browse type --text "hello" --selector "#input" --method js
# Keys
browse key Enter
browse key "cmd+a"
browse key.repeat --key Tab --count 5 # Repeat key pressesbrowse page.read # Accessibility tree with refs (viewport only)
browse page.read --ref e5 # Get specific element details
browse page.read --all # All elements (may hit 50K char limit on large pages)
browse page.text # Full page text content (no limit)
browse page.state # Modals, loading state, scroll infopage.textpage.readpage.read --allpage.readclick e5scroll.to --ref e5browse scroll down # Scroll down (default amount)
browse scroll up # Scroll up
browse scroll down --amount 5 # Scroll down more (1-10)
browse scroll.bottom # Scroll to bottom of page
browse scroll.top # Scroll to top of page
browse scroll.to --ref e5 # Scroll element into view
browse scroll.info # Get scroll positionbrowse wait 2 # Wait 2 seconds
browse wait.element ".loaded" # Wait for element
browse wait.network # Wait for network idle
browse wait.url "/success" # Wait for URL pattern
browse wait.dom --stable 100 # Wait for DOM stability
browse wait.load # Wait for page load completebrowse dialog.info # Get current dialog type/message
browse dialog.accept # Accept (OK)
browse dialog.accept --text "response" # Accept prompt with text
browse dialog.dismiss # Dismiss (Cancel)# Network throttling
browse emulate.network slow-3g # Presets: slow-3g, fast-3g, 4g, offline
browse emulate.network reset # Disable throttling
# CPU throttling
browse emulate.cpu 4 # 4x slower
browse emulate.cpu 1 # Reset
# Device emulation
browse emulate.device "iPhone 14"
browse emulate.device --list # List available devices
# Geolocation
browse emulate.geo --lat 37.7749 --lon -122.4194
browse emulate.geo --clearbrowse page.read # Get element refs first
# Fill by ref
browse form.fill --data '[{"ref":"e1","value":"John"},{"ref":"e2","value":"john@example.com"}]'
# Checkboxes: true/false
browse form.fill --data '[{"ref":"e7","value":true}]'browse upload --ref e5 --files "/path/to/file.txt"
browse upload --ref e5 --files "/path/file1.txt,/path/file2.txt"browse network # List captured requests
browse network --stream # Real-time network events
browse network.body --id "req-123" # Get response body
browse network.clear # Clear captured requestsbrowse console # Get console messages
browse console --stream # Real-time console
browse console --stream --level error # Errors onlybrowse js "return document.title"
browse js "document.querySelector('.btn').click()"browse frame.list # List frames with IDs
browse frame.js --id "FRAME_ID" --code "return document.title"browse perf.metrics # Current metrics snapshot
browse perf.start # Start trace
browse perf.stop # Stop and get resultsbrowse screenshot # To stdout (base64)
browse screenshot --output /tmp/shot.png # Save to file
browse screenshot --selector ".card" # Element only
browse screenshot --full-page # Full page scroll capturebrowse cookies # List cookies for current page
browse cookies --domain .google.com
browse cookie.set --name "token" --value "abc123"
browse cookie.delete --name "token"browse history --query "github" --max 20
browse bookmarks --query "docs"
browse bookmark.add --url "https://..." --title "My Bookmark"browse health --url "http://localhost:3000"
browse smoke --urls "http://localhost:3000" "http://localhost:3000/about"
browse smoke --urls "..." --screenshot /tmp/smoke# Auto-capture screenshot + console on failure
browse wait.element ".missing" --auto-capture --timeout 2000
# Saves to /tmp/browse-error-*.png--tab-id <id> # Target specific tab
--json # Raw JSON output
--auto-capture # Screenshot + console on error
--timeout <ms> # Override default timeout--method jstab.name apptab.switch app--auto-capture