Skills surfagent
Control a real Chrome browser via SurfAgent — navigate, click, type, screenshot, extract data, crawl sites, and automate web workflows. Uses your persistent Chrome profile with real cookies and sessions. Works through SurfAgent's MCP server or direct HTTP API.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/agentossoftware/surfagent" ~/.claude/skills/openclaw-skills-surfagent && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/agentossoftware/surfagent" ~/.openclaw/skills/openclaw-skills-surfagent && rm -rf "$T"
manifest:
skills/agentossoftware/surfagent/SKILL.mdsource content
SurfAgent — Real Chrome Browser Control
Give your AI agent a real, persistent Chrome browser. No headless browsers, no cloud, no bot detection issues.
When to Use
- You need to browse, scrape, or interact with a website
- You need to fill forms, click buttons, or navigate pages
- You need to extract structured data from web pages
- You need to take screenshots of websites
- You need persistent login sessions (already logged into sites)
- You need to bypass bot detection (Cloudflare, hCaptcha, etc.)
- You need to crawl/map a website
Prerequisites
- SurfAgent installed and running — download from surfagent.app
- MCP server connected —
hermes mcp add surfagent --command npx --args -y surfagent-mcp - Or use the HTTP API directly at
http://localhost:7201
Quick Reference — MCP Tools (24)
| Tool | What it does |
|---|---|
| Open a URL |
| Go back in history |
| Go forward in history |
| Click an element (selector, text, or coordinates) |
| Type text into an element |
| Fill multiple form fields at once |
| Select dropdown option |
| Scroll page or to element |
| Capture page screenshot (PNG) |
| Get visible text content |
| Get page HTML |
| Get current URL |
| Get page title |
| Find elements by CSS selector |
| Run JavaScript in page |
| Wait for element to appear |
| Get or set cookies |
| List open tabs |
| Open new tab |
| Switch to tab by id/title |
| Close a tab |
| Extract structured data (markdown, JSON, links) |
| BFS crawl a domain |
| Discover all URLs on a site |
Procedure
Basic Navigation
- Use
to open a URLbrowser_navigate - Use
to see the pagebrowser_screenshot - Use
orbrowser_click
to interactbrowser_type - Use
to read contentbrowser_get_text
Data Extraction
- Use
with a URL to get markdown + linksbrowser_extract - Add
andprompt
fields for LLM-powered structured extractionschema - Use
for multi-page extractionbrowser_crawl - Use
for quick URL discoverybrowser_map
Form Filling
- Use
to go to the form pagebrowser_navigate - Use
with field label/name → value mappingsbrowser_fill_form - Or use
+browser_click
for individual fieldsbrowser_type - Use
for dropdownsbrowser_select
Tab Management
- Use
to see what's openbrowser_list_tabs - Use
to open a new tabbrowser_new_tab - Use
to change focusbrowser_switch_tab - Use
when done — always clean up tabsbrowser_close_tab
Direct HTTP API (fallback)
If MCP isn't available, call the daemon directly:
# Navigate curl -X POST http://localhost:7201/browser/navigate \ -H 'Content-Type: application/json' \ -d '{"url": "https://example.com"}' # Screenshot curl -s http://localhost:7201/browser/screenshot --output screenshot.png # List tabs curl -s http://localhost:7201/browser/tabs # Extract page data curl -X POST http://localhost:7201/browser/extract \ -H 'Content-Type: application/json' \ -d '{"url": "https://example.com", "formats": ["markdown", "links"]}'
Key Advantages
- Real Chrome — not headless, passes all bot detection
- Persistent sessions — log in once, stay logged in forever
- Real fingerprint — your actual Chrome installation, real cookies
- 100% local — no data leaves your machine
- 24 MCP tools — comprehensive browser control
- Extract + Crawl — Firecrawl-equivalent features, zero cloud cost
Pitfalls
- Always close tabs when done — leaving tabs open wastes resources
- Wait for dynamic content — SPAs need
or a short delay after navigationbrowser_wait - One operation at a time — don't fire multiple browser commands in parallel
- Screenshots are viewport-only by default — use the fullPage option for long pages
- Cookie consent banners — the daemon can auto-resolve them via
/browser/resolve-blocker
Verification
returns the expected URL after navigationbrowser_get_url
shows the expected page contentbrowser_screenshot
contains the expected textbrowser_get_text- Health check:
returnscurl http://localhost:7201/health{"ok": true}