Free web research for pi that works out of the box: search, page reading, and papers. No API key required.
pi-search demonstrates solid tool design with complete schemas, clear descriptions, and thoughtful parameter constraints. All 4 tools have explicit TypeBox schemas with type definitions and descriptions. Tool names follow verb_noun convention (web_search, web_search_advanced, search_papers, web_fetch). Descriptions are substantive (100-250 chars), explaining WHAT each tool does and WHEN to use it. Parameters include enums (category, type), numeric bounds (numResults 1-25, maxCharacters minimums), and helpful guidance on semantic vs keyword queries. However, output schemas are not documented, LLMs cannot see what fields to expect from results. Error handling is absent from visible code; no guidance on retryability, user-fixable errors, or recovery paths. Tool composition is clean (each does one thing), but no batch variants despite agents likely calling web_fetch in loops.
Search for research papers and academic publications using semantic queries. Supports filtering by publication date range and search quality/latency tradeoff. Can return LLM-generated summaries for rapid triage.
Fetch and extract content from multiple URLs in a single batch call. Supports objective-focused extraction to return relevant excerpts, full content retrieval, and character limits per page.
Search the web using semantic queries. For best results, describe the ideal page semantically ('blog post comparing React and Vue performance') rather than raw keywords. Supports optional multi-angle search with keyword queries.
Run an advanced web search with filtering by category, domains, publication dates, and search quality/latency tradeoff. Supports curated indices for news, companies, people, publications (research papers/preprints), personal sites (blogs), and financial reports (SEC filings, earnings).
Output schemas not documented. LLMs cannot see what fields (title, url, snippet, date, etc.) are returned by search or fetch tools, forcing them to guess at response structure and plan downstream operations blindly.
No error handling guidance. Code does not show how failures (network timeout, invalid query, rate limit, malformed URL) are communicated to the LLM. Without error classification (retryable vs user-fixable vs fatal), agents cannot recover intelligently.
web_fetch accepts up to 20 URLs but no batch success/failure reporting. If 1 URL fails, unclear whether the entire call fails or partial results are returned. Multi-item operations should return per-item status.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No pagination or result limits documented in output. search_papers and web_search return up to 25 results but no indication of total count, next_cursor, or whether results are truncated. Large result sets risk context window exhaustion.
web_fetch 'objective' parameter description says '(Parallel backend; ignored by Exa)', backend-specific behavior leaks into the tool interface. LLMs cannot reason about which backends are active or predict parameter effects.