Purge live-state claims that ~/.pi is our harness; keep general pi documentation in omp-docs/ and dated historical records. - README.md: single config source; Legacy Notes reworded - AGENTS.md: drop 'like ~/.pi did' framing - APPEND_SYSTEM.md: okf-spec -> omp-docs/references/okf-spec.md - dotfiles/zsh/.zshrc: systemprompt alias -> APPEND_SYSTEM.md - managed skill llm-fleet-model-swap + model_config_sync skill: single-source models.yml; validation script YAML-only - memories (MEMORY.md, memory_summary.md, learned.md): single source - omp-docs: .okf root -> ~/.omp/omp-docs; de-live pi-era claims in pi/index.md, pi-web-access.md, engineering/agents-files.md
4.5 KiB
type, title, description, tags, timestamp
| type | title | description | tags | timestamp | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| reference | Pi Web Access | Web search, URL fetching, GitHub cloning, PDF extraction, and video understanding for Pi. Zero-config with Exa MCP. |
|
2026-08-28 |
Pi Web Access
Package: pi-web-access
Version: 0.22.0
Author: Nico Bailon
Web search, content extraction, and video understanding for Pi. It calls your self-hosted SearXNG first when one is configured, and falls through to other providers.
Pi-era setup:
~/.pi/web-search.jsonlocked search to SearXNG athttp://192.168.0.143:8081(dankclaw), permitted LAN fetches viassrf.allowRanges, and setmaxInlineContentCharsto 50000. The config file is cached in memory per process — a changed file takes effect on the next Pi session.
Install
pi install npm:pi-web-access
Search Providers
Provider chain (in priority order, v0.22):
- SearXNG (if configured) — Self-hosted, private search
- OpenAI — Codex subscription or API key
- Exa — Zero-config via MCP, or API key
- Brave — API key
- Parallel — API key
- TinyFish — API key
- Search1API — API key
- Searchinfinity — API key
- Querit — API key
- Tavily — API key
- Jina — API key
- SERPdive — API key
- Kagi — API key
- Bocha — API key
- Ollama — API key
- Perplexity — API key
- Gemini API — API key
- Gemini Web — Browser-cookie access
A single-provider field (provider or searchProvider) pins the default and takes precedence over searchRouting. searchRouting.providers plus fallbackOn define an explicit ordered fallback over typed failures (transient, quota, network, invalid-response).
Configuration
Location: ~/.pi/web-search.json
{
"searxngBaseUrl": "http://192.168.0.143:8081",
"searchProvider": "searxng",
"maxInlineContentChars": 50000,
"workflow": "none",
"ssrf": {
"allowRanges": ["192.168.0.0/24"]
},
"openaiApiKey": "sk-...",
"braveApiKey": "BSA_...",
"exaApiKey": "exa-...",
"perplexityApiKey": "pplx-...",
"geminiApiKey": "AIza..."
}
Key fields:
searxngBaseUrl— the SearXNG instance to call. EnvSEARXNG_BASE_URLwins over this file. The client callsGET {base}/search?q=...&format=jsonwith a 30 s timeout; the base URL and its redirects stay subject to the SSRF guard.searchProvider—searxnglocks the primary provider.autopicks the first available. A single-provider field wins oversearchRouting.maxInlineContentChars— size of eachfetch_content/get_search_contentcontent slice. Default 30000, cap 200000. Full fetched content stays stored for later retrieval.ssrf.allowRanges— LAN CIDR ranges allowed throughfetch_content. This blocks private IPs by default.workflow—none(raw results, no browser),summary-review(curator window with summary draft), orauto-summary.
Capabilities
Web Search
web_search({ query: "TypeScript best practices 2025" })
URL Fetching
fetch_content({ url: "https://docs.example.com/guide" })
GitHub Cloning
GitHub URLs are cloned locally. The agent gets real file contents, not rendered HTML.
fetch_content({ url: "https://github.com/owner/repo" })
Video Understanding
Point at a YouTube video or local screen recording and ask questions about visual content.
// YouTube
fetch_content({ url: "https://youtube.com/watch?v=...", prompt: "What book is shown?" })
// Local video
fetch_content({ url: "/path/to/recording.mp4" })
PDF Extraction
fetch_content({ url: "https://example.com/paper.pdf" })
Optional Dependencies
# Video frame extraction
sudo pacman -S ffmpeg yt-dlp
Without these, video analysis (transcripts, visual descriptions via Gemini) still works. Frame extraction requires ffmpeg and yt-dlp. Both are installed on dankware (verified 2026-08-28: ffmpeg n9.0.1, yt-dlp 2026.08.19).
GitHub URLs get special handling: fetch_content clones the repo locally instead of scraping HTML (root URL returns tree + README, /blob/ returns file contents). Repos over 350 MB get an API-based view; forceClone: true overrides. Clones cache per session under /tmp/pi-github-repos and wipe on session change. Private repos need the gh CLI. Disable with githubClone.enabled: false.
See Also
- Pi Packages — Package overview
- Pi Configuration — Pi configuration