camoufox-browser Skill
You can control a headless Camoufox browser running at http://localhost:9377. Camoufox is a Firefox-based browser with C++ anti-detection that bypasses bot detection including Google captcha.
This is the same browser engine that powers askjo.ai's web scraping.
Install as OpenClaw Plugin
# Clone and install git clone https://github.com/jo-inc/camoufox-browser ~/.openclaw/extensions/camoufox-browser cd ~/.openclaw/extensions/camoufox-browser npm install # Start the server (port 9377) ./run-camoufox.sh -p 9377 & # Enable the plugin openclaw plugins enable camoufox-browser
Then add the tools to your agent allowlist:
openclaw configure --section agents # Add camoufox-browser to tools.allow
Quick Start (Standalone)
cd {baseDir}
npm install
npm start
The server runs on port 3000 by default. Use ./run-camoufox.sh -p 9377 for custom port.
Check health: curl http://localhost:9377/health
How to Use
1. Create a Tab
curl -X POST http://localhost:9377/tabs \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw", "sessionKey": "task1", "url": "https://example.com"}'
Save the tabId from the response for subsequent requests.
2. Get Page Content
curl "http://localhost:9377/tabs/TAB_ID/snapshot?userId=openclaw"
This returns an accessibility snapshot with element refs like e1, e2, e3. These refs are stable identifiers you use to click or type into elements.
3. Click Elements
Use the ref from the snapshot:
curl -X POST http://localhost:9377/tabs/TAB_ID/click \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw", "ref": "e1"}'
4. Type Text
curl -X POST http://localhost:9377/tabs/TAB_ID/type \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw", "ref": "e2", "text": "hello world", "pressEnter": true}'
5. Search with Macros
Instead of navigating to search URLs, use macros:
curl -X POST http://localhost:9377/tabs/TAB_ID/navigate \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw", "macro": "@google_search", "query": "weather in New York"}'
Available macros:
- •
@google_search- Search Google - •
@youtube_search- Search YouTube - •
@amazon_search- Search Amazon - •
@reddit_search- Search Reddit - •
@wikipedia_search- Search Wikipedia - •
@twitter_search- Search Twitter/X
6. Scroll the Page
curl -X POST http://localhost:9377/tabs/TAB_ID/scroll \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw", "direction": "down", "amount": 500}'
7. Navigate Back/Forward
curl -X POST http://localhost:9377/tabs/TAB_ID/back \
-H "Content-Type: application/json" \
-d '{"userId": "openclaw"}'
8. Get All Links
curl "http://localhost:9377/tabs/TAB_ID/links?userId=openclaw&limit=50"
9. Close Tab When Done
curl -X DELETE "http://localhost:9377/tabs/TAB_ID?userId=openclaw"
Workflow Pattern
- •Create tab with initial URL
- •Get snapshot to see page content and element refs
- •Click/type using refs from snapshot
- •Get new snapshot after each navigation (refs reset)
- •Repeat until task complete
- •Close tab
Tips
- •Always get a fresh snapshot after clicking links or submitting forms
- •Use
pressEnter: truewhen typing in search boxes - •Element refs (
e1,e2) reset after navigation - always get new snapshot - •Use macros for searching instead of constructing URLs manually
- •The browser has anti-detection so it works with Google, Amazon, etc.
All Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /tabs | Create tab |
| GET | /tabs/:id/snapshot | Get page content with refs |
| POST | /tabs/:id/navigate | Go to URL or macro |
| POST | /tabs/:id/click | Click element |
| POST | /tabs/:id/type | Type text |
| POST | /tabs/:id/scroll | Scroll page |
| POST | /tabs/:id/back | Go back |
| POST | /tabs/:id/forward | Go forward |
| GET | /tabs/:id/links | Get all links |
| DELETE | /tabs/:id | Close tab |