Camoufox-only browser runtime for AI agents with inspect/query/act APIs, events, and downloads.
SaferSkills independently audited camoufox-browser (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill when browser tasks should run through the Camoufox runtime API exposed by this repository.
http://127.0.0.1:9487GET /healthGET /capabilitiesIf the runtime is not running yet:
cd /path/to/camoufox-browser
npm install
npx camoufox-js fetch
npm startOr use the bundled helpers from this skill:
./scripts/start.sh
./scripts/stop.sh(start.sh runs the runtime from the package/repo root and waits for /health.)
Before any browser task, do a quick preflight:
curl -s http://127.0.0.1:9487/health
curl -s http://127.0.0.1:9487/capabilitiesPOST /sessions)POST /sessions/:sessionId/tabs)POST /tabs/:tabId/inspect)POST /tabs/:tabId/query)POST /tabs/:tabId/act)POST /tabs/:tabId/wait)eval only for edge cases (POST /tabs/:tabId/eval)For userscript-style injection:
POST /sessions/:sessionId/init-scripts with {"path": "/path/to/script.js"}DOMContentLoaded on every page loadCreate session:
curl -s -X POST http://127.0.0.1:9487/sessions \
-H "Content-Type: application/json" \
-d '{"persistent":true}'Create tab:
curl -s -X POST http://127.0.0.1:9487/sessions/<sessionId>/tabs \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'Inspect:
curl -s -X POST http://127.0.0.1:9487/tabs/<tabId>/inspect \
-H "Content-Type: application/json" \
-d '{"limit":200,"offset":0,"includeScreenshot":false,"includeDom":false}'Act:
curl -s -X POST http://127.0.0.1:9487/tabs/<tabId>/act \
-H "Content-Type: application/json" \
-d '{
"action":"click",
"target":{"by":"role","role":"button","name":"Continue"},
"retry":{"maxAttempts":3,"backoffMs":150}
}'Wait:
curl -s -X POST http://127.0.0.1:9487/tabs/<tabId>/wait \
-H "Content-Type: application/json" \
-d '{
"mode":"all",
"conditions":[{"kind":"networkIdle"}],
"timeoutMs":10000
}'Init scripts (userscript-style injection):
# From file on disk (re-read on every page load)
curl -s -X POST http://127.0.0.1:9487/sessions/<sessionId>/init-scripts \
-H "Content-Type: application/json" \
-d '{"path":"/path/to/script.user.js"}'
# Or inline
curl -s -X POST http://127.0.0.1:9487/sessions/<sessionId>/init-scripts \
-H "Content-Type: application/json" \
-d '{"script":"document.body.style.background = \"red\""}'ref, role, label) before brittle selectors.POST /sessions/:sessionId/init-scripts with a file path.File-based scripts are re-read from disk on every page load — just edit and reload.
script) are also supported but baked in at registration time./tabs/:tabId/events for timeline debugging (network, console, page errors, actions)./tabs/:tabId/fetch for authenticated HTTP calls using browser cookies./tabs/:tabId/downloads + /save to persist downloaded artifacts.For complete endpoint coverage and payload details, read ../../README.md before complex or long-running workflows.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.