skills/camofox-browser/SKILL.md
Anti-detection browser automation for AI agents. Use when the user needs stealth web browsing, undetectable scraping, fingerprint spoofing, proxy rotation, or privacy-focused browser automation. Triggers include "stealth scrape", "anti-detection", "bypass fingerprinting", "camofox", "camoufox", "undetectable browser", "bot evasion", or any browser task requiring evasion of bot detection systems.
npx skillsauth add redf0x1/camofox-browser camofox-browserInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Camofox is an anti-detection browser automation system built on Camoufox + Playwright with:
camofox) for operator workflows9377 by default) for programmatic controlplugin.ts) with 18 plugin toolsThis skill is optimized for bot-evasion workflows where default browser automation gets flagged.
Use this skill instead of generic browser tooling when at least one applies:
Do not use this skill if you only need a simple local static page script and anti-detection is irrelevant.
Use CLI when:
Use REST API when:
userId and tabId./tabs/open, /act, /snapshot).Follow this loop for reliable automation:
eN refsuserId stable for session continuityCLI:
camofox open https://example.com --user agent1
camofox snapshot --user agent1
camofox click e5 --user agent1
camofox type e7 "hello world" --user agent1
API:
curl -X POST http://localhost:9377/tabs \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","sessionKey":"default","url":"https://example.com"}'
curl "http://localhost:9377/tabs/<tabId>/snapshot?userId=agent1"
curl -X POST http://localhost:9377/tabs/<tabId>/click \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","ref":"e5"}'
Dual interface mapping (most common path):
| Intent | CLI | API |
|---|---|---|
| Open tab | camofox open <url> | POST /tabs |
| Snapshot refs | camofox snapshot | GET /tabs/:tabId/snapshot |
| Click element | camofox click <ref> | POST /tabs/:tabId/click |
| Type text | camofox type <ref> <text> | POST /tabs/:tabId/type |
| Navigate | camofox navigate <url> | POST /tabs/:tabId/navigate |
| Screenshot | camofox screenshot | GET /tabs/:tabId/screenshot |
Ref format reminder:
eN values (example e1, e2) in normal command usage.[e1]="value").Camofox differs from generic browser tools by using Camoufox launch options and per-profile fingerprint persistence:
camoufox-js (launchOptions)generateFingerprint) persisted per profile dirhumanize: true)geoip: true when proxy configured)~/.camofox/profiles/<user>) to keep believable identity continuityOperational anti-detection behaviors:
userIdPROXY_HOST/PORT/USERNAME/PASSWORDExecution behavior that helps evade brittle bot checks:
See deep-dive: references/anti-detection.md.
Core:
camofox open <url> [--user <user>] [--viewport <WxH>] [--geo <preset>]
camofox close [tabId] [--user <user>]
camofox snapshot [tabId] [--user <user>]
camofox click <ref> [tabId] [--user <user>]
camofox type <ref> <text> [tabId] [--user <user>]
Navigation + interaction:
camofox navigate <url> [tabId] [--user <user>]
camofox screenshot [tabId] [--output <file>] [--full-page] [--user <user>]
camofox fill '[e1]="john" [e2]="[email protected]"' [tabId] [--user <user>]
camofox press Enter [tabId] [--user <user>]
Inspection:
camofox get-text [tabId] [--selector <css>] [--user <user>]
camofox get-links [tabId] [--user <user>]
camofox eval '<js expression>' [tabId] [--user <user>]
camofox wait <selector|navigation|networkidle> [tabId] [--timeout <ms>] [--user <user>]
Search:
camofox search "openclaw plugin" --engine github [tabId] [--user <user>]
Full catalog (all 50): references/cli-commands.md.
Global flag reminders:
--user <user>
--port <port>
--format json|text|plain
API Documentation:
GET /api/docs (Swagger UI)GET /openapi.jsonCore tab flow:
POST /tabs
GET /tabs
POST /tabs/:tabId/navigate
GET /tabs/:tabId/snapshot
POST /tabs/:tabId/click
POST /tabs/:tabId/type
DELETE /tabs/:tabId
State + assets:
POST /sessions/:userId/cookies
GET /tabs/:tabId/cookies
GET /tabs/:tabId/screenshot
GET /tabs/:tabId/downloads
GET /users/:userId/downloads
Advanced:
POST /tabs/:tabId/evaluate
POST /tabs/:tabId/evaluate-extended
POST /tabs/:tabId/extract-resources
POST /tabs/:tabId/batch-download
POST /tabs/:tabId/resolve-blobs
OpenClaw compatibility routes:
GET /
POST /tabs/open
POST /start
POST /stop
POST /navigate
GET /snapshot
POST /act
Full endpoint map (all 54): references/api-endpoints.md.
Compatibility warning:
camofox_youtube_transcript tool has been removed from plugin.ts. Neither server route nor plugin tool expose this capability.CLI:
camofox snapshot --user agent1
camofox fill '[e4]="Jane Doe" [e5]="[email protected]"' --user agent1
camofox press Enter --user agent1
Safety notes:
--user on every step to preserve tab ownership.API:
curl -X POST http://localhost:9377/tabs/<tabId>/type \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","ref":"e5","text":"[email protected]"}'
camofox open https://target.example --user scraper-us
camofox snapshot --user scraper-us
camofox get-text --selector "main" --user scraper-us
camofox get-links --user scraper-us
Recommended loop shape:
camofox search "best playwright anti-detection" --engine duckduckgo --user research1
When using CLI search:
curl -X POST http://localhost:9377/tabs/<tabId>/navigate \
-H 'Content-Type: application/json' \
-d '{"userId":"agent1","macro":"@google_search","query":"camoufox js"}'
Auth Vault is local encrypted credential storage for CLI workflows.
Commands:
camofox auth save <profile-name> [--url <url>] [--notes <notes>]
camofox auth load <profile-name>
camofox auth load <profile-name> --inject [tabId] --username-ref <ref> --password-ref <ref> [--user <user>]
camofox auth list [--format <format>]
camofox auth delete <profile-name>
camofox auth change-password <profile-name>
Security model (implemented):
07000600Operational guidance:
See: references/authentication.md.
userId isolation)Session identity is scoped by userId and persistent profile dir:
userIduserIdCLI pattern:
camofox open https://example.com --user account-a
camofox snapshot --user account-a
camofox click e9 --user account-a
Cookie session file helpers:
camofox session save checkout-flow --user account-a
camofox session load checkout-flow --user account-a
Isolation reminder:
tabId lookup is user-scoped.userId with valid tabId returns not found behavior.Important distinction:
CLI search supports 8 engines:
google, youtube, amazon, bing, reddit, duckduckgo, github, stackoverflow
API navigate macro supports 14 macros in src/utils/macros.ts:
@google_search, @youtube_search, @amazon_search, @reddit_search, @reddit_subreddit, @wikipedia_search, @twitter_search, @yelp_search, @spotify_search, @netflix_search, @linkedin_search, @instagram_search, @tiktok_search, @twitch_search
CLI example:
camofox search "vite plugin" --engine github --user dev1
API macro example:
curl -X POST http://localhost:9377/tabs/<tabId>/navigate \
-H 'Content-Type: application/json' \
-d '{"userId":"dev1","macro":"@google_search","query":"vite plugin github"}'
Note: API macros and CLI search engines are different systems. Keep CLI/API behavior separate.
Macro mismatch reminder:
github and stackoverflow engines.@github_search or @stackoverflow_search in current macro implementation.Built-in preset names:
us-eastus-westjapanukgermanyvietnamsingaporeaustraliaCLI:
camofox open https://example.com --geo japan --user jp-agent
API:
curl -X POST http://localhost:9377/tabs \
-H 'Content-Type: application/json' \
-d '{"userId":"jp-agent","sessionKey":"default","preset":"japan","url":"https://example.com"}'
Preset best practice:
Use environment variables for hardened operation:
export CAMOFOX_API_KEY='<api-key>'
export CAMOFOX_ADMIN_KEY='<admin-key>'
export PROXY_HOST='proxy.example.net'
export PROXY_PORT='8080'
export PROXY_USERNAME='proxy-user'
export PROXY_PASSWORD='proxy-pass'
Behavior notes:
CAMOFOX_API_KEY is configured (includes cookie import/export, evaluate, tab/session lifecycle, navigation, interaction, downloads, tracing, console, and errors)./stop requires admin key authorization.camofox download is currently a stub/placeholder in CLI (documented intentionally).Suggested baseline environment:
export CAMOFOX_PORT=9377
export CAMOFOX_HEADLESS=virtual
export CAMOFOX_MAX_SESSIONS=20
export CAMOFOX_MAX_TABS=10
camofox run)camofox run is a sequential script runner (not a DAG/orchestration pipeline).
camofox run script.txt
camofox run script.txt --continue-on-error
cat script.txt | camofox run -
Script format:
# comments supportedrun is rejectedExample script (login-and-capture.cf):
# open login page
open https://example.com/login --user ops1
snapshot --user ops1
fill '[e3]="[email protected]" [e4]="not-stored-here"' --user ops1
press Enter --user ops1
wait networkidle --timeout 12000 --user ops1
screenshot --output login-result.png --user ops1
references/cli-commands.md — Full CLI command catalog and usage patterns.references/api-endpoints.md — Complete REST API route map and request/response notes.references/openclaw-tools.md — OpenClaw plugin tool list and route/tool mapping.references/anti-detection.md — Camoufox anti-detection model, fingerprint continuity, and stealth guidance.references/authentication.md — Auth Vault encryption model and credential workflows.references/session-management.md — userId isolation, context lifecycle, and session continuity.references/search-macros.md — CLI search engines vs API macro navigation behavior.references/proxy-presets.md — Geo presets, proxy settings, and region-alignment practices.references/scripting.md — camofox run script format, constraints, and execution behavior.references/snapshot-refs.md — Snapshot reference handling (eN), refresh rules, and element targeting reliability.references/media-extraction.md — Screenshot/download/resource extraction and media workflows.references/display-vnc.md — Headed/virtual display modes and VNC operation guidance.templates/stealth-scraping.sh — Stealth scraping workflow with anti-detection defaults.templates/search-and-extract.sh — Search across engines and extract structured results.templates/authenticated-session.sh — Auth Vault login and authenticated session flow.templates/form-automation.sh — Form automation using snapshot-interact-verify loops.templates/multi-session-pipeline.sh — Parallel multi-session collection pipeline.templates/screenshot-capture.sh — Screenshot capture workflow for audits and evidence.plugin.ts.camofox_youtube_transcript tool has been removed from plugin.ts. Neither server route nor plugin tool expose this capability.eN (for example e1, e2), not @eN.AGENTS.md.High-confidence troubleshooting checklist:
camofox health --format jsoncamofox get-tabs --user <user> --format jsoncamofox snapshot--userCore (5):
openclosesnapshotclicktypeNavigation (4):
navigatescreenshotgo-backgo-forwardContent (7):
get-textget-urlget-linksget-tabsevalwaitsearchInteraction (6):
fillscrollselecthoverpressdragConsole/error capture (2):
consoleerrorsTracing (5):
trace starttrace stoptrace chunk-starttrace chunk-stoptrace statusSession (4):
session savesession loadsession listsession deleteDownload/cookie (4):
cookie exportcookie importdownload (stub)downloadsAuth (5):
auth saveauth loadauth listauth deleteauth change-passwordServer (3):
server startserver stopserver statusAdvanced (4):
annotatehealthversioninfoPipeline (1):
runCore REST routes (core.ts):
OpenClaw routes (openclaw.ts):
/, /tabs/open, /start, /stop, /navigate, /snapshot, /actCLI output handling:
--format json for machine parsing.plain only when expecting one scalar (for example direct path or status string).API response handling:
GET) by default.evaluate-extended, handle 429 and 408 explicitly.Documented guardrails for this repository revision:
camofox_youtube_transcript tool has been removed from plugin.ts. The route POST /youtube/transcript remains unregistered.download remains placeholder/stub and should be treated as non-functional direct download command.If you need robust automations, enforce this contract in your agent logic:
userId (or --user) for every command/call.DELETE /sessions/:userId) on teardown in long-running systems.tools
Reddit automation with CamoFox CLI — login, browse, post, comment, reply with anti-detection. Use when the user needs to automate Reddit interactions, post to subreddits, comment on threads, or browse Reddit programmatically. Triggers include "reddit", "post to reddit", "reddit comment", "reddit automation", or any request to interact with Reddit via browser automation.
tools
Automate image generation on Google Gemini (gemini.google.com) using CamoFox CLI. Use when the user asks to "generate image", "create image with Gemini", "AI image generation", "tạo hình ảnh", or needs automated Gemini workflows.
development
QA testing workflow for CamoFox Browser — systematic testing with console capture, error detection, and Playwright tracing. Use when the user needs to test a web application, perform QA validation, do exploratory testing, or verify web app behavior. Triggers include "test this website", "QA", "dogfood", "exploratory testing", "find bugs", or any request to systematically test a web application.
tools
CamoFox CLI — 50 commands for anti-detection browser automation from the terminal. Use when the user needs CLI reference for camofox commands, terminal-based browser control, or a quick lookup of command syntax. Triggers include "camofox command", "CLI reference", "terminal browser", or any request for camofox command-line usage.