Hermes Meets Perplexity Search: One API Key Upgrades Both Web Search and Page Extraction

Has your agent’s web search ever let you down? You ask “what’s the latest stable version of this framework in 2026” and it surfaces tutorials from three years ago — or the free search channel gets rate-limited mid-task and you can only retry. When this happens, most people’s first instinct is to switch models, but the smarter lever is the search backend — Hermes’ web tools are pluggable, and you can pick the vendor separately. On September 4, Perplexity’s Search API landed in the official repository, joining Exa, Parallel, Tavily, Firecrawl, and Keenable as another keyed backend: with a single API key, both web_search and web_extract can run on a new engine. This post covers why you’d switch, how to configure it, and the one caveat that trips people up.
First, the mental model: two tools, one swappable backend
Hermes splits web access into two tools:
web_search— given your question, finds candidate pages and returns titles, URLs, and short descriptions;web_extract— given concrete URLs, reads and distills the page content.
Which vendor serves each tool is controlled by web.search_backend and web.extract_backend (or by web.backend, which sets both at once). If you’ve never configured a backend, you’re still covered: Hermes ships a zero-configuration free rotation mechanism that works out of the box — see 5 free search channels: web search without API-key drama. This post is about the paid upgrade path: when free channels’ quality or stability isn’t enough, point the backend at a commercial search API you trust.
What Perplexity is, and why it’s worth a try
Perplexity is the AI search product many people already use daily, built on its own web index. That index is now open to Hermes through the Search API:
- Ranked, date-stamped results from Perplexity’s own index — for “latest version” or “recent events” queries, this is far less likely to push stale pages to the top than scrape-based free channels;
web_searchrequests usesearch_context_size: low, keeping each result’s snippet at description length — enough for the model to decide whether to open the page, without stuffing kilobytes of page text into your context window;web_extractuses the same “query-relevant snippets” endpoint as the officialpplxCLI — you get the passages of each page that matter for the query, not the whole page (more on this below — it’s the easy-to-miss caveat).
One honest caveat: Perplexity has no anonymous free tier. It is a paid, per-request vendor, so it does not join Hermes’ zero-config free rotation ring — if you want completely free search, stick with the channels in the post linked above; if you want dependable quality, this is the option to consider.
Setup in three steps
Step 1 — get a key. Generate one at https://www.perplexity.ai/account/api.
Step 2 — put the key in your environment. Add a line to ~/.hermes/.env:
PERPLEXITY_API_KEY=pplx-your-key
Or set it with a command (same effect):
hermes config set env.PERPLEXITY_API_KEY pplx-your-key
If your network requires a proxy, or you want to point at a self-hosted gateway, there’s an optional PERPLEXITY_BASE_URL that overrides the default https://api.perplexity.ai.
Step 3 — switch the backend to Perplexity. Either way works:
# Option A: pick Perplexity in the interactive selector
hermes tools
# Option B: write the config directly
hermes config set web.backend perplexity
For finer control, you can change just one capability — for example, search via Perplexity while keeping full-page extraction on Firecrawl:
hermes config set web.search_backend perplexity
hermes config set web.extract_backend firecrawl
web.backend, web.search_backend, and web.extract_backend are real fields under the web config section; verify with hermes config get web.backend or hermes status. One convenience detail: if you only set the key and never pick a backend explicitly, Hermes’ “paid providers first” strategy adopts Perplexity automatically — it sits after Tavily and before Exa in the preference walk; conversely, if you already have another paid key configured, your existing setup is not displaced.
What happens under the hood
The implementation (plugins/web/perplexity/provider.py) is straightforward:
web_searchcallsPOST https://api.perplexity.ai/searchand maps each result’ssnippetto the description field; a single call returns at most 20 results (Perplexity’s hard cap);web_extractcallsPOST /sdk/content/snippets— the same route behind the officialpplx content snippetscommand. One design detail worth knowing:web_extractcarries no query, so Hermes derives a relevance query from the words in the URL path — fetchingexample.com/docs/bloom-filteractually queries “bloom filter”;- Each request has a 60-second timeout; when a page fails to produce a snippet, that URL comes back with an
errorfield instead of failing the whole call (so an HTTP 200 does not mean every page succeeded).
The pitfall: snippets are not the full page
Perplexity’s extract returns the passages relevant to the query, with elisions marked by an ellipsis (…), not a verbatim full-page dump. If you need the complete text — say, pulling an entire document for the model to summarize — point web.extract_backend back at Firecrawl, Exa, or Parallel, which support full-page extraction. Perplexity’s snippets shine when you want to quickly judge what a page is about and whether it’s worth a deeper read; pair the two approaches and you get the best of both.
How to get it
The backend was merged to the official repository on September 4 (PR #102055, commit f1ccf436a2) — after the latest release, v0.21.0, shipped on August 31, so it is not in any release yet. Today it lives on main only; a stable release will pick it up next. To try it now, run from the main branch; otherwise wait for hermes update to report a new version (you can trace the timeline against our v0.21.0 release notes).
Summary
- If search quality disappoints, swap the backend before swapping the model;
- One Perplexity key lights up both
web_search(ranked, date-stamped results) andweb_extract(query-relevant snippets) — but it’s paid and not part of the free rotation ring; - Configure with
PERPLEXITY_API_KEY, switch withweb.backend, and split withweb.search_backend/web.extract_backend; - For verbatim full pages, keep extract on Firecrawl / Exa / Parallel — Perplexity returns relevant passages only;
- Currently on
mainonly; the next release makes it official.
Want to keep the context cost of web research under control too? See caching web search results so repeat queries stop burning tokens and the hermes config command reference.