Own your LLM's web search: a local search -> fetch -> rank pipeline that replaces hosted web_search tools at a fraction of the cost
Three tools with well-structured schemas and detailed descriptions. web_search and fetch_url have comprehensive parameter documentation with enums and freshness hints. save_finding is write-capable with clear intent. All tools have input schemas with type definitions and descriptions. However, output schemas are not documented in the visible code, and error handling guidance is minimal. Descriptions are strong (150-250 chars, well above the 10-char minimum), but lack explicit recovery hints for failure cases.
Fetch one web page and return its FULL extracted text (prose, lists, tables) under a character budget. Use this after web_search when an excerpt cites a page you need in full - for complete lists, tables, or detailed context that excerpts cut off. Public http(s) URLs only. Long pages are truncated with an explicit marker.
Save a fact you learned from a source OTHER than web_search (for example another search tool) into the local search cache, so repeat questions can be answered without re-searching. The entry is marked as model-contributed and future readers will see it is unverified. Use sparingly and only for content you actually observed, never for guesses.
Search the web and return the most relevant text excerpts, each labeled with its source title and URL. Use this for facts past your training cutoff, current events, prices, product specs, or anything you are unsure about. Results are ranked excerpts from multiple pages, not full pages - issue focused queries, and call the tool again with a different query if the first results are not enough. Results may be served from a cache; the first line is a [cache: ...] provenance header showing what matched and how old it is.
Output schemas not documented. Tool descriptions explain what is returned (excerpts, full text, cache headers) but JSON Schema for response objects is not visible in source code. LLMs cannot plan downstream tool calls without knowing response structure.
Error handling lacks recovery guidance. Tool descriptions do not explain what to do if a search fails, a URL is unreachable, or a finding cannot be saved. Descriptions should include: 'If results are empty, try a broader query' or 'If fetch fails, the URL may be behind a paywall.'
save_finding parameter 'source_url' is optional but not marked as such in schema. The 'required' array should clarify whether source_url is mandatory or optional. Current schema shows only query and content as required, but this is not explicit in the description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
fetch_url accepts only public http(s) URLs but does not document rate limits, timeout behavior, or maximum page size. Description mentions 'character budget' and 'truncated with explicit marker' but does not specify the budget value or truncation behavior.
web_search 'freshness' parameter is optional but its interaction with 'force_fresh' is not documented. If both are set, which takes precedence? This ambiguity can cause LLMs to pass conflicting parameters.