websearch-skill
Add SpecStream as its SearXNG, with no server.
websearch-skill searches with the keyless ddgs library and adds a second engine when WEBSEARCH_SEARXNG_URL holds a SearXNG address. Its own way to get one is websearch searxng up, which clones and runs SearXNG on your machine.
SpecStream answers that address with no server to run. Set WEBSEARCH_SEARXNG_URL=https://api.specstream.ai/searxng/<key> and start each session with websearch init --skip-searxng. Every web-search then also asks SpecStream, at $1 per 1,000 searches.
SpecStream is the most accurate web search API in the world: 97.9 F-score on all 1,000 SimpleQA Verified questions. New accounts get $10 of credit, no card, which covers 10,000 searches.
New accounts get $10 of credit, no card. It covers 10,000 searches.
Each websearch-skill setting and its value for SpecStream, from websearch-skill 0.6.1's source on Nov 13, 2026
| Setting in websearch-skill | Value for SpecStream | What websearch-skill does by default | |
|---|---|---|---|
| Search address | WEBSEARCH_SEARXNG_URL, exported in the shell | https://api.specstream.ai/searxng/<key> (SearXNG migration guide) | Unset: SearXNG is off and search runs on ddgs alone |
| Settings file | A WEBSEARCH_SEARXNG_URL= line in ~/.config/websearch/.env | The same address. It applies in every directory | websearch searxng up writes the local server's address there |
| One run | --searxng-url on websearch web-search and websearch search | The same address | The flag beats the variable and the files for that run |
| Session start | websearch init --skip-searxng | Starts no local server. The address you set is still used and still checked | websearch init installs and starts a local SearXNG, about 15 to 30 seconds and a few hundred MB the first time |
| Health check | The doctor's GET <address>/healthz | Answers OK. Not charged | A SearXNG that does not answer is marked failed |
| Instance settings | The doctor's GET <address>/config | Answers with one enabled engine, specstream. Not charged | Counts the instance's active engines |
| Search call | GET <address>/search?q=&format=json | SearXNG's JSON: results[] with title, url and content. $0.001 a search | The same call to the local server |
| Engines for one search | --engines searxng or --no-ddgs on websearch search | Only SpecStream answers that search | web-search asks ddgs and SearXNG and fuses the two rankings |
Why websearch-skill users set SpecStream as their SearXNG
The setting, two ways
websearch-skill reads WEBSEARCH_SEARXNG_URL as the base address of a SearXNG and adds /search, /healthz and /config to it. It sends no key header, so the SpecStream key goes in the address as its last path part. Export it for one shell:
export WEBSEARCH_SEARXNG_URL=https://api.specstream.ai/searxng/<YOUR_SPECSTREAM_KEY>
websearch init --skip-searxng
websearch web-search "open source vector database 2026"Or put it in the settings file websearch-skill reads from any directory, so each new session has it. An exported variable wins over the file, and the file is outside your repository, so the key stays out of git.
mkdir -p ~/.config/websearch
echo 'WEBSEARCH_SEARXNG_URL=https://api.specstream.ai/searxng/<YOUR_SPECSTREAM_KEY>' >> ~/.config/websearch/.env
websearch init --skip-searxngWith uvx and no install, the commands are uvx websearch-skill init --skip-searxng and uvx websearch-skill web-search "...". Every field of the reply is in the SearXNG migration guide.
What `websearch init --skip-searxng` does
websearch-skill asks agents to run websearch init first in every session. Plain init installs and starts a local SearXNG. With --skip-searxng it starts none, and the doctor still checks the address you set: /healthz, then /config, then one search with format=json.
SpecStream answers /healthz with OK and /config with its one engine, and charges neither. The doctor's test search is one search at $0.001. A full sweep sends one more search for each ddgs provider that returned nothing, and websearch init --quick skips that sweep.
Check the key before you save it
This is the call websearch-skill makes for a search. Run it once with your key and you see the results[] it reads. A wrong key gets a 401.
curl "https://api.specstream.ai/searxng/$SPECSTREAM_KEY/search?q=open+source+vector+databases&format=json"$1 per 1,000 searches, with nothing to subscribe to
Each web-search with the address set is one SpecStream search at $0.001, and so is the doctor's test search at session start. healthz and config cost nothing. A search that returns no results costs nothing, a call stopped for load is not charged, and credit you buy never expires.
The most accurate web search API in the world
On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. Every score and its method is on the benchmarks page.
About one second a search, measured under load
Every drop-in route runs on the fast search. On November 9, 2026 production took 1, 5, 10 and 20 searches a second through it and answered 718 of 720. The median was 0.82 s at 1 search a second and 1.07 s at 20 a second, and the 95th percentile stayed between 1.09 and 1.73 s. There is no limit per key and no daily limit; a busy call comes back with Retry-After and is not charged.
You decide what is kept, on each key
The key sits in an address, so give this tool its own. Create it with spend_cap_cents, the most the key can spend, and an agent that loops stops at the cap you set. With zero_retention, a search made with it keeps no request text and no answer after the reply.
curl -X POST https://api.specstream.ai/v1/account/keys \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "websearch-skill", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500, "zero_retention": true}'Search, pages and rows on one key
The same key reads up to 20 pages or documents a call with the Extract API at $0.80 per 1,000 pages, and runs Deep Search: a request in plain words returns every match on the live web as rows, at 5¢, 15¢ or $1 a row, with the most a run can cost quoted before it starts.
Other search engines for websearch-skill
ddgs, the keyless default
A Python library that runs inside websearch-skill and reads nine providers: Google, Brave, DuckDuckGo, Yandex, Yahoo, Startpage, Mojeek, Wikipedia and Grokipedia. It needs no key and no account. With SpecStream as the second engine, each search also gets the results of a search API that scores 97.9 on SimpleQA Verified, at $0.001.
Self-hosted SearXNG
The metasearch server websearch-skill starts with websearch searxng up: the first run clones SearXNG and builds a virtualenv, about 15 to 30 seconds and a few hundred MB, and the server then runs on your machine. SpecStream answers the same three addresses from https://api.specstream.ai/searxng/<key> with nothing to install or keep running. The whole comparison is on SearXNG alternatives.
Brave Search API
A search API on Brave's own index at $5 per 1,000 requests, with $5 in free credits every month. websearch-skill lists keyed engines such as Brave as planned, so it takes no Brave key today. SpecStream works in it now through the SearXNG address, at $1 per 1,000 searches.
Tavily
A search API billed in credits at $0.008 a credit on pay as you go. websearch-skill lists it as planned too. On SpecStream a search is $0.001 with no credits to count.
Exa
A search API at $7 per 1,000 requests on auto, also on websearch-skill's planned list. SpecStream answers today at $1 per 1,000 searches of up to 10 results.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to set SpecStream as the SearXNG of websearch-skill
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 10,000 searches.
2. Add the address to websearch-skill's settings file, with your key as its last part.
mkdir -p ~/.config/websearch
echo 'WEBSEARCH_SEARXNG_URL=https://api.specstream.ai/searxng/<YOUR_SPECSTREAM_KEY>' >> ~/.config/websearch/.env3. Start the session with websearch init --skip-searxng. The report shows SearXNG as reachable with its result count. This step makes one search, $0.001.
4. Search as before. web-search asks ddgs and SpecStream and fuses the two rankings. To see SpecStream's results alone, name the engine:
websearch web-search "open source vector database 2026"
websearch search "open source vector database 2026" --engines searxng --json5. If your agent's instructions say websearch init, change that line to websearch init --skip-searxng, so no session starts a local server.
When the agent needs a whole dataset in place of a results page, write the request in plain words. SpecStream reads it back as the conditions every row must meet, quotes the most it can cost, and delivers the rows after you approve.
Frequently asked questions
Something we didn't answer? Talk to a human
What do I set WEBSEARCH_SEARXNG_URL to?
https://api.specstream.ai/searxng/<key>, and each search costs $0.001, $1 per 1,000.Do I need to run SearXNG for websearch-skill?
ddgs works with no server, and SpecStream answers the SearXNG address with 0 servers to run. Start with websearch init --skip-searxng so no local one is installed.How much does websearch-skill cost with SpecStream?
websearch init runs. websearch-skill is free software, and new SpecStream accounts get $10 of credit, no card.Does websearch-skill need an API key?
ddgs providers are keyless. A SpecStream key goes in the SearXNG address, in ~/.config/websearch/.env or an exported variable, never in your repository.Where does websearch-skill read its settings from?
WEBSEARCH_ENV_FILE names, .env in the working directory, then ~/.config/websearch/.env. An exported variable beats all of them.Does SpecStream replace ddgs in websearch-skill?
web-search asks both and fuses the rankings with Reciprocal Rank Fusion at k=60. websearch search --no-ddgs asks SpecStream alone.Sources
SpecStream wrote this page. Each websearch-skill setting comes from its README and source on GitHub, and each figure on another provider from that company's own page.
- websearch-skill READMEgithub.com/hec-ovi/websearch-skill/blob/main/README.md, read Nov 13, 2026
- websearch-skill install guidegithub.com/hec-ovi/websearch-skill/blob/main/docs/INSTALL.md, read Nov 13, 2026
- websearch-skill SearXNG adaptergithub.com/hec-ovi/websearch-skill/blob/main/src/websearch/layer1_search/adapters/searxng.py, read Nov 13, 2026
- websearch-skill doctor probesgithub.com/hec-ovi/websearch-skill/blob/main/src/websearch/doctor/probes.py, read Nov 13, 2026
- websearch-skill command linegithub.com/hec-ovi/websearch-skill/blob/main/src/websearch/cli.py, read Nov 13, 2026
- Brave Search APIbrave.com/search/api/, read Nov 13, 2026
- Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 13, 2026
- Exa pricingexa.ai/docs/admin/pricing.md, read Nov 13, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 13, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 13, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 13, 2026




