So I built qry. It's a hub binary that routes queries to adapter binaries via stdin/stdout JSON. The hub knows nothing about search engines. Adapters know nothing about routing. You swap adapters in a config file.
Four adapters today, three require no API key:
- DDG Lite scraping
- Brave Search HTML scraping
- Exa AI via the public MCP endpoint
- Brave Search API (requires key)
``` $ qry "numpy latest version"
[{"title":"...","url":"...","snippet":"..."}]
```
Install:
```
mise use -g go:github.com/justestif/qry@latest
mise use -g go:github.com/justestif/qry/adapters/qry-adapter-ddg-scrape@latest
mise reshim ```
The adapter protocol is plain stdin/stdout JSON so adapters can be written in any language. Docs on building one are in the repo.