Verity
Set SEARXNG_BASE_URL in Verity's .env to the SpecStream address, and Verity's searches run on SpecStream's Search API, in the SearXNG JSON its code already reads. There is no SearXNG instance to install, and the model and page reading stay on your machine.
What you need
- Verity, installed with
install.bat, by hand from the README, or with Docker. - 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
Verity reads its settings from
.envin the Verity folder. If you have none yet, copy.env.sampleto.env. Replace the SearXNG line with the SpecStream address, with your key in place ofYOUR_SPECSTREAM_KEY.Give the address without
/search: Verity adds/searchitself. The address holds your key, so keep.envout of git and out of anything you share..env - 2
2. With Docker, set it in .env_docker
The Docker backend reads
.env_docker, not.env. Its sample line isSEARXNG_BASE_URL=http://host.docker.internal:8080, which points at a SearXNG on your own machine. Replace it with the same SpecStream line, without quotes, and rebuild:In the Verity folder - 3
3. Restart Verity
Verity reads the address only when it starts. Stop what you run and start it again:
start.batfor the CLI app,start-webserver.batfor the web server behind the WebUI,start-mcpserver.batfor the MCP server, orpython src/api_server.pyin a manual install. Each of them reads the sameSEARXNG_BASE_URL. - 4
4. Ask a question that needs the web
Ask in the WebUI, or call the API server directly. The stream sends a
searchevent, thenreadwhile Verity reads the pages it found, thenthink, and the answer astokenevents:Terminal
What changes and what stays
Verity's search code, src/backend/search/searxng.py, is unchanged. It posts each query to SEARXNG_BASE_URL plus /search with format=json, language=en and categories=general. SpecStream answers in SearXNG's JSON shape: results[] with title, url, content and a score on each result. Verity ranks results by that score, so it works with no change.
Verity still reads the pages itself with Crawl4AI, and your local model still writes the answer. Only the search leaves your machine: each question and the queries Verity's model writes from it go to SpecStream.
The -site:spotify.com Verity adds to every query holds on every result: SpecStream applies site: and -site: to each result it returns.
Why not run SearXNG yourself
Verity's README starts with installing SearXNG. That means a Docker container on port 8080, a settings.yml with json added under search: formats:, and a secret key. SearXNG's own search API docs (opens in a new tab) say that requesting a format the instance has not turned on returns 403 Forbidden, and many public instances have JSON turned off.
A SearXNG instance also passes every query on to public engines from your own address, and those engines can answer it with CAPTCHAs, as AgenticSeek users report in issue #410 (opens in a new tab). With SpecStream the search runs on SpecStream's servers, so there is nothing to host, patch or unblock.
What each question costs
Verity's model rewrites each question into two more search queries, and Verity searches all three. Each search is one Search API call of up to 10 results.
The SearXNG address runs the Search API's fast tier, at $1 per 1,000 searches of up to 10 results. A Verity question with its three searches costs about $0.003. Searches come out of your balance with no quote and no approval, and every call, charged or not, is in your account's request log. The pricing page has the details.
Keep searches in the EU
Verity is built for privacy. To keep its searches inside the EU, turn on eu_egress_only for the key you put in the address, when you create the key or later through the API (reference). Each search then reaches the engines only from SpecStream's server in Madrid.
Limits and errors
- Verity waits 10 seconds for a search. If it gives up, it says
SearXNG request timed out,please ensure it is running. Ask again. - If Verity says
Unexpected error in searchwith a client error, check the key in the address. - If Verity says
Could not connect to SearXNG,please ensure it is running, it still useshttp://localhost:8080. Verity'ssrc/config.pyreadsSEARXNG_BASE_URLwhen it is first imported, before Verity's ownload_dotenv(). When the virtual environment sits inside the Verity folder, asinstall.batmakes it, the line in.envis loaded in time. Otherwise set the variable in the shell that starts Verity:set SEARXNG_BASE_URL=https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEYon Windows, orexportwith the same value on macOS and Linux.
Go back to a local SearXNG
Set SEARXNG_BASE_URL back to http://localhost:8080 in .env, or http://host.docker.internal:8080 in .env_docker, and restart Verity. Questions: [email protected].
More
SpecStream for Verity covers what it does in Verity 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].