browser-search

Johell1NSMIT活跃维护

给 AI Agent 用的自托管网页检索与浏览技能:SearXNG 搜索、Camofox 浏览、CloakBrowser 绕过反爬,从源头减少幻觉。

A skill for AI agents: search the web with SearXNG, browse with Camofox, bypass protections with CloakBrowser. Anti-hallucination by design. Self-hosted, free, unlimited.

v3.2.1发布于 2026-10-22 08:28 UTC545star +2 / 7 天42fork同步于 2026-11-10 11:58 UTC

怎么上手

由 README 提炼,执行前请确认
npx skills add Johell1NS/browser-search
cd ~/.config/opencode/skills/browser-search && npm install && node -e "import('cloakbrowser').then(c => c.ensureBinary())"
硬件要求按 README 说明

README 未说明显存或 GPU 要求;强调轻量,已在 Raspberry Pi 上构建并测试,可低功耗硬件 7x24 运行。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

给 AI Agent 的自托管搜索与浏览技能,用 SearXNG 搜索、Camofox 浏览、CloakBrowser 绕过反爬,靠确定性脚本抑制幻觉

给 AI Agent 用的自托管网页检索与浏览技能:SearXNG 搜索、Camofox 浏览、CloakBrowser 绕过反爬,从源头减少幻觉。

核心能力

  • 用 SearXNG 做多源元搜索并返回 JSON 结果
  • 用 Camofox 通过 REST API 浏览常规站点
  • 遇 Cloudflare/Akamai 等挑战自动升级到 CloakBrowser
  • 强制走确定性脚本执行,减少模型编造答案
  • Deep Research 模式要求先检索再作答并交叉验证

容易踩的坑

