Skip to main content

cheap-search

Lightweight, agent-facing CLI for provider-specific search. Wraps two backends behind one binary and ships two Claude Skills that teach a coding agent when and how to call it.

cheap-search
├── grok-search   # xAI / Grok — web + X (Twitter)
└── codex-search  # local Codex CLI passthrough

The agent picks the provider explicitly. There is no automatic routing.

Why

Built-in agent search (Claude WebSearch, etc.) is fine for generic lookups. cheap-search exists for the cases where you specifically want Grok's view of the web, Grok's read of X/Twitter, or Codex's grounding — and you want the agent to invoke the provider you asked for, not pick one for you.

Install

macOS (Apple Silicon) / Linux (x64, arm64)

curl -fsSL https://raw.githubusercontent.com/AirswitchAsa/cheap-search/main/scripts/install.sh | sh

Anywhere with Python 3.13

uv tool install cheap-search       # or: pip install cheap-search

Ephemeral (no install)

uvx --from cheap-search cheap-search --help

Configure

Grok needs an xAI API key. Either:

export XAI_API_KEY=xai-...

or persist it locally with the CLI (stores at ~/.config/cheap-search/config.toml, mode 0600):

cheap-search grok apikey set        # prompts with hidden input
echo "$KEY" | cheap-search grok apikey set -
cheap-search grok apikey status
cheap-search grok apikey unset

Env wins when both are set.

Codex handles its own auth — codex login once.

Use

cheap-search grok web "latest stable Python release"
cheap-search grok x   "xAI announcements" --from 2026-05-01
cheap-search codex    "look up the OpenAI Responses API web search syntax"

cheap-search doctor          # verify local setup
cheap-search providers       # list supported providers

Pass -o json for agent-parsable output:

{
  "answer": "…",
  "model": "grok-4.3",
  "tool_kind": "web",
  "citations": [{"url": "https://…", "title": "…"}]
}

For codex, trailing args after -- are forwarded:

cheap-search codex "<query>" -- --skip-git-repo-check -m gpt-5-codex

Skills

Two skills under skills/:

  • grok-search — fires only when the user explicitly names Grok / xAI / X / Twitter.
  • codex-search — fires only when the user explicitly names Codex.

Each skill bundles scripts/ensure-cheap-search.sh which resolves the bundled binary, falls back to uvx --from cheap-search cheap-search, and only complains if neither is available.

Exit codes

Code Meaning
0 Success
1 Usage error
2 Missing configuration (no API key / no codex binary)
3 Provider failure (network, 4xx/5xx, codex non-zero)

Agents can branch on these to choose between "tell user to configure" and "surface stderr."

Specification

The behavioral contract lives as a DOG document graph under docs/. Browse the project index for actors, behaviors, components, and data definitions. The implementation is built to match — lint stays clean: dog lint docs.

Development

git clone https://github.com/AirswitchAsa/cheap-search
cd cheap-search
uv sync

# Unit tests (no network):
uv run pytest -m "not live"

# Full matrix incl. live xAI + codex calls (costs ~$0.10 in xAI tool fees):
echo 'XAI_API_KEY=xai-...' > .env
uv run pytest

CI is build-only (manual workflow_dispatch); tests are run locally with a real API key. See .github/workflows/release.yml.

License

MIT. See LICENSE.

Metadata

Release files for cheap-search 2026.5.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cheap-search 2026.5.17
File Size Uploaded
cheap_search-2026.5.17.tar.gz 68.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cheap-search 2026.5.17
File Interpreter ABI Platform
cheap_search-2026.5.17-py3-none-any.whl Python 3 none any Details

Total release size: 82.1 kB

Release files / cheap_search-2026.5.17.tar.gz

Download URL cheap_search-2026.5.17.tar.gz
Size 68.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7220872bd2573dc53d5055209fd22dc0332875c1daeb11e23018391c843f9e32
BLAKE2b-256 checksum
How to use checksums
c4869e8679358da49dcbc31ba63688a0f193ff91de1662abb12ab3e01d113902
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / cheap_search-2026.5.17-py3-none-any.whl

Download URL cheap_search-2026.5.17-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0fbef7072b98115d320c6d67f0e2ac4b70c610b7207c7cd0ea31042128a14b63
BLAKE2b-256 checksum
How to use checksums
427850317694ee429f3aff1adde5d2d8fb2c858fa7cdb9ed7109051080bdf01c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

2026.5.17 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page