by Johell1NS
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.
# Add to your Claude Code skills
git clone https://github.com/Johell1NS/browser-searchGuides for using ai agents skills like browser-search.
Last scanned: 6/23/2026
{
"issues": [
{
"file": "README.md",
"line": 142,
"type": "secret-exfiltration",
"message": "Instruction appears to send credentials/secrets to an external endpoint",
"severity": "medium"
},
{
"file": "SKILL.md",
"line": 90,
"type": "secret-exfiltration",
"message": "Instruction appears to send credentials/secrets to an external endpoint",
"severity": "medium"
},
{
"file": "SKILL.md",
"line": 119,
"type": "secret-exfiltration",
"message": "Instruction appears to send credentials/secrets to an external endpoint",
"severity": "medium"
},
{
"file": "SKILL.md",
"line": 207,
"type": "secret-exfiltration",
"message": "Instruction appears to send credentials/secrets to an external endpoint",
"severity": "medium"
},
{
"file": "SKILL.md",
"type": "secret-exfiltration",
"message": "…and 1 more similar match in this file",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-06-23T07:50:08.001Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}browser-search is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Johell1NS. 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. It has 482 GitHub stars.
Yes. browser-search passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/Johell1NS/browser-search" and add it to your Claude Code skills directory (see the Installation section above). browser-search ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
browser-search is primarily written in JavaScript. It is open-source under Johell1NS on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh browser-search against similar tools.
No comments yet. Be the first to share your thoughts!
Web search and browsing for AI agents. Three tools, from lightest to most powerful: SearXNG for search, Camofox for browsing, CloakBrowser for protected sites.
| Tool | When to use | How |
|---|---|---|
| SearXNG (Docker, :8080) | Default: Multi-source search, find URLs/info | exec + node <skill_dir>/scripts/searxng/searxng.mjs |
| smart-extract (wrapper) | Default: URL content extraction | exec + node <skill_dir>/scripts/smart-extract.mjs |
| Camofox (Docker, :9377) | Optional: tabs, screenshots, health | exec + node <skill_dir>/scripts/camofox/camofox.mjs |
| CloakBrowser (npm) | Optional: proxy, session, stealth | exec + node <skill_dir>/scripts/cloak/cloak-fetch.mjs |
When this skill is active, it operates as a Deep Research engine:
--time-range flag in SearXNG to prefer recent results.smart-extract.mjs for any URL that needs in-page extraction. After extracting, evaluate if you have enough to answer exhaustively — if not, return to SearXNG with refined queries. Never stop until you have exhaustive, cross-verified coverage.Goal: find relevant URLs for every aspect of the user's request, to pass to smart-extract.mjs for content extraction.
Docker container on localhost:8080. Always the first choice for any search.
Commands:
Deterministic script <skill_dir>/scripts/searxng/searxng.mjs. JSON output on stdout, logs on stderr.
URL encoding is handled internally — no manual escaping needed.
# Simple search
exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>"
# With language and category
exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>" --lang it --categories news
# With time range (day, week, month, year)
exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>" --time-range month
# Image search
exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>" --categories images
# Pagination
exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>" --page 2
# Multiple queries (run in series with a 3s gap between them)
exec node <skill_dir>/scripts/searxng/searxng.mjs search \
--query "<q1>" --time-range month \
--query "<q2>" --lang it \
--query "<q3>"
# Health check
exec node <skill_dir>/scripts/searxng/searxng.mjs health
All flags are optional.
By default, SearXNG searches all enabled engines.
Use --engines only when you need to restrict to specific engines, e.g. --engines google,wikipedia.
Rate-limit: when you need several searches, group them into a single command with --query — each query can have its own flags. The script runs them in series with a 3s gap between queries so the burst doesn't look like a bot. Never launch multiple separate search commands in rapid succession.
Language strategy:
| Case | Flag |
|---|---|
| Query matches content language, general/cultural topic | --lang <user-locale> |
| Query matches content language, technical topic | --lang en |
| Query in English | --lang en |
| Fallback if preferred locale returns 0 results | retry with --lang en |
Troubleshooting — container down:
searxng.mjs search auto-recovers a stopped SearXNG container: on a connection failure it finds the container exposing port 8080, restarts it, waits for it to come back up, and retries the search once.
Manual fallback:
cd <searxng-dir> && docker compose up -d
Goal: extract content from every useful URL returned by SearXNG.
smart-extract.mjs is the default tool for extracting content from any URL. It has 3 operation modes, to be used in this order:
Workflow:
Always start with exploratory mode to read the page content. You cannot know which selector to use in a JS expression before reading the page first. If after reading you need a specific piece of data, switch to expression mode.
[!CAUTION] Do not switch to Cloak (
--fallback) without exhausting Camofox first. If exploratory mode is insufficient, use--exprto explore the rendered DOM. Cloak is extremely slow — use it only as a last resort.
Base command (1, 2, or n URLs):
exec node <skill_dir>/scripts/smart-extract.mjs "<url1>" ["<url2>" ...]
Examples (modes 1 and 2):
# 1. Exploratory: read page content
exec node <skill_dir>/scripts/smart-extract.mjs "https://example.com"
# 2. Expression: extract specific data (only after reading the page)
exec node <skill_dir>/scripts/smart-extract.mjs "https://example.com" --expr "document.querySelector('h1')?.textContent"
Options:
Behavior (exploratory or expression mode):
--expr "<js>" — evaluate a JS expression on the page--min-chars <n> — minimum character threshold for a valid result (default: 300, does not apply with --expr)Cloak tuning (automatic escalation or --fallback):
--wait <ms> — extra wait for JS rendering (default: 2000). Passed to Cloak--timeout <ms> — general timeout (default: 60000, Cloak receives 2x)--verbose — diagnostic logs on stderr. Useful for Cloak debuggingWhat happens in practice (modes 1 and 2):
mode: "camofox" with mixed results, manually escalate the failed URLs with --fallback.mode: "camofox" if at least one URL succeeded, mode: "full-auto" if auto-escalation to Cloak occurred.Last resort — Direct Cloak mode:
When Camofox failed and auto-escalation did not trigger (mixed mode). Accepts one or more URLs:
exec node <skill_dir>/scripts/smart-extract.mjs --fallback "https://url1" "https://url2" "https://url3"
--fallback skips Camofox and uses Cloak directly, since the goal is to recover content where Camofox has already proven insufficient.
Output: JSON on stdout with version, mode, results[] (one entry per URL with ok, content, chars, source, steps).
After reviewing the output, decide: do you have enough information to answer the user's request exhaustively? If yes, proceed. If not, go back to SearXNG with new search queries to fill the gaps.
For operations not covered by smart-extract.mjs, use the underlying tools directly.
See <skill_dir>/data/advanced-browsing-reference.md for the full command reference.
| Tool | Capabilities |
|---|---|
camofox.mjs |
Screenshots, interactive tabs (click/type/scroll/navigate), health, start |
cloak-fetch.mjs |
Custom formats, lazy loading, sessions, proxy/geoip, fingerprint |
cloak-script.mjs |
Complex multi-step interactions (login flows, form automation) |
Initial setup and diagnostics for SearXNG and Camofox. See <skill_dir>/docker/setup.md when needed.
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.
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.
The typical flow: the agent first searches with SearXNG, then browses the results with Camofox (or CloakBrowser if the site is protected).
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.
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.
blocked_by_challenge.Where other tools give up, browser-search keeps going.
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. 🚀
┌─────────────────────────────────────────────────────────┐
│ 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 │ │
│ │ └──────────────┘ │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
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.
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"
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 detectioncloak-script.mjs — custom Playwright script executionExample:
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
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-