npx skills add 不会自动执行 npm install,需进入技能目录手动安装 cloakbrowser 并下载二进制,否则 CloakBrowser 回退会报 ERR_MODULE_NOT_FOUND;SearXNG 默认关闭 JSON 输出,需在 settings.yml 中开启 search.formats 含 json 并关闭 limiter,否则脚本报 HTTP 403;SearXNG(:8080)与 Camofox(:9377)需自行用 Docker 起容器,项目不提供平台专用 compose 或安装脚本。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v3.2.1
  1. v3.2.1v3.2.1 — Camofox stuck recovery, partial results in smart-extract最新正式版2026-10-22 · 2026-10-22 08:28 UTC

    Highlights

    Camofox stuck recovery

    • When Camofox gets stuck after a session destroy (every POST /tabs fails with a masked 500 while /health still reports the browser as running), camofox.mjs now probes the browser with a short-timeout tab. If the probe fails, the browser is stopped and restarted, and the tab creation is retried once. If the probe works, the problem is the URL (dead domain, slow site) and nothing is restarted.
    • smart-extract skips Camofox for the remaining URLs when the restart fails (the existing escalation to CloakBrowser applies).

    smart-extract

    • When interrupted (SIGTERM/SIGINT, e.g. by an outer timeout) it now prints the results already collected as mode: "partial" instead of exiting silently.

    Docs

    • SKILL.md: what to do after a timeout or a partial result.

    Known limits

    • Partial output works on SIGTERM/SIGINT, not SIGKILL; POSIX signal support is limited on Windows.
    • The docker restart fallback assumes the container is named camofox-browser.

    How to update

    npx skills update            # or: git pull
    

    No npm install needed: dependencies are unchanged since v3.2.0.

    Pull request: #38 — closes #37.

  2. v3.2.0v3.2.0 — Camofox 1.18.1, SearXNG 2026.10, CloakBrowser 0.6.32026-10-21 · 2026-10-21 12:26 UTC
    查看更新说明

    Highlights

    Camofox 1.18.1

    • HTTP status and warning in results, PDF download, select / press / --submit for forms (#28)
    • Recommended container flags: core dumps, log rotation, profile volume, telemetry (#27)
    • Unbounded storage state is reset periodically; tabs are closed when a step times out (#30)

    smart-extract

    • --expr returns a real error instead of {"ok":true} when the expression evaluates to undefined (#26)
    • No page reload for snapshot/text fallbacks; Readability failures on Trusted Types CSP are handled (#29)

    SearXNG 2026.10

    • searxng.mjs keeps pubdate, image/video fields and unresponsive_engines, honors SEARXNG_URL, adds a request timeout (#31)
    • Required settings documented (JSON format, use_default_settings), with a hint on HTTP 403 (#32)

    CloakBrowser 0.6.3 (free binary, no license key)

    • CloakBrowser 0.6.3, Playwright Core 1.64.1 (#33)
    • Safer binary download, stable fingerprint per persistent profile, more reliable humanized actions
    • Fixed a false-positive Cloudflare challenge detection that made cloak-fetch wait 20s on normal pages; challenge.strategy is reported again (#35)
    • More robust per-origin session lock (token, heartbeat, stale detection, waiting) (#35)
    • ip-address updated, npm audit reports 0 vulnerabilities (#35)

    Upgrade notes

    • Node.js 20.19+ or 22.12+ is now required.
    • SearXNG needs json in search.formats (see the README section "SearXNG configuration (required)").
    • Camofox image: ghcr.io/jo-inc/camofox-browser:1.18.1 (recommended flags in docker/setup.md).
    • Persistent CloakBrowser profiles now live in ~/.browser-search/cloak-sessions/profiles/: saved sessions start fresh after updating.

    How to update

    npx skills update            # or: git pull
    cd <skill dir>               # e.g. ~/.config/opencode/skills/browser-search
    npm install
    node -e "import('cloakbrowser').then(c=>c.ensureBinary())"
    bash scripts/check.sh
    

    Pull request: #34 — closes #26, #27, #28, #29, #30, #31, #32, #33, #35.

  3. v3.1.1v3.1.1 — Fix CloakBrowser setup after npx skills add2026-09-02 · 2026-09-02 17:33 UTC
    查看更新说明

    v3.1.1 — Fix CloakBrowser setup after npx skills add

    How to update an existing installation

    npx skills update refreshes the skill files only (SKILL.md, scripts). The npm dependencies are updated separately with npm install, from the directory where the skill (or repo) is installed.

    Common cases:

    • Installed via npx skills add — update skill files, then deps + binary:

      npx skills update
      cd ~/.config/opencode/skills/browser-search   # your skill dir (.agents/skills/browser-search if project-local)
      npm install
      node -e "import('cloakbrowser').then(c=>c.ensureBinary())"
      
    • Cloned the repository — pull the new code, then refresh deps:

      cd browser-search
      git pull
      npm install
      node -e "import('cloakbrowser').then(c=>c.ensureBinary())"
      
    • Docker services (SearXNG, Camofox) — pull the updated image and recreate the container; the exact command depends on your setup.

    Verify with bash scripts/check.sh. If in doubt, show this release note to your AI agent — it will adapt the steps to your installation.


    Fix: CloakBrowser ERR_MODULE_NOT_FOUND after npx skills add

    npx skills add copies the skill files but does not run npm install. Without cloakbrowser installed, smart-extract (--fallback / full-auto escalation) and cloak-fetch.mjs / cloak-script.mjs failed at import time with a generic Cannot find package 'cloakbrowser' / nessun output JSON valido.

    Fixed:

    • scripts/smart-extract.mjs — detects missing cloakbrowser and returns an actionable hint instead of a generic error: cloakbrowser not installed — run 'npm install' in skill dir (...) then 'node -e "import(\'cloakbrowser\').then(c=>c.ensureBinary())"' and verify with 'bash scripts/check.sh'
    • scripts/cloak/cloak-fetch.mjs / scripts/cloak/cloak-script.mjs — dynamic import with the same hint and code: CLOAK_NOT_INSTALLED (previously uncaught ERR_MODULE_NOT_FOUND stack).

    Docs:

    • README.md — Step 1 now documents the required post-install npm install + ensureBinary + check.sh after npx skills add; Services overview clarifies CloakBrowser requires npm install in skill dir.
    • SKILL.md — CloakBrowser row and Technical reference now state the prerequisite.
    • FAQ.md — new troubleshooting entry for ERR_MODULE_NOT_FOUND: Cannot find package 'cloakbrowser'.

    Fix:

    • scripts/check.sh — on Windows the Chromium binary check now matches chrome.exe / chromium.exe (previously only chrome/chromium), so ~/.cloakbrowser/chromium-.../chrome.exe is correctly detected.

    No breaking changes. SearXNG/Camofox (Docker) unaffected — only the CloakBrowser fallback path is affected when cloakbrowser was not installed.


    v3.1.0 — Dependency updates: CloakBrowser 0.5.5, Playwright Core 1.62.1

    The skill's npm dependencies are updated to the latest CloakBrowser and Playwright Core releases, with cross-platform compatibility (Linux, Windows, macOS) and better error diagnosis.

    Dependencies

    • cloakbrowser ^0.4.12 → ^0.5.5 — adds Linux arm64 binary support (Raspberry Pi) and Windows fixes.
    • playwright-core 1.60.0 → 1.62.1.
    • Added mmdb-lib and socks-proxy-agent (optional peer deps of CloakBrowser 0.5.x, required for --geoip and SOCKS proxies).
    • npm audit: 0 vulnerabilities.

    Fixes

    • scripts/check.sh — cloak_version() no longer relies on require('cloakbrowser/package.json'), which CloakBrowser 0.5.x no longer exports (ERR_PACKAGE_PATH_NOT_EXPORTED). It now reads the version from disk.
    • cloak-fetch.mjs / cloak-script.mjs — catch CloakBrowserLicenseError (session limit / license) and exit with code 2 and a license: true flag instead of a generic error.

    Documentation

    Version note in README + 12 i18n translations, covering Linux arm64 support and the known Windows + Pro license issue (cloakhq/cloakbrowser#479, wor

  4. v3.1.0v3.1.0 — Dependency updates: CloakBrowser 0.5.5, Playwright Core 1.62.12026-08-07 · 2026-08-07 08:49 UTC
    查看更新说明

    How to update an existing installation

    npx skills update refreshes the skill files only (SKILL.md, scripts). The npm dependencies are updated separately with npm install, from the directory where the skill (or repo) is installed.

    Common cases:

    • Installed via npx skills add — update skill files, then deps:

      npx skills update
      cd ~/.config/opencode/skills/browser-search   # your skill dir
      npm install
      
    • Cloned the repository — pull the new code, then refresh deps:

      cd browser-search
      git pull
      npm install
      
    • Docker services (SearXNG, Camofox) — pull the updated image and recreate the container; the exact command depends on your setup.

    Verify with bash scripts/check.sh. If in doubt, show this release note to your AI agent — it will adapt the steps to your installation.


    Dependency updates: CloakBrowser 0.5.5, Playwright Core 1.62.1

    The skill's npm dependencies are updated to the latest CloakBrowser and Playwright Core releases, with cross-platform compatibility (Linux, Windows, macOS) and better error diagnosis.

    Dependencies

    • cloakbrowser ^0.4.12 → ^0.5.5 — adds Linux arm64 binary support (Raspberry Pi) and Windows fixes.
    • playwright-core 1.60.0 → 1.62.1.
    • Added mmdb-lib and socks-proxy-agent (optional peer deps of CloakBrowser 0.5.x, required for --geoip and SOCKS proxies).
    • npm audit: 0 vulnerabilities.

    Fixes

    • scripts/check.sh — cloak_version() no longer relies on require('cloakbrowser/package.json'), which CloakBrowser 0.5.x no longer exports (ERR_PACKAGE_PATH_NOT_EXPORTED). It now reads the version from disk.
    • cloak-fetch.mjs / cloak-script.mjs — catch CloakBrowserLicenseError (session limit / license) and exit with code 2 and a license: true flag instead of a generic error.

    Documentation

    Version note in README + 12 i18n translations, covering Linux arm64 support and the known Windows + Pro license issue (cloakhq/cloakbrowser#479, workaround --license-through-proxy).

    All skill features were re-tested with the new versions (SearXNG search, smart-extract, cloak-fetch, cloak-script, camofox tabs, check.sh).

    See pull request #24 and issue #23.


    v3.0.3 — SearXNG multi-query mode with rate limiting

    When the agent needs several searches, it now groups them into a single command instead of launching rapid-fire separate queries that could look like bot traffic to the search engines.

    exec node <skill_dir>/scripts/searxng/searxng.mjs search \
      --query "<q1>" --time-range month \
      --query "<q2>" --lang it \
      --query "<q3>"
    
    • Each query can carry its own flags (--lang, --categories, --time-range, --engines, --page).
    • Queries run in series with a 3s gap between them (configurable via SEARXNG_QUERY_DELAY env var, 0 disables it).
    • Legacy format search "<query>" [flags] is unchanged (backward compatible).
    • Mixing a positional query with --query groups fails with a clear message.
    • Output: 1 query → previous schema; n queries → { ok, searches: [...] }.
    • SKILL.md documents the multi-query example and the rate-limit note; the env var is documented in data/advanced-browsing-reference.md.

    See pull request #22 and issue #21.


    v3.0.2 — Rendered-text fallback in smart-extract

    On JS-only or slow-rendering pages, the exploratory extraction could return only a partial shell, flagged as too short below the --min-chars threshold. smart-extract.mjs now has a deterministic fallback: when both Camofox Readability and Snapshot come up too short, it re-opens the page with --wait and reads the rendered text via document.body.innerText. The threshold still applies to the result, so genuinely empty pages keep failing.

    Generic (works on any page), deterministic (no agent judgment needed), and zero overhead in the happy path.

    See pull request #20 and issue #19.


    v3.0.1 — SearXNG auto-recovery

    When the SearXNG container is down, `searxng.mjs

  5. v3.0.32026-07-31 · 2026-07-31 17:57 UTC
    查看更新说明

    v3.0.3 — SearXNG multi-query mode with rate limiting

    When the agent needs several searches, it now groups them into a single command instead of launching rapid-fire separate queries that could look like bot traffic to the search engines.

    exec node <skill_dir>/scripts/searxng/searxng.mjs search \
      --query "<q1>" --time-range month \
      --query "<q2>" --lang it \
      --query "<q3>"
    
    • Each query can carry its own flags (--lang, --categories, --time-range, --engines, --page).
    • Queries run in series with a 3s gap between them (configurable via SEARXNG_QUERY_DELAY env var, 0 disables it).
    • Legacy format search "<query>" [flags] is unchanged (backward compatible).
    • Mixing a positional query with --query groups fails with a clear message.
    • Output: 1 query → previous schema; n queries → { ok, searches: [...] }.
    • SKILL.md documents the multi-query example and the rate-limit note; the env var is documented in data/advanced-browsing-reference.md.

    See pull request #22 and issue #21.


    v3.0.2 — Rendered-text fallback in smart-extract

    On JS-only or slow-rendering pages, the exploratory extraction could return only a partial shell, flagged as too short below the --min-chars threshold. smart-extract.mjs now has a deterministic fallback: when both Camofox Readability and Snapshot come up too short, it re-opens the page with --wait and reads the rendered text via document.body.innerText. The threshold still applies to the result, so genuinely empty pages keep failing.

    Generic (works on any page), deterministic (no agent judgment needed), and zero overhead in the happy path.

    See pull request #20 and issue #19.


    v3.0.1 — SearXNG auto-recovery

    When the SearXNG container is down, searxng.mjs search now recovers automatically: it finds the container exposing port 8080, restarts it, waits for it to come back up, and retries the search once. No manual intervention, no fixed container name — works on any installation. Fails safe with the previous error message if no container is found.

    See pull request #18 and issue #17.

    Data freshness rule

    The skill now has a Freshness rule in its Core rules: for time-sensitive questions (benchmarks, prices, news, releases, versions), the agent searches for updated sources aligned with the topic, using the --time-range flag in SearXNG to prefer recent results.


    v3.0.0 — smart-extract automatic orchestration

    What's new

    Automatic content extraction

    The agent no longer has to choose between Camofox and Cloak: smart-extract.mjs handles the decision automatically. Pass one or more URLs, and the script tries Camofox first, escaping to Cloak only when needed.

    Skill easier to read at zero context

    Each tool now has an explicit goal. The old Camofox and Cloak sections have been consolidated into a quick reference with a link to a separate reference guide. The agent understands what to use and when at a glance.

    Built-in feedback loop

    After extracting content, the skill guides the agent to evaluate whether the data is enough; if not, it loops back to SearXNG with refined queries.

    Separate advanced reference

    Screenshots, interactive tabs, proxy, session management — anything not needed in daily research is documented in data/advanced-browsing-reference.md, loaded only when needed.

    Reliable expression results

    JS expressions returning objects or DOM elements are automatically converted to JSON or text — no more [object Object] in the output.

    Automatic quality checks

    If the extracted content is too short or empty, the script reports it immediately instead of passing it through as valid.

    Technical details

    For the full list of changes and tests, see pull request #16.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    browser-search

    A skill for AI agents. OpenCode, Claude Code, Cursor, OpenClaw and beyond. Search the web with SearXNG, browse with Camofox, bypass protections with CloakBrowser. Anti-hallucination by design. All self-hosted, free, unlimited.

    Why it exists

    Today an AI agent browsing the web is like a thief in a balaclava sneaking around a police academy. The site protections block it, challenge it, reject it.

    👮 browser-search flips the situation: your agent stops being the thief and becomes the chief of police. No more clumsy access attempts. It walks through every door because it has the right tools. SearXNG to search, Camofox to browse, CloakBrowser when the site plays hardball.

    The skill enforces the exclusive use of deterministic scripts. This eliminates model hallucinations, even with the cheapest models. The 3 tools are described in natural language, but execution is rigid: the model can neither get the command wrong nor misinterpret the output. The result is guaranteed success on every query — the skill and its deterministic scripts guide the model to scour the web until it finds the answer.

    1. SearXNG — metasearch engine for the search phase (multi-source, JSON)
    2. Camofox — browser navigable via REST API for standard sites
    3. CloakBrowser — stealth browser for anti-bot protected sites

    The typical flow: the agent first searches with SearXNG, then browses the results with Camofox (or CloakBrowser if the site is protected).

    Benefits

    • 100% free, self-hosted, unlimited. No API keys to buy, no subscriptions, no rate limits. Everything runs on your machine, Docker and npm. Unlimited usage, zero cost.

    • Lightweight, runs anywhere. Built and tested on a Raspberry Pi — if it runs there, it runs everywhere. Minimal resource consumption, no heavy infrastructure needed, runs 24/7 on low-power hardware.

    • Search + browse in one kit. No manual integration needed. Searching and browsing are two distinct phases, both covered.

    • Automatic navigation escalation. If Camofox gets blocked by Cloudflare/Akamai, the agent automatically switches to CloakBrowser.

    • Smart performance. SearXNG for the search phase (milliseconds). Camofox and CloakBrowser are only used to browse the sites that actually need it.

    • Automatic agent choice. The AI agent decides which tool to use: SearXNG for initial search, Camofox for browsing, CloakBrowser if the site is protected. Zero human intervention.

    • Anti-hallucination by design. The skill's Deep Research mode enforces a "search first, answer second" workflow: the agent must verify every factual claim against live web sources, cross-reference multiple angles, and never guess. No more made-up answers.

    • Fully customizable. The SKILL.md is plain text. You can edit the core rules, add your own, remove what you don't need. Adapt it to your workflow, your team, your standards.

    • Native stealth. CloakBrowser automatically detects Cloudflare, Akamai, DataDome, Imperva, PerimeterX, and DDoS-Guard challenges, and waits for them to resolve before extracting content.

    • Works with any agent. The SKILL.md is written for OpenCode, but the logic is identical for any AI agent. Same README, same package.json, everything works everywhere. Just ask your agent how to convert the skill for its environment.

    Why it's different

    Most web tools for AI agents stop where the wall starts: when a site throws a Cloudflare or Akamai challenge, they hand back an error and the agent gives up. browser-search is built to walk through instead.

    • Search → browse → bypass in one skill. No manual integration, no per-query costs, no API keys to buy.
    • Three-tier escalation. SearXNG for milliseconds-fast search, Camofox for the ~90% of standard sites, CloakBrowser when the site plays hardball — automatically, with zero human intervention.
    • Proven anti-bot results. CloakBrowser applies 58 C++ source-level patches and scores 0.9 on reCAPTCHA v3 (human-level, server-verified), clearing Cloudflare, Turnstile, DataDome, Akamai, Imperva, PerimeterX and DDoS-Guard — where other tools just return blocked_by_challenge.
    • Free, private, self-hosted. SearXNG, Camofox and CloakBrowser all run on your machine. Zero cost, unlimited, nothing metered.

    Where other tools give up, browser-search keeps going.

    🏆 State of the art

    These three tools were chosen because they represent the current state of the art available today. A skill like this is designed to evolve: when better tools emerge, updating the SKILL.md is all it takes to swap them in. 🔄

    ⭐ Star the repo and follow to stay up to date on new tools, flow improvements, and orchestration updates over time. 🚀

    Architecture

    ┌─────────────────────────────────────────────────────────┐
    │                    browser-search                       │
    │                                                         │
    │  ┌──────────────┐                                       │
    │  │    Search    │                                       │
    │  │              │                                       │
    │  │  SearXNG     │   search engines → URLs               │
    │  │  (Docker)    │   JSON results, fast                  │
    │  │  :8080       │                                       │
    │  └──────────────┘                                       │
    │         │                                               │
    │         │ results ready → to browse                     │
    │         ↓                                               │
    │  ┌─────────────────────────────────────┐                │
    │  │           Browsing                  │                │
    │  │                                     │                │
    │  │  ┌──────────────┐                   │                │
    │  │  │   Camofox    │  browser + REST   │                │
    │  │  │  (Docker)    │  JS, click, eval  │                │
    │  │  │  :9377       │                   │                │
    │  │  └──────┬───────┘                   │                │
    │  │         │                           │                │
    │  │         │ if blocked                │                │
    │  │         ↓                           │                │
    │  │  ┌──────────────┐                   │                │
    │  │  │ CloakBrowser │  stealth Chromium │                │
    │  │  │   (npm)      │  anti-bot, proxy  │                │
    │  │  └──────────────┘                   │                │
    │  └─────────────────────────────────────┘                │
    └─────────────────────────────────────────────────────────┘
    

    How it works

    Phase 1 — Search with SearXNG

    Docker container on localhost:8080. Metasearch engine that queries Google, Wikipedia, Bing, DuckDuckGo and many others simultaneously. JSON output with titles, snippets, and URLs.

    Example:

    node scripts/searxng/searxng.mjs search "largest llm benchmark 2026"
    

    The agent now has a list of URLs to visit and autonomously decides whether to browse them with Camofox or CloakBrowser based on the site.

    Phase 2 — Browse with Camofox

    Docker container on localhost:9377. Exposes a full Firefox browser through a REST API. The agent can create tabs, navigate, click, scroll, execute arbitrary JavaScript, and structure data.

    Includes: Mozilla's Readability.js for extracting clean articles, removing nav, sidebar, and ads (~70% token savings).

    Main commands:

    # Single-URL extraction (Readability.js, auto-fallback to snapshot)
    node scripts/camofox/camofox.mjs readability "https://example.com"
    
    # JavaScript evaluation
    node scripts/camofox/camofox.mjs evaluate "https://example.com" "document.title"
    
    # Accessibility snapshot
    node scripts/camofox/camofox.mjs snapshot "https://example.com"
    

    Phase 3 — Browse with CloakBrowser (when Camofox isn't enough)

    npm package based on Playwright + cloakbrowser. Launches a Chromium browser with advanced fingerprinting to bypass Cloudflare, Akamai, DataDome and other anti-bot systems. Automatic challenge detection with wait and retry.

    Available scripts:

    • cloak-fetch.mjs — universal fetch with challenge detection
    • cloak-script.mjs — custom Playwright script execution

    Example:

    node scripts/cloak/cloak-fetch.mjs "https://protected-site.com"
    node scripts/cloak/cloak-fetch.mjs "https://protected-site.com" --proxy socks5://... --geoip
    
    # Markdown output (requires: pip install markitdown)
    node scripts/cloak/cloak-fetch.mjs "https://example.com" --format markdown
    

    Version note: browser-search pins CloakBrowser ^0.6.3 and Playwright Core 1.64.1. CloakBrowser 0.6 requires Node.js 20.19+ or 22.12+. The skill uses the free CloakBrowser binary (Chromium 146; 145 on macOS), which needs no license key; the wrapper updates (Linux arm64 support, safer binary download, stable fingerprint per persistent profile, more reliable humanized actions) apply to it too. A free key (GitHub sign-in via cloakbrowser login) unlocks the newest binary with one concurrent session; the skill neither uses nor requires it.

    Why both Camofox and CloakBrowser?

    Because speed and stealth are a tradeoff, and the right tool depends on the site.

    Camofox — fast, structured, persistent. Camofox wraps Camoufox (a C++-level Firefox fork) in a REST API with an always-warm browser. After a ~1-3s cold start, every request is near-instant. Its accessibility snapshots are ~90% smaller than raw HTML, with stable element refs (e1, e2, ...) for reliable interaction. It handles the ~90% of sites that don't use advanced anti-bot protection: articles, docs, search engines, standard web pages.

    CloakBrowser — stealth, anti-bot, on-demand. CloakBrowser launches a fresh Chromium instance per request (~1-3s startup each time). It uses advanced fingerprinting, proxy support, geoip, and automatic challenge detection to bypass Cloudflare, Akamai, DataDome, Imperva, PerimeterX, and DDoS-Guard. It is the last resort for the ~10% of sites that block Camofox.

    Real-world numbers:

    ToolCloudflare standardCloudflare TurnstileDataDome
    Camoufox (Camofox engine)up to ~92% [¹]~65-78% [¹]60-75% [¹]
    Playwright Stealth~70-80% [¹]~40-55% [¹]~30-50% [¹]
    • CloakBrowser applies 58 C++ source-level patches and scores 0.9 reCAPTCHA v3 (human-level, server-verified), passing all major anti-bot tests including Cloudflare Turnstile and FingerprintJS [²]
    • Camofox cold start: ~1-3s (one-time, then ~0ms per request via warm REST API) [³]
    • Playwright/Chromium cold start: ~0.5-6s (every launch, varies by environment) [⁴]

    Camofox handles the fast path. CloakBrowser handles the edge cases. Together they cover the entire web with no gaps. The agent decides which to use.

    Sources

    ¹ "Camoufox Vs Playwright Stealth: Complete Comparison & Alternatives (2026)" — blog.send.win ² CloakBrowser README — github.com/cloakhq/cloakbrowser ³ camoufox-pi README (cold start comparison) — github.com/MonsieurBarti/camoufox-pi ⁴ Playwright issue #4345 (launch time variability) — github.com/microsoft/playwright/issues/4345

    Installation

    Step 1 — Install the skill

    Install the skill definition into your AI agent with a single command:

    npx skills add Johell1NS/browser-search
    

    This works with 70+ AI agents including OpenCode, Claude Code, Cursor, GitHub Copilot, and more.

    Required after npx skills add: CloakBrowser is an npm dependency (cloakbrowser + playwright-core). The skills installer copies files but does not run npm install automatically. You must install it manually inside the skill directory:

    # Find your skill directory (OpenCode example):
    #   ~/.config/opencode/skills/browser-search
    #   or .agents/skills/browser-search  (project-local)
    cd ~/.config/opencode/skills/browser-search
    npm install
    node -e "import('cloakbrowser').then(c => c.ensureBinary())"
    # Verify everything:
    bash scripts/check.sh
    

    Without this step, SearXNG and Camofox (Docker) will work, but smart-extract → CloakBrowser (--fallback / full-auto escalation) will fail with ERR_MODULE_NOT_FOUND: Cannot find package 'cloakbrowser' — run bash scripts/check.sh (see cloakbrowser not installed) or FAQ.md → Troubleshooting.

    Step 2 — Set up the infrastructure (alternative: manual clone)

    If you prefer to work from a git clone instead of npx skills add:

    git clone https://github.com/Johell1NS/browser-search
    cd browser-search
    npm install
    node -e "import('cloakbrowser').then(c => c.ensureBinary())"
    

    CloakBrowser is installed by npm (requires npm install + binary download via ensureBinary). SearXNG and Camofox require separate Docker containers — make sure they are running before using the skill.

    Show this README to your AI agent for a complete installation tailored to your environment and platform.

    browser-search does not provide platform-specific docker-compose files or install scripts. Your AI agent reads the references below and adapts the setup to your OS, architecture, and environment automatically.

    Services overview:

    ServiceHowReference
    SearXNGDocker, :8080docs.searxng.org
    CamofoxDocker, :9377github.com/jo-inc/camofox-browser
    CloakBrowsernpm (requires npm install in skill dir + ensureBinary)scripts/cloak/cloak-fetch.mjs + scripts/setup.sh / scripts/check.sh

    SearXNG configuration (required)

    The default SearXNG install has JSON output disabled, and the skill needs it: without it the script fails with HTTP 403. In SearXNG's settings.yml (the core-config folder in the official Docker setup) use:

    use_default_settings: true
    server:
      secret_key: "<random>"   # or set SEARXNG_SECRET
      limiter: false           # local instance: the limiter would block the script's JSON requests
    search:
      formats: [html, json]
    
    • use_default_settings: true keeps engines and defaults aligned with upstream on every update. To switch on extra engines, add entries such as engines: → - name: bing with disabled: false.
    • Keep it local: bind SearXNG to 127.0.0.1 (SEARXNG_HOST=127.0.0.1 in .env).
    • Valkey/Redis is not needed by the skill (SearXNG uses it only for the limiter, which stays off).
    • If SearXNG is not at http://127.0.0.1:8080, set SEARXNG_URL.

    For the AI agent — read these files:

    FileWhat it contains
    SKILL.mdComplete skill: commands, escalation, troubleshooting
    scripts/cloak/cloak-fetch.mjsCloakBrowser CLI usage and all options
    scripts/setup.shSystem dependencies
    scripts/check.shPost-installation verification
    docker/setup.mdDocker setup tips

    Note: SKILL.md is written for OpenCode syntax (exec, node scripts). If your agent uses a different format (Claude Code, Cursor, etc.), read it and convert the commands to your agent's syntax before using the skill.

    Environment variables

    VariableRequired forDefault
    CAMOFOX_API_KEYevaluate, session, cleanup in Camofox—
    CAMOFOX_ADMIN_KEYCamofox stop endpoint—

    What this skill does NOT do

    • Social media. Instagram, Facebook, TikTok, LinkedIn, and Twitter/X require login. browser-search does not attempt to browse them.
    • Download files. It is read-only (except for explicit screenshots).
    • Bypass paywalls. Does not circumvent payment or login systems.

    Security

    browser-search includes multiple layers of security hardening:

    Built-in protections

    • SSRF prevention. URLs are validated before navigation — internal IPs (127.x, 10.x, 192.168.x, 169.254.x), cloud metadata endpoints, and .internal/.local TLDs are blocked. DNS resolution is also checked to prevent DNS rebinding attacks.
    • Script sandbox. Custom scripts (cloak-script.mjs) run in a sandbox that restricts the Playwright API surface (only whitelisted methods on page, browser, context are accessible). Note: Node.js APIs remain available — for full isolation, a vm.Context would be required. Use --unsafe to bypass the sandbox and SSRF protection.
    • Path traversal protection. --script paths must be within the skill directory. Absolute paths and ../ traversal are blocked.
    • Rate limiting. 30 requests/minute by default to prevent accidental DoS or anti-bot triggers (use --no-rate-limit to disable).
    • Secure filenames. Screenshots use random UUIDs instead of predictable timestamps.
    • Stack trace suppression. Error output omits stack traces by default. Use --verbose for debugging.

    Best practices

    • API keys. Use environment variables ($CAMOFOX_API_KEY) or --env-file for Docker. Never paste keys on the command line — they appear in ps aux and shell history.
    • Docker binding. Always use 127.0.0.1: prefix for port mapping (-p 127.0.0.1:9377:9377). Never expose to 0.0.0.0.
    • URL encoding. Deterministic scripts handle encoding internally. No manual escaping needed.
    • Version pinning. Dependencies use exact versions (no ^ caret ranges) and package-lock.json for reproducible builds.

    Audit

    Run bash scripts/audit.sh to verify the security posture of your installation.

    Residual risks

    • Prompt injection. An AI agent can be tricked into performing harmful actions. The tooling mitigates damage but cannot prevent a fully compromised agent.
    • Supply chain. CloakBrowser downloads a Chromium binary from cloakbrowser.dev. The binary is SHA-256 verified but proprietary.
    • Browser automation. Any tool with browser access has inherent risks. Run in isolated environments when possible.

    Get involved

    browser-search is open source and free. If you find it useful:

    • ⭐ Star the repo — helps others discover it
    • 🐛 Open an issue — report bugs or suggest features
    • 🔀 Submit a PR — fix, improve, extend
    • 💬 Share it — with your team, on Reddit, Twitter, Discord
    • 🧠 Adapt it — fork it, tweak the SKILL.md, make it yours

    Every contribution, no matter how small, makes this better.

    FAQ

    See FAQ.md for frequently asked questions about installation, architecture, design decisions, and common issues.

    License

    MIT