Web search
The web_search tool is available with zero configuration - it defaults to
scraping DuckDuckGo’s HTML endpoint, which needs no API key. The model gets back a
ranked list of title / URL / snippet, and follows up with
web_fetch on any result to read the full page.
To use a different backend, set webSearch in settings.json:
{ "webSearch": { "provider": "duckduckgo", "apiKey": "", "baseURL": "" }}provider |
Key? | Notes |
|---|---|---|
duckduckgo (default) |
no | HTML scrape, zero setup. DuckDuckGo rate-limits automated requests, so heavy use can start returning errors - switch backends if that happens. |
searxng |
no | Point baseURL at your SearXNG instance. The instance must have the JSON output format enabled (search: { formats: [html, json] } in its settings.yml) - many public instances don’t. Best fit if you already run local infra. |
tavily |
yes | apiKey from tavily.com (free tier: 1,000 searches/month, no card). Returns an LLM-oriented summary alongside results. |
brave |
yes | apiKey from the Brave Search API (free tier: 2,000 queries/month). |
Environment variable equivalents: POLYGLOT_WEBSEARCH_PROVIDER,
POLYGLOT_WEBSEARCH_API_KEY, POLYGLOT_WEBSEARCH_BASE_URL.
/status shows the active backend.
Privacy
Section titled “Privacy”web_search sends your query to whichever backend you configure - another point
where data leaves the machine. In manual mode (the default) each search prompts for
approval. To block it entirely, add "web_search" to permissions.deny. See
Data handling.
Permission behavior
Section titled “Permission behavior”web_search is a network tool, like web_fetch: it prompts in manual mode and
runs freely in auto and plan mode (a GET has no local side effects, and research
is what plan mode is for).