@adeildo/pi-web
Web search, page fetching and answers from a page, from Nico Bailon's pi-web-access, pinned to a tested version and set up with the providers that measured best.
Package details
Install @adeildo/pi-web from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@adeildo/pi-web- Package
@adeildo/pi-web- Version
6.1.0- Published
- Nov 13, 2026
- Downloads
- 720/mo · 286/wk
- Author
- adeildo
- License
- MIT
- Types
- extension
- Size
- 15.8 KB
- Dependencies
- 2 dependencies · 3 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-web-access, by Nico Bailon, gives pi web search, page fetching and answers about a page. Out of the box, it searches with Exa, reads every page on your machine, and answers questions about a page with the model of your session, often the most expensive one you have. This package brings pi-web-access at one version that passed the harness's tests, and sets it up with the providers that did best when we measured them.
@adeildo/pi-harness brings it too. The tools, commands and options are all pi-web-access's own, so its README is the manual for them.
What changes
On your first session, the harness writes three keys into pi-web-access's web-search.json, and a line in the chat says which ones:
{
"searchRouting": {
"providers": ["exa", "keenable", "parallel-mcp"],
"fallbackOn": ["transient", "quota", "network", "invalid-response", "empty"]
},
"fetchRouting": {
"providers": ["http", "jina", "parallel-mcp"],
"allowRemoteHostedProviders": true
},
"fetch": { "answerProvider": "deepseek", "answerModel": "deepseek-flash" }
}
Searches still go to Exa first, which was the only provider with no off-topic link in our searches. When Exa fails or finds nothing, Keenable answers, and then Parallel. Pages are still read on your machine first. A page that hides its text behind a script, like the ANPD's incident page on gov.br, goes to Jina next, which reads it without a key. Questions about a page go to DeepSeek Flash, which answered as well as Opus in half the time. If you have no DeepSeek login, they go to GPT-6 Luna on your ChatGPT plan. With neither, the harness writes no answer model and checks again next session.
A key you already have stays as you set it, and a key you delete is not written back. The file is ~/.pi/agent/web-search.json, unless PI_CODING_AGENT_DIR or XDG_CONFIG_HOME point pi-web-access somewhere else.
pi-web-access has no fallback between answer models, so when DeepSeek is down, the answer fails instead of going to GPT-6 Luna.
Whose accounts it uses
| Part | Account | Cost |
|---|---|---|
| Search on Exa, Keenable and Parallel, fetching on Jina | None. Public endpoints, limited per IP | Free. Your queries and the pages you fetch reach them |
| Answers about a page | Your DeepSeek key, else your ChatGPT plan through Codex | DeepSeek's price per token, or your Codex usage limit |
Search summaries, with workflow: "auto-summary" |
Claude Haiku 4.5 on your Anthropic login | Your Claude plan |
provider: "deepseek", only when you ask for it by name |
Your DeepSeek key | US$ 0.75 per 1,000 searches |
With pi-web-access installed on its own
If your pi settings already list pi-web-access, as npm:pi-web-access or from git, pi would get every tool twice. So this package does not load its copy, and says so once. The config above is still written, and your copy reads it too. To use the version pinned here, remove the other package from your settings.
The pinned version
Every day, a workflow tries the newest pi-web-access. When bun run verify passes against it, a pull request moves the pin; when it fails, an issue says why. The test that matters most there hands the harness's config to the new version's own checks, so a release that renames a key or reads the file from another place stops at the issue.
How it works has the measurements behind each choice.
pi-web-access is Nico Bailon's work, under the MIT license. A problem with a tool belongs in its issues, and a problem with the config or the pin in ours.