Skip to content

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.

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.

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).