browser-goat — Production-grade web search for AI agents.
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
Metadata
Release files for browser-goat 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| browser_goat-0.1.1.tar.gz | 65.0 kB | Without provenance | Details for browser_goat-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| browser_goat-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for browser_goat-0.1.1-py3-none-any.whl |
Total release size: 134.9 kB
Release files / browser_goat-0.1.1.tar.gz
| Download URL | browser_goat-0.1.1.tar.gz |
|---|---|
| Size | 65.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c1cf240dbe67f46135954c8a40ab2c19b1095973a42973504b6742b7f3abe80d
|
|
BLAKE2b-256 checksum How to use checksums |
30f61d0aac6470330133cd35997566cbc04279f181b52964f9e375ef5b6d424a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / browser_goat-0.1.1-py3-none-any.whl
| Download URL | browser_goat-0.1.1-py3-none-any.whl |
|---|---|
| Size | 69.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
41c9b1a1aee51344904f8e0978da91c59ae214a1bb9f6708bf745cd827e237bd
|
|
BLAKE2b-256 checksum How to use checksums |
8f9c9ea6993bf8b81e4f1eeeb8b5e8ed11df1df157cd0684c73d22fbb2347b75
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Security for browser-goat 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.