Files
command-center/omp-docs/pi/packages/pi-web-access.md
T
Frank c3f30bdbd0 kb: retire pi-installation association (OMP is the primary harness)
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
2026-09-17 19:24:02 -07:00

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.
pi
package
web-search
fetch
youtube
unverified
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.json locked search to SearXNG at http://192.168.0.143:8081 (dankclaw), permitted LAN fetches via ssrf.allowRanges, and set maxInlineContentChars to 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):

  1. SearXNG (if configured) — Self-hosted, private search
  2. OpenAI — Codex subscription or API key
  3. Exa — Zero-config via MCP, or API key
  4. Brave — API key
  5. Parallel — API key
  6. TinyFish — API key
  7. Search1API — API key
  8. Searchinfinity — API key
  9. Querit — API key
  10. Tavily — API key
  11. Jina — API key
  12. SERPdive — API key
  13. Kagi — API key
  14. Bocha — API key
  15. Ollama — API key
  16. Perplexity — API key
  17. Gemini API — API key
  18. 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. Env SEARXNG_BASE_URL wins over this file. The client calls GET {base}/search?q=...&format=json with a 30 s timeout; the base URL and its redirects stay subject to the SSRF guard.
  • searchProvider — searxng locks the primary provider. auto picks the first available. A single-provider field wins over searchRouting.
  • maxInlineContentChars — size of each fetch_content / get_search_content content slice. Default 30000, cap 200000. Full fetched content stays stored for later retrieval.
  • ssrf.allowRanges — LAN CIDR ranges allowed through fetch_content. This blocks private IPs by default.
  • workflow — none (raw results, no browser), summary-review (curator window with summary draft), or auto-summary.

Capabilities

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