Skip to content

Web Search

Web Search

The web_search tool searches the web using your configured provider and returns results. Results are cached by query for 15 minutes (configurable).

`web_search` is a lightweight HTTP tool, not browser automation. For JS-heavy sites or logins, use the [Web Browser](/tools/browser). For fetching a specific URL, use [Web Fetch](/tools/web-fetch).

Quick start

Pick a provider and get an API key. See the provider pages below for sign-up links. ```bash remoteclaw configure --section web ``` This stores the key and sets the provider. You can also set an env var (e.g. `BRAVE_API_KEY`) and skip this step. The agent can now call `web_search`:
```javascript
await web_search({ query: "RemoteClaw plugin SDK" });
```

Choosing a provider

Structured results with snippets. Supports `llm-context` mode, country/language filters. Free tier available. Key-free fallback. No API key needed. Unofficial HTML-based integration. Neural + keyword search with content extraction (highlights, text, summaries). Structured results. Best paired with `firecrawl_search` and `firecrawl_scrape` for deep extraction. AI-synthesized answers with citations via Google Search grounding. AI-synthesized answers with citations via xAI web grounding. AI-synthesized answers with citations via Moonshot web search. Structured results with content extraction controls and domain filtering. Structured results with search depth, topic filtering, and `tavily_extract` for URL extraction.

Provider comparison

ProviderResult styleFiltersAPI key
BraveStructured snippetsCountry, language, time, llm-context modeBRAVE_API_KEY
DuckDuckGoStructured snippetsNone (key-free)
ExaStructured + extractedNeural/keyword mode, date, content extractionEXA_API_KEY
FirecrawlStructured snippetsVia firecrawl_search toolFIRECRAWL_API_KEY
GeminiAI-synthesized + citationsGEMINI_API_KEY
GrokAI-synthesized + citationsXAI_API_KEY
KimiAI-synthesized + citationsKIMI_API_KEY / MOONSHOT_API_KEY
PerplexityStructured snippetsCountry, language, time, domains, content limitsPERPLEXITY_API_KEY / OPENROUTER_API_KEY
TavilyStructured snippetsVia tavily_search toolTAVILY_API_KEY

Auto-detection

Provider lists in docs and setup flows are alphabetical. Auto-detection keeps a separate precedence order:

If no provider is set, RemoteClaw checks for API keys in this order and uses the first one found:

  1. BraveBRAVE_API_KEY or plugins.entries.brave.config.webSearch.apiKey
  2. GeminiGEMINI_API_KEY or plugins.entries.google.config.webSearch.apiKey
  3. GrokXAI_API_KEY or plugins.entries.xai.config.webSearch.apiKey
  4. KimiKIMI_API_KEY / MOONSHOT_API_KEY or plugins.entries.moonshot.config.webSearch.apiKey
  5. PerplexityPERPLEXITY_API_KEY / OPENROUTER_API_KEY or plugins.entries.perplexity.config.webSearch.apiKey
  6. FirecrawlFIRECRAWL_API_KEY or plugins.entries.firecrawl.config.webSearch.apiKey
  7. TavilyTAVILY_API_KEY or plugins.entries.tavily.config.webSearch.apiKey

If no keys are found, it falls back to Brave (you will get a missing-key error prompting you to configure one).

All provider key fields support SecretRef objects. In auto-detect mode, RemoteClaw resolves only the selected provider key -- non-selected SecretRefs stay inactive.

Config

{
tools: {
web: {
search: {
enabled: true, // default: true
provider: "brave", // or omit for auto-detection
maxResults: 5,
timeoutSeconds: 30,
cacheTtlMinutes: 15,
},
},
},
}

Provider-specific config (API keys, base URLs, modes) lives under plugins.entries.<plugin>.config.webSearch.*. See the provider pages for examples.

Storing API keys

Run `remoteclaw configure --section web` or set the key directly:
```json5
{
plugins: {
entries: {
brave: {
config: {
webSearch: {
apiKey: "YOUR_KEY", // pragma: allowlist secret
},
},
},
},
},
}
```
Set the provider env var in the Gateway process environment:
```bash
export BRAVE_API_KEY="YOUR_KEY"
```
For a gateway install, put it in `~/.remoteclaw/.env`.
See [Env vars](/help/faq#env-vars-and-env-loading).

Tool parameters

ParameterDescription
querySearch query (required)
countResults to return (1-10, default: 5)
country2-letter ISO country code (e.g. “US”, “DE”)
languageISO 639-1 language code (e.g. “en”, “de”)
freshnessTime filter: day, week, month, or year
date_afterResults after this date (YYYY-MM-DD)
date_beforeResults before this date (YYYY-MM-DD)
ui_langUI language code (Brave only)
domain_filterDomain allowlist/denylist array (Perplexity only)
max_tokensTotal content budget, default 25000 (Perplexity only)
max_tokens_per_pagePer-page token limit, default 2048 (Perplexity only)
Not all parameters work with all providers. Brave `llm-context` mode rejects `ui_lang`, `freshness`, `date_after`, and `date_before`. Firecrawl and Tavily only support `query` and `count` through `web_search` -- use their dedicated tools for advanced options.

Examples

// Basic search
await web_search({ query: "RemoteClaw plugin SDK" });
// German-specific search
await web_search({ query: "TV online schauen", country: "DE", language: "de" });
// Recent results (past week)
await web_search({ query: "AI developments", freshness: "week" });
// Date range
await web_search({
query: "climate research",
date_after: "2024-01-01",
date_before: "2024-06-30",
});
// Domain filtering (Perplexity only)
await web_search({
query: "product reviews",
domain_filter: ["-reddit.com", "-pinterest.com"],
});

Tool profiles

If you use tool profiles or allowlists, add web_search or group:web:

{
tools: {
allow: ["web_search"],
// or: allow: ["group:web"] (includes both web_search and web_fetch)
},
}
  • Web Fetch — fetch a URL and extract readable content
  • Web Browser — full browser automation for JS-heavy sites