メインコンテンツへスキップ
web_search は、設定済みのプロバイダーで Web を検索し、正規化された結果を返します。結果はクエリごとに 15 分間キャッシュされます(設定可能)。OpenClaw には、X(旧 Twitter)の投稿向けの x_search と、軽量な URL 取得向けの web_fetch もバンドルされています。web_fetch は常にローカルで実行されます。web_search は、Grok がプロバイダーの場合は xAI Responses 経由でルーティングされ、x_search は常に xAI Responses を使用します。
web_search は軽量な HTTP ツールであり、ブラウザー自動化ではありません。 JS が多いサイトやログインには、Web Browser を使用してください。 特定の URL を取得するには、Web Fetch を使用してください。

クイックスタート

1

プロバイダーを選択

プロバイダーを選び、必要なセットアップを完了します。一部のプロバイダーは キー不要で、その他は API キーが必要です。詳細は以下のプロバイダーページを 参照してください。
2

設定

openclaw configure --section web
これにより、プロバイダーと必要な認証情報が保存されます。API ベースの プロバイダーでは、代わりにプロバイダーの環境変数(例: BRAVE_API_KEY)を設定し、この手順を省略できます。
3

使用

await web_search({ query: "OpenClaw plugin SDK" });
X の投稿の場合:
await x_search({ query: "dinner recipes" });

プロバイダーの選択

Brave Search

スニペット付きの構造化結果。llm-context モード、国/言語フィルターをサポートします。無料枠があります。

Codex Hosted Search

Codex アプリサーバーアカウントを通じた、根拠付きの AI 合成回答。

DuckDuckGo

キー不要のプロバイダー。API キーは不要です。非公式の HTML ベース統合です。

Exa

コンテンツ抽出(ハイライト、テキスト、要約)を備えたニューラル検索 + キーワード検索。

Firecrawl

構造化結果。深い抽出には firecrawl_searchfirecrawl_scrape の併用が最適です。

Gemini

Google Search グラウンディングによる、引用付きの AI 合成回答。

Grok

xAI Web グラウンディングによる、引用付きの AI 合成回答。

Kimi

Moonshot Web 検索による、引用付きの AI 合成回答。根拠なしのチャットフォールバックは明示的に失敗します。

MiniMax Search

MiniMax Token Plan 検索 API による構造化結果。

Ollama Web Search

サインイン済みのローカル Ollama ホスト、またはホスト型 Ollama API 経由の検索。

Parallel

有料の Parallel Search API(PARALLEL_API_KEY)。より高いレート制限と目的調整。

Parallel Search (無料)

キー不要のオプトイン。Parallel の無料 Search MCP。LLM 向けに最適化された高密度な抜粋を提供し、API キーは不要です。

Perplexity

コンテンツ抽出制御とドメインフィルタリングを備えた構造化結果。

SearXNG

セルフホスト型メタ検索。API キーは不要です。Google、Bing、DuckDuckGo などを集約します。

Tavily

検索深度、トピックフィルタリング、URL 抽出用の tavily_extract を備えた構造化結果。

プロバイダー比較

