{"id":"786bc496-2b1e-46a8-9f32-ab399ee2eb0a","entityType":"agent","slug":"clawhub-tmchow-camofox-cloaked-browser","name":"Camofox Cloaked Browser","canonicalUrl":"https://www.xpersona.co/agent/clawhub-tmchow-camofox-cloaked-browser","canonicalPath":"/agent/clawhub-tmchow-camofox-cloaked-browser","generatedAt":"2026-10-12T10:18:40.801Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":null},"description":"Use Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin tools...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 982 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17f9h004hads3st3t2xbtmhr585rjvr:camofox-cloaked-browser","sourceUrl":"https://clawhub.ai/tmchow/camofox-cloaked-browser","homepage":"https://clawhub.ai/tmchow/skills/camofox-cloaked-browser","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/tmchow/camofox-cloaked-browser","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/tmchow/skills/camofox-cloaked-browser","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Camofox Cloaked Browser technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":null},"stars":null,"forks":null,"downloads":982,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.3.4","tractionLabel":"982 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:46:24.451Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T22:46:24.522Z","lastCrawledAt":"2026-10-11T22:46:24.451Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T22:46:24.451Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.4","createdAt":"2026-06-24T22:47:16.423Z","changelog":"Publish camofox-cloaked-browser 1.3.4 from 118b8c725c4b61f70dad275231465ec2888240fe","fileCount":4,"zipByteSize":9503},{"version":"1.3.3","createdAt":"2026-05-30T09:32:11.097Z","changelog":"Manual update from latest local SKILL.md. Keeps CAMOFOX_API_KEY optional and clarifies it is only for sensitive endpoints, not normal browsing.","fileCount":4,"zipByteSize":9442},{"version":"1.3.2","createdAt":"2026-05-30T09:29:19.698Z","changelog":"Clarify CAMOFOX_API_KEY is optional and only used for sensitive endpoints to avoid implying the skill requires an API key for normal browsing.","fileCount":4,"zipByteSize":9433},{"version":"1.3.1","createdAt":"2026-05-30T09:18:40.306Z","changelog":"README update: replace provisional OpenClaw slug wording with canonical ClawHub install command.","fileCount":4,"zipByteSize":9407},{"version":"1.3.0","createdAt":"2026-05-30T09:15:43.702Z","changelog":"Initial publish: Hermes/OpenClaw skill for opt-in Camofox/Camoufox cloaked browsing.","fileCount":4,"zipByteSize":9702}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17f9h004hads3st3t2xbtmhr585rjvr:camofox-cloaked-browser","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17f9h004hads3st3t2xbtmhr585rjvr:camofox-cloaked-browser` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/tmchow/camofox-cloaked-browser before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T10:18:40.798Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-tmchow-camofox-cloaked-browser/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":null},"readme":"Skill: Camofox Cloaked Browser\n\nOwner: tmchow\n\nSummary: Use Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin tools...\n\nTags: latest:1.3.4\n\nVersion history:\n\nv1.3.4 | 2026-06-24T22:47:16.423Z | user\n\nPublish camofox-cloaked-browser 1.3.4 from 118b8c725c4b61f70dad275231465ec2888240fe\n\nv1.3.3 | 2026-05-30T09:32:11.097Z | user\n\nManual update from latest local SKILL.md. Keeps CAMOFOX_API_KEY optional and clarifies it is only for sensitive endpoints, not normal browsing.\n\nv1.3.2 | 2026-05-30T09:29:19.698Z | user\n\nClarify CAMOFOX_API_KEY is optional and only used for sensitive endpoints to avoid implying the skill requires an API key for normal browsing.\n\nv1.3.1 | 2026-05-30T09:18:40.306Z | user\n\nREADME update: replace provisional OpenClaw slug wording with canonical ClawHub install command.\n\nv1.3.0 | 2026-05-30T09:15:43.702Z | user\n\nInitial publish: Hermes/OpenClaw skill for opt-in Camofox/Camoufox cloaked browsing.\n\nArchive index:\n\nArchive v1.3.4: 4 files, 9503 bytes\n\nFiles: README.md (2893b), skill-card.md (2250b), SKILL.md (18936b), _meta.json (142b)\n\nFile v1.3.4:SKILL.md\n\n---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.4\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    category: browser\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token used only for sensitive endpoints such as cookie import and traces. Not needed for normal browsing, snapshots, navigation, clicks, or typing.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name: CAMOUFOX_EXECUTABLE_PATH\n        required: false\n        description: Compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_EXECUTABLE_PATH\n        required: false\n        description: Legacy compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_URL\n        required: false\n        description: \"Hermes-only client-side backend switch. Footgun: if set in Hermes global env/.env/gateway env, Hermes routes all browser calls in that process through Camofox. Do not persist or export globally; use only inline for a dedicated Hermes process.\"\n---\n\n# Camofox Cloaked Browser\n\n## When to use\n\nUse this skill only when the task needs Camofox/Camoufox specifically:\n\n- user names Camofox, Camoufox, anti-detection browsing, cloaked browser, browser fingerprint spoofing, or stealth browsing\n- a site is likely to block normal Playwright/Chrome automation\n- the task needs stable accessibility refs from a Camofox browser server\n- OpenClaw has the `camofox-browser` plugin/tools available\n\nDo **not** use it for ordinary web search, simple page fetches, static text extraction, or normal browser automation. Use the cheaper default stack unless cloaking is actually load-bearing.\n\nIf the user names another browser target explicitly — Browserbase, Selkies, a tailnet browser, normal Hermes browser, Chrome DevTools, etc. — stop and use that target/skill instead. Do not silently route through Camofox.\n\n## Default target\n\nDefault local server:\n\n```text\nhttp://127.0.0.1:9377\n```\n\nEquivalent localhost URL is usually fine:\n\n```text\nhttp://localhost:9377\n```\n\nPrefer `127.0.0.1` in examples to avoid IPv6/localhost oddities.\n\nThere is no container target in this skill. Do not mention or rely on container names; this skill is about the npm server and OpenClaw plugin/API.\n\n## Operating model\n\nCamofox Browser is a Node server and OpenClaw plugin wrapper around Camoufox, a Firefox-based anti-detection browser.\n\nPrimary local startup:\n\n```bash\nnpx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default\n```\n\nAlternative cloned-repo startup:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nAlternative global install:\n\n```bash\nnpm install -g @askjo/camofox-browser\ncamofox-browser\n```\n\n`npm install` / `npx` downloads the Camoufox browser binary on first run via the package postinstall unless `CAMOUFOX_EXECUTABLE` points to an existing compatible Camoufox bundle. Expect roughly a few hundred MB for the browser payload.\n\n## OpenClaw plugin mode\n\nIf OpenClaw has the upstream plugin installed, prefer the plugin tools over raw `curl` because they auto-manage `userId` from `ctx.agentId`, use `sessionKey`, and can auto-start the server.\n\nInstall shape:\n\n```bash\nopenclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows\n```\n\nUseful OpenClaw CLI commands from the plugin:\n\n```bash\nopenclaw camofox status\nopenclaw camofox start\nopenclaw camofox stop\nopenclaw camofox tabs\nopenclaw camofox configure\n```\n\nPlugin config shape shown by upstream:\n\n```yaml\nplugins:\n  entries:\n    camofox-browser:\n      enabled: true\n      config:\n        port: 9377\n        autoStart: true\n        maxSessions: 5\n        maxTabsPerSession: 3\n        sessionTimeoutMs: 600000\n        browserIdleTimeoutMs: 300000\n        maxOldSpaceSize: 128\n```\n\nThe upstream plugin exposes these core tools:\n\n- `camofox_create_tab` — create tab; returns `tabId`\n- `camofox_snapshot` — accessibility snapshot with refs and screenshot; primary observation tool\n- `camofox_click` — click by ref or CSS selector\n- `camofox_type` — type by ref or selector; optional `pressEnter`\n- `camofox_navigate` — navigate by URL or search macro\n- `camofox_scroll` — scroll page\n- `camofox_screenshot` — screenshot only\n- `camofox_close_tab` — close a tab\n- `camofox_evaluate` — execute JS; gated by server auth middleware\n- `camofox_list_tabs` — list tabs for the current user\n- `camofox_import_cookies` — import Netscape cookies; use `CAMOFOX_API_KEY` for this sensitive endpoint\n\n## Hard workflow rules\n\nAlways follow these rules when using Camofox:\n\n1. Check `/health` before doing browser work.\n2. Always send `userId` in raw REST calls.\n3. Prefer `sessionKey` when creating tabs so task tabs group together.\n4. Open or reuse a tab intentionally; do not spray new tabs.\n5. Snapshot before selecting refs.\n6. Re-snapshot after every state-changing action: click, type with submit, press, scroll, navigation, back, forward, refresh, JS evaluate that mutates state.\n7. Element refs reset after navigation and may become stale after DOM changes.\n8. Prefer refs from the latest snapshot over CSS selectors. Use selectors only when refs are unavailable or unstable.\n9. Close tabs when done unless preserving the session is explicitly useful.\n10. Do not claim Camofox is in use until both the server is healthy and the actual agent/client is pointed at it.\n\n## REST API quick commands\n\nSet base variables:\n\n```bash\nBASE=\"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}\"\nUSER_ID=\"${CAMOFOX_USER_ID:-agent1}\"\nSESSION_KEY=\"${CAMOFOX_SESSION_KEY:-task1}\"\n```\n\nIf `CAMOFOX_ACCESS_KEY` or `CAMOFOX_API_KEY` is set, include auth where required:\n\n```bash\nAUTH_HEADER=()\nif [ -n \"${CAMOFOX_ACCESS_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_ACCESS_KEY}\")\nelif [ -n \"${CAMOFOX_API_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_API_KEY}\")\nfi\n```\n\n### Health\n\n```bash\ncurl -fsS \"$BASE/health\"\n```\n\n### Create tab\n\n```bash\nTAB_ID=\"$(curl -fsS -X POST \"$BASE/tabs\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"sessionKey\\\":\\\"$SESSION_KEY\\\",\\\"url\\\":\\\"https://example.com\\\"}\" \\\n  | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"tabId\"])')\"\nprintf 'TAB_ID=%s\\n' \"$TAB_ID\"\n```\n\n### Navigate\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"url\\\":\\\"https://example.com\\\"}\"\n```\n\nSearch macro example:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"macro\\\":\\\"@google_search\\\",\\\"query\\\":\\\"site:example.com pricing\\\"}\"\n```\n\nKnown macros include:\n\n- `@google_search`\n- `@youtube_search`\n- `@amazon_search`\n- `@reddit_search`\n- `@wikipedia_search`\n- `@twitter_search`\n- `@yelp_search`\n- `@spotify_search`\n- `@netflix_search`\n- `@linkedin_search`\n- `@instagram_search`\n- `@tiktok_search`\n- `@twitch_search`\n\n### Snapshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID\"\n```\n\nWith screenshot and pagination offset:\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID&includeScreenshot=true&offset=0\"\n```\n\n### Click\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e1\\\"}\"\n```\n\nSelector fallback:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"selector\\\":\\\"button[type=submit]\\\"}\"\n```\n\n### Type\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"hello world\\\"}\"\n```\n\nType and submit:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"query\\\",\\\"pressEnter\\\":true}\"\n```\n\n### Press key\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/press\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"key\\\":\\\"Enter\\\"}\"\n```\n\n### Wait\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/wait\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"timeout\\\":3000}\"\n```\n\n### Scroll\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/scroll\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"direction\\\":\\\"down\\\",\\\"amount\\\":700}\"\n```\n\n### Back / forward / refresh\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/back\"    -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/forward\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/refresh\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\n```\n\n### Links / images / screenshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/links?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/images?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/screenshot?userId=$USER_ID\" --output screenshot.png\n```\n\n### Evaluate JavaScript\n\nThis endpoint is auth-gated by the server middleware. Use only when needed.\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/evaluate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"expression\\\":\\\"document.title\\\"}\"\n```\n\n### Structured extract\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/extract\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"schema\\\":{\\\"type\\\":\\\"object\\\",\\\"properties\\\":{\\\"title\\\":{\\\"type\\\":\\\"string\\\"}}}}\"\n```\n\n### List and close tabs\n\n```bash\ncurl -fsS \"$BASE/tabs?userId=$USER_ID\"\ncurl -fsS -X DELETE \"$BASE/tabs/$TAB_ID?userId=$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n### Delete session data\n\nThis endpoint is auth-gated.\n\n```bash\ncurl -fsS -X DELETE \"$BASE/sessions/$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n## Environment variables\n\n### Server/client target\n\n- `CAMOFOX_PORT`: server port; default `9377`\n- `PORT`: generic port fallback if `CAMOFOX_PORT` is unset\n- `CAMOFOX_BASE_URL`: not an upstream server env var; useful shell convention for scripts in this skill\n- `CAMOFOX_URL`: Hermes-specific browser-backend switch; **do not set/export globally**; see below\n\n### Auth and sensitive operations\n\n- `CAMOFOX_ACCESS_KEY`: global bearer token for all routes except `/health`; use when anything can reach the server beyond loopback\n- `CAMOFOX_API_KEY`: optional bearer token used only for sensitive endpoints such as cookie import/traces; not needed for normal browsing, snapshots, navigation, clicks, or typing\n- `CAMOFOX_ADMIN_KEY`: protects `/stop` when configured\n\nFor local development with neither key set, upstream allows loopback requests in non-production mode. Do not expose that to a network. That would be the kind of convenience feature that becomes an incident report.\n\n### Storage / runtime tuning\n\n- `CAMOFOX_COOKIES_DIR`: cookie import source directory; default `~/.camofox/cookies`\n- `CAMOFOX_PROFILE_DIR`: profile directory; default `~/.camofox/profiles`\n- `CAMOFOX_TRACES_DIR`: trace directory; default `~/.camofox/traces`\n- `CAMOFOX_TRACES_MAX_BYTES`: default 50MB\n- `CAMOFOX_TRACES_TTL_HOURS`: default 24\n- `MAX_CONCURRENT_PER_USER`: default 3\n- `MAX_SESSIONS`: default 50\n- `MAX_TABS_PER_SESSION`: default 10\n- `MAX_TABS_GLOBAL`: default 50\n- `SESSION_TIMEOUT_MS`: default 600000 in current code\n- `TAB_INACTIVITY_MS`: default 300000\n- `BROWSER_IDLE_TIMEOUT_MS`: default 300000\n- `NAVIGATE_TIMEOUT_MS`: default 25000\n- `BUILDREFS_TIMEOUT_MS`: default 12000\n- `NATIVE_MEM_RESTART_THRESHOLD_MB`: default 300\n- `BROWSER_RSS_RESTART_THRESHOLD_MB`: default 1500\n\n### Browser binary\n\n- `CAMOUFOX_EXECUTABLE`: external Camoufox executable/bundle; skips bundled download when valid\n- `CAMOUFOX_EXECUTABLE_PATH`: compatibility alias\n- `CAMOFOX_EXECUTABLE_PATH`: legacy alias\n- `CAMOFOX_SKIP_DOWNLOAD=1|true`: skip postinstall browser download; only use if an executable is provided another way\n\n### Proxy / GeoIP\n\n- `PROXY_STRATEGY`\n- `PROXY_PROVIDER`\n- `PROXY_HOST`\n- `PROXY_PORT`\n- `PROXY_PORTS`\n- `PROXY_USERNAME`\n- `PROXY_PASSWORD`\n- `PROXY_BACKCONNECT_HOST`\n- `PROXY_BACKCONNECT_PORT`\n- `PROXY_COUNTRY`\n- `PROXY_STATE`\n- `PROXY_CITY`\n- `PROXY_ZIP`\n- `PROXY_SESSION_DURATION_MINUTES`\n\n### Telemetry\n\nUpstream crash/hang telemetry is enabled unless disabled:\n\n```bash\nCAMOFOX_CRASH_REPORT_ENABLED=false\n```\n\nUse that for privacy-conservative local runs unless the user wants upstream crash reporting.\n\n## Hermes-specific `CAMOFOX_URL` footgun\n\nThis section is load-bearing for Hermes agents. Read it before setting environment variables.\n\nIn Hermes, `CAMOFOX_URL` is not just a harmless client hint. It is a browser-backend switch. If `CAMOFOX_URL` is visible in the Hermes process environment, Hermes considers Camofox mode enabled for that process and normal Hermes browser calls can be forced through Camofox.\n\nHard rules for Hermes:\n\n- **Do not** add `CAMOFOX_URL` to `~/.hermes/.env`.\n- **Do not** export `CAMOFOX_URL` in shell profiles such as `~/.zshrc`, `~/.bashrc`, launchd plists, Docker env, or service env.\n- **Do not** put `CAMOFOX_URL` in the Hermes gateway environment unless the explicit intent is for the entire gateway process to use Camofox for browser calls.\n- **Do not** use `hermes config set ... CAMOFOX_URL ...`; this is runtime state, not durable config.\n- Use `CAMOFOX_URL` only as an inline, one-process env var for a dedicated cloaked Hermes run:\n\n```bash\nCAMOFOX_URL=\"http://127.0.0.1:9377\" hermes chat -q 'Use cloaked Camofox browsing for this task: <task>'\n```\n\n- After removing an accidentally global `CAMOFOX_URL`, restart the affected Hermes CLI/gateway process; running processes keep their old environment.\n\nSafer default for Hermes agents: run the Camofox server normally, store the stable server URL as `skills.config.camofox.base_url` or `CAMOFOX_BASE_URL` for REST examples, and **do not set `CAMOFOX_URL` at all** unless launching a dedicated cloaked Hermes process.\n\nThis routing claim is Hermes-specific. For OpenClaw, use the upstream plugin config/tools unless you have verified equivalent env semantics.\n\n## Verification checklist\n\nBefore claiming success:\n\n1. Server health responds:\n\n```bash\ncurl -fsS \"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}/health\"\n```\n\n2. OpenClaw plugin mode, if applicable:\n\n```bash\nopenclaw camofox status\n```\n\n3. Raw REST mode: create a tab, snapshot it, close it.\n\n4. Hermes mode: verify `CAMOFOX_URL` is absent from global Hermes env and present only on the dedicated cloaked Hermes process, if Hermes process routing is intentionally being used.\n\n5. Cleanup: close tabs or stop the managed server if the task started it only for one job.\n\n## Common mistakes\n\n- Using Camofox when normal search/extract tools are cheaper and sufficient.\n- Forgetting `userId` in raw REST calls.\n- Clicking stale refs after navigation or DOM changes.\n- Setting/exporting `CAMOFOX_URL` globally in Hermes (`~/.hermes/.env`, gateway env, shell profile, service env) and accidentally routing all browser calls through Camofox.\n- Assuming `CAMOFOX_API_KEY` is needed for normal browser work; it is only for sensitive endpoints such as cookie import/traces.\n- Exposing a no-auth local development server beyond loopback.\n- Treating MCP tool names from a separate MCP wrapper as if they are the upstream OpenClaw plugin tools. The MCP wrapper may expose many more tools; this skill is centered on upstream `@askjo/camofox-browser` plus its REST API.\n\n## Output format when using this skill\n\nReport:\n\n- runtime: OpenClaw plugin, raw REST, Hermes, or other\n- base URL: server URL used\n- startup: npx/package, cloned repo npm start, OpenClaw autoStart, or existing server\n- auth: no auth/local loopback, `CAMOFOX_ACCESS_KEY`, or `CAMOFOX_API_KEY` for sensitive endpoints\n- user/session: `userId`, `sessionKey`\n- tab: `tabId` used/closed/preserved\n- verification: health + snapshot/action result summary\n- cleanup: tabs closed and whether server was left running\n\nFile v1.3.4:README.md\n\n# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install This Skill\n\n### Any Agent Skills runtime (skills CLI)\n\nInstall only this skill from the repo:\n\n```bash\nnpx skills add tmchow/agent-skills --skill camofox-cloaked-browser\n```\n\nAdd `--global` to install it at the user level instead of the current project:\n\n```bash\nnpx skills add tmchow/agent-skills --skill camofox-cloaked-browser --global\n```\n\n### Hermes\n\nInstall from the GitHub directory identifier:\n\n```bash\nhermes skills install tmchow/agent-skills/camofox-cloaked-browser\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install tmchow/agent-skills/camofox-cloaked-browser\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nInstall from ClawHub:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nClawHub page: https://clawhub.ai/tmchow/camofox-cloaked-browser\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry\n\nFile v1.3.4:_meta.json\n\n{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.4\",\n  \"publishedAt\": 1782341236423\n}\n\nFile v1.3.4:skill-card.md\n\n## Description:\n\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[tmchow](https://clawhub.ai/user/tmchow)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill when ordinary browser automation is likely to be blocked and an opt-in Camofox/Camoufox browser workflow is warranted. It guides local server startup, OpenClaw plugin use, REST commands, session and tab handling, environment variables, and cleanup checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill asks agents to run an unpinned npm browser package that downloads a large executable at install time.\n\nMitigation: Pin `@askjo/camofox-browser` to a reviewed version and prefer a verified local Camoufox bundle via `CAMOUFOX_EXECUTABLE`.\n\nRisk: A cloaked browser service exposed beyond loopback can create browser-control risk if access controls are not set.\n\nMitigation: Keep the server on loopback for local use and set `CAMOFOX_ACCESS_KEY` before any non-local exposure.\n\nRisk: Crash or hang telemetry may be undesirable for privacy-sensitive browsing.\n\nMitigation: Set `CAMOFOX_CRASH_REPORT_ENABLED=false` when privacy matters, or use a self-hosted crash-report endpoint if telemetry is required.\n\n## Reference(s):\n\n- [Camofox Browser upstream project](https://github.com/jo-inc/camofox-browser)\n- [ClawHub skill page](https://clawhub.ai/tmchow/skills/camofox-cloaked-browser)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with inline shell commands and configuration examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance is scoped to macOS and Linux environments with Node.js, npm, and curl available.]\n\n## Skill Version(s):\n\n1.3.4 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.3.3: 4 files, 9442 bytes\n\nFiles: README.md (2648b), skill-card.md (2525b), SKILL.md (18914b), _meta.json (142b)\n\nFile v1.3.3:SKILL.md\n\n---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.3\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token used only for sensitive endpoints such as cookie import and traces. Not needed for normal browsing, snapshots, navigation, clicks, or typing.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name: CAMOUFOX_EXECUTABLE_PATH\n        required: false\n        description: Compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_EXECUTABLE_PATH\n        required: false\n        description: Legacy compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_URL\n        required: false\n        description: \"Hermes-only client-side backend switch. Footgun: if set in Hermes global env/.env/gateway env, Hermes routes all browser calls in that process through Camofox. Do not persist or export globally; use only inline for a dedicated Hermes process.\"\n---\n\n# Camofox Cloaked Browser\n\n## When to use\n\nUse this skill only when the task needs Camofox/Camoufox specifically:\n\n- user names Camofox, Camoufox, anti-detection browsing, cloaked browser, browser fingerprint spoofing, or stealth browsing\n- a site is likely to block normal Playwright/Chrome automation\n- the task needs stable accessibility refs from a Camofox browser server\n- OpenClaw has the `camofox-browser` plugin/tools available\n\nDo **not** use it for ordinary web search, simple page fetches, static text extraction, or normal browser automation. Use the cheaper default stack unless cloaking is actually load-bearing.\n\nIf the user names another browser target explicitly — Browserbase, Selkies, a tailnet browser, normal Hermes browser, Chrome DevTools, etc. — stop and use that target/skill instead. Do not silently route through Camofox.\n\n## Default target\n\nDefault local server:\n\n```text\nhttp://127.0.0.1:9377\n```\n\nEquivalent localhost URL is usually fine:\n\n```text\nhttp://localhost:9377\n```\n\nPrefer `127.0.0.1` in examples to avoid IPv6/localhost oddities.\n\nThere is no container target in this skill. Do not mention or rely on container names; this skill is about the npm server and OpenClaw plugin/API.\n\n## Operating model\n\nCamofox Browser is a Node server and OpenClaw plugin wrapper around Camoufox, a Firefox-based anti-detection browser.\n\nPrimary local startup:\n\n```bash\nnpx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default\n```\n\nAlternative cloned-repo startup:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nAlternative global install:\n\n```bash\nnpm install -g @askjo/camofox-browser\ncamofox-browser\n```\n\n`npm install` / `npx` downloads the Camoufox browser binary on first run via the package postinstall unless `CAMOUFOX_EXECUTABLE` points to an existing compatible Camoufox bundle. Expect roughly a few hundred MB for the browser payload.\n\n## OpenClaw plugin mode\n\nIf OpenClaw has the upstream plugin installed, prefer the plugin tools over raw `curl` because they auto-manage `userId` from `ctx.agentId`, use `sessionKey`, and can auto-start the server.\n\nInstall shape:\n\n```bash\nopenclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows\n```\n\nUseful OpenClaw CLI commands from the plugin:\n\n```bash\nopenclaw camofox status\nopenclaw camofox start\nopenclaw camofox stop\nopenclaw camofox tabs\nopenclaw camofox configure\n```\n\nPlugin config shape shown by upstream:\n\n```yaml\nplugins:\n  entries:\n    camofox-browser:\n      enabled: true\n      config:\n        port: 9377\n        autoStart: true\n        maxSessions: 5\n        maxTabsPerSession: 3\n        sessionTimeoutMs: 600000\n        browserIdleTimeoutMs: 300000\n        maxOldSpaceSize: 128\n```\n\nThe upstream plugin exposes these core tools:\n\n- `camofox_create_tab` — create tab; returns `tabId`\n- `camofox_snapshot` — accessibility snapshot with refs and screenshot; primary observation tool\n- `camofox_click` — click by ref or CSS selector\n- `camofox_type` — type by ref or selector; optional `pressEnter`\n- `camofox_navigate` — navigate by URL or search macro\n- `camofox_scroll` — scroll page\n- `camofox_screenshot` — screenshot only\n- `camofox_close_tab` — close a tab\n- `camofox_evaluate` — execute JS; gated by server auth middleware\n- `camofox_list_tabs` — list tabs for the current user\n- `camofox_import_cookies` — import Netscape cookies; use `CAMOFOX_API_KEY` for this sensitive endpoint\n\n## Hard workflow rules\n\nAlways follow these rules when using Camofox:\n\n1. Check `/health` before doing browser work.\n2. Always send `userId` in raw REST calls.\n3. Prefer `sessionKey` when creating tabs so task tabs group together.\n4. Open or reuse a tab intentionally; do not spray new tabs.\n5. Snapshot before selecting refs.\n6. Re-snapshot after every state-changing action: click, type with submit, press, scroll, navigation, back, forward, refresh, JS evaluate that mutates state.\n7. Element refs reset after navigation and may become stale after DOM changes.\n8. Prefer refs from the latest snapshot over CSS selectors. Use selectors only when refs are unavailable or unstable.\n9. Close tabs when done unless preserving the session is explicitly useful.\n10. Do not claim Camofox is in use until both the server is healthy and the actual agent/client is pointed at it.\n\n## REST API quick commands\n\nSet base variables:\n\n```bash\nBASE=\"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}\"\nUSER_ID=\"${CAMOFOX_USER_ID:-agent1}\"\nSESSION_KEY=\"${CAMOFOX_SESSION_KEY:-task1}\"\n```\n\nIf `CAMOFOX_ACCESS_KEY` or `CAMOFOX_API_KEY` is set, include auth where required:\n\n```bash\nAUTH_HEADER=()\nif [ -n \"${CAMOFOX_ACCESS_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_ACCESS_KEY}\")\nelif [ -n \"${CAMOFOX_API_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_API_KEY}\")\nfi\n```\n\n### Health\n\n```bash\ncurl -fsS \"$BASE/health\"\n```\n\n### Create tab\n\n```bash\nTAB_ID=\"$(curl -fsS -X POST \"$BASE/tabs\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"sessionKey\\\":\\\"$SESSION_KEY\\\",\\\"url\\\":\\\"https://example.com\\\"}\" \\\n  | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"tabId\"])')\"\nprintf 'TAB_ID=%s\\n' \"$TAB_ID\"\n```\n\n### Navigate\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"url\\\":\\\"https://example.com\\\"}\"\n```\n\nSearch macro example:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"macro\\\":\\\"@google_search\\\",\\\"query\\\":\\\"site:example.com pricing\\\"}\"\n```\n\nKnown macros include:\n\n- `@google_search`\n- `@youtube_search`\n- `@amazon_search`\n- `@reddit_search`\n- `@wikipedia_search`\n- `@twitter_search`\n- `@yelp_search`\n- `@spotify_search`\n- `@netflix_search`\n- `@linkedin_search`\n- `@instagram_search`\n- `@tiktok_search`\n- `@twitch_search`\n\n### Snapshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID\"\n```\n\nWith screenshot and pagination offset:\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID&includeScreenshot=true&offset=0\"\n```\n\n### Click\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e1\\\"}\"\n```\n\nSelector fallback:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"selector\\\":\\\"button[type=submit]\\\"}\"\n```\n\n### Type\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"hello world\\\"}\"\n```\n\nType and submit:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"query\\\",\\\"pressEnter\\\":true}\"\n```\n\n### Press key\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/press\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"key\\\":\\\"Enter\\\"}\"\n```\n\n### Wait\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/wait\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"timeout\\\":3000}\"\n```\n\n### Scroll\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/scroll\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"direction\\\":\\\"down\\\",\\\"amount\\\":700}\"\n```\n\n### Back / forward / refresh\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/back\"    -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/forward\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/refresh\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\n```\n\n### Links / images / screenshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/links?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/images?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/screenshot?userId=$USER_ID\" --output screenshot.png\n```\n\n### Evaluate JavaScript\n\nThis endpoint is auth-gated by the server middleware. Use only when needed.\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/evaluate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"expression\\\":\\\"document.title\\\"}\"\n```\n\n### Structured extract\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/extract\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"schema\\\":{\\\"type\\\":\\\"object\\\",\\\"properties\\\":{\\\"title\\\":{\\\"type\\\":\\\"string\\\"}}}}\"\n```\n\n### List and close tabs\n\n```bash\ncurl -fsS \"$BASE/tabs?userId=$USER_ID\"\ncurl -fsS -X DELETE \"$BASE/tabs/$TAB_ID?userId=$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n### Delete session data\n\nThis endpoint is auth-gated.\n\n```bash\ncurl -fsS -X DELETE \"$BASE/sessions/$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n## Environment variables\n\n### Server/client target\n\n- `CAMOFOX_PORT`: server port; default `9377`\n- `PORT`: generic port fallback if `CAMOFOX_PORT` is unset\n- `CAMOFOX_BASE_URL`: not an upstream server env var; useful shell convention for scripts in this skill\n- `CAMOFOX_URL`: Hermes-specific browser-backend switch; **do not set/export globally**; see below\n\n### Auth and sensitive operations\n\n- `CAMOFOX_ACCESS_KEY`: global bearer token for all routes except `/health`; use when anything can reach the server beyond loopback\n- `CAMOFOX_API_KEY`: optional bearer token used only for sensitive endpoints such as cookie import/traces; not needed for normal browsing, snapshots, navigation, clicks, or typing\n- `CAMOFOX_ADMIN_KEY`: protects `/stop` when configured\n\nFor local development with neither key set, upstream allows loopback requests in non-production mode. Do not expose that to a network. That would be the kind of convenience feature that becomes an incident report.\n\n### Storage / runtime tuning\n\n- `CAMOFOX_COOKIES_DIR`: cookie import source directory; default `~/.camofox/cookies`\n- `CAMOFOX_PROFILE_DIR`: profile directory; default `~/.camofox/profiles`\n- `CAMOFOX_TRACES_DIR`: trace directory; default `~/.camofox/traces`\n- `CAMOFOX_TRACES_MAX_BYTES`: default 50MB\n- `CAMOFOX_TRACES_TTL_HOURS`: default 24\n- `MAX_CONCURRENT_PER_USER`: default 3\n- `MAX_SESSIONS`: default 50\n- `MAX_TABS_PER_SESSION`: default 10\n- `MAX_TABS_GLOBAL`: default 50\n- `SESSION_TIMEOUT_MS`: default 600000 in current code\n- `TAB_INACTIVITY_MS`: default 300000\n- `BROWSER_IDLE_TIMEOUT_MS`: default 300000\n- `NAVIGATE_TIMEOUT_MS`: default 25000\n- `BUILDREFS_TIMEOUT_MS`: default 12000\n- `NATIVE_MEM_RESTART_THRESHOLD_MB`: default 300\n- `BROWSER_RSS_RESTART_THRESHOLD_MB`: default 1500\n\n### Browser binary\n\n- `CAMOUFOX_EXECUTABLE`: external Camoufox executable/bundle; skips bundled download when valid\n- `CAMOUFOX_EXECUTABLE_PATH`: compatibility alias\n- `CAMOFOX_EXECUTABLE_PATH`: legacy alias\n- `CAMOFOX_SKIP_DOWNLOAD=1|true`: skip postinstall browser download; only use if an executable is provided another way\n\n### Proxy / GeoIP\n\n- `PROXY_STRATEGY`\n- `PROXY_PROVIDER`\n- `PROXY_HOST`\n- `PROXY_PORT`\n- `PROXY_PORTS`\n- `PROXY_USERNAME`\n- `PROXY_PASSWORD`\n- `PROXY_BACKCONNECT_HOST`\n- `PROXY_BACKCONNECT_PORT`\n- `PROXY_COUNTRY`\n- `PROXY_STATE`\n- `PROXY_CITY`\n- `PROXY_ZIP`\n- `PROXY_SESSION_DURATION_MINUTES`\n\n### Telemetry\n\nUpstream crash/hang telemetry is enabled unless disabled:\n\n```bash\nCAMOFOX_CRASH_REPORT_ENABLED=false\n```\n\nUse that for privacy-conservative local runs unless the user wants upstream crash reporting.\n\n## Hermes-specific `CAMOFOX_URL` footgun\n\nThis section is load-bearing for Hermes agents. Read it before setting environment variables.\n\nIn Hermes, `CAMOFOX_URL` is not just a harmless client hint. It is a browser-backend switch. If `CAMOFOX_URL` is visible in the Hermes process environment, Hermes considers Camofox mode enabled for that process and normal Hermes browser calls can be forced through Camofox.\n\nHard rules for Hermes:\n\n- **Do not** add `CAMOFOX_URL` to `~/.hermes/.env`.\n- **Do not** export `CAMOFOX_URL` in shell profiles such as `~/.zshrc`, `~/.bashrc`, launchd plists, Docker env, or service env.\n- **Do not** put `CAMOFOX_URL` in the Hermes gateway environment unless the explicit intent is for the entire gateway process to use Camofox for browser calls.\n- **Do not** use `hermes config set ... CAMOFOX_URL ...`; this is runtime state, not durable config.\n- Use `CAMOFOX_URL` only as an inline, one-process env var for a dedicated cloaked Hermes run:\n\n```bash\nCAMOFOX_URL=\"http://127.0.0.1:9377\" hermes chat -q 'Use cloaked Camofox browsing for this task: <task>'\n```\n\n- After removing an accidentally global `CAMOFOX_URL`, restart the affected Hermes CLI/gateway process; running processes keep their old environment.\n\nSafer default for Hermes agents: run the Camofox server normally, store the stable server URL as `skills.config.camofox.base_url` or `CAMOFOX_BASE_URL` for REST examples, and **do not set `CAMOFOX_URL` at all** unless launching a dedicated cloaked Hermes process.\n\nThis routing claim is Hermes-specific. For OpenClaw, use the upstream plugin config/tools unless you have verified equivalent env semantics.\n\n## Verification checklist\n\nBefore claiming success:\n\n1. Server health responds:\n\n```bash\ncurl -fsS \"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}/health\"\n```\n\n2. OpenClaw plugin mode, if applicable:\n\n```bash\nopenclaw camofox status\n```\n\n3. Raw REST mode: create a tab, snapshot it, close it.\n\n4. Hermes mode: verify `CAMOFOX_URL` is absent from global Hermes env and present only on the dedicated cloaked Hermes process, if Hermes process routing is intentionally being used.\n\n5. Cleanup: close tabs or stop the managed server if the task started it only for one job.\n\n## Common mistakes\n\n- Using Camofox when normal search/extract tools are cheaper and sufficient.\n- Forgetting `userId` in raw REST calls.\n- Clicking stale refs after navigation or DOM changes.\n- Setting/exporting `CAMOFOX_URL` globally in Hermes (`~/.hermes/.env`, gateway env, shell profile, service env) and accidentally routing all browser calls through Camofox.\n- Assuming `CAMOFOX_API_KEY` is needed for normal browser work; it is only for sensitive endpoints such as cookie import/traces.\n- Exposing a no-auth local development server beyond loopback.\n- Treating MCP tool names from a separate MCP wrapper as if they are the upstream OpenClaw plugin tools. The MCP wrapper may expose many more tools; this skill is centered on upstream `@askjo/camofox-browser` plus its REST API.\n\n## Output format when using this skill\n\nReport:\n\n- runtime: OpenClaw plugin, raw REST, Hermes, or other\n- base URL: server URL used\n- startup: npx/package, cloned repo npm start, OpenClaw autoStart, or existing server\n- auth: no auth/local loopback, `CAMOFOX_ACCESS_KEY`, or `CAMOFOX_API_KEY` for sensitive endpoints\n- user/session: `userId`, `sessionKey`\n- tab: `tabId` used/closed/preserved\n- verification: health + snapshot/action result summary\n- cleanup: tabs closed and whether server was left running\n\nFile v1.3.3:README.md\n\n# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install this skill\n\n### Hermes\n\nInstall from the raw `SKILL.md` URL:\n\n```bash\nhermes skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nInstall from ClawHub:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nClawHub page: https://clawhub.ai/tmchow/camofox-cloaked-browser\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry\n\nFile v1.3.3:_meta.json\n\n{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.3\",\n  \"publishedAt\": 1780133531097\n}\n\nFile v1.3.3:skill-card.md\n\n## Description: <br>\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tmchow](https://clawhub.ai/user/tmchow) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill when a task specifically needs Camofox/Camoufox cloaked browsing, browser fingerprint spoofing, or anti-detection automation instead of ordinary search or browser tools. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Cloaked browser automation and cookie import can expose sensitive credentials or session data if used unnecessarily. <br>\nMitigation: Use only when cloaked browsing is required, avoid importing cookies unless necessary, and reserve CAMOFOX_API_KEY for sensitive endpoints. <br>\nRisk: A Camofox server exposed beyond localhost without access control can permit unauthorized browser control. <br>\nMitigation: Keep the server on localhost unless CAMOFOX_ACCESS_KEY is configured. <br>\nRisk: Globally setting CAMOFOX_URL in Hermes can route all browser calls in that process through Camofox. <br>\nMitigation: Use CAMOFOX_URL only inline for a dedicated Hermes process and do not persist it in global environment or gateway configuration. <br>\nRisk: Crash or hang telemetry may be inappropriate for privacy-sensitive browsing. <br>\nMitigation: Set CAMOFOX_CRASH_REPORT_ENABLED=false for privacy-sensitive browsing. <br>\n\n\n## Reference(s): <br>\n- [Camofox Browser](https://github.com/jo-inc/camofox-browser) <br>\n- [ClawHub listing](https://clawhub.ai/tmchow/camofox-cloaked-browser) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands, REST API examples, environment variables, and verification checklist] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reports runtime, base URL, startup method, auth posture, user/session, tab handling, verification, and cleanup.] <br>\n\n## Skill Version(s): <br>\n1.3.3 (source: server release metadata and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.3.2: 4 files, 9433 bytes\n\nFiles: README.md (2648b), skill-card.md (2451b), SKILL.md (18914b), _meta.json (142b)\n\nFile v1.3.2:SKILL.md\n\n---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.2\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token used only for sensitive endpoints such as cookie import and traces. Not needed for normal browsing, snapshots, navigation, clicks, or typing.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name: CAMOUFOX_EXECUTABLE_PATH\n        required: false\n        description: Compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_EXECUTABLE_PATH\n        required: false\n        description: Legacy compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_URL\n        required: false\n        description: \"Hermes-only client-side backend switch. Footgun: if set in Hermes global env/.env/gateway env, Hermes routes all browser calls in that process through Camofox. Do not persist or export globally; use only inline for a dedicated Hermes process.\"\n---\n\n# Camofox Cloaked Browser\n\n## When to use\n\nUse this skill only when the task needs Camofox/Camoufox specifically:\n\n- user names Camofox, Camoufox, anti-detection browsing, cloaked browser, browser fingerprint spoofing, or stealth browsing\n- a site is likely to block normal Playwright/Chrome automation\n- the task needs stable accessibility refs from a Camofox browser server\n- OpenClaw has the `camofox-browser` plugin/tools available\n\nDo **not** use it for ordinary web search, simple page fetches, static text extraction, or normal browser automation. Use the cheaper default stack unless cloaking is actually load-bearing.\n\nIf the user names another browser target explicitly — Browserbase, Selkies, a tailnet browser, normal Hermes browser, Chrome DevTools, etc. — stop and use that target/skill instead. Do not silently route through Camofox.\n\n## Default target\n\nDefault local server:\n\n```text\nhttp://127.0.0.1:9377\n```\n\nEquivalent localhost URL is usually fine:\n\n```text\nhttp://localhost:9377\n```\n\nPrefer `127.0.0.1` in examples to avoid IPv6/localhost oddities.\n\nThere is no container target in this skill. Do not mention or rely on container names; this skill is about the npm server and OpenClaw plugin/API.\n\n## Operating model\n\nCamofox Browser is a Node server and OpenClaw plugin wrapper around Camoufox, a Firefox-based anti-detection browser.\n\nPrimary local startup:\n\n```bash\nnpx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default\n```\n\nAlternative cloned-repo startup:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nAlternative global install:\n\n```bash\nnpm install -g @askjo/camofox-browser\ncamofox-browser\n```\n\n`npm install` / `npx` downloads the Camoufox browser binary on first run via the package postinstall unless `CAMOUFOX_EXECUTABLE` points to an existing compatible Camoufox bundle. Expect roughly a few hundred MB for the browser payload.\n\n## OpenClaw plugin mode\n\nIf OpenClaw has the upstream plugin installed, prefer the plugin tools over raw `curl` because they auto-manage `userId` from `ctx.agentId`, use `sessionKey`, and can auto-start the server.\n\nInstall shape:\n\n```bash\nopenclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows\n```\n\nUseful OpenClaw CLI commands from the plugin:\n\n```bash\nopenclaw camofox status\nopenclaw camofox start\nopenclaw camofox stop\nopenclaw camofox tabs\nopenclaw camofox configure\n```\n\nPlugin config shape shown by upstream:\n\n```yaml\nplugins:\n  entries:\n    camofox-browser:\n      enabled: true\n      config:\n        port: 9377\n        autoStart: true\n        maxSessions: 5\n        maxTabsPerSession: 3\n        sessionTimeoutMs: 600000\n        browserIdleTimeoutMs: 300000\n        maxOldSpaceSize: 128\n```\n\nThe upstream plugin exposes these core tools:\n\n- `camofox_create_tab` — create tab; returns `tabId`\n- `camofox_snapshot` — accessibility snapshot with refs and screenshot; primary observation tool\n- `camofox_click` — click by ref or CSS selector\n- `camofox_type` — type by ref or selector; optional `pressEnter`\n- `camofox_navigate` — navigate by URL or search macro\n- `camofox_scroll` — scroll page\n- `camofox_screenshot` — screenshot only\n- `camofox_close_tab` — close a tab\n- `camofox_evaluate` — execute JS; gated by server auth middleware\n- `camofox_list_tabs` — list tabs for the current user\n- `camofox_import_cookies` — import Netscape cookies; use `CAMOFOX_API_KEY` for this sensitive endpoint\n\n## Hard workflow rules\n\nAlways follow these rules when using Camofox:\n\n1. Check `/health` before doing browser work.\n2. Always send `userId` in raw REST calls.\n3. Prefer `sessionKey` when creating tabs so task tabs group together.\n4. Open or reuse a tab intentionally; do not spray new tabs.\n5. Snapshot before selecting refs.\n6. Re-snapshot after every state-changing action: click, type with submit, press, scroll, navigation, back, forward, refresh, JS evaluate that mutates state.\n7. Element refs reset after navigation and may become stale after DOM changes.\n8. Prefer refs from the latest snapshot over CSS selectors. Use selectors only when refs are unavailable or unstable.\n9. Close tabs when done unless preserving the session is explicitly useful.\n10. Do not claim Camofox is in use until both the server is healthy and the actual agent/client is pointed at it.\n\n## REST API quick commands\n\nSet base variables:\n\n```bash\nBASE=\"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}\"\nUSER_ID=\"${CAMOFOX_USER_ID:-agent1}\"\nSESSION_KEY=\"${CAMOFOX_SESSION_KEY:-task1}\"\n```\n\nIf `CAMOFOX_ACCESS_KEY` or `CAMOFOX_API_KEY` is set, include auth where required:\n\n```bash\nAUTH_HEADER=()\nif [ -n \"${CAMOFOX_ACCESS_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_ACCESS_KEY}\")\nelif [ -n \"${CAMOFOX_API_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_API_KEY}\")\nfi\n```\n\n### Health\n\n```bash\ncurl -fsS \"$BASE/health\"\n```\n\n### Create tab\n\n```bash\nTAB_ID=\"$(curl -fsS -X POST \"$BASE/tabs\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"sessionKey\\\":\\\"$SESSION_KEY\\\",\\\"url\\\":\\\"https://example.com\\\"}\" \\\n  | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"tabId\"])')\"\nprintf 'TAB_ID=%s\\n' \"$TAB_ID\"\n```\n\n### Navigate\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"url\\\":\\\"https://example.com\\\"}\"\n```\n\nSearch macro example:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"macro\\\":\\\"@google_search\\\",\\\"query\\\":\\\"site:example.com pricing\\\"}\"\n```\n\nKnown macros include:\n\n- `@google_search`\n- `@youtube_search`\n- `@amazon_search`\n- `@reddit_search`\n- `@wikipedia_search`\n- `@twitter_search`\n- `@yelp_search`\n- `@spotify_search`\n- `@netflix_search`\n- `@linkedin_search`\n- `@instagram_search`\n- `@tiktok_search`\n- `@twitch_search`\n\n### Snapshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID\"\n```\n\nWith screenshot and pagination offset:\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID&includeScreenshot=true&offset=0\"\n```\n\n### Click\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e1\\\"}\"\n```\n\nSelector fallback:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"selector\\\":\\\"button[type=submit]\\\"}\"\n```\n\n### Type\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"hello world\\\"}\"\n```\n\nType and submit:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"query\\\",\\\"pressEnter\\\":true}\"\n```\n\n### Press key\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/press\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"key\\\":\\\"Enter\\\"}\"\n```\n\n### Wait\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/wait\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"timeout\\\":3000}\"\n```\n\n### Scroll\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/scroll\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"direction\\\":\\\"down\\\",\\\"amount\\\":700}\"\n```\n\n### Back / forward / refresh\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/back\"    -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/forward\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/refresh\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\n```\n\n### Links / images / screenshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/links?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/images?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/screenshot?userId=$USER_ID\" --output screenshot.png\n```\n\n### Evaluate JavaScript\n\nThis endpoint is auth-gated by the server middleware. Use only when needed.\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/evaluate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"expression\\\":\\\"document.title\\\"}\"\n```\n\n### Structured extract\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/extract\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"schema\\\":{\\\"type\\\":\\\"object\\\",\\\"properties\\\":{\\\"title\\\":{\\\"type\\\":\\\"string\\\"}}}}\"\n```\n\n### List and close tabs\n\n```bash\ncurl -fsS \"$BASE/tabs?userId=$USER_ID\"\ncurl -fsS -X DELETE \"$BASE/tabs/$TAB_ID?userId=$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n### Delete session data\n\nThis endpoint is auth-gated.\n\n```bash\ncurl -fsS -X DELETE \"$BASE/sessions/$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n## Environment variables\n\n### Server/client target\n\n- `CAMOFOX_PORT`: server port; default `9377`\n- `PORT`: generic port fallback if `CAMOFOX_PORT` is unset\n- `CAMOFOX_BASE_URL`: not an upstream server env var; useful shell convention for scripts in this skill\n- `CAMOFOX_URL`: Hermes-specific browser-backend switch; **do not set/export globally**; see below\n\n### Auth and sensitive operations\n\n- `CAMOFOX_ACCESS_KEY`: global bearer token for all routes except `/health`; use when anything can reach the server beyond loopback\n- `CAMOFOX_API_KEY`: optional bearer token used only for sensitive endpoints such as cookie import/traces; not needed for normal browsing, snapshots, navigation, clicks, or typing\n- `CAMOFOX_ADMIN_KEY`: protects `/stop` when configured\n\nFor local development with neither key set, upstream allows loopback requests in non-production mode. Do not expose that to a network. That would be the kind of convenience feature that becomes an incident report.\n\n### Storage / runtime tuning\n\n- `CAMOFOX_COOKIES_DIR`: cookie import source directory; default `~/.camofox/cookies`\n- `CAMOFOX_PROFILE_DIR`: profile directory; default `~/.camofox/profiles`\n- `CAMOFOX_TRACES_DIR`: trace directory; default `~/.camofox/traces`\n- `CAMOFOX_TRACES_MAX_BYTES`: default 50MB\n- `CAMOFOX_TRACES_TTL_HOURS`: default 24\n- `MAX_CONCURRENT_PER_USER`: default 3\n- `MAX_SESSIONS`: default 50\n- `MAX_TABS_PER_SESSION`: default 10\n- `MAX_TABS_GLOBAL`: default 50\n- `SESSION_TIMEOUT_MS`: default 600000 in current code\n- `TAB_INACTIVITY_MS`: default 300000\n- `BROWSER_IDLE_TIMEOUT_MS`: default 300000\n- `NAVIGATE_TIMEOUT_MS`: default 25000\n- `BUILDREFS_TIMEOUT_MS`: default 12000\n- `NATIVE_MEM_RESTART_THRESHOLD_MB`: default 300\n- `BROWSER_RSS_RESTART_THRESHOLD_MB`: default 1500\n\n### Browser binary\n\n- `CAMOUFOX_EXECUTABLE`: external Camoufox executable/bundle; skips bundled download when valid\n- `CAMOUFOX_EXECUTABLE_PATH`: compatibility alias\n- `CAMOFOX_EXECUTABLE_PATH`: legacy alias\n- `CAMOFOX_SKIP_DOWNLOAD=1|true`: skip postinstall browser download; only use if an executable is provided another way\n\n### Proxy / GeoIP\n\n- `PROXY_STRATEGY`\n- `PROXY_PROVIDER`\n- `PROXY_HOST`\n- `PROXY_PORT`\n- `PROXY_PORTS`\n- `PROXY_USERNAME`\n- `PROXY_PASSWORD`\n- `PROXY_BACKCONNECT_HOST`\n- `PROXY_BACKCONNECT_PORT`\n- `PROXY_COUNTRY`\n- `PROXY_STATE`\n- `PROXY_CITY`\n- `PROXY_ZIP`\n- `PROXY_SESSION_DURATION_MINUTES`\n\n### Telemetry\n\nUpstream crash/hang telemetry is enabled unless disabled:\n\n```bash\nCAMOFOX_CRASH_REPORT_ENABLED=false\n```\n\nUse that for privacy-conservative local runs unless the user wants upstream crash reporting.\n\n## Hermes-specific `CAMOFOX_URL` footgun\n\nThis section is load-bearing for Hermes agents. Read it before setting environment variables.\n\nIn Hermes, `CAMOFOX_URL` is not just a harmless client hint. It is a browser-backend switch. If `CAMOFOX_URL` is visible in the Hermes process environment, Hermes considers Camofox mode enabled for that process and normal Hermes browser calls can be forced through Camofox.\n\nHard rules for Hermes:\n\n- **Do not** add `CAMOFOX_URL` to `~/.hermes/.env`.\n- **Do not** export `CAMOFOX_URL` in shell profiles such as `~/.zshrc`, `~/.bashrc`, launchd plists, Docker env, or service env.\n- **Do not** put `CAMOFOX_URL` in the Hermes gateway environment unless the explicit intent is for the entire gateway process to use Camofox for browser calls.\n- **Do not** use `hermes config set ... CAMOFOX_URL ...`; this is runtime state, not durable config.\n- Use `CAMOFOX_URL` only as an inline, one-process env var for a dedicated cloaked Hermes run:\n\n```bash\nCAMOFOX_URL=\"http://127.0.0.1:9377\" hermes chat -q 'Use cloaked Camofox browsing for this task: <task>'\n```\n\n- After removing an accidentally global `CAMOFOX_URL`, restart the affected Hermes CLI/gateway process; running processes keep their old environment.\n\nSafer default for Hermes agents: run the Camofox server normally, store the stable server URL as `skills.config.camofox.base_url` or `CAMOFOX_BASE_URL` for REST examples, and **do not set `CAMOFOX_URL` at all** unless launching a dedicated cloaked Hermes process.\n\nThis routing claim is Hermes-specific. For OpenClaw, use the upstream plugin config/tools unless you have verified equivalent env semantics.\n\n## Verification checklist\n\nBefore claiming success:\n\n1. Server health responds:\n\n```bash\ncurl -fsS \"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}/health\"\n```\n\n2. OpenClaw plugin mode, if applicable:\n\n```bash\nopenclaw camofox status\n```\n\n3. Raw REST mode: create a tab, snapshot it, close it.\n\n4. Hermes mode: verify `CAMOFOX_URL` is absent from global Hermes env and present only on the dedicated cloaked Hermes process, if Hermes process routing is intentionally being used.\n\n5. Cleanup: close tabs or stop the managed server if the task started it only for one job.\n\n## Common mistakes\n\n- Using Camofox when normal search/extract tools are cheaper and sufficient.\n- Forgetting `userId` in raw REST calls.\n- Clicking stale refs after navigation or DOM changes.\n- Setting/exporting `CAMOFOX_URL` globally in Hermes (`~/.hermes/.env`, gateway env, shell profile, service env) and accidentally routing all browser calls through Camofox.\n- Assuming `CAMOFOX_API_KEY` is needed for normal browser work; it is only for sensitive endpoints such as cookie import/traces.\n- Exposing a no-auth local development server beyond loopback.\n- Treating MCP tool names from a separate MCP wrapper as if they are the upstream OpenClaw plugin tools. The MCP wrapper may expose many more tools; this skill is centered on upstream `@askjo/camofox-browser` plus its REST API.\n\n## Output format when using this skill\n\nReport:\n\n- runtime: OpenClaw plugin, raw REST, Hermes, or other\n- base URL: server URL used\n- startup: npx/package, cloned repo npm start, OpenClaw autoStart, or existing server\n- auth: no auth/local loopback, `CAMOFOX_ACCESS_KEY`, or `CAMOFOX_API_KEY` for sensitive endpoints\n- user/session: `userId`, `sessionKey`\n- tab: `tabId` used/closed/preserved\n- verification: health + snapshot/action result summary\n- cleanup: tabs closed and whether server was left running\n\nFile v1.3.2:README.md\n\n# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install this skill\n\n### Hermes\n\nInstall from the raw `SKILL.md` URL:\n\n```bash\nhermes skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nInstall from ClawHub:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nClawHub page: https://clawhub.ai/tmchow/camofox-cloaked-browser\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry\n\nFile v1.3.2:_meta.json\n\n{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.2\",\n  \"publishedAt\": 1780133359698\n}\n\nFile v1.3.2:skill-card.md\n\n## Description: <br>\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing, covering startup, OpenClaw plugin tools, REST API commands, session and tab workflow, environment variables, and workflow rules. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tmchow](https://clawhub.ai/user/tmchow) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent operators use this skill when a task specifically needs Camofox/Camoufox anti-detection browsing rather than ordinary search, static fetches, or default browser automation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The local browser server can expose browser control beyond loopback if deployed carelessly. <br>\nMitigation: Keep the server bound to localhost unless an access key is configured. <br>\nRisk: Cookie import, traces, proxy credentials, and crash reporting can involve sensitive data. <br>\nMitigation: Use sensitive endpoints only when necessary, protect them with the documented bearer tokens, and disable crash reporting for privacy-sensitive work. <br>\nRisk: A globally configured CAMOFOX_URL can unintentionally route Hermes browser calls through Camofox. <br>\nMitigation: Use CAMOFOX_URL only as an inline environment variable for a dedicated Hermes process and avoid persistent shell, gateway, or Hermes environment configuration. <br>\n\n\n## Reference(s): <br>\n- [Camofox Browser upstream project](https://github.com/jo-inc/camofox-browser) <br>\n- [ClawHub skill page](https://clawhub.ai/tmchow/camofox-cloaked-browser) <br>\n- [Skill README](artifact/README.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, shell commands, configuration, API calls] <br>\n**Output Format:** [Markdown with inline bash, YAML, and REST examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes runtime, base URL, startup, auth, user/session, tab, verification, and cleanup reporting guidance.] <br>\n\n## Skill Version(s): <br>\n1.3.2 (source: frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.3.1: 4 files, 9407 bytes\n\nFiles: README.md (2648b), skill-card.md (2477b), SKILL.md (18734b), _meta.json (142b)\n\nFile v1.3.1:SKILL.md\n\n---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.1\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token for sensitive endpoints such as cookie import and traces. Required for cookie import.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name: CAMOUFOX_EXECUTABLE_PATH\n        required: false\n        description: Compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_EXECUTABLE_PATH\n        required: false\n        description: Legacy compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_URL\n        required: false\n        description: \"Hermes-only client-side backend switch. Footgun: if set in Hermes global env/.env/gateway env, Hermes routes all browser calls in that process through Camofox. Do not persist or export globally; use only inline for a dedicated Hermes process.\"\n---\n\n# Camofox Cloaked Browser\n\n## When to use\n\nUse this skill only when the task needs Camofox/Camoufox specifically:\n\n- user names Camofox, Camoufox, anti-detection browsing, cloaked browser, browser fingerprint spoofing, or stealth browsing\n- a site is likely to block normal Playwright/Chrome automation\n- the task needs stable accessibility refs from a Camofox browser server\n- OpenClaw has the `camofox-browser` plugin/tools available\n\nDo **not** use it for ordinary web search, simple page fetches, static text extraction, or normal browser automation. Use the cheaper default stack unless cloaking is actually load-bearing.\n\nIf the user names another browser target explicitly — Browserbase, Selkies, a tailnet browser, normal Hermes browser, Chrome DevTools, etc. — stop and use that target/skill instead. Do not silently route through Camofox.\n\n## Default target\n\nDefault local server:\n\n```text\nhttp://127.0.0.1:9377\n```\n\nEquivalent localhost URL is usually fine:\n\n```text\nhttp://localhost:9377\n```\n\nPrefer `127.0.0.1` in examples to avoid IPv6/localhost oddities.\n\nThere is no container target in this skill. Do not mention or rely on container names; this skill is about the npm server and OpenClaw plugin/API.\n\n## Operating model\n\nCamofox Browser is a Node server and OpenClaw plugin wrapper around Camoufox, a Firefox-based anti-detection browser.\n\nPrimary local startup:\n\n```bash\nnpx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default\n```\n\nAlternative cloned-repo startup:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nAlternative global install:\n\n```bash\nnpm install -g @askjo/camofox-browser\ncamofox-browser\n```\n\n`npm install` / `npx` downloads the Camoufox browser binary on first run via the package postinstall unless `CAMOUFOX_EXECUTABLE` points to an existing compatible Camoufox bundle. Expect roughly a few hundred MB for the browser payload.\n\n## OpenClaw plugin mode\n\nIf OpenClaw has the upstream plugin installed, prefer the plugin tools over raw `curl` because they auto-manage `userId` from `ctx.agentId`, use `sessionKey`, and can auto-start the server.\n\nInstall shape:\n\n```bash\nopenclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows\n```\n\nUseful OpenClaw CLI commands from the plugin:\n\n```bash\nopenclaw camofox status\nopenclaw camofox start\nopenclaw camofox stop\nopenclaw camofox tabs\nopenclaw camofox configure\n```\n\nPlugin config shape shown by upstream:\n\n```yaml\nplugins:\n  entries:\n    camofox-browser:\n      enabled: true\n      config:\n        port: 9377\n        autoStart: true\n        maxSessions: 5\n        maxTabsPerSession: 3\n        sessionTimeoutMs: 600000\n        browserIdleTimeoutMs: 300000\n        maxOldSpaceSize: 128\n```\n\nThe upstream plugin exposes these core tools:\n\n- `camofox_create_tab` — create tab; returns `tabId`\n- `camofox_snapshot` — accessibility snapshot with refs and screenshot; primary observation tool\n- `camofox_click` — click by ref or CSS selector\n- `camofox_type` — type by ref or selector; optional `pressEnter`\n- `camofox_navigate` — navigate by URL or search macro\n- `camofox_scroll` — scroll page\n- `camofox_screenshot` — screenshot only\n- `camofox_close_tab` — close a tab\n- `camofox_evaluate` — execute JS; gated by server auth middleware\n- `camofox_list_tabs` — list tabs for the current user\n- `camofox_import_cookies` — import Netscape cookies; requires `CAMOFOX_API_KEY`\n\n## Hard workflow rules\n\nAlways follow these rules when using Camofox:\n\n1. Check `/health` before doing browser work.\n2. Always send `userId` in raw REST calls.\n3. Prefer `sessionKey` when creating tabs so task tabs group together.\n4. Open or reuse a tab intentionally; do not spray new tabs.\n5. Snapshot before selecting refs.\n6. Re-snapshot after every state-changing action: click, type with submit, press, scroll, navigation, back, forward, refresh, JS evaluate that mutates state.\n7. Element refs reset after navigation and may become stale after DOM changes.\n8. Prefer refs from the latest snapshot over CSS selectors. Use selectors only when refs are unavailable or unstable.\n9. Close tabs when done unless preserving the session is explicitly useful.\n10. Do not claim Camofox is in use until both the server is healthy and the actual agent/client is pointed at it.\n\n## REST API quick commands\n\nSet base variables:\n\n```bash\nBASE=\"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}\"\nUSER_ID=\"${CAMOFOX_USER_ID:-agent1}\"\nSESSION_KEY=\"${CAMOFOX_SESSION_KEY:-task1}\"\n```\n\nIf `CAMOFOX_ACCESS_KEY` or `CAMOFOX_API_KEY` is set, include auth where required:\n\n```bash\nAUTH_HEADER=()\nif [ -n \"${CAMOFOX_ACCESS_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_ACCESS_KEY}\")\nelif [ -n \"${CAMOFOX_API_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_API_KEY}\")\nfi\n```\n\n### Health\n\n```bash\ncurl -fsS \"$BASE/health\"\n```\n\n### Create tab\n\n```bash\nTAB_ID=\"$(curl -fsS -X POST \"$BASE/tabs\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"sessionKey\\\":\\\"$SESSION_KEY\\\",\\\"url\\\":\\\"https://example.com\\\"}\" \\\n  | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"tabId\"])')\"\nprintf 'TAB_ID=%s\\n' \"$TAB_ID\"\n```\n\n### Navigate\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"url\\\":\\\"https://example.com\\\"}\"\n```\n\nSearch macro example:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"macro\\\":\\\"@google_search\\\",\\\"query\\\":\\\"site:example.com pricing\\\"}\"\n```\n\nKnown macros include:\n\n- `@google_search`\n- `@youtube_search`\n- `@amazon_search`\n- `@reddit_search`\n- `@wikipedia_search`\n- `@twitter_search`\n- `@yelp_search`\n- `@spotify_search`\n- `@netflix_search`\n- `@linkedin_search`\n- `@instagram_search`\n- `@tiktok_search`\n- `@twitch_search`\n\n### Snapshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID\"\n```\n\nWith screenshot and pagination offset:\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID&includeScreenshot=true&offset=0\"\n```\n\n### Click\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e1\\\"}\"\n```\n\nSelector fallback:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"selector\\\":\\\"button[type=submit]\\\"}\"\n```\n\n### Type\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"hello world\\\"}\"\n```\n\nType and submit:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"query\\\",\\\"pressEnter\\\":true}\"\n```\n\n### Press key\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/press\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"key\\\":\\\"Enter\\\"}\"\n```\n\n### Wait\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/wait\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"timeout\\\":3000}\"\n```\n\n### Scroll\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/scroll\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"direction\\\":\\\"down\\\",\\\"amount\\\":700}\"\n```\n\n### Back / forward / refresh\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/back\"    -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/forward\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/refresh\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\n```\n\n### Links / images / screenshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/links?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/images?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/screenshot?userId=$USER_ID\" --output screenshot.png\n```\n\n### Evaluate JavaScript\n\nThis endpoint is auth-gated by the server middleware. Use only when needed.\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/evaluate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"expression\\\":\\\"document.title\\\"}\"\n```\n\n### Structured extract\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/extract\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"schema\\\":{\\\"type\\\":\\\"object\\\",\\\"properties\\\":{\\\"title\\\":{\\\"type\\\":\\\"string\\\"}}}}\"\n```\n\n### List and close tabs\n\n```bash\ncurl -fsS \"$BASE/tabs?userId=$USER_ID\"\ncurl -fsS -X DELETE \"$BASE/tabs/$TAB_ID?userId=$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n### Delete session data\n\nThis endpoint is auth-gated.\n\n```bash\ncurl -fsS -X DELETE \"$BASE/sessions/$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n## Environment variables\n\n### Server/client target\n\n- `CAMOFOX_PORT`: server port; default `9377`\n- `PORT`: generic port fallback if `CAMOFOX_PORT` is unset\n- `CAMOFOX_BASE_URL`: not an upstream server env var; useful shell convention for scripts in this skill\n- `CAMOFOX_URL`: Hermes-specific browser-backend switch; **do not set/export globally**; see below\n\n### Auth and sensitive operations\n\n- `CAMOFOX_ACCESS_KEY`: global bearer token for all routes except `/health`; use when anything can reach the server beyond loopback\n- `CAMOFOX_API_KEY`: bearer token for sensitive endpoints such as cookie import/traces; required for `camofox_import_cookies`\n- `CAMOFOX_ADMIN_KEY`: protects `/stop` when configured\n\nFor local development with neither key set, upstream allows loopback requests in non-production mode. Do not expose that to a network. That would be the kind of convenience feature that becomes an incident report.\n\n### Storage / runtime tuning\n\n- `CAMOFOX_COOKIES_DIR`: cookie import source directory; default `~/.camofox/cookies`\n- `CAMOFOX_PROFILE_DIR`: profile directory; default `~/.camofox/profiles`\n- `CAMOFOX_TRACES_DIR`: trace directory; default `~/.camofox/traces`\n- `CAMOFOX_TRACES_MAX_BYTES`: default 50MB\n- `CAMOFOX_TRACES_TTL_HOURS`: default 24\n- `MAX_CONCURRENT_PER_USER`: default 3\n- `MAX_SESSIONS`: default 50\n- `MAX_TABS_PER_SESSION`: default 10\n- `MAX_TABS_GLOBAL`: default 50\n- `SESSION_TIMEOUT_MS`: default 600000 in current code\n- `TAB_INACTIVITY_MS`: default 300000\n- `BROWSER_IDLE_TIMEOUT_MS`: default 300000\n- `NAVIGATE_TIMEOUT_MS`: default 25000\n- `BUILDREFS_TIMEOUT_MS`: default 12000\n- `NATIVE_MEM_RESTART_THRESHOLD_MB`: default 300\n- `BROWSER_RSS_RESTART_THRESHOLD_MB`: default 1500\n\n### Browser binary\n\n- `CAMOUFOX_EXECUTABLE`: external Camoufox executable/bundle; skips bundled download when valid\n- `CAMOUFOX_EXECUTABLE_PATH`: compatibility alias\n- `CAMOFOX_EXECUTABLE_PATH`: legacy alias\n- `CAMOFOX_SKIP_DOWNLOAD=1|true`: skip postinstall browser download; only use if an executable is provided another way\n\n### Proxy / GeoIP\n\n- `PROXY_STRATEGY`\n- `PROXY_PROVIDER`\n- `PROXY_HOST`\n- `PROXY_PORT`\n- `PROXY_PORTS`\n- `PROXY_USERNAME`\n- `PROXY_PASSWORD`\n- `PROXY_BACKCONNECT_HOST`\n- `PROXY_BACKCONNECT_PORT`\n- `PROXY_COUNTRY`\n- `PROXY_STATE`\n- `PROXY_CITY`\n- `PROXY_ZIP`\n- `PROXY_SESSION_DURATION_MINUTES`\n\n### Telemetry\n\nUpstream crash/hang telemetry is enabled unless disabled:\n\n```bash\nCAMOFOX_CRASH_REPORT_ENABLED=false\n```\n\nUse that for privacy-conservative local runs unless the user wants upstream crash reporting.\n\n## Hermes-specific `CAMOFOX_URL` footgun\n\nThis section is load-bearing for Hermes agents. Read it before setting environment variables.\n\nIn Hermes, `CAMOFOX_URL` is not just a harmless client hint. It is a browser-backend switch. If `CAMOFOX_URL` is visible in the Hermes process environment, Hermes considers Camofox mode enabled for that process and normal Hermes browser calls can be forced through Camofox.\n\nHard rules for Hermes:\n\n- **Do not** add `CAMOFOX_URL` to `~/.hermes/.env`.\n- **Do not** export `CAMOFOX_URL` in shell profiles such as `~/.zshrc`, `~/.bashrc`, launchd plists, Docker env, or service env.\n- **Do not** put `CAMOFOX_URL` in the Hermes gateway environment unless the explicit intent is for the entire gateway process to use Camofox for browser calls.\n- **Do not** use `hermes config set ... CAMOFOX_URL ...`; this is runtime state, not durable config.\n- Use `CAMOFOX_URL` only as an inline, one-process env var for a dedicated cloaked Hermes run:\n\n```bash\nCAMOFOX_URL=\"http://127.0.0.1:9377\" hermes chat -q 'Use cloaked Camofox browsing for this task: <task>'\n```\n\n- After removing an accidentally global `CAMOFOX_URL`, restart the affected Hermes CLI/gateway process; running processes keep their old environment.\n\nSafer default for Hermes agents: run the Camofox server normally, store the stable server URL as `skills.config.camofox.base_url` or `CAMOFOX_BASE_URL` for REST examples, and **do not set `CAMOFOX_URL` at all** unless launching a dedicated cloaked Hermes process.\n\nThis routing claim is Hermes-specific. For OpenClaw, use the upstream plugin config/tools unless you have verified equivalent env semantics.\n\n## Verification checklist\n\nBefore claiming success:\n\n1. Server health responds:\n\n```bash\ncurl -fsS \"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}/health\"\n```\n\n2. OpenClaw plugin mode, if applicable:\n\n```bash\nopenclaw camofox status\n```\n\n3. Raw REST mode: create a tab, snapshot it, close it.\n\n4. Hermes mode: verify `CAMOFOX_URL` is absent from global Hermes env and present only on the dedicated cloaked Hermes process, if Hermes process routing is intentionally being used.\n\n5. Cleanup: close tabs or stop the managed server if the task started it only for one job.\n\n## Common mistakes\n\n- Using Camofox when normal search/extract tools are cheaper and sufficient.\n- Forgetting `userId` in raw REST calls.\n- Clicking stale refs after navigation or DOM changes.\n- Setting/exporting `CAMOFOX_URL` globally in Hermes (`~/.hermes/.env`, gateway env, shell profile, service env) and accidentally routing all browser calls through Camofox.\n- Assuming `CAMOFOX_API_KEY` is optional for cookie import; it is required there.\n- Exposing a no-auth local development server beyond loopback.\n- Treating MCP tool names from a separate MCP wrapper as if they are the upstream OpenClaw plugin tools. The MCP wrapper may expose many more tools; this skill is centered on upstream `@askjo/camofox-browser` plus its REST API.\n\n## Output format when using this skill\n\nReport:\n\n- runtime: OpenClaw plugin, raw REST, Hermes, or other\n- base URL: server URL used\n- startup: npx/package, cloned repo npm start, OpenClaw autoStart, or existing server\n- auth: no auth/local loopback, `CAMOFOX_ACCESS_KEY`, or `CAMOFOX_API_KEY` for sensitive endpoints\n- user/session: `userId`, `sessionKey`\n- tab: `tabId` used/closed/preserved\n- verification: health + snapshot/action result summary\n- cleanup: tabs closed and whether server was left running\n\nFile v1.3.1:README.md\n\n# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install this skill\n\n### Hermes\n\nInstall from the raw `SKILL.md` URL:\n\n```bash\nhermes skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nInstall from ClawHub:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nClawHub page: https://clawhub.ai/tmchow/camofox-cloaked-browser\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry\n\nFile v1.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1780132720306\n}\n\nFile v1.3.1:skill-card.md\n\n## Description: <br>\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tmchow](https://clawhub.ai/user/tmchow) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent operators use this skill when a task specifically needs Camofox/Camoufox cloaked browsing, stable accessibility refs, OpenClaw plugin tools, or raw REST browser control instead of ordinary search or browser automation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: A Camofox server exposed beyond localhost without access controls can expose browser automation and sensitive endpoints. <br>\nMitigation: Keep the server bound to localhost for local use and set CAMOFOX_ACCESS_KEY or CAMOFOX_API_KEY before exposing it beyond the local machine or importing cookies. <br>\nRisk: Sensitive browsing data or imported cookies may be exposed through telemetry or authenticated endpoints. <br>\nMitigation: Use CAMOFOX_API_KEY for cookie import and set CAMOFOX_CRASH_REPORT_ENABLED=false for sensitive browsing. <br>\nRisk: A globally configured CAMOFOX_URL can unintentionally route Hermes browser calls through Camofox for an entire process. <br>\nMitigation: Avoid global CAMOFOX_URL settings and use it only inline for a dedicated cloaked Hermes process. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/tmchow/camofox-cloaked-browser) <br>\n- [Camofox browser homepage](https://github.com/jo-inc/camofox-browser) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline shell commands, REST examples, configuration snippets, and operational checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reports runtime, base URL, startup method, auth posture, user/session identifiers, tab handling, verification results, and cleanup status.] <br>\n\n## Skill Version(s): <br>\n1.3.1 (source: server evidence release.version and SKILL.md frontmatter) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.3.0: 4 files, 9702 bytes\n\nFiles: README.md (2815b), skill-card.md (2912b), SKILL.md (18734b), _meta.json (142b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.0\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token for sensitive endpoints such as cookie import and traces. Required for cookie import.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name: CAMOUFOX_EXECUTABLE_PATH\n        required: false\n        description: Compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_EXECUTABLE_PATH\n        required: false\n        description: Legacy compatibility alias for CAMOUFOX_EXECUTABLE.\n      - name: CAMOFOX_URL\n        required: false\n        description: \"Hermes-only client-side backend switch. Footgun: if set in Hermes global env/.env/gateway env, Hermes routes all browser calls in that process through Camofox. Do not persist or export globally; use only inline for a dedicated Hermes process.\"\n---\n\n# Camofox Cloaked Browser\n\n## When to use\n\nUse this skill only when the task needs Camofox/Camoufox specifically:\n\n- user names Camofox, Camoufox, anti-detection browsing, cloaked browser, browser fingerprint spoofing, or stealth browsing\n- a site is likely to block normal Playwright/Chrome automation\n- the task needs stable accessibility refs from a Camofox browser server\n- OpenClaw has the `camofox-browser` plugin/tools available\n\nDo **not** use it for ordinary web search, simple page fetches, static text extraction, or normal browser automation. Use the cheaper default stack unless cloaking is actually load-bearing.\n\nIf the user names another browser target explicitly — Browserbase, Selkies, a tailnet browser, normal Hermes browser, Chrome DevTools, etc. — stop and use that target/skill instead. Do not silently route through Camofox.\n\n## Default target\n\nDefault local server:\n\n```text\nhttp://127.0.0.1:9377\n```\n\nEquivalent localhost URL is usually fine:\n\n```text\nhttp://localhost:9377\n```\n\nPrefer `127.0.0.1` in examples to avoid IPv6/localhost oddities.\n\nThere is no container target in this skill. Do not mention or rely on container names; this skill is about the npm server and OpenClaw plugin/API.\n\n## Operating model\n\nCamofox Browser is a Node server and OpenClaw plugin wrapper around Camoufox, a Firefox-based anti-detection browser.\n\nPrimary local startup:\n\n```bash\nnpx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default\n```\n\nAlternative cloned-repo startup:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nAlternative global install:\n\n```bash\nnpm install -g @askjo/camofox-browser\ncamofox-browser\n```\n\n`npm install` / `npx` downloads the Camoufox browser binary on first run via the package postinstall unless `CAMOUFOX_EXECUTABLE` points to an existing compatible Camoufox bundle. Expect roughly a few hundred MB for the browser payload.\n\n## OpenClaw plugin mode\n\nIf OpenClaw has the upstream plugin installed, prefer the plugin tools over raw `curl` because they auto-manage `userId` from `ctx.agentId`, use `sessionKey`, and can auto-start the server.\n\nInstall shape:\n\n```bash\nopenclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows\n```\n\nUseful OpenClaw CLI commands from the plugin:\n\n```bash\nopenclaw camofox status\nopenclaw camofox start\nopenclaw camofox stop\nopenclaw camofox tabs\nopenclaw camofox configure\n```\n\nPlugin config shape shown by upstream:\n\n```yaml\nplugins:\n  entries:\n    camofox-browser:\n      enabled: true\n      config:\n        port: 9377\n        autoStart: true\n        maxSessions: 5\n        maxTabsPerSession: 3\n        sessionTimeoutMs: 600000\n        browserIdleTimeoutMs: 300000\n        maxOldSpaceSize: 128\n```\n\nThe upstream plugin exposes these core tools:\n\n- `camofox_create_tab` — create tab; returns `tabId`\n- `camofox_snapshot` — accessibility snapshot with refs and screenshot; primary observation tool\n- `camofox_click` — click by ref or CSS selector\n- `camofox_type` — type by ref or selector; optional `pressEnter`\n- `camofox_navigate` — navigate by URL or search macro\n- `camofox_scroll` — scroll page\n- `camofox_screenshot` — screenshot only\n- `camofox_close_tab` — close a tab\n- `camofox_evaluate` — execute JS; gated by server auth middleware\n- `camofox_list_tabs` — list tabs for the current user\n- `camofox_import_cookies` — import Netscape cookies; requires `CAMOFOX_API_KEY`\n\n## Hard workflow rules\n\nAlways follow these rules when using Camofox:\n\n1. Check `/health` before doing browser work.\n2. Always send `userId` in raw REST calls.\n3. Prefer `sessionKey` when creating tabs so task tabs group together.\n4. Open or reuse a tab intentionally; do not spray new tabs.\n5. Snapshot before selecting refs.\n6. Re-snapshot after every state-changing action: click, type with submit, press, scroll, navigation, back, forward, refresh, JS evaluate that mutates state.\n7. Element refs reset after navigation and may become stale after DOM changes.\n8. Prefer refs from the latest snapshot over CSS selectors. Use selectors only when refs are unavailable or unstable.\n9. Close tabs when done unless preserving the session is explicitly useful.\n10. Do not claim Camofox is in use until both the server is healthy and the actual agent/client is pointed at it.\n\n## REST API quick commands\n\nSet base variables:\n\n```bash\nBASE=\"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}\"\nUSER_ID=\"${CAMOFOX_USER_ID:-agent1}\"\nSESSION_KEY=\"${CAMOFOX_SESSION_KEY:-task1}\"\n```\n\nIf `CAMOFOX_ACCESS_KEY` or `CAMOFOX_API_KEY` is set, include auth where required:\n\n```bash\nAUTH_HEADER=()\nif [ -n \"${CAMOFOX_ACCESS_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_ACCESS_KEY}\")\nelif [ -n \"${CAMOFOX_API_KEY:-}\" ]; then\n  AUTH_HEADER=(-H \"Authorization: Bearer ${CAMOFOX_API_KEY}\")\nfi\n```\n\n### Health\n\n```bash\ncurl -fsS \"$BASE/health\"\n```\n\n### Create tab\n\n```bash\nTAB_ID=\"$(curl -fsS -X POST \"$BASE/tabs\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"sessionKey\\\":\\\"$SESSION_KEY\\\",\\\"url\\\":\\\"https://example.com\\\"}\" \\\n  | python3 -c 'import json,sys; print(json.load(sys.stdin)[\"tabId\"])')\"\nprintf 'TAB_ID=%s\\n' \"$TAB_ID\"\n```\n\n### Navigate\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"url\\\":\\\"https://example.com\\\"}\"\n```\n\nSearch macro example:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/navigate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"macro\\\":\\\"@google_search\\\",\\\"query\\\":\\\"site:example.com pricing\\\"}\"\n```\n\nKnown macros include:\n\n- `@google_search`\n- `@youtube_search`\n- `@amazon_search`\n- `@reddit_search`\n- `@wikipedia_search`\n- `@twitter_search`\n- `@yelp_search`\n- `@spotify_search`\n- `@netflix_search`\n- `@linkedin_search`\n- `@instagram_search`\n- `@tiktok_search`\n- `@twitch_search`\n\n### Snapshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID\"\n```\n\nWith screenshot and pagination offset:\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/snapshot?userId=$USER_ID&includeScreenshot=true&offset=0\"\n```\n\n### Click\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e1\\\"}\"\n```\n\nSelector fallback:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/click\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"selector\\\":\\\"button[type=submit]\\\"}\"\n```\n\n### Type\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"hello world\\\"}\"\n```\n\nType and submit:\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/type\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"ref\\\":\\\"e2\\\",\\\"text\\\":\\\"query\\\",\\\"pressEnter\\\":true}\"\n```\n\n### Press key\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/press\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"key\\\":\\\"Enter\\\"}\"\n```\n\n### Wait\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/wait\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"timeout\\\":3000}\"\n```\n\n### Scroll\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/scroll\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"direction\\\":\\\"down\\\",\\\"amount\\\":700}\"\n```\n\n### Back / forward / refresh\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/back\"    -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/forward\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/refresh\" -H 'Content-Type: application/json' \"${AUTH_HEADER[@]}\" -d \"{\\\"userId\\\":\\\"$USER_ID\\\"}\"\n```\n\n### Links / images / screenshot\n\n```bash\ncurl -fsS \"$BASE/tabs/$TAB_ID/links?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/images?userId=$USER_ID&limit=50\"\ncurl -fsS \"$BASE/tabs/$TAB_ID/screenshot?userId=$USER_ID\" --output screenshot.png\n```\n\n### Evaluate JavaScript\n\nThis endpoint is auth-gated by the server middleware. Use only when needed.\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/evaluate\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"expression\\\":\\\"document.title\\\"}\"\n```\n\n### Structured extract\n\n```bash\ncurl -fsS -X POST \"$BASE/tabs/$TAB_ID/extract\" \\\n  -H 'Content-Type: application/json' \\\n  \"${AUTH_HEADER[@]}\" \\\n  -d \"{\\\"userId\\\":\\\"$USER_ID\\\",\\\"schema\\\":{\\\"type\\\":\\\"object\\\",\\\"properties\\\":{\\\"title\\\":{\\\"type\\\":\\\"string\\\"}}}}\"\n```\n\n### List and close tabs\n\n```bash\ncurl -fsS \"$BASE/tabs?userId=$USER_ID\"\ncurl -fsS -X DELETE \"$BASE/tabs/$TAB_ID?userId=$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n### Delete session data\n\nThis endpoint is auth-gated.\n\n```bash\ncurl -fsS -X DELETE \"$BASE/sessions/$USER_ID\" \"${AUTH_HEADER[@]}\"\n```\n\n## Environment variables\n\n### Server/client target\n\n- `CAMOFOX_PORT`: server port; default `9377`\n- `PORT`: generic port fallback if `CAMOFOX_PORT` is unset\n- `CAMOFOX_BASE_URL`: not an upstream server env var; useful shell convention for scripts in this skill\n- `CAMOFOX_URL`: Hermes-specific browser-backend switch; **do not set/export globally**; see below\n\n### Auth and sensitive operations\n\n- `CAMOFOX_ACCESS_KEY`: global bearer token for all routes except `/health`; use when anything can reach the server beyond loopback\n- `CAMOFOX_API_KEY`: bearer token for sensitive endpoints such as cookie import/traces; required for `camofox_import_cookies`\n- `CAMOFOX_ADMIN_KEY`: protects `/stop` when configured\n\nFor local development with neither key set, upstream allows loopback requests in non-production mode. Do not expose that to a network. That would be the kind of convenience feature that becomes an incident report.\n\n### Storage / runtime tuning\n\n- `CAMOFOX_COOKIES_DIR`: cookie import source directory; default `~/.camofox/cookies`\n- `CAMOFOX_PROFILE_DIR`: profile directory; default `~/.camofox/profiles`\n- `CAMOFOX_TRACES_DIR`: trace directory; default `~/.camofox/traces`\n- `CAMOFOX_TRACES_MAX_BYTES`: default 50MB\n- `CAMOFOX_TRACES_TTL_HOURS`: default 24\n- `MAX_CONCURRENT_PER_USER`: default 3\n- `MAX_SESSIONS`: default 50\n- `MAX_TABS_PER_SESSION`: default 10\n- `MAX_TABS_GLOBAL`: default 50\n- `SESSION_TIMEOUT_MS`: default 600000 in current code\n- `TAB_INACTIVITY_MS`: default 300000\n- `BROWSER_IDLE_TIMEOUT_MS`: default 300000\n- `NAVIGATE_TIMEOUT_MS`: default 25000\n- `BUILDREFS_TIMEOUT_MS`: default 12000\n- `NATIVE_MEM_RESTART_THRESHOLD_MB`: default 300\n- `BROWSER_RSS_RESTART_THRESHOLD_MB`: default 1500\n\n### Browser binary\n\n- `CAMOUFOX_EXECUTABLE`: external Camoufox executable/bundle; skips bundled download when valid\n- `CAMOUFOX_EXECUTABLE_PATH`: compatibility alias\n- `CAMOFOX_EXECUTABLE_PATH`: legacy alias\n- `CAMOFOX_SKIP_DOWNLOAD=1|true`: skip postinstall browser download; only use if an executable is provided another way\n\n### Proxy / GeoIP\n\n- `PROXY_STRATEGY`\n- `PROXY_PROVIDER`\n- `PROXY_HOST`\n- `PROXY_PORT`\n- `PROXY_PORTS`\n- `PROXY_USERNAME`\n- `PROXY_PASSWORD`\n- `PROXY_BACKCONNECT_HOST`\n- `PROXY_BACKCONNECT_PORT`\n- `PROXY_COUNTRY`\n- `PROXY_STATE`\n- `PROXY_CITY`\n- `PROXY_ZIP`\n- `PROXY_SESSION_DURATION_MINUTES`\n\n### Telemetry\n\nUpstream crash/hang telemetry is enabled unless disabled:\n\n```bash\nCAMOFOX_CRASH_REPORT_ENABLED=false\n```\n\nUse that for privacy-conservative local runs unless the user wants upstream crash reporting.\n\n## Hermes-specific `CAMOFOX_URL` footgun\n\nThis section is load-bearing for Hermes agents. Read it before setting environment variables.\n\nIn Hermes, `CAMOFOX_URL` is not just a harmless client hint. It is a browser-backend switch. If `CAMOFOX_URL` is visible in the Hermes process environment, Hermes considers Camofox mode enabled for that process and normal Hermes browser calls can be forced through Camofox.\n\nHard rules for Hermes:\n\n- **Do not** add `CAMOFOX_URL` to `~/.hermes/.env`.\n- **Do not** export `CAMOFOX_URL` in shell profiles such as `~/.zshrc`, `~/.bashrc`, launchd plists, Docker env, or service env.\n- **Do not** put `CAMOFOX_URL` in the Hermes gateway environment unless the explicit intent is for the entire gateway process to use Camofox for browser calls.\n- **Do not** use `hermes config set ... CAMOFOX_URL ...`; this is runtime state, not durable config.\n- Use `CAMOFOX_URL` only as an inline, one-process env var for a dedicated cloaked Hermes run:\n\n```bash\nCAMOFOX_URL=\"http://127.0.0.1:9377\" hermes chat -q 'Use cloaked Camofox browsing for this task: <task>'\n```\n\n- After removing an accidentally global `CAMOFOX_URL`, restart the affected Hermes CLI/gateway process; running processes keep their old environment.\n\nSafer default for Hermes agents: run the Camofox server normally, store the stable server URL as `skills.config.camofox.base_url` or `CAMOFOX_BASE_URL` for REST examples, and **do not set `CAMOFOX_URL` at all** unless launching a dedicated cloaked Hermes process.\n\nThis routing claim is Hermes-specific. For OpenClaw, use the upstream plugin config/tools unless you have verified equivalent env semantics.\n\n## Verification checklist\n\nBefore claiming success:\n\n1. Server health responds:\n\n```bash\ncurl -fsS \"${CAMOFOX_BASE_URL:-http://127.0.0.1:9377}/health\"\n```\n\n2. OpenClaw plugin mode, if applicable:\n\n```bash\nopenclaw camofox status\n```\n\n3. Raw REST mode: create a tab, snapshot it, close it.\n\n4. Hermes mode: verify `CAMOFOX_URL` is absent from global Hermes env and present only on the dedicated cloaked Hermes process, if Hermes process routing is intentionally being used.\n\n5. Cleanup: close tabs or stop the managed server if the task started it only for one job.\n\n## Common mistakes\n\n- Using Camofox when normal search/extract tools are cheaper and sufficient.\n- Forgetting `userId` in raw REST calls.\n- Clicking stale refs after navigation or DOM changes.\n- Setting/exporting `CAMOFOX_URL` globally in Hermes (`~/.hermes/.env`, gateway env, shell profile, service env) and accidentally routing all browser calls through Camofox.\n- Assuming `CAMOFOX_API_KEY` is optional for cookie import; it is required there.\n- Exposing a no-auth local development server beyond loopback.\n- Treating MCP tool names from a separate MCP wrapper as if they are the upstream OpenClaw plugin tools. The MCP wrapper may expose many more tools; this skill is centered on upstream `@askjo/camofox-browser` plus its REST API.\n\n## Output format when using this skill\n\nReport:\n\n- runtime: OpenClaw plugin, raw REST, Hermes, or other\n- base URL: server URL used\n- startup: npx/package, cloned repo npm start, OpenClaw autoStart, or existing server\n- auth: no auth/local loopback, `CAMOFOX_ACCESS_KEY`, or `CAMOFOX_API_KEY` for sensitive endpoints\n- user/session: `userId`, `sessionKey`\n- tab: `tabId` used/closed/preserved\n- verification: health + snapshot/action result summary\n- cleanup: tabs closed and whether server was left running\n\nFile v1.3.0:README.md\n\n# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install this skill\n\n### Hermes\n\nInstall from the raw `SKILL.md` URL:\n\n```bash\nhermes skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install https://raw.githubusercontent.com/tmchow/agent-skills/main/camofox-cloaked-browser/SKILL.md\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nAfter this skill is uploaded to ClawHub, install it with:\n\n```bash\nopenclaw skills install <slug>\n```\n\nThe expected slug is likely:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nThis is provisional until ClawHub returns the canonical slug. Update this README after upload and before merging the PR.\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1780132543702\n}\n\nFile v1.3.0:skill-card.md\n\n## Description: <br>\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing, including npm/npx startup, OpenClaw plugin tools, REST API commands, session and tab workflow, environment variables, process-scoped CAMOFOX_URL for Hermes, and rules for userId and post-action snapshots. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[tmchow](https://clawhub.ai/user/tmchow) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent operators use this skill when a task explicitly needs Camofox/Camoufox cloaked browsing, browser fingerprint spoofing, or a Camofox browser server instead of ordinary search, fetch, or browser automation. It guides agents through local startup, plugin or REST operation, session management, auth-sensitive endpoints, telemetry settings, and cleanup. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: A Camofox server exposed beyond localhost can allow browser control without the intended local boundary. <br>\nMitigation: Keep the server on localhost unless bearer-token auth is configured with CAMOFOX_ACCESS_KEY. <br>\nRisk: Cookie import, traces, and proxy settings can involve sensitive credentials or browsing state. <br>\nMitigation: Use CAMOFOX_API_KEY for sensitive endpoints, avoid unnecessary cookie import, and protect proxy credentials. <br>\nRisk: A globally visible CAMOFOX_URL can route normal Hermes browser calls through Camofox for the whole process. <br>\nMitigation: Use CAMOFOX_URL only as an inline environment variable for a dedicated cloaked Hermes run and restart affected processes after removal. <br>\nRisk: Crash or hang telemetry may disclose operational details that privacy-sensitive runs should avoid. <br>\nMitigation: Set CAMOFOX_CRASH_REPORT_ENABLED=false or use a self-hosted crash-report endpoint when privacy matters. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/tmchow/camofox-cloaked-browser) <br>\n- [Camofox Browser homepage](https://github.com/jo-inc/camofox-browser) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration instructions, Guidance] <br>\n**Output Format:** [Markdown with inline bash, text, and YAML code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Reports runtime, base URL, startup method, auth mode, user/session IDs, tab handling, verification results, and cleanup status.] <br>\n\n## Skill Version(s): <br>\n1.3.0 (source: frontmatter and server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: Camofox Cloaked Browser Owner: tmchow Summary: Use Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin tools... Tags: latest:1.3.4 Version history: v1.3.4 | 2026-06-24T22:47:16.423Z | user Publish camofox-cloaked-browser 1.3.4 from 118b8c725c4b61f70dad275231465ec2888240fe v1.3.3 | 2026-05-30T09:32:11.097Z | user Man","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"http://127.0.0.1:9377"},{"language":"text","snippet":"http://localhost:9377"},{"language":"bash","snippet":"npx -y @askjo/camofox-browser\n# serves http://127.0.0.1:9377 by default"},{"language":"bash","snippet":"git clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start"},{"language":"bash","snippet":"npm install -g @askjo/camofox-browser\ncamofox-browser"},{"language":"bash","snippet":"openclaw plugins install @askjo/camofox-browser\n# or whatever ClawHub install command the registry page currently shows"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: camofox-cloaked-browser\ndescription: >-\n  Use Camofox/Camoufox as an opt-in anti-detection browser server for agent\n  workflows that need cloaked browsing. Covers npm/npx startup, OpenClaw plugin\n  tools, REST API commands, session/tab workflow, environment variables,\n  process-scoped CAMOFOX_URL for Hermes, and hard rules such as always sending\n  userId and re-snapshotting after state-changing actions. Do not use for normal\n  web search, text extraction, curl fetches, or ordinary browser automation.\nversion: 1.3.4\nauthor: Trevin Chow\nlicense: MIT-0\nplatforms: [macos, linux]\nmetadata:\n  hermes:\n    tags: [browser, camofox, camoufox, cloaking, anti-detection, npm, openclaw]\n    category: browser\n    related_skills: [hermes-agent]\n    config:\n      - key: camofox.base_url\n        description: Local Camofox browser server base URL. Default is http://127.0.0.1:9377.\n        default: \"http://127.0.0.1:9377\"\n        prompt: Camofox server base URL\n  openclaw:\n    emoji: \"🦊\"\n    os: [macos, linux]\n    homepage: https://github.com/jo-inc/camofox-browser\n    requires:\n      bins: [node, npm, curl]\n    install:\n      - kind: node\n        package: \"@askjo/camofox-browser\"\n        bins: [camofox-browser]\n    envVars:\n      - name: CAMOFOX_PORT\n        required: false\n        description: Optional server port. Defaults to 9377. PORT is also honored.\n      - name: PORT\n        required: false\n        description: Optional generic port override when CAMOFOX_PORT is not set.\n      - name: CAMOFOX_BASE_URL\n        required: false\n        description: Optional shell/client convention used by this skill's raw REST examples. Defaults to http://127.0.0.1:9377.\n      - name: CAMOFOX_USER_ID\n        required: false\n        description: Optional shell/client convention for raw REST examples. Always send a userId; defaults to agent1 in examples.\n      - name: CAMOFOX_SESSION_KEY\n        required: false\n        description: Optional shell/client convention for raw REST examples. Prefer a sessionKey when creating tabs.\n      - name: CAMOFOX_ACCESS_KEY\n        required: false\n        description: Optional global bearer token for all routes except /health. Use when exposing beyond localhost.\n      - name: CAMOFOX_API_KEY\n        required: false\n        description: Optional bearer token used only for sensitive endpoints such as cookie import and traces. Not needed for normal browsing, snapshots, navigation, clicks, or typing.\n      - name: CAMOFOX_CRASH_REPORT_ENABLED\n        required: false\n        description: Optional telemetry toggle. Set to false to disable anonymized crash/hang reports.\n      - name: CAMOFOX_CRASH_REPORT_URL\n        required: false\n        description: Optional self-hosted crash-report endpoint override.\n      - name: CAMOUFOX_EXECUTABLE\n        required: false\n        description: \"Optional external Camoufox executable/bundle to avoid npm postinstall browser download. Aliases: CAMOUFOX_EXECUTABLE_PATH, CAMOFOX_EXECUTABLE_PATH.\"\n      - name"},{"path":"README.md","content":"# camofox-cloaked-browser\n\nAgent skill for using [Camofox/Camoufox](https://github.com/jo-inc/camofox-browser) as an opt-in anti-detection browser server when normal automation is likely to get blocked.\n\nThis skill is intentionally **npm-first**. It does not include a container workflow.\n\n## Prerequisites\n\n- Node.js 22+\n- npm / npx\n- curl for raw REST examples\n- Optional: OpenClaw with the upstream `@askjo/camofox-browser` plugin installed\n\n## Install This Skill\n\n### Any Agent Skills runtime (skills CLI)\n\nInstall only this skill from the repo:\n\n```bash\nnpx skills add tmchow/agent-skills --skill camofox-cloaked-browser\n```\n\nAdd `--global` to install it at the user level instead of the current project:\n\n```bash\nnpx skills add tmchow/agent-skills --skill camofox-cloaked-browser --global\n```\n\n### Hermes\n\nInstall from the GitHub directory identifier:\n\n```bash\nhermes skills install tmchow/agent-skills/camofox-cloaked-browser\n```\n\nFrom an interactive Hermes CLI session, use the slash command path:\n\n```text\n/skills install tmchow/agent-skills/camofox-cloaked-browser\n/reload-skills\n/skill camofox-cloaked-browser\n```\n\nUse `/reload-skills` if installing into an already-running session; then load it with `/skill camofox-cloaked-browser` when needed.\n\n### OpenClaw\n\nInstall from ClawHub:\n\n```bash\nopenclaw skills install camofox-cloaked-browser\n```\n\nClawHub page: https://clawhub.ai/tmchow/camofox-cloaked-browser\n\n## Default Camofox target\n\n```text\nhttp://127.0.0.1:9377\n```\n\n## Start Camofox locally\n\n```bash\nnpx -y @askjo/camofox-browser\n```\n\nOr from a clone:\n\n```bash\ngit clone https://github.com/jo-inc/camofox-browser\ncd camofox-browser\nnpm install\nnpm start\n```\n\nThe first install/run downloads the Camoufox browser binary unless `CAMOUFOX_EXECUTABLE` points to an existing compatible bundle.\n\n## What the skill teaches agents\n\n- When Camofox is actually warranted and when to use cheaper tools instead\n- OpenClaw plugin tools and CLI commands: `openclaw camofox status/start/stop/tabs/configure`\n- Raw REST API commands for tabs, navigation, snapshots, clicks, typing, scrolling, screenshots, links/images, JS evaluation, structured extraction, and cleanup\n- Hard workflow rules: check `/health`, always send `userId`, prefer `sessionKey`, snapshot before refs, re-snapshot after state changes\n- Environment variables for npm/server mode, auth, telemetry, browser binary overrides, proxy settings, and Hermes `CAMOFOX_URL`\n- Hermes-specific gotcha: globally visible `CAMOFOX_URL` routes Hermes browser calls through Camofox for that process\n\n## Important defaults\n\n- Default base URL: `http://127.0.0.1:9377`\n- No auth is needed for local loopback development unless sensitive endpoints are used\n- Set `CAMOFOX_ACCESS_KEY` if exposing beyond localhost\n- Set `CAMOFOX_API_KEY` for cookie import\n- Set `CAMOFOX_CRASH_REPORT_ENABLED=false` to disable upstream crash/hang telemetry"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ey3j7hw5sw95h24y5scayc57zz8rf\",\n  \"slug\": \"camofox-cloaked-browser\",\n  \"version\": \"1.3.4\",\n  \"publishedAt\": 1782341236423\n}"},{"path":"skill-card.md","content":"## Description:\n\nUse Camofox/Camoufox as an opt-in anti-detection browser server for agent workflows that need cloaked browsing.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[tmchow](https://clawhub.ai/user/tmchow)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill when ordinary browser automation is likely to be blocked and an opt-in Camofox/Camoufox browser workflow is warranted. It guides local server startup, OpenClaw plugin use, REST commands, session and tab handling, environment variables, and cleanup checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill asks agents to run an unpinned npm browser package that downloads a large executable at install time.\n\nMitigation: Pin `@askjo/camofox-browser` to a reviewed version and prefer a verified local Camoufox bundle via `CAMOUFOX_EXECUTABLE`.\n\nRisk: A cloaked browser service exposed beyond loopback can create browser-control risk if access controls are not set.\n\nMitigation: Keep the server on loopback for local use and set `CAMOFOX_ACCESS_KEY` before any non-local exposure.\n\nRisk: Crash or hang telemetry may be undesirable for privacy-sensitive browsing.\n\nMitigation: Set `CAMOFOX_CRASH_REPORT_ENABLED=false` when privacy matters, or use a self-hosted crash-report endpoint if telemetry is required.\n\n## Reference(s):\n\n- [Camofox Browser upstream project](https://github.com/jo-inc/camofox-browser)\n- [ClawHub skill page](https://clawhub.ai/tmchow/skills/camofox-cloaked-browser)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with inline shell commands and configuration examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance is scoped to macOS and Linux environments with Node.js, npm, and curl available.]\n\n## Skill Version(s):\n\n1.3.4 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1453,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:46:24.522Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T10:18:40.801Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}