Argus
Argus is a retrieval platform for AI agents offering web search, content extraction, URL recovery, and research workflows.
Search the Web (
search_web): Route searches across 14+ providers with multiple modes (discovery, research, recovery, grounding), configurable result counts, and multi-turn sessions viasession_id.Extract Content (
extract_content): Pull clean text from any URL using a 12-step fallback chain; supports authenticated extraction for paywalled sites.Recover URLs (
recover_url): Recover dead or moved URLs via Wayback Machine, archive.is, and search-based fallbacks.Recover Dead Articles (
recover_dead_article): Run a full workflow to recover a dead article, producing a local report with citations and provenance.Capture Sites (
capture_site): Crawl and capture important pages from an entire site with configurable page limits and a generated summary.Build Research Packs (
build_research_pack): Combine official documentation with external sources into a local research pack for a given topic.Expand Queries (
expand_links): Expand a search query with related links for broader discovery.AI-Synthesized Answers (
valyu_answer): Get AI-generated answers with citations via the Valyu Answer API.Provider Health & Budgets (
search_health,search_budgets): Monitor operational status and budget/credit usage across all integrated providers.Test Providers (
test_provider): Smoke-test a specific search provider to verify configuration.Cookie Health (
cookie_health): Check health of configured cookie domains used for authenticated extraction.Runtime Paths (
argus_paths): View resolved storage paths for corpus data, docs cache, research packs, and workflow state.
Integrates with Brave Search API as a core search provider, supporting automatic query routing, budget enforcement (tracking the 2,000 free monthly queries), health monitoring, and fallback coordination across multiple search modes including discovery, recovery, grounding, and research.
Integrates with self-hosted SearXNG metasearch engine instances as a privacy-focused search provider requiring no API key. Serves as a primary option in discovery and recovery search chains, with automatic fallback to commercial providers when results are insufficient.
Utilizes Tailscale networking to access remote authenticated extraction services for retrieving content from paywall-protected domains, enabling authenticated Playwright-based extraction as the first tier of its content extraction pipeline before falling back to local methods.
Argus
Retrieval platform for AI agents. Argus routes search across 14 providers, recovers dead URLs, captures important site content, builds local docs-plus-research packs, and persists everything with traceable local artifacts.
Features at a glance:
Topology-aware acquisition — Argus knows if it's on a residential IP or datacenter, routing search and extraction automatically to avoid blocks and minimize network hops.
14 providers, one API — free-first tier routing, budget-exhausted providers skipped automatically
Zero-key start —
pip install argus-searchgives you DuckDuckGo + Yahoo immediately, no accounts neededSearXNG self-host = 70+ engines — Google, Bing, Yahoo, Startpage, Ecosia, Qwant and more via one Docker container
12-step content extraction — returns full page text with quality gates, not just links
Opinionated retrieval workflows — recover dead articles, capture important pages from a site, and build local docs-plus-research packs
Argus-owned corpus storage — runtime data goes to a writable user data directory, not your repo checkout
Multi-turn sessions — pass
session_idfor conversational context across searchesScore attribution — optionally show which providers contributed to each fused RRF score
Usage dashboard — inspect provider budgets, recent query volume, and machine-level usage at
/dashboard4 search modes — discovery, research, recovery, grounding
Dead URL recovery —
/recover-urlwith Wayback Machine and archive fallbacks4 integration paths — HTTP API, CLI, MCP server, Python SDK
Built for AI agent builders, RAG pipelines, and ops teams who need reliable search, capture, and local evidence without stitching APIs together.
Status: beta. The retrieval workflows and corpus model are production-oriented, but still maturing.
Status: see the public status page. Authorized maintainers can use the private argus-ops README for the latest dated reports.
Current production checkpoint — September 7, 2026: The authenticated HTTP API and MCP adapter are operational, and sampled free search works through SearXNG, Yahoo, and GitHub. DuckDuckGo is intermittent and fails closed after acquisition-policy blocks. Production readiness is
ready=true, degraded; paid providers are not currently admitted until their non-secret credential-version and account-scope bindings are recorded. Browser capability and recovery metadata evidence remain open. See the current status matrix before relying on a provider.
Contents
Related MCP server: GroundRoute
Quickstart
Mode 1: Local CLI (zero config)
pip install argus-search && argus search -q "python web frameworks"That's it. DuckDuckGo handles the search — no accounts, no keys, no containers. You get unlimited free search from your laptop right now. Add API keys whenever you want more providers, or don't.
argus extract -u "https://example.com/article" # extract clean text from any URL
argus recover-article -u "https://example.com/dead-post"
argus capture-site -u "https://docs.example.com"
argus build-research-pack -t "example sdk" --official-url "https://docs.example.com"Works on any machine with Python 3.11+ — laptop, Mac Mini, Raspberry Pi, cloud VM. Nothing to host.
For MCP (Claude Code, Codex, OpenCode, Cursor, VS Code):
pipx install argus-search[mcp]
export ARGUS_MCP_STANDALONE=true # explicit development-only local broker
argus mcp init --global --client allThat writes native config for Claude Code, Codex CLI, OpenCode, and Cursor. Restart the client after configuration. For manual stdio setup:
{"mcpServers": {"argus": {"command": "argus", "args": ["mcp", "serve"], "env": {"ARGUS_MCP_STANDALONE": "true"}}}}Or install from the MCP Registry:
{
"mcpServers": {
"argus": {
"registryType": "pypi",
"identifier": "argus-search",
"runtimeHint": "uvx",
"env": {"ARGUS_MCP_STANDALONE": "true"}
}
}
}Standalone development needs no server or keys, but it must be explicitly enabled. Production MCP always delegates to an authenticated HTTP authority.
See MCP Client Setup for exact config files, verification commands, remote HTTP setup, and troubleshooting.
Mode 2: Full Stack Server
Got a Raspberry Pi running Pi-hole? A Mac Mini on your desk? An old laptop? That's enough to run the full stack — SearXNG (your own private search engine, disabled by default) plus local JS-rendering content extraction.
# Optional: tell Argus it has residential egress to optimize routing
export ARGUS_EGRESS_TYPE=residential
ARGUS_SEARXNG_ENABLED=true docker compose up -d # SearXNG + ArgusWhat you have | What you get |
Any machine with Python 3.11+ | DuckDuckGo + API providers (no server) |
Home server / old laptop (4GB+) | Everything — SearXNG, all providers, Crawl4AI, Obscura |
Mac Mini M1+ (8GB+) | Full stack with headroom |
Free cloud VM (1GB) | SearXNG + search providers (use residential workers for extraction) |
SearXNG takes 512MB of RAM and gives you a private Google-style search engine (disabled by default — set ARGUS_SEARXNG_ENABLED=true) that nobody can rate-limit, block, or charge for. It runs alongside Pi-hole on hardware millions of people already own.
Where Argus Writes Data
Argus code and Argus runtime data are different things.
Code lives wherever you install or clone Argus.
Runtime corpus data lives in a writable user data directory resolved by
platformdirs, or inARGUS_DATA_ROOTif you override it.
Inspect the exact paths on your machine:
argus pathsBy default Argus writes:
official docs cache under the resolved
docs/cache/research packs under
docs/research/workflow run state under
workflows/runs/versioned workflow snapshots under
snapshots/
This means Argus does not require a sibling ../docs-cache checkout. If you have an older docs-cache tree, import it once with:
argus corpus import-docs-cache -s /path/to/docs-cacheOpinionated Workflows
These workflows build local artifacts, not just transient JSON responses.
Recover A Dead Article
argus recover-article -u "https://example.com/old-post" -t "Example Post"Argus searches for recovery candidates, extracts the best result, saves the recovered sources locally, and writes a citation-backed report plus manifest.
Capture The Important Parts Of A Site
argus capture-site -u "https://docs.example.com"Argus stays on-domain, uses sitemap-assisted discovery plus heuristic link scoring, saves the important pages it finds, and writes a detailed summary with references.
Build A Docs + Research Pack
argus build-research-pack -t "example sdk"
argus build-research-pack -t "example sdk" --official-url "https://docs.example.com"Argus captures official docs into its local docs cache, adds non-official supporting sources from search, and writes a combined research pack with traceable artifacts.
Development
Repo development is pinned to Python 3.12. The package runtime floor is Python
3.11, the production image runs Python 3.12.3, and Python 3.13 is the
compatibility CI lane. Required CI passes all three; contributors should use
the uv workflow below so local verification matches the canonical lane and
does not accidentally use an older system interpreter.
uv sync --python 3.12 --extra dev --extra mcp
uv run pytest tests/ -v --tb=shortThe repo includes .python-version with 3.12 so uv, pyenv, and similar tools pick the right interpreter by default. More contributor guidance lives in CONTRIBUTING.md.
Providers
Provider | Credit type | Free capacity | Setup |
DuckDuckGo | Free (scraped) | Unlimited | None |
Yahoo | Free (scraped) | Unlimited | None — fragile, auto-skipped if broken |
SearXNG | Free (self-hosted, off by default) | Unlimited — 70+ engines¹ | Docker |
GitHub | Free (API) | Unlimited | None (token for higher rate limit) |
WolframAlpha | Free (API key) | 2,000 queries/month | |
Brave Search | Monthly recurring | 2,000 queries/month | |
Tavily | Monthly recurring | 1,000 queries/month | |
Exa | Monthly recurring | 1,000 queries/month | |
Linkup | Monthly recurring | 1,000 queries/month | |
Parallel AI | Monthly recurring | $5 credit with card on file, up to 5,000 searches/month | |
Serper | One-time signup | 2,500 credits | |
You.com | One-time signup | $20 credit | |
Valyu | One-time signup | $10 credit |
¹ SearXNG aggregates Google, Bing, Yahoo, Startpage, Ecosia, Qwant, Wikipedia, and 60+ more — all behind a single self-hosted endpoint. Run docker compose up -d on any machine with 512MB of free RAM.
² WolframAlpha returns computed answers (math, unit conversions, factual lookups), not web search results. It only activates in grounding and research modes. Queries it can't compute (general web searches) return empty — no error, no health penalty.
7,000+ free queries/month from recurring free-tier providers with API keys (WolframAlpha 2k + Brave 2k + Tavily 1k + Exa 1k + Linkup 1k), or up to 12,000+ when Parallel's monthly credit is available to an eligible account with a card on file. DuckDuckGo, Yahoo, and GitHub have no monthly cap. SearXNG is disabled by default (enable in .env). Routing priority: Tier 0 (free: SearXNG*, DuckDuckGo, Yahoo, GitHub, WolframAlpha) → Tier 1 (monthly recurring: Brave, Tavily, Exa, Linkup, Parallel) → Tier 3 (one-time: Serper, You.com, Valyu, SearchAPI). Budget-exhausted providers are skipped automatically.
These are package-level provider tiers and advertised quotas, not proof of current production availability. The production authority fails closed for a credentialed provider until its registration fingerprint, account scope, budget, and approved test evidence are present. A protected key value alone does not prove that the current key works; see docs/STATUS.md for the live classification.
HTTP API
All endpoints prefixed with /api. OpenAPI docs at http://localhost:8000/docs.
Local loopback calls can use the API without auth. Remote HTTP callers must send ARGUS_API_KEY as either Authorization: Bearer ... or X-API-Key: .... Privileged routes under /api/admin/* require ARGUS_ADMIN_API_KEY (or fall back to ARGUS_API_KEY if no separate admin key is configured).
# Search
curl -X POST http://localhost:8000/api/search \
-H "Content-Type: application/json" \
-d '{"query": "python web frameworks", "mode": "discovery", "max_results": 5}'
# Search with score attribution
curl -X POST http://localhost:8000/api/search \
-H "Content-Type: application/json" \
-d '{"query": "python web frameworks", "include_attribution": true}'
# Multi-turn search (conversational refinement)
curl -X POST http://localhost:8000/api/search \
-H "Content-Type: application/json" \
-d '{"query": "what about async?", "session_id": "my-session"}'
# Extract content from a working URL
curl -X POST http://localhost:8000/api/extract \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/article"}'
# Recover a dead or moved URL
curl -X POST http://localhost:8000/api/recover-url \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/old-page", "title": "Example Article"}'
# Network-free process liveness (container health target)
curl http://localhost:8000/api/live
# Public minimal startup and cached readiness
curl http://localhost:8000/api/startup
curl http://localhost:8000/api/ready
# Authenticated operator status, health compatibility, and budgets
curl -H "Authorization: Bearer $ARGUS_ADMIN_API_KEY" \
http://localhost:8000/api/admin/status
curl -H "Authorization: Bearer $ARGUS_ADMIN_API_KEY" \
http://localhost:8000/api/admin/budgets
curl -H "Authorization: Bearer $ARGUS_ADMIN_API_KEY" \
http://localhost:8000/api/admin/maya-outbox/status
curl -H "Authorization: Bearer $ARGUS_ADMIN_API_KEY" \
http://localhost:8000/api/admin/maya-outbox/dead-letters
# After correcting the cause of a permanent rejection:
curl -X POST -H "Authorization: Bearer $ARGUS_ADMIN_API_KEY" \
http://localhost:8000/api/admin/maya-outbox/DELIVERY_ID/recover/api/health remains a 200 liveness compatibility route. It intentionally
does not check PostgreSQL, providers, Maya, or the browser, so a dependency
outage cannot cause container restart storms. See
production operations for the canonical topology and
operator procedures, and operational status for endpoint semantics,
readiness classification, observation expiry, and safe telemetry.
Search modes
Mode | Use for | Example |
| Related pages, canonical sources | "Find the official docs for X" |