プロバイダー結果スタイルフィルターAPI キー
Brave構造化スニペット国、言語、時間、llm-context モードBRAVE_API_KEY
Codex Hosted SearchAI 合成 + ソース URLドメイン、コンテキストサイズ、ユーザー所在地なし。Codex/OpenAI サインインを使用
DuckDuckGo構造化スニペットなし(キー不要)
Exa構造化 + 抽出済みニューラル/キーワードモード、日付、コンテンツ抽出EXA_API_KEY
Firecrawl構造化スニペットfirecrawl_search ツール経由FIRECRAWL_API_KEY
GeminiAI 合成 + 引用GEMINI_API_KEY
GrokAI 合成 + 引用xAI OAuth、XAI_API_KEY、または plugins.entries.xai.config.webSearch.apiKey
KimiAI 合成 + 引用。根拠なしのチャットフォールバックで失敗KIMI_API_KEY / MOONSHOT_API_KEY
MiniMax Search構造化スニペットリージョン(global / cnMINIMAX_CODE_PLAN_KEY / MINIMAX_CODING_API_KEY / MINIMAX_OAUTH_TOKEN
Ollama Web Search構造化スニペットサインイン済みのローカルホストでは不要。直接 https://ollama.com 検索する場合は OLLAMA_API_KEY
ParallelLLM コンテキスト向けにランク付けされた高密度な抜粋PARALLEL_API_KEY(有料)
Parallel Search (無料)LLM コンテキスト向けにランク付けされた高密度な抜粋なし(無料 Search MCP)
Perplexity構造化スニペット国、言語、時間、ドメイン、コンテンツ制限PERPLEXITY_API_KEY / OPENROUTER_API_KEY
SearXNG構造化スニペットカテゴリ、言語なし(セルフホスト)
Tavily構造化スニペットtavily_search ツール経由TAVILY_API_KEY

自動検出

ドキュメントとセットアップフロー内のプロバイダー一覧はアルファベット順です。自動検出では、 別個の固定された優先順位を使用し、認証情報が必要なプロバイダー (requiresCredential !== false)について、設定済みのものが見つかった場合にのみ選択します。 provider が設定されていない場合、OpenClaw は以下の順序でプロバイダーを確認し、 最初に準備できているものを使用します。 API ベースのプロバイダーが先です:
  1. BraveBRAVE_API_KEY または plugins.entries.brave.config.webSearch.apiKey(順序 10)
  2. MiniMax SearchMINIMAX_CODE_PLAN_KEY / MINIMAX_CODING_API_KEY / MINIMAX_OAUTH_TOKEN / MINIMAX_API_KEY または plugins.entries.minimax.config.webSearch.apiKey(順序 15)
  3. Geminiplugins.entries.google.config.webSearch.apiKeyGEMINI_API_KEY、または models.providers.google.apiKey(順序 20)
  4. Grok — xAI OAuth、XAI_API_KEY、または plugins.entries.xai.config.webSearch.apiKey(順序 30)
  5. KimiKIMI_API_KEY / MOONSHOT_API_KEY または plugins.entries.moonshot.config.webSearch.apiKey(順序 40)
  6. PerplexityPERPLEXITY_API_KEY / OPENROUTER_API_KEY または plugins.entries.perplexity.config.webSearch.apiKey(順序 50)
  7. FirecrawlFIRECRAWL_API_KEY または plugins.entries.firecrawl.config.webSearch.apiKey(順序 60)
  8. ExaEXA_API_KEY または plugins.entries.exa.config.webSearch.apiKey。任意の plugins.entries.exa.config.webSearch.baseUrl は Exa エンドポイントを上書きします(順序 65)
  9. TavilyTAVILY_API_KEY または plugins.entries.tavily.config.webSearch.apiKey(順序 70)
  10. ParallelPARALLEL_API_KEY または plugins.entries.parallel.config.webSearch.apiKey 経由の有料 Parallel Search API。任意の plugins.entries.parallel.config.webSearch.baseUrl はエンドポイントを上書きします(順序 75)
その後に、エンドポイント設定済みのプロバイダーが続きます:
  1. SearXNGSEARXNG_BASE_URL または plugins.entries.searxng.config.webSearch.baseUrl(順序 200)
Parallel Search (無料)DuckDuckGoOllama Web SearchCodex Hosted Search などのキー不要プロバイダーは、 内部の順序値を持っていても自動検出では選ばれません。これらは tools.web.search.provider で明示的に選択した場合、または openclaw configure --section web を通じて選択した場合にのみ使用されます。OpenClaw は、 API ベースのプロバイダーが設定されていないという理由だけで、管理対象の web_search クエリをキー不要プロバイダーへ送信することはありません。 OpenAI Responses モデルは例外です。tools.web.search.provider が未設定の間は、上記の管理対象プロバイダーではなく OpenAI のネイティブ Web 検索を使用します(下記参照)。 代わりに管理対象パス経由でルーティングするには、tools.web.search.providerparallel-free(または別のプロバイダー)に設定します。
すべてのプロバイダーキー項目は SecretRef オブジェクトをサポートします。 plugins.entries.<plugin>.config.webSearch.apiKey 配下の Plugin スコープの SecretRef は、 インストール済みの API ベース Web 検索プロバイダーに対して解決されます。対象には Brave、Exa、Firecrawl、 Gemini、Grok、Kimi、MiniMax、Parallel、Perplexity、Tavily が含まれます。 これは、プロバイダーが tools.web.search.provider 経由で明示的に選択された場合でも、 自動検出で選択された場合でも同じです。自動検出モードでは、OpenClaw は 選択されたプロバイダーキーだけを解決します。選択されていない SecretRef は非アクティブのままなので、 複数のプロバイダーを設定しておいても、使用していないものの解決コストは発生しません。

ネイティブ OpenAI Web 検索

直接 OpenAI Responses モデル(api: "openai-responses"、provider openai、base URL なし、または公式 OpenAI API base URL)は、OpenClaw web search が有効で、managed provider が固定されていない場合、OpenAI のホスト型 web_search ツールを自動的に使用します。これはバンドルされた OpenAI Plugin 内の provider 所有の動作であり、OpenAI 互換プロキシ base URL や Azure ルートには適用されません。OpenAI モデルで managed web_search ツールを使い続けるには、tools.web.search.providerbrave など別の provider に設定します。または、managed search とネイティブ OpenAI search の両方を無効にするには、tools.web.search.enabled: false を設定します。 Codex app-server ランタイムは、web search が有効で managed provider が選択されていない場合、Codex のホスト型 web_search ツールを自動的に使用します。ネイティブのホスト型 search と OpenClaw の managed web_search 動的ツールは相互排他的であるため、managed search でネイティブのドメイン制限をバイパスすることはできません。OpenClaw は、ホスト型 search が利用できない、明示的に無効化されている、または選択済みの managed provider に置き換えられている場合に managed ツールを使用します。OpenClaw は、Codex のスタンドアロン web.run 拡張を無効のままにします(features.standalone_web_search: false)。これは本番 app-server トラフィックが、そのユーザー定義 web 名前空間を拒否するためです。
  • ネイティブ search は tools.web.search.openaiCodex で設定します
  • 任意の親モデル向けに、Codex Hosted Search を managed web_search provider としてプロビジョニングするには、tools.web.search.provider: "codex" を設定します。各呼び出しは有界の一時的な Codex app-server turn を実行し、Codex がホスト型 webSearch item を出力しない場合は失敗します。
  • mode: "cached" はデフォルトの設定ですが、Codex は無制限の app-server turn ではこれを live external access として解決します。live access を明示的に要求するには "live" を設定します
  • OpenClaw の managed web_search を使用するには、tools.web.search.providerbrave などの managed provider に設定します
  • Codex ホスト型 search をオプトアウトするには、tools.web.search.openaiCodex.enabled: false を設定します。他の managed provider は引き続き利用できます
  • Codex ネイティブツールサーフェスを制限しても、managed web_search は利用可能なままです
  • allowedDomains が設定されている場合、ホスト型 search が利用できないと自動 managed フォールバックはフェイルクローズし、ネイティブ allowlist をバイパスできないようにします
  • ツール無効の LLM のみの実行では、ネイティブ search と managed search の両方が無効になります
  • tools.web.search.enabled: false は managed search とネイティブ search の両方を無効にします
永続的な有効 Codex search-policy の変更は、新しいバインド済みスレッドを開始します。これにより、すでにロードされた app-server スレッドが古い hosted-search access を保持できなくなります。一時的な per-turn 制限では、一時的な制限付きスレッドを使用し、後で resume するために既存の binding を保持します。 直接の OpenAI ChatGPT Responses トラフィックでも、OpenAI のホスト型 web_search ツールを使用できます。この別経路は引き続き tools.web.search.openaiCodex.enabled: true によるオプトインであり、api: "openai-chatgpt-responses" を使用する対象の openai/* モデルにのみ適用されます。
{
  tools: {
    web: {
      search: {
        enabled: true,
        // Optional: use Codex Hosted Search from non-Codex parent models too.
        provider: "codex",
        openaiCodex: {
          enabled: true,
          mode: "cached",
          allowedDomains: ["example.com"],
          contextSize: "high",
          userLocation: {
            country: "US",
            city: "New York",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}
ネイティブ Codex search をサポートしないランタイムや provider では、Codex は OpenClaw の動的ツール名前空間を通じて managed web_search フォールバックを使用できます。Codex ホスト型 search ではなく、OpenClaw の provider 固有のネットワーク制御が必要な場合は、明示的な managed provider を使用してください。 provider: "codex" を選択すると、バンドルされた codex Plugin が有効になり、上記と同じ tools.web.search.openaiCodex 制限が使用されます。先に openclaw models auth login --provider openai で Codex app-server を認証してください。親エージェントは任意のモデルまたはランタイムを使用できます。有界 search worker だけが Codex 経由で実行されます。

ネットワーク安全性

Managed HTTP web_search provider 呼び出しは、現在の provider 自身のホスト名にスコープされた OpenClaw の保護付き fetch 経路を使用します。そのホスト名に限り、OpenClaw は 198.18.0.0/15fc00::/7 にある Surge、Clash、sing-box の fake-IP DNS 応答を許可します。その他の private、loopback、link-local、metadata 宛先は引き続きブロックされます。Codex Hosted Search は例外です。その有界 worker は、ネットワークアクセスを Codex app-server のホスト型 web_search ツールに委譲します。 この自動許可は、任意の web_fetch URL には適用されません。web_fetch では、信頼済みプロキシがそれらの合成範囲を所有している場合にのみ、tools.web.fetch.ssrfPolicy.allowRfc2544BenchmarkRangetools.web.fetch.ssrfPolicy.allowIpv6UniqueLocalRange を明示的に有効にしてください。

設定

{
  tools: {
    web: {
      search: {
        enabled: true, // default: true
        provider: "brave", // or omit for auto-detection
        maxResults: 5,
        timeoutSeconds: 30,
        cacheTtlMinutes: 15,
      },
    },
  },
}
Provider 固有の設定(API keys、base URLs、modes)は plugins.entries.<plugin>.config.webSearch.* 配下にあります。Gemini は、専用の web-search 設定と GEMINI_API_KEY の後の低優先度フォールバックとして、models.providers.google.apiKeymodels.providers.google.baseUrl も再利用できます。例については provider ページを参照してください。 Grok は、openclaw models auth login --provider xai --method oauth の xAI OAuth auth profile も再利用できます。API-key 設定は引き続きフォールバックです。 tools.web.search.provider は、バンドル済みおよびインストール済みの Plugin manifest で宣言された web-search provider id に対して検証されます。"brvae" のようなタイプミスは、自動検出へ静かにフォールバックするのではなく、設定検証で失敗します。設定済み provider に古い Plugin evidence しかない場合、たとえばサードパーティ Plugin のアンインストール後に残った plugins.entries.<plugin> ブロックがある場合、OpenClaw は起動の回復性を維持しつつ警告を報告します。そのため、Plugin を再インストールするか、openclaw doctor --fix を実行して古い設定をクリーンアップできます。 web_fetch フォールバック provider の選択は別です。
  • tools.web.fetch.provider で選択します
  • またはそのフィールドを省略し、OpenClaw に設定済み認証情報から最初に準備完了となった web-fetch provider を自動検出させます
  • 非 sandbox の web_fetch は、contracts.webFetchProviders を宣言するインストール済み Plugin provider を使用できます。sandbox fetch は、バンドル済み provider と検証済みの公式 Plugin インストールを許可しますが、サードパーティの外部 Plugin は除外します
  • 公式 Firecrawl Plugin は、現時点でバンドルされた唯一の webFetchProviders contributor であり、plugins.entries.firecrawl.config.webFetch.* 配下で設定されます
openclaw onboard または openclaw configure --section webKimi を選択すると、OpenClaw は次も尋ねる場合があります。
  • Moonshot API region(https://api.moonshot.ai/v1 または https://api.moonshot.cn/v1
  • デフォルトの Kimi web-search model(デフォルトは kimi-k2.6
x_searchplugins.entries.xai.config.xSearch.* で設定します。これは chat と同じ xAI auth profile、または Grok web search で使用される XAI_API_KEY / Plugin web-search credential を使用します。 従来の tools.web.x_search.* 設定は、openclaw doctor --fix によって自動移行されます。 openclaw onboard または openclaw configure --section web で Grok を選択すると、OpenClaw は Grok セットアップ完了直後に、同じ credential を使った任意の x_search セットアップも提示します。これは Grok 経路内の別のフォローアップ手順であり、別のトップレベル web-search provider 選択ではありません。別の provider を選んだ場合、OpenClaw は x_search プロンプトを表示しません。

API keys の保存

openclaw configure --section web を実行するか、key を直接設定します。
{
  plugins: {
    entries: {
      brave: {
        config: {
          webSearch: {
            apiKey: "YOUR_KEY", // pragma: allowlist secret
          },
        },
      },
    },
  },
}

ツールパラメーター

ParameterDescription
query検索クエリ(必須)
count返す結果数(1-10、デフォルト: 5)
country2文字の ISO 国コード(例: “US”, “DE”)
languageISO 639-1 言語コード(例: “en”, “de”)
search_lang検索言語コード(Brave のみ)
freshness時間フィルター: dayweekmonth、または year
date_afterこの日付より後の結果(YYYY-MM-DD)
date_beforeこの日付より前の結果(YYYY-MM-DD)
ui_langUI 言語コード(Brave のみ)
domain_filterドメイン allowlist/denylist 配列(Perplexity のみ)
max_tokens合計コンテンツ token budget、ネイティブ Perplexity Search API のみ
max_tokens_per_pageページごとの抽出 token 制限、ネイティブ Perplexity Search API のみ
すべてのパラメーターがすべての provider で機能するわけではありません。Brave llm-context mode は ui_lang を拒否します。date_beforedate_after を必要とします。これは Brave のカスタム freshness 範囲に開始日と終了日の両方が必要なためです。 Gemini、Grok、Kimi は citations 付きの合成回答を1つ返します。これらは shared-tool 互換性のために count を受け付けますが、根拠付き回答の形は変わりません。Gemini は day freshness を recency hint として扱います。より広い freshness 値と明示的な日付は、Google Search grounding time range を設定します。 Sonar/OpenRouter 互換経路(plugins.entries.perplexity.config.webSearch.baseUrl / model または OPENROUTER_API_KEY)を使用する場合、Perplexity も同じように動作します。その経路では max_tokensmax_tokens_per_page のサポートも削除されます。 SearXNG は、信頼済みの private-network または loopback ホストに対してのみ http:// を受け付けます。public SearXNG endpoints は https:// を使用する必要があります。 Firecrawl と Tavily は、web_search を通じて querycount のみをサポートします。高度なオプションには専用ツールを使用してください。
x_search は xAI を使用して X(旧 Twitter)の投稿をクエリし、citations 付きの AI 合成回答を返します。自然言語クエリと任意の構造化フィルターを受け付けます。OpenClaw は、組み込みの xAI x_search ツールを永続的に登録しておくのではなく、リクエストごとに構築します。そのため、実際にそれを呼び出す turn でのみ有効です。
xAI は x_search がキーワード検索、セマンティック検索、ユーザー検索、スレッド取得をサポートすると文書化しています。reposts、replies、bookmarks、views などの投稿ごとの engagement stats については、正確な投稿 URL または status ID に対する targeted lookup を優先してください。広いキーワード検索でも該当する投稿を見つけられる場合がありますが、投稿ごとの metadata が完全ではないことがあります。良いパターンは、先に投稿を見つけてから、その正確な投稿に絞った2回目の x_search クエリを実行することです。

x_search 設定

{
  plugins: {
    entries: {
      xai: {
        config: {
          xSearch: {
            enabled: true,
            model: "grok-4-1-fast-non-reasoning",
            baseUrl: "https://api.x.ai/v1", // optional, overrides webSearch.baseUrl
            inlineCitations: false,
            maxTurns: 2,
            timeoutSeconds: 30,
            cacheTtlMinutes: 15,
          },
          webSearch: {
            apiKey: "xai-...", // optional if an xAI auth profile or XAI_API_KEY is set
            baseUrl: "https://api.x.ai/v1", // optional shared xAI Responses base URL
          },
        },
      },
    },
  },
}
plugins.entries.xai.config.xSearch.baseUrl が設定されている場合、 x_search<baseUrl>/responses に投稿します。そのフィールドが省略されている場合は、 plugins.entries.xai.config.webSearch.baseUrl、次にレガシーの tools.web.search.grok.baseUrl、最後に公開 xAI エンドポイント (https://api.x.ai/v1) にフォールバックします。

x_search パラメーター

パラメーター説明
query検索クエリ (必須)
allowed_x_handles結果を特定の X ハンドルに制限
excluded_x_handles特定の X ハンドルを除外
from_dateこの日付以降の投稿のみを含める (YYYY-MM-DD)
to_dateこの日付以前の投稿のみを含める (YYYY-MM-DD)
enable_image_understanding一致する投稿に添付された画像を xAI に検査させる
enable_video_understanding一致する投稿に添付された動画を xAI に検査させる

x_search の例

await x_search({
  query: "dinner recipes",
  allowed_x_handles: ["nytfood"],
  from_date: "2026-03-01",
});
// Per-post stats: use the exact status URL or status ID when possible
await x_search({
  query: "https://x.com/huntharo/status/1905678901234567890",
});

// Basic search
await web_search({ query: "OpenClaw 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"],
});

ツールプロファイル

ツールプロファイルまたは許可リストを使用する場合は、web_searchx_search、または group:web を追加します。
{
  tools: {
    allow: ["web_search", "x_search"],
    // or: allow: ["group:web"]  (includes web_search, x_search, and web_fetch)
  },
}

関連

  • Web Fetch — URL を取得し、読み取り可能なコンテンツを抽出する
  • Web Browser — JS の多いサイト向けの完全なブラウザー自動化
  • Grok Searchweb_search プロバイダーとしての Grok
  • Ollama Web Search — Ollama ホスト経由のキー不要の Web 検索