search-cli.

The command-line companion. A multi-provider search CLI in Rust, by paperfoot.

search-cli is the engine metasearch.sh grew out of — the same thirteen modes and the same provider registry, as a single static binary. Results are rank-fused across providers and emitted as JSON, so an agent can pipe them straight into its next step. search agent-info prints a machine-readable manifest of every command, flag, and exit code; search doctor checks which provider keys are configured and whether each upstream is reachable.

Install

shell script
$ curl -fsSL https://raw.githubusercontent.com/paperfoot/search-cli/master/install.sh | sh
cargo
$ cargo install agent-search

Source and issues at github.com/paperfoot/search-cli; the crate is published as crates.io/crates/agent-search.

First run

$ search doctor
$ search --mode news "solid-state batteries" --json
$ search agent-info

Sign in from the terminal

search loginconnects the CLI to a metasearch.sh account without copying a key by hand. It prints a short confirmation code and opens your browser; you approve the request there, and the key lands in the CLI's config file (mode 0600) on this machine. Repeat logins from the same machine reuse the same key rather than piling up new ones.

$ search login
$ search whoami
$ search logout --revoke

On a headless box, search login --no-browser prints the URL to open elsewhere. search logout clears the local credentials; adding --revoke also kills the key server-side, so a lost laptop stops spending. Every key issued this way is listed in the dashboard under the machine it belongs to, and can be revoked there.

Which one do I want?

Two ways to use the same engine. search-cli runs on your machine with your own provider keys — you hold the accounts, pay each upstream directly, and nothing passes through us. metasearch.sh is the hosted version: one key, one prepaid balance, per-call metering, and a status page measured with billed probes.

search-climetasearch.sh
keysone per provider, yoursone ms_live_ key
billingthirteen upstream accountsone USD balance, metered per call
runslocally, single binaryhosted HTTPS API
good forlocal agents, air-gapped setups, full controlfleets, CI, anything that hates key sprawl

If you start with one and outgrow it, the modes and result shapes carry over — switching is a config change, not a rewrite. Hosted docs start at the Quickstart.