Open-source project
robbyczgw-cla/hermes-web-search-plus avatar
robbyczgw-cla/hermes-web-search-plus

Web Search Plus: A Multi-Provider Search and Extraction Plugin for Hermes Agents

Give your Hermes agent the web as real sources, never a made-up answer — multi-provider search and extraction with an optional local, key-free DonSeTch option.

399 stars30 forksPythonMIT

At a glance

What is it?
Web Search Plus wires fifteen search providers and nine extraction providers behind two Hermes tools, with an optional local DonSeTch path that needs no API key. The trade-off is that provider behaviour and privacy terms are not uniform, and the plugin assumes you already run Hermes.
Who is it for?
Adopt it if you already run the Hermes agent and want source URLs rather than a generated answer, and start with the starter preset so only one search key and one extraction key are configured. Do not adopt it as a standalone search library or if you need one provider's guarantees across every query: the README states provider privacy is not uniform and points to a separate privacy guide.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: agents that answer from memory instead of from pages

An agent asked a factual question has two options. It can generate an answer from its weights, or it can fetch pages and quote them. The second option needs a search call and a page reader, and both need to survive a provider going down or returning nothing. Web Search Plus is the plugin that supplies those two calls to the Hermes agent. It registers two tools, `web_search_plus` for finding sources and `web_extract_plus` for turning pages you already have into clean text. The README frames the goal as returning "the original links and pages" rather than hiding the web behind a generated answer. That framing tells you who this is for: people running Hermes for research or fact-checking work where a citation is the point. It is not a general search library, and it is not useful outside the Hermes plugin API, since the README describes it as ported from web-search-plus-plugin specifically for that API.

Fifteen search providers, nine extractors, and one routing layer

The README states the plugin supports 15 search and 9 extraction providers, and that you do not need them all. The mechanism is a single engine with controlled routing: one search-capable key or configured local endpoint enables `web_search_plus`, one extraction-capable key or endpoint enables `web_extract_plus`, and adding more providers widens the routing choices. The README also states that if one service is unavailable or returns nothing, the plugin can try another, which is the failover behaviour rather than a quality guarantee. Version 4.1.1 shows what adapter fidelity means in practice: Exa search keeps requested highlights instead of replacing them with the start of the page, Parallel Search sends result count and domain filters through `advanced_settings`, and Tavily applies the unified `freshness` filter as native `time_range`. Each provider has its own parameter vocabulary, and the adapters translate the plugin's unified options into it. That translation layer is where most of the maintenance work lives, and the release history suggests it is where bugs appear.

The DonSeTch path and the Hound removal in 4.0.0

DonSeTch is the optional local source provider for search and Markdown extraction. It is not bundled. The README states it runs as a separately installed stdio MCP process configured through `DONSETCH_BIN`, and version 4.0.3 notes the adapter is tested against 3.2.1 with the instruction to install `donsetch@3.2.1`, while older 2.x binaries report `incompatible_major`. Version 4.1.0 added support for the 3.6.1 compact MCP response format while retaining older structured responses, and keeps search titles and snippets attached to their source URLs. Version 4.0.1 describes session handling: one stdio MCP session is reused for every URL in a single extract call, the child is reaped on timeout or MCP failure, and binary readiness is reported from `setup.py status`. The 4.0.0 release removed the Hound provider and the `HOUND_MCP_URL` integration, so existing Hound users must install DonSeTch separately, set `DONSETCH_BIN`, and change explicit `provider="hound"` calls to `provider="donsetch"`. Anyone upgrading across 4.0.0 should treat that as a required edit, not an optional one.

Installing it and checking provider readiness

The README gives this sequence. Install and enable the plugin with `hermes plugins install robbyczgw-cla/hermes-web-search-plus --enable`. Then inspect readiness and configure providers with `python3 ~/.hermes/plugins/web-search-plus/setup.py status` and `python3 ~/.hermes/plugins/web-search-plus/setup.py setup --preset starter`. Reload Hermes so the tools register: from the CLI, exit and start `hermes` again or use `/reset` in-session; on the gateway, `/restart` then `/reset`. An optional shell smoke test is `python3 search.py --query "Hermes Agent latest release" --provider auto --quality-report`. The setup helper stores keys in the active Hermes environment file, and the README warns never to commit them to the repository. For a no-commercial-key setup there is `setup.py setup --preset self-hosted`, which selects a derived `self_hosted` profile where automatic search uses only your SearXNG instance and keyless Keenable, and automatic extraction runs through Keenable's public fetch tier. The README notes SearXNG does not extract, which is why extraction falls to Keenable in that profile.

