AgenticSeek
Point AgenticSeek's web search at SpecStream by changing one line in .env. AgenticSeek's own SearXNG search code stays as it is, and the searches run on SpecStream's Search API, so public engines blocking a local SearXNG container no longer stop the agent.
What you need
- AgenticSeek, run with Docker (
./start_services.sh full) or in CLI mode (uv run cli.py). - A SpecStream key. Get your key on the Search API screen of your SpecStream workspace. New accounts start with $10 of credit, no card.
- 1
1. Set SEARXNG_BASE_URL in .env
In AgenticSeek's
.env, replace the SearXNG address with SpecStream's, with your key in place ofYOUR_SPECSTREAM_KEY. Give the address without/search: AgenticSeek adds/searchitself.The same line works for both ways of running AgenticSeek. The Docker backend gets it from
.envthroughdocker-compose.yml, and CLI mode reads it at start. Thehttp://searxng:8080andhttp://localhost:8080rules in AgenticSeek's README are for the local SearXNG container only.The address holds your key. AgenticSeek's
.gitignorealready leaves.envout of git; keep it out of anything you share..env - 2
2. Restart the backend
AgenticSeek reads
.envonly when the backend starts. With Docker, run./start_services.sh fullagain. In CLI mode, stopuv run cli.pyand start it again. - 3
3. Ask a question that needs the web
Ask something recent, so the web agent has to search:
In AgenticSeek
What changes and what stays
AgenticSeek's search tool, sources/tools/searxSearch.py, is unchanged. It sends each search to SEARXNG_BASE_URL plus /search, and SpecStream answers in SearXNG's own JSON shape: results[] with title, url and content, the fields AgenticSeek reads. The browser agent still opens the pages it picks in its own browser. The local SearXNG container is no longer on the search path.
Why move off the local SearXNG
A SearXNG instance passes each query on to public engines, and those engines answer automated traffic with CAPTCHAs. In AgenticSeek's issue #410 (opens in a new tab), DuckDuckGo and Qwant return CAPTCHAs and Qwant suspends the instance for 86,400 seconds, a full day. AgenticSeek's own error text names the same case: the search engines blocked it.
With SpecStream the search runs on SpecStream's servers, not from your machine's address. The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions; scores and method are on the benchmarks page.
What each search costs
AgenticSeek first posts each search as a form and reads the reply as a SearXNG results page. SpecStream answers that post in JSON, so AgenticSeek finds no results page and asks the JSON API at the same address, which answers. One agent search is therefore two Search API calls.
The SearXNG address runs the Search API's fast tier. Its price per 1,000 calls is on the pricing page. Calls come out of your balance with no quote, and every call, charged or not, is in your account's request log.
Limits and errors
- When the account has used its calls for the minute, SpecStream answers
429withRetry-After. AgenticSeek waits that long and tries again on its own. - If AgenticSeek stops with a message that SearxNG refused the search, check the key in the address.
- If it says it could not connect, check that
SEARXNG_BASE_URLstarts withhttps://api.specstream.ai/searxng/and that the backend was restarted after the change.
Go back to the local SearXNG
Set SEARXNG_BASE_URL back to http://searxng:8080 for the Docker backend, or http://localhost:8080 in CLI mode, and restart the backend. Questions: [email protected].
More
SpecStream for AgenticSeek covers what it does in AgenticSeek on one page. Every other tool has its guide in Connect your tools. You see the most a request can cost before it starts, and the matches are paid from your balance. Billing has the details. For help, email [email protected].