← all repositories
1broseidon/ketch

One binary, thirteen backends, exit codes your agent can branch on

Wiring an agent to the web usually means a pile of provider SDKs, each with its own auth and response shape — ketch collapses search, code search, docs, and scraping into one stateless binary with a contract machines can parse.

★697 stars Go AgentsCoding Assistants
ketch
Velocity · 7d
+15
★ / day
Trend
↗accelerating
star history

What it does ketch is a single Go binary exposing three research surfaces — general web search, code search across public repos, and version-aware library docs — plus scraping and crawling that turn HTML pages and text-based PDFs into clean markdown. No daemon, no API server: you call it, it answers, it exits. Every command takes --json, and the whole thing can also run as an MCP server over stdio, turning the same surfaces into agent tools.

The interesting bit The design splits roles cleanly: an operator picks the backend once in config, and every agent invocation afterward just calls ketch search without knowing or caring which provider answers. Agents get a contract instead of prose — documented exit codes (2 bad input, 3 not found, 4 upstream failure, 5 missing precondition, 6 cancelled) for control flow, plus a single ketch config call that returns the effective configuration and active backends as JSON, so there’s no environment probing or help-text parsing. This is glue code over thirteen providers, and proudly so — the uniform interface is the product.

Key highlights

  • Nine web-search backends (Brave, DuckDuckGo, SearXNG, Exa, Firecrawl, Keenable, Tavily, Parallel, SerpBase); several work with zero configuration
  • ketch code greps live OSS source via Grep, Sourcegraph, or GitHub Code Search — no setup on the defaults
  • --multi federates every usable backend and fuses rankings with Reciprocal Rank Fusion; --random tries one and falls back to the rest, sparing rate limits
  • JS-shell pages (React/Vue/Svelte SPAs) are detected and re-fetched through headless Chrome, same output shape either way
  • bbolt page cache (72h default TTL) makes repeat scrapes instant; Netscape cookies.txt jars handle consent-walled pages on both the HTTP and browser paths

Caveats

  • The default search backend (Brave) needs an API key, so web search isn’t zero-config until you switch backends or supply one
  • Scanned, image-only PDFs return a precondition error — OCR is out of scope unless you wire up an external converter
  • The local docs backend is listed as planned, not yet implemented

Verdict If you’re wiring agents into the web and tired of per-provider SDK glue — or you just want a fast terminal replacement for that research browser tab — ketch earns a slot in the toolbox. Skip it if you need a long-running service or heavy extraction pipelines; it’s deliberately a call-and-die tool.

Frequently asked

What is 1broseidon/ketch?
Wiring an agent to the web usually means a pile of provider SDKs, each with its own auth and response shape — ketch collapses search, code search, docs, and scraping into one stateless binary with a contract machines can parse.
Is ketch open source?
Yes — 1broseidon/ketch is open source, released under the MIT license.
What language is ketch written in?
1broseidon/ketch is primarily written in Go.
How popular is ketch?
1broseidon/ketch has 697 stars on GitHub and is currently accelerating.
Where can I find ketch?
1broseidon/ketch is on GitHub at https://github.com/1broseidon/ketch.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.