| name | search |
| description | Search the live web, scrape pages to clean markdown, search open-source code, and pull library docs — all through the local `ketch` CLI. Use this whenever the user wants to find something online, look something up, research a topic, gather sources, read/summarize a web page, scrape a site, crawl a site, find code examples in OSS repos, or get version-aware library documentation. Free and local: web search goes through the user's private SearXNG; scraping uses ketch's own readability engine (Brave only for JS-rendered pages). Replaces the older searxng/firecrawl/exa/web-search skills. For INTERACTIVE control of the user's real browser (clicking, logins, tabs), use the `browser` skill instead. |
research: web search + scrape + code + docs via ketch
ketch is a fast, stateless Go CLI (no daemon, every call independent and cached).
One binary, four surfaces: web search, page scraping, OSS code search, library docs.
Always add --json when you need to parse the output.
Already configured (in ~/.config/ketch/config.json)
backend = searxng → web search hits the user's private SearXNG at
http://192.168.0.25:8888 (by IP — Go can't resolve search.local/mDNS).
browser = /opt/brave-origin-bin/brave → JS pages render via the user's Brave
binary (see "How ketch uses Brave" below). No Google Chromium dependency.
- Other search backends available:
exa, brave, ddg (override per call with -b).
brave_api_key is set, so brave works as a paid premium backend.
Resilient search — use ./search.sh (auto-fallback)
ketch has no built-in search fallback: if SearXNG is down, ketch search -b searxng
errors (exit 4). For search that must not fail, call the wrapper instead of ketch search:
./search.sh "<query>" [--limit N --json]
It tries the chain searxng → brave (private primary → Brave paid fallback), falling
through only on backend ERROR (a valid empty result is respected, not retried). The chosen
backend is in the JSON (backend:) and a meta: fallback backend used = … line goes to stderr.
Edit CHAIN=(…) in search.sh to change. ketch scrape/code/docs are unaffected — they have
no SearXNG dependency.
Commands
ketch search "claude opus pricing" --limit 5
ketch search "claude opus pricing" --scrape --json
ketch search "neural retrieval" -b exa
ketch scrape https://example.com/article
ketch scrape https://a.com https://b.com --json
ketch scrape https://spa.example --force-browser
ketch scrape https://example.com --select "main"
ketch scrape https://example.com --raw
ketch crawl https://docs.example.com --depth 2
ketch crawl https://example.com/sitemap.xml --sitemap --background
ketch crawl status
ketch code "http.NewRequestWithContext" --lang go
ketch code "rate limit middleware" --lang go -b github --json
ketch docs "word wrap rendering" --library /charmbracelet/glamour
Useful flags: --limit/-l N, --json, --minimal (one result/line), --trim
(strip markdown to text), --max-chars N (truncate), --no-cache.
How ketch uses the user's Brave (important)
ketch does NOT attach to or touch the user's running/daily Brave. It only uses the
Brave binary as a rendering engine for JavaScript-heavy pages:
- Static pages → plain HTTP fetch, no browser at all (fast path).
- JS-rendered page (auto-detected) or
--force-browser → ketch (via go-rod) launches
a separate, headless Brave process with a fresh temporary --user-data-dir:
no logins, no cookies, no history — ephemeral / incognito-like. It's killed and the
temp profile deleted when the scrape finishes.
- This throwaway instance has a different
--user-data-dir than the daily
Brave-Browser-Pi, so the two never conflict and ketch never sees the user's sessions.
Net: ketch borrows the Brave program to render pages in a clean sandbox — no Google
Chromium, no privacy leak, no interference with interactive browsing.
Choosing this skill vs browser
- research (ketch) → read-only: find, fetch, scrape, crawl, code/docs lookup.
- browser → interactive control of the user's REAL Brave (their logins, clicking,
typing, tabs, authenticated dashboards). ketch cannot do that.
Config management
ketch config
ketch config set backend searxng
ketch config set searxng_url http://192.168.0.25:8888
ketch config set browser /opt/brave-origin-bin/brave