pi-websearch
Point pi-websearch's tavily backend at SpecStream with one websearch.json file, and the pi agent's web_search tool answers from the SpecStream Search API at $1 per 1,000 searches of up to 10 results.
SpecStream for pi-websearchCoding agentsWhat you need
- The pi coding agent.
- A SpecStream API key. New accounts start with $10 of credit, no card. Get your key on the Search API screen of your SpecStream workspace.
- 1
1. Install pi-websearch
pi-websearch is not on npm, so install it from its repository. Pi clones it and loads its
web_searchtool:Terminal - 2
2. Write websearch.json
pi-websearch reads the first of
.pi/websearch.jsonin the current project,~/websearch.jsonand~/.pi/websearch.json. Put the file in your home folder so the key stays out of project repositories, and put your key in place ofYOUR_SPECSTREAM_API_KEY:baseUrlis the whole search address, with/searchat the end. pi-websearch posts tobaseUrlexactly as written and adds no path, sohttps://api.specstream.ai/tavilyalone would miss the search route."auto": falsemakes SpecStream the only route. Withautoon, the default, pi-websearch first tries the search tool built into models that have one (Claude, GPT 5, Grok and others), and SpecStream answers only when that fails.~/.pi/websearch.json - 3
3. Check it in pi
Start pi and run
/websearch statusto see its activation state. Then ask about something from this week. The search line in the TUI namestavilyas the provider, and the results carry the title, URL and text of each page SpecStream found.
What SpecStream answers
https://api.specstream.ai/tavily/search takes Tavily's request and answers in Tavily's shape: results with title, url and content, which pi-websearch's tavily backend reads. The key goes as a Bearer token, which is how pi-websearch sends apiKey.
Checked on November 12, 2026: the request pi-websearch builds for tavily, with query, max_results and include_domains, sent to this address, returned results from the domains asked for.
The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. Scores and method.
Domain filters
pi-websearch sends a call's allowed_domains as include_domains and blocked_domains as exclude_domains, and SpecStream applies both. allowedDomains and blockedDomains in the file set the same filters for every search.
Keep DuckDuckGo as a backup
With a providers list, pi-websearch tries lower priority values first and moves to the next entry when one fails. This keeps the free DuckDuckGo HTML backend behind SpecStream:
Cost
Each search through this address is $1 per 1,000 searches of up to 10 results, from your balance, with no quote and no approval. Each started block of 10 more results adds $0.0012 to a call, so keep maxResults at 10 unless you need more. pi-websearch asks for at most 20. A search that returns nothing costs nothing. Each reply carries X-Balance-Cents, your balance in cents after the call.
Where the key lives
pi-websearch reads apiKey as written in the file. A project's .pi/websearch.json wins over the files in your home folder, so a project file without the key replaces SpecStream for that project. Give the key a spending limit under Agents & API.
More than search
For records with a source on every value, saved lists and monitors, add SpecStream's own Pi package as well. See SpecStream in Pi. Moving code that calls Tavily directly is covered in moving from Tavily.
Disconnect
Delete ~/.pi/websearch.json, and pi-websearch goes back to its defaults. Revoke the key under API keys in Agents & API. Questions go to [email protected].
More
SpecStream for pi-websearch covers what it does in pi-websearch 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].