← All Guides

Search Guide

Hermes Agent Web Search: Backends, Config, and the OpenClaw Equivalent

Hermes Agent searches the web through two fixed tools and a swappable backend. This guide lists the backends that ship in the box, shows the exact config keys that choose one, and explains how OpenClaw handles the same job so you can move between the two frameworks without guessing.

Two tools, many backends

Hermes exposes web access to the model as two tools in its web toolset:

  • web_search — returns titles, URLs and descriptions (five results by default). Operators such as site: and filetype: are passed through to the backend.
  • web_extract — fetches and returns the content of specific URLs.

Neither tool talks to a search company directly. Each vendor is a bundled plugin under plugins/web/ in the upstream repo, and config decides which one serves each tool. That separation is the whole design: you can search with one provider and extract with another.

Backends that ship with Hermes

As of the September 2026 upstream source, these are bundled:

BackendWhat it needsSearch / extract
tavilyTAVILY_API_KEYBoth
exaEXA_API_KEYBoth
firecrawlFIRECRAWL_API_KEY or a self-hosted FIRECRAWL_API_URLBoth
parallelPARALLEL_API_KEYBoth
perplexityPERPLEXITY_API_KEYBoth
keenableKEENABLE_API_KEYBoth
searxngSEARXNG_URL (your own instance)Search only
brave-freeBRAVE_SEARCH_API_KEYSearch only
xaiXAI_API_KEY (Grok’s server-side search)Search only
ddgsNothing — DuckDuckGo via the ddgs packageSearch only

The list moves between releases, so check the plugins/web/ directory of the version you actually run before relying on a newer entry.

Choose a backend

The easiest path is the interactive picker, which writes the config for you:

hermes tools

Or edit ~/.hermes/config.yaml directly. web.backend sets one provider for both tools; web.search_backend and web.extract_backend override it per tool:

web:
  backend: "tavily"            # shared default for both tools
  search_backend: "searxng"    # optional: override for web_search only
  extract_backend: "firecrawl" # optional: override for web_extract only

Put API keys in your Hermes .env, then reload the gateway:

hermes gateway restart

A stored choice is used exactly as written, with no availability probe and no silent fallback. If the key is wrong you get that vendor’s error, which is what you want when debugging. Autodetection only runs on an install where no web backend has ever been selected.

Pairing a search-only backend

SearXNG, Brave free, xAI and ddgs return result lists but cannot read page bodies. A common low-cost setup is a keyless or self-hosted search backend plus a separate extractor:

web:
  search_backend: "searxng"
  extract_backend: "firecrawl"

Full setup for each half: Hermes Agent + SearXNG and Hermes Agent + Firecrawl.

The OpenClaw equivalent

OpenClaw does the same job with a different shape. The provider is chosen in openclaw.json under tools.web.search.provider, and each provider’s settings sit in its plugin entry rather than in environment variables. For SearXNG, for example, the endpoint is plugins.entries.searxng.config.webSearch.baseUrl, and the plugin only accepts a plain http URL when the host is a private address.

Do not translate one framework’s config into the other by analogy: Hermes keys are YAML under web, OpenClaw keys are JSON under tools.web and plugins.entries. One SearXNG server can still serve both. See OpenClaw web search for its provider comparison, and OpenClaw + SearXNG for that wiring.

Check that it actually searched

Ask for something the model cannot know from training data, such as a news item from this week. A general-knowledge question is a poor test because the model may answer without calling web_search at all. If results look empty or wrong, set WEB_TOOLS_DEBUG=true; Hermes then writes a per-session debug file under its logs/ directory showing which backend served the call.

OpenClaw Launch hosts the agent runtime; search keys you add stay between you and the provider.

Hermes Web Search FAQ

Does Hermes Agent have web search built in?

Yes. Hermes ships two generic tools, web_search and web_extract, in its web toolset. The tools are fixed; the backend behind them is pluggable, and each vendor is a bundled plugin under plugins/web/ in the upstream repo.

Can Hermes search the web without an API key?

Yes. The ddgs backend (DuckDuckGo via the ddgs Python package) needs no key, and a self-hosted SearXNG instance needs only SEARXNG_URL. Both are search-only, so pair them with an extract-capable backend if the agent must read full pages.

Which backend does Hermes use if I configure nothing?

On an install where no web backend has ever been chosen, Hermes autodetects from your environment: keyed providers such as Tavily, Perplexity, Exa, Parallel, Keenable and Firecrawl first, then SearXNG, Brave free and ddgs. Once you store a choice, Hermes uses it as-is with no fallback, so a broken selection shows the vendor’s real error instead of silently rerouting.

How is this different from OpenClaw?

OpenClaw selects its search provider in openclaw.json under tools.web.search.provider, and provider settings live in the plugin entry rather than in environment variables. The OpenClaw web search guide compares its providers.

Related guides

Hermes with web search already wired up

OpenClaw Launch runs managed Hermes Agent and OpenClaw bots with web search configured out of the box — no search server to host.

Deploy Managed Hermes