Coding & Development✨gemini🤖claude💬gpt⌨️cursor🌐universal
Surf
The CLI for AI agents to control Chrome. Zero config, agent-agnostic, battle-tested.
Quick Start
Install this Skill
npx skills add nicobailon/surf-cli# Surf The CLI for AI agents to control Chrome. Zero config, agent-agnostic, battle-tested. ```bash surf go "https://example.com" surf read surf click e5 surf snap ``` ## Why Surf Browser automation for AI agents is harder than it looks. Most tools require complex setup, tie you to specific AI providers, or break on real-world pages. Surf takes a different approach: **Agent-Agnostic** - Pure CLI commands over Unix socket. Works with Claude Code, GPT, Gemini, Cursor, custom agents, shell scripts - anything that can run commands. **Zero Config** - Install the extension, run commands. No MCP servers to configure, no relay processes, no subscriptions. **Battle-Tested** - Built by reverse-engineering production browser extensions and methodically working through agent-hostile pages like Discord settings. Falls back gracefully when CDP fails. **Smart Defaults** - Screenshots auto-resize to 1200px (saves tokens). Actions auto-capture screenshots (saves round-trips). Errors on restricted pages warn instead of fail. **AI Without API Keys** - Query ChatGPT, Gemini, and Perplexity using your browser's logged-in session. No API keys, no rate limits, no cost. **Network Capture** - Automatically logs all network requests while active. Filter, search, and replay API calls without manually setting up request interception. ## Comparison | Feature | Surf | Manus | Claude Extension | DevTools MCP | dev-browser | |---------|------|-------|------------------|--------------|-------------| | Agent-agnostic | Yes | No (Manus only) | No (Claude only) | Partial | No (Claude skill) | | Zero config | Yes | No (subscription) | No (subscription) | No (MCP setup) | No (relay server) | | Local-only | Yes | No (cloud) | Partial | Yes | Partial | | CLI interface | Yes | No | No | No | No | | Free | Yes | No | No | Yes | Yes | | AI via browser cookies | Yes | No | No | No | No | ## Installation ### Quick Start ```bash # 1. Install globally npm install -g surf-cli # 2. Load extension in Chrome # - Open chrome://extensions # - Enable "Developer mode" # - Click "Load unpacked" # - Paste the path from: surf extension-path # 3. Install native host (copy extension ID from chrome://extensions) surf install <extension-id> # 4. Restart Chrome and test surf tab.list ``` ### Multi-Browser Support ```bash surf install <extension-id> # Chrome (default) surf install <extension-id> --browser brave # Brave surf install <extension-id> --browser all # All supported browsers ``` Supported: `chrome`, `chromium`, `brave`, `edge`, `arc` ### Uninstall ```bash surf uninstall # Chrome only surf uninstall --all # All browsers + wrapper files ``` ### Development Setup ```bash git clone https://github.com/nicobailon/surf-cli.git cd surf-cli npm install npm run build # Then load dist/ as unpacked extension ``` ## Usage ```bash surf <command> [args] [options] surf --help # Basic help surf --help-full # All 50+ commands surf <command> --help # Command details surf --find <query> # Search commands ``` ### Navigation ```bash surf go "https://example.com" surf back surf forward surf tab.reload --hard ``` ### Reading Pages ```bash surf read # Accessibility tree + visible text content surf read --no-text # Accessibility tree only (no text) surf read --depth 3 # Limit tree depth (smaller output) surf read --compact # Remove empty structural elements surf read --depth 3 --compact # Both (60% smaller output) surf page.text # Raw text content only surf page.state # Modals, loading state, scroll position ``` Element refs (`e1`, `e2`, `e3`...) are stable identifiers from the accessibility tree - semantic, predictable, and resilient to DOM changes. ### Semantic Locators Find and interact with elements by role, text, or label - no refs or selectors needed: ```bash # By ARIA role surf locate.role button --name "Submit" # Find button surf locate.role button --name "Submit" --action click # Find and click surf locate.role textbox --action fill --value "hello" # Find and fill surf locate.role link --all # List all links # By text content surf locate.text "Sign In" --action click # Click element with text surf locate.text "Accept" --exact # Exact match only # By form label surf locate.label "Email" --action fill --value "test@example.com" ``` ### Iframe Support Work with content inside iframes: ```bash surf frame.list # List all frames surf frame.switch --index 0 # Switch to first iframe surf frame.switch --name "payment" # Switch by frame name surf frame.switch --selector "#checkout-frame" # Switch by CSS selector # Now all commands target the iframe surf read # Read iframe content surf click e5 ... (truncated)
Repository
14stars
3forks
Details
Related Skills
More coding & development skills you might like
Reticle
Coding & DevelopmentAI agents can generate code, but still struggle to understand what they build. Reticle brings Jev-style machine-native runtime perception to web & desktop applications.
🤖claude🌐universal
1.2k
190
View
agentscope-java
Coding & DevelopmentExpert Java developer skill for AgentScope Java framework - a reactive, message-driven multi-agent system built on Project Reactor. Use when working with reactive programming, LLM integration, agent orchestration, multi-agent systems, or when the user mentions AgentScope, ReActAgent, Mono/Flux, Project Reactor, or Java agent development. Specializes in non-blocking code, tool integration, hooks, pipelines, and production-ready agent applications.
🌐universal
6.0k
1.5k
View
ospec
Coding & DevelopmentDocument-driven OSpec workflow for initialization, change/goal routing, validation, archiving, and durable project knowledge.
✨gemini🤖claude💬gpt🌐universal
524
34
View
misakanet-failure-memory
Coding & Development📚 A zero-dependency, git-backed micro-lesson library for AI Agents to asynchronously share and search verified debugging experience. Python stdlib only. | https://misakanet.org
🤖claude⌨️cursor🌐universal
424
158
View