Web Search
When to Use
- Use when a Pi Agent task needs current web information, page fetches, PDFs, YouTube, or GitHub content.
- Use when Pi should use its own web-access package instead of another agent browser tool.
The pi-web-access package is installed globally. Zero-config via Exa MCP (no API key), with fallback Exa → Perplexity → Gemini.
CRITICAL: always pass workflow: "none"
Every web_search call MUST include workflow: "none". This skips the interactive browser curator popup (the user does not want it opening). No exceptions — single query or batched queries, always set workflow: "none".
web_search({ queries: ["query 1", "query 2"], workflow: "none" })
Tools
web_search — search the web; returns synthesized answers with citations. Can be called many times per turn. Always pass workflow: "none".
code_search — zero-key Exa code-context. Use for library/API/code lookups instead of generic web_search.
fetch_content — fetch URL(s) → markdown; handles PDFs, YouTube, GitHub.
get_search_content — big pages (>30k chars) are truncated in responses but stored in full; call this to pull the rest on demand so they don't blow context.
fetch_content specifics
- GitHub URLs are cloned, not scraped — you get real files + a local path to explore with
read/bash (private repos need the gh CLI). Use this for dev work.
- PDFs → auto-extracted to markdown in
~/Downloads/, readable in sections (text-only, no OCR).
- YouTube/video → full raw transcripts + frame extraction. Needs a
GEMINI_API_KEY (not zero-config); frame extraction also needs ffmpeg/yt-dlp.
Routing — match the user's phrasing
Always use the web_search tool. These counts are HARD MINIMUMS — count your queries before answering and do not stop short:
- "web search" → at least 2 queries, varied keywords/angles, then synthesize.
- "extensive web research" → at least 4 queries, totally different keywords and angles.
- "deep research" → at least 8 queries, totally different keywords and angles, run across 2–3 successive batches (refine angles after each batch), to learn as much as possible about the topic.
A single batched web_search call counts each query in queries[] toward the total. If your first batch is under the minimum, fire another batch before synthesizing.
Fallback / alternative: DeepAPI web search
If the Exa → Perplexity → Gemini chain fails, or you need ranked results with URLs:
test -n "$DEEPAPI_API_KEY" || { echo "DEEPAPI_API_KEY is not set"; exit 1; }
curl -s --max-time 60 "https://deepapi.co/v1/search/web" \
-H "Authorization: Bearer $DEEPAPI_API_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"query": "your search terms", "maxResults": 5, "maxCostUsd": "0.05"}'
Results are in .output (title, url, snippet per item). Query under 500 chars. Full details: deepapi skill.
Limitations
- Adapted from
davidondrej/skills; verify local paths, tools, credentials, and agent features before acting.
- For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
1---2name: pi-web-search3description: Give Pi Agents a safe web-search and fetch workflow using the installed pi-web-access package.4license: MIT5---67# Web Search89## When to Use1011- Use when a Pi Agent task needs current web information, page fetches, PDFs, YouTube, or GitHub content.12- Use when Pi should use its own web-access package instead of another agent browser tool.1314The `pi-web-access` package is installed globally. Zero-config via Exa MCP (no API key), with fallback Exa → Perplexity → Gemini.1516## CRITICAL: always pass `workflow: "none"`1718Every `web_search` call MUST include `workflow: "none"`. This skips the interactive browser curator popup (the user does not want it opening). No exceptions — single query or batched `queries`, always set `workflow: "none"`.1920```21web_search({ queries: ["query 1", "query 2"], workflow: "none" })22```2324## Tools2526- `web_search` — search the web; returns synthesized answers with citations. Can be called many times per turn. **Always pass `workflow: "none"`.**27- `code_search` — zero-key Exa code-context. Use for library/API/code lookups instead of generic `web_search`.28- `fetch_content` — fetch URL(s) → markdown; handles PDFs, YouTube, GitHub.29- `get_search_content` — big pages (>30k chars) are truncated in responses but stored in full; call this to pull the rest on demand so they don't blow context.3031## fetch_content specifics3233- **GitHub URLs are cloned, not scraped** — you get real files + a local path to explore with `read`/`bash` (private repos need the `gh` CLI). Use this for dev work.34- **PDFs** → auto-extracted to markdown in `~/Downloads/`, readable in sections (text-only, no OCR).35- **YouTube/video** → full raw transcripts + frame extraction. Needs a `GEMINI_API_KEY` (not zero-config); frame extraction also needs `ffmpeg`/`yt-dlp`.3637## Routing — match the user's phrasing3839Always use the `web_search` tool. These counts are HARD MINIMUMS — count your queries before answering and do not stop short:4041- **"web search"** → **at least 2** queries, varied keywords/angles, then synthesize.42- **"extensive web research"** → **at least 4** queries, totally different keywords and angles.43- **"deep research"** → **at least 8** queries, totally different keywords and angles, run across 2–3 successive batches (refine angles after each batch), to learn as much as possible about the topic.4445A single batched `web_search` call counts each query in `queries[]` toward the total. If your first batch is under the minimum, fire another batch before synthesizing.4647## Fallback / alternative: DeepAPI web search4849If the Exa → Perplexity → Gemini chain fails, or you need ranked results with URLs:5051```bash52test -n "$DEEPAPI_API_KEY" || { echo "DEEPAPI_API_KEY is not set"; exit 1; }53curl -s --max-time 60 "https://deepapi.co/v1/search/web" \54 -H "Authorization: Bearer $DEEPAPI_API_KEY" -H "Content-Type: application/json" \55 -H "Idempotency-Key: $(uuidgen)" \56 -d '{"query": "your search terms", "maxResults": 5, "maxCostUsd": "0.05"}'57```5859Results are in `.output` (title, url, snippet per item). Query under 500 chars. Full details: `deepapi` skill.6061## Limitations6263- Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.64- For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.65