dsh-searxng
Run dsh-searxng setup with SpecStream's SearXNG address and your key in it, and DeepSeek Harness's web_search searches through SpecStream's Search API. There is no SearXNG container to run, no Docker, and no engines to keep unblocked.
What you need
- DeepSeek Harness (
dsh) and Node.js 20 or newer. Docker is not needed with an address of your own. - A SpecStream API key. New accounts get $10 of credit on sign up, no card. Get your key on the Search API screen of your workspace.
- 1
1. Put your key in the address
dsh-searxng takes an address with no query string and no user name or password in it, and adds
/searchto it by itself. So the key goes in the path, as the address's last part. Put your key in place ofYOUR_SPECSTREAM_KEY:Address - 2
2. Run setup with --url
Pass the address to
setupwith--url. With an address of your own, setup never starts Docker. It runs a real search through the address and through the DeepSeek Harness provider, and only then attaches dsh-searxng to the profile. Use the profile name you launch dsh with:Terminal - 3
3. Start dsh with SearXNG as the search provider
If the profile has more than one search provider, DeepSeek's own included, select this one with
DSH_WEB_SEARCH_PROVIDER=searxng, or withsearchProvider: searxngon the web row of the profile:Terminal - 4
4. Ask about something recent
Ask a question about something from this week. The agent's
web_searchcalls go tohttps://api.specstream.ai/searxng/<key>/searchand come back with each result's title, link and text.
What dsh-searxng sends, and what comes back
| dsh-searxng sends | SpecStream |
|---|---|
GET {baseURL}/search | https://api.specstream.ai/searxng/<key>/search, with the key read from the address |
q, the agent's query | Searched as written. site:, filetype:, after: and the other search operators hold on every result |
format=json | SearXNG's JSON: results[] with title, url and content. publishedDate is null on most results |
Where the key is kept
Setup writes the address into the web-search-searxng row of $DSH_HOME/profiles/<name>/cordis.patch.yml, so that file holds your key. Keep it private. To end the key's access, revoke it under API keys in Agents & API in your workspace, and make a new one.
If setup fails
E_AUTH_FAILED means SpecStream got no valid key. Check that the whole key is the address's last part and that the key can search: a key made with no scopes can read and cannot search. Keys made on the Search API screen can search.
url must be an absolute HTTP(S) URL without query, fragment, or credentials means the key went in as ?key= or as a user name. Put it in the path as above.
Cost
Each search dsh-searxng sends through the SearXNG address is one Search API call on the fast tier: $1 per 1,000 searches of up to 10 results, a fifth of the default search's $5. Setup's checks run real searches, each charged as one. dsh-searxng serves a repeated query from its own cache for 10 minutes by default, and a cache hit sends no request. Searches come out of your balance, with no quote and no approval. New accounts start with $10 of credit, no card. Questions go to [email protected].
Read pages and get rows too
The same key reads pages with the Extract API at $0.80 per 1,000 pages, and a page with no text is not charged. For a dataset, add SpecStream's MCP server at https://api.specstream.ai/mcp and ask for the records in plain words. Deep Search returns every match as structured rows at 5¢, 15¢ or $1 a row, under a maximum you approve. See MCP.
Remove
Run npx dsh-searxng remove --profile web. It detaches the profile and removes the plugin package from that profile. Then revoke the key in your workspace if you no longer use it.
More
SpecStream for dsh-searxng covers what it does in dsh-searxng 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].