The opt-in wsp backend and what it changes

Version 4.1.0 added an opt-in `wsp` backend that routes Hermes' native `web_search` and `web_extract` calls through the existing WSP engine in-process. Two details matter. First, installation does not select the new backend; the README says existing Plus tools remain available and that selection is a separate step described in the native backend document. Second, the README notes runtime limits and mixed routing as topics covered there, without stating in the main text what those limits are. If you want Hermes' own tool names to benefit from the routing layer, this is the switch. If you prefer to keep the native tools untouched and call `web_search_plus` and `web_extract_plus` explicitly, you can leave it alone. The 4.0.1 notes add that search and extract stay explicit-only, which suggests the project is deliberate about not silently intercepting calls.

Where it breaks down: privacy is per provider, not per plugin

The README is direct that provider privacy is not uniform and tells you to review the maintained provider privacy and terms guide before sending sensitive queries or URLs, because it distinguishes standard self-serve terms from enterprise-only zero-data-retention or no-training options. That is the sharpest limitation here. The plugin unifies the interface, not the guarantees. A query routed to one provider may be handled under different retention terms than the same query routed to another, and automatic routing is exactly the feature that makes this hard to reason about. If your workload involves anything you would not paste into a third-party search box, the multi-provider design works against you until you pin a single provider and confirm its terms. The second limitation is environmental: DonSeTch is a separate install with version compatibility enforced through `incompatible_major`, so a mismatched binary fails readiness rather than degrading gracefully. The third is that this is a Hermes plugin. Outside that agent there is no tool to call.

SearXNG and Keenable versus the keyed providers

The real alternative to the paid providers inside this plugin is the self-hosted profile. SearXNG is a metasearch instance you run yourself, and the README states it handles search but not extraction. Keenable supplies keyless search plus a public fetch tier for extraction. The difference in approach is ownership: with the self_hosted profile, automatic search never leaves your SearXNG instance and Keenable, and no commercial API key is configured at all. Against that, you are responsible for running SearXNG, and the public Keenable fetch tier is shared infrastructure whose capacity and terms you do not control. The keyed providers, by contrast, are someone else's uptime and someone else's rate limits, with the adapter quirks visible in the 4.1.1 notes. Choosing between them is a question of whether you would rather operate a search instance or accept a vendor's terms. The plugin does not decide that for you, and the README does not claim one path is better.

Maintenance cost and the MIT licence

The release cadence visible in the repository is high: 4.0.0 through 4.1.1 landed within roughly two weeks, and several of those releases are adapter corrections rather than features. Each new provider or upstream API change is a translation problem for the adapter layer, so the cost of running many providers is ongoing attention to release notes, not a one-time setup. The migration off Hound in 4.0.0 is the clearest example of a change that requires editing your own configuration. The plugin is MIT licensed, which permits commercial and private use and modification, but it does not grant rights to the upstream providers' data or APIs. Those are governed by each provider's own terms, and the README's privacy guide is where the project points for that. Nothing here is legal advice; if you are shipping this in a product, read the provider terms yourself.

Editorial conclusion

Adopt it if you already run the Hermes agent and want source URLs rather than a generated answer, and start with the starter preset so only one search key and one extraction key are configured. Do not adopt it as a standalone search library or if you need one provider's guarantees across every query: the README states provider privacy is not uniform and points to a separate privacy guide. Verify first that your Hermes version exposes the plugin API this port targets, that DonSeTch is installed separately at a version the adapter accepts, and that your chosen providers' terms match the sensitivity of the queries you intend to send.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. robbyczgw-cla/hermes-web-search-plus on GitHub
Community notes

Community notes