Skip to main content

Agent-native search pipeline — intent-aware querying, hybrid ranking, anti-bot extraction, and consensus verification wrapped around SearXNG.

Project description

browser-goat — Production-grade web search for AI agents.

Tests Python License

Six-stage search pipeline around SearXNG: query intent detection, hybrid BM25+MMR ranking, anti-bot content extraction, quality-gated retry, adaptive exploration, and multi-rollout consensus verification — running entirely on your own infrastructure.

flowchart TD
    Q["Query"] --> L1

    subgraph L1["1. Pre-Search"]
        A["Intent detection<br/>Browser profiles<br/>Language detection"]
    end

    L1 --> SX["SearXNG Engine"]

    SX --> L2
    subgraph L2["2. Post-Search"]
        B["URL normalization<br/>RRF + BM25 + MMR"]
    end

    L2 --> L3
    subgraph L3["3. Extraction"]
        C["7-tier cascading<br/>Anti-bot bypass<br/>Goal-oriented summary"]
    end

    L3 --> L4
    subgraph L4["4. Reliability"]
        D["Give-up detection<br/>Quality-gated retry<br/>Force synthesis"]
    end

    L4 --> L5
    subgraph L5["5. Strategy"]
        E["Query classification<br/>Adaptive exploration<br/>Recursive decomposition"]
    end

    L5 --> L6
    subgraph L6["6. Verification"]
        F["Multi-rollout voting<br/>Consensus verification<br/>LLM tie-breaking"]
    end

    L6 --> A["Answer"]

Quick Start

MCP (AI Agents)

{
  "mcpServers": {
    "browser-goat": {
      "command": "npx",
      "args": ["browser-goat"],
      "env": { "SEARXNG_URL": "http://localhost:8080" }
    }
  }
}

Requires Python 3.13+ and a running SearXNG instance.

CLI

uvx browser-goat search "latest AI research"
uvx browser-goat search "Python vs Rust" --strategy explore
uvx browser-goat extract "https://example.com/article"

Library

pip install browser-goat
from browser_goat import BrowserGoat

meta = BrowserGoat(searxng_url="http://localhost:8080")
result = await meta.search("quantum computing")
print(result.answer)

MCP Tools

Tool Description
search Full pipeline: intent analysis → SearXNG → ranking → extraction → reliability. Supports time_range (day/week/month/year), max_sources, and strategy (default/auto/explore/decompose).
extract Fetch and extract a single URL with anti-bot bypass (Cloudflare Turnstile). Returns title, clean text, and extraction tier.

Client Configuration

Claude Desktop

{
  "mcpServers": {
    "browser-goat": {
      "command": "uvx",
      "args": ["browser-goat-mcp", "--searxng-url", "http://localhost:8080"]
    }
  }
}

Cursor / VS Code

{
  "mcpServers": {
    "browser-goat": {
      "command": "npx",
      "args": ["browser-goat"],
      "env": { "SEARXNG_URL": "http://localhost:8080" }
    }
  }
}

Docker

Bundled SearXNG + Redis sidecar deployment:

docker compose up

SearXNG starts at localhost:8080, browser-goat API at localhost:8000.

docker exec browser-goat uv run browser-goat search "your query"

How It Works

Each search passes through six layers before returning an answer. The diagram above shows the full pipeline. Layers 1-4 run on every query; Layers 5-6 activate when --strategy or --reliability are set.


Development

git clone https://github.com/Im-Busy/browser-goat.git
cd browser-goat
uv sync

uv run pytest                  # 304 tests (287 unit + 17 integration)
uv run ruff check src/ tests/  # zero violations
uv run mypy src/               # zero errors

Tests require SearXNG at localhost:8080. Skip integration tests:

uv run pytest -m "not integration"

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

browser_goat-0.1.1.tar.gz (65.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

browser_goat-0.1.1-py3-none-any.whl (69.9 kB view details)

Uploaded Python 3

File details

Details for the file browser_goat-0.1.1.tar.gz.

File metadata

  • Download URL: browser_goat-0.1.1.tar.gz
  • Upload date:
  • Size: 65.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for browser_goat-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c1cf240dbe67f46135954c8a40ab2c19b1095973a42973504b6742b7f3abe80d
MD5 9c625c18a2f9685ca67fd42c12e92761
BLAKE2b-256 30f61d0aac6470330133cd35997566cbc04279f181b52964f9e375ef5b6d424a

See more details on using hashes here.

File details

Details for the file browser_goat-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: browser_goat-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 69.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for browser_goat-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 41c9b1a1aee51344904f8e0978da91c59ae214a1bb9f6708bf745cd827e237bd
MD5 6a72ff2f9f16f44781108529dab495a2
BLAKE2b-256 8f9c9ea6993bf8b81e4f1eeeb8b5e8ed11df1df157cd0684c73d22fbb2347b75

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page