brainstorming
Structured design dialogue that validates ideas before implementation begins.
surf
Control Chrome browser via CLI for testing, automation, and debugging. Use when the user needs browser automation, screenshots, form filling or page inspection.
Full skill instructions
Control Chrome browser via CLI.
surf --help # Full help
surf <group> # Group help (tab, scroll, page, wait, dialog, emulate, form, perf)
surf --list # All 60+ tools
surf --find <term> # Search tools
# 1. Navigate to page
surf navigate "https://example.com"
# 2. Read page to get element refs
surf page.read
# 3. Click by ref or coordinates
surf click --ref "e1"
surf click --x 100 --y 200
# 4. Type text
surf type --text "hello"
# 5. Screenshot
surf screenshot --output /tmp/shot.png
surf tab.list
surf tab.new "https://google.com"
surf tab.switch 12345
surf tab.close 12345
# Named tabs (aliases)
surf tab.name myapp # Name current tab
surf tab.switch myapp # Switch by name
surf tab.named # List named tabs
surf window.list # List all windows
surf window.new # New window
surf window.new --url "https://example.com" # New window with URL
surf window.new --incognito # New incognito window
surf window.focus 12345 # Focus window by ID
surf window.close 12345 # Close window
surf window.resize --width 1920 --height 1080 # Resize current window
# CDP method (real events) - default
surf type --text "hello"
surf click --x 100 --y 200
# JS method (DOM manipulation) - for contenteditable
surf type --text "hello" --selector "#input" --method js
# Keys
surf key Enter
surf key "cmd+a"
surf key.repeat --key Tab --count 5 # Repeat key presses
surf page.read # Accessibility tree with refs (viewport only)
surf page.read --ref e5 # Get specific element details
surf page.read --all # All elements (may hit 50K char limit on large pages)
surf page.text # Full page text content (no limit)
surf page.state # Modals, loading state, scroll info
When to use which:
page.text - Get full page text content. No size limit. Best for reading/understanding page content.page.read - Get element refs for visible viewport. Use when you need to interact (click, type).page.read --all - All elements with refs. Can fail on large pages (50K char limit).Note: page.read returns only elements in the visible viewport. Refs remain valid for off-screen elements - you can still click e5 even after scrolling. Use scroll.to --ref e5 to bring an element into view.
surf scroll down # Scroll down (default amount)
surf scroll up # Scroll up
surf scroll down --amount 5 # Scroll down more (1-10)
surf scroll.bottom # Scroll to bottom of page
surf scroll.top # Scroll to top of page
surf scroll.to --ref e5 # Scroll element into view
surf scroll.info # Get scroll position
surf wait 2 # Wait 2 seconds
surf wait.element ".loaded" # Wait for element
surf wait.network # Wait for network idle
surf wait.url "/success" # Wait for URL pattern
surf wait.dom --stable 100 # Wait for DOM stability
surf wait.load # Wait for page load complete
surf dialog.info # Get current dialog type/message
surf dialog.accept # Accept (OK)
surf dialog.accept --text "response" # Accept prompt with text
surf dialog.dismiss # Dismiss (Cancel)
# Network throttling
surf emulate.network slow-3g # Presets: slow-3g, fast-3g, 4g, offline
surf emulate.network reset # Disable throttling
# CPU throttling
surf emulate.cpu 4 # 4x slower
surf emulate.cpu 1 # Reset
# Device emulation
surf emulate.device "iPhone 14"
surf emulate.device --list # List available devices
# Geolocation
surf emulate.geo --lat 37.7749 --lon -122.4194
surf emulate.geo --clear
surf page.read # Get element refs first
# Fill by ref
surf form.fill --data '[{"ref":"e1","value":"John"},{"ref":"e2","value":"[email protected]"}]'
# Checkboxes: true/false
surf form.fill --data '[{"ref":"e7","value":true}]'
surf upload --ref e5 --files "/path/to/file.txt"
surf upload --ref e5 --files "/path/file1.txt,/path/file2.txt"
surf network # List captured requests
surf network --stream # Real-time network events
surf network.body --id "req-123" # Get response body
surf network.clear # Clear captured requests
surf console # Get console messages
surf console --stream # Real-time console
surf console --stream --level error # Errors only
surf js "return document.title"
surf js "document.querySelector('.btn').click()"
surf frame.list # List frames with IDs
surf frame.js --id "FRAME_ID" --code "return document.title"
surf perf.metrics # Current metrics snapshot
surf perf.start # Start trace
surf perf.stop # Stop and get results
surf screenshot # To stdout (base64)
surf screenshot --output /tmp/shot.png # Save to file
surf screenshot --selector ".card" # Element only
surf screenshot --full-page # Full page scroll capture
surf cookies # List cookies for current page
surf cookies --domain .google.com
surf cookie.set --name "token" --value "abc123"
surf cookie.delete --name "token"
surf history --query "github" --max 20
surf bookmarks --query "docs"
surf bookmark.add --url "https://..." --title "My Bookmark"
surf health --url "http://localhost:3000"
surf smoke --urls "http://localhost:3000" "http://localhost:3000/about"
surf smoke --urls "..." --screenshot /tmp/smoke
# Auto-capture screenshot + console on failure
surf wait.element ".missing" --auto-capture --timeout 2000
# Saves to /tmp/surf-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 app then tab.switch app--auto-capture saves diagnostics on failureStructured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs