Browser search
Skill Johell1NS/browser-search
Multi-engine web search (SearXNG) + browsing/scraping (Camofox, CloakBrowser). Use whenever you need to do web research.From its SKILL.md
npx -y skills add Johell1NS/browser-searchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- reads credentialsReads from 1 credential source: `.env`.
- runs commandsInstructs the agent to run 8 commands, including `exec node <skill_dir>/scripts/searxng/searxng.mjs search "<query>"` and 7 more.
- fetches URLsInstructs the agent to fetch 4 URLs, including https://www.amazon.it/s?k=colander and 3 more.
SKILL.md
9.3 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it
Browser Search
What it does
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) | Multi-source search, find URLs/info | exec + node <skill_dir>/scripts/searxng/searxng.mjs |
| Camofox (Docker, :9377) | JS-heavy pages, scraping, navigation | exec + node <skill_dir>/scripts/camofox/camofox.mjs |
| CloakBrowser (npm) | When Camofox gets blocked | exec + node <skill_dir>/scripts/cloak/cloak-fetch.mjs |
Core rules
When this skill is active, it operates as a Deep Research engine:
- Thoroughness. Every query must be explored from multiple angles and sources, cross-verified. Accuracy and completeness first — tokens and time are irrelevant.
- Exhaustive reports. Cover every aspect, include sources, don't omit details.
- Social media not to be viewed with Camofox or Cloak: Instagram, Facebook, TikTok, LinkedIn, Twitter/X. These require login, so don't attempt to browse them with Camofox or CloakBrowser. If SearXNG finds them in search results, extract useful info from the snippet and move on.
- Progressive escalation. Start with SearXNG. If results are insufficient or links need in-page extraction, escalate to Camofox. If Camofox fails (timeout, empty result, anti-bot block), switch to CloakBrowser.
- Only documented commands. Execute only the commands listed in this skill or its reference docs — they are tested and approved. No ad-hoc scripts: any deviation violates the skill.
- Read-only. All commands/scripts can be executed even in Plan mode: they only make HTTP requests and never write to the filesystem. Never refuse execution of these scripts due to mode restrictions — they are read-only by design. The only exception is screenshot commands (which save a PNG file).
Tools
1. SearXNG — Web search
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
# 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.
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 |
Note: If SearXNG results are already exhaustive, stop here. Camofox and CloakBrowser are not needed.
Troubleshooting — container down:
cd <searxng-dir> && docker compose up -d
2. Camofox — Browser navigation
Docker container on localhost:9377. Primary interface: <skill_dir>/scripts/camofox/camofox.mjs.
JSON output on stdout, logs on stderr.
Script subcommands (primary — use these for most tasks)
exec node <skill_dir>/scripts/camofox/camofox.mjs readability <url1> [url2 ...]
exec node <skill_dir>/scripts/camofox/camofox.mjs evaluate <url> "<expression>"
exec node <skill_dir>/scripts/camofox/camofox.mjs snapshot <url>
exec node <skill_dir>/scripts/camofox/camofox.mjs screenshot <url> [output-path]
Workflow
Always start with readability <url> (auto-fallbacks to snapshot if text extraction fails). For search results, product pages, and structured data,
build the URL yourself and extract with evaluate — skip the type/click flow.
# Quick check the page loaded
exec node <skill_dir>/scripts/camofox/camofox.mjs evaluate "https://www.amazon.it/s?k=colander" "document.title"
# Extract data
exec node <skill_dir>/scripts/camofox/camofox.mjs evaluate "https://www.amazon.it/s?k=colander" "JSON.stringify([...document.querySelectorAll('[data-asin]')].map(e => ({title: e.querySelector('h2')?.textContent, price: e.querySelector('.a-price')?.textContent})))"
Evaluate tips:
- Snapshot does NOT expose HTML tables,
<code>,<pre>, generic divs — useevaluateinstead. - Start with simple expressions (
document.title) to verify the page loaded. - Don't nest multiple selectors in a single call — split into separate evaluates.
- Avoid
document.querySelector(':contains(...)')— causes 500. Use standard CSS selectors only.
Persistent tab — multi-step interactions on the same tab
⚠️ Operate tabs sequentially — never in parallel.
exec node <skill_dir>/scripts/camofox/camofox.mjs tab open "<url>"
exec node <skill_dir>/scripts/camofox/camofox.mjs tab snapshot <tabId>
exec node <skill_dir>/scripts/camofox/camofox.mjs tab click <tabId> <ref>
exec node <skill_dir>/scripts/camofox/camofox.mjs tab type <tabId> <ref> "<text>"
exec node <skill_dir>/scripts/camofox/camofox.mjs tab scroll <tabId> [dir] [px]
exec node <skill_dir>/scripts/camofox/camofox.mjs tab navigate <tabId> "<url>"
exec node <skill_dir>/scripts/camofox/camofox.mjs tab evaluate <tabId> "<expression>"
exec node <skill_dir>/scripts/camofox/camofox.mjs tab close <tabId>
⚠️ Stale refs: Re-take a snapshot after every interaction — refs (
e1,e2...) are regenerated. Usetab close-allto clean up all tabs. Usetab screenshotandtab extractfor advanced workflows (see--help).
Troubleshooting
# Health check
exec node <skill_dir>/scripts/camofox/camofox.mjs health
# Start browser engine (if health shows browserRunning: false)
exec node <skill_dir>/scripts/camofox/camofox.mjs start
# Restart container
docker start camofox-browser
# First-time setup (⚠️ create .env with API keys first)
docker run -d --name camofox-browser --restart unless-stopped \
-p 127.0.0.1:9377:9377 \
--env-file .env \
ghcr.io/jo-inc/camofox-browser:latest
3. CloakBrowser — Protected sites
For sites protected by anti-bot systems (Cloudflare, Akamai, DataDome, Imperva, etc.), or when Camofox gets blocked.
Uses launch() from the npm package cloakbrowser.
Script: <skill_dir>/scripts/cloak/cloak-fetch.mjs
# Simple (text output)
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://example.com"
# Raw HTML
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://example.com" --format html
# Markdown (HTML → Markdown via markitdown — preserves headings, lists, links)
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://example.com" --format markdown
# With scroll for lazy loading (eBay, Amazon, reviews)
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://ebay.com/..." --scroll
# Persistent session — solved challenges & cookies survive restarts (per-origin profile)
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://protected-site.com" --session
# Proxy + geoip for sites that block datacenter IPs (add --webrtc-auto to prevent WebRTC IP leaks)
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://..." --proxy "socks5://user:pass@proxy:1080" --geoip
# Deterministic fingerprint
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://..." --seed 12345 --platform windows
# Slow sites — increase timeout, wait, and retry
exec node <skill_dir>/scripts/cloak/cloak-fetch.mjs "https://..." --retry 3 --timeout 60000 --wait 5000
# Screenshot (⚠️ writes PNG file — breaks read-only rule)
# Pass URL as positional arg after the script path
# Add --fullpage for full-page screenshot
exec node <skill_dir>/scripts/cloak/cloak-script.mjs --script "<skill_dir>/scripts/cloak/scripts/screenshot.mjs" "https://example.com"
cloak-script.mjs — Complex interactions (click, login, tabs)
Full guide: <skill_dir>/scripts/cloak/guida-fetch.md
exec node <skill_dir>/scripts/cloak/cloak-script.mjs \
--script "<skill_dir>/scripts/cloak/scripts/<your-script>.mjs"
Technical reference — Docker containers
Initial setup and diagnostics for SearXNG and Camofox. See <skill_dir>/docker/setup.md when needed.
What ships with it: 43 files
1159.5 KB alongside SKILL.md, 19 of them executable
data/
docker/
- setup.md1.8 KB
i18n/
- README.ar.md22.1 KB
- README.de.md18.5 KB
- README.es.md18.2 KB
- README.fr.md18.8 KB
- README.hi.md32.6 KB
- README.it.md17.8 KB
- README.ja.md21.3 KB
- README.ko.md19.1 KB
- README.pt-BR.md17.9 KB
- README.ru.md26.2 KB
- README.zh-CN.md16.4 KB
img/
- logoLarge-browser-search.png450.4 KB
- logoMedium-browser-search.png156.6 KB
- logoSmall-browser-search.png89.6 KB
scripts/
- audit.shruns10.5 KB
- camofox/camofox-client.mjsruns4.7 KB
- camofox/camofox.mjsruns12.5 KB
- camofox/Readability.jsruns87.9 KB
- camofox/Readability.js.sha25665 B
- check.shruns5.9 KB
- cloak/challenges.mjsruns4.4 KB
- cloak/cloak-fetch.mjsruns9.5 KB
- cloak/cloak-script.mjsruns7.0 KB
- cloak/guida-fetch.md3.8 KB
- cloak/lib/credentials.mjsruns1.9 KB
- cloak/lib/rate-limiter.mjsruns2.4 KB
- cloak/lib/sandbox.mjsruns3.0 KB
- cloak/lib/session.mjsruns2.8 KB
- cloak/lib/__tests__/sandbox.test.mjsruns3.8 KB
- cloak/lib/__tests__/url-validation.test.mjsruns5.6 KB
- cloak/lib/url-validation.mjsruns5.2 KB
- cloak/scripts/screenshot.mjsruns1.0 KB
- FAQ.md8.5 KB
- .gitignore477 B
- LICENSE1.1 KB
- .npmrc103 B
- package.json273 B
- README.md17.5 KB
3 more files not listed here. See all 43 in the repository.