Hermes+FaroHermes runs the agent loop. Faro gives it web search, scraping, image & video generation, voice, and B2B data through a single credential and one prepaid balance — no new vendor to wire up each time.
Pay-as-you-go credits · Refunds on failure
Today
ANTHROPIC_API_KEYOPENAI_API_KEYDATAMERGE_API_KEYPREDICTLEADS_API_KEYGOOGLE_API_KEYAPIFY_API_KEY6 providers · 6 dashboards
With Faro
ANTHROPIC_API_KEYFARO_API_KEY2 providers · 1 ledger
Friction → Faro
The four highest-volume themes in the Hermes Agent issue tracker since launch (Feb 2026), paired with Faro's response.
The friction
The Hermes issue tracker carries 80+ open tickets about credential pools and per-provider keys silently desyncing between .env, ~/.hermes/auth.json, and config.yaml. Every new capability adds another entry to debug.
Faro's answer
A single Faro plugin in ~/.hermes/plugins exposes every Faro tool through one FARO_API_KEY. No credential_pool entries to keep in sync, no auth.json drift.
The friction
Image generation needs FAL. Web search defaults to Firecrawl. Vision summarization falls back to OpenRouter. Each is a separate vendor account, a separate quota, a separate failure mode.
Faro's answer
Image, video, search, scrape, enrichment, voice — every one of them lives behind the same Faro Bearer. Adding a capability is a marketplace search, not a new vendor relationship.
The friction
Hermes can autonomously write its own skills — but the moment a skill needs an upstream provider it dies on “FAL_KEY not passed to tool execution context” or a 401 from a vendor gateway. The harness learns the workflow; the credential layer can't.
Faro's answer
Once Faro is registered, every marketplace tool is callable by name. A learning skill that needs scrape, then image, then enrichment never trips on a missing vendor key. Failed calls auto-refund.
The friction
Nous Portal only shows usage for tools routed through its gateway. Direct API keys are opaque. There's an open request to “show provider account limits in the TUI status bar” — until then, you reconcile invoices.
Faro's answer
Every invocation shows up in one balance immediately. Set a cap once and the harness can't exceed it across providers.
Quick start
Clone faro-hermes-plugin into ~/.hermes/plugins, enable it, set one FARO_API_KEY. The harness sees every Faro tool on next start.
# 1. drop the plugin into your Hermes plugins directory
git clone https://github.com/poolside-ventures/faro-hermes-plugin \
~/.hermes/plugins/faro
# 2. install the runtime dependency
pip install httpx
# 3. enable + authenticate
hermes plugins enable faro
hermes config set FARO_API_KEY faro_... # or: export FARO_API_KEY=...
# done — start Hermes; faro_search + faro_invoke are now in scope
hermes# ~/.hermes/plugins/faro/__init__.py
from . import schemas, tools
def register(ctx):
ctx.register_tool(
name="faro_search",
toolset="faro",
schema=schemas.FARO_SEARCH,
handler=tools.faro_search,
requires_env=["FARO_API_KEY"],
description="Search the Faro marketplace for AI tools by intent or keyword.",
emoji="🔎",
)
ctx.register_tool(
name="faro_invoke",
toolset="faro",
schema=schemas.FARO_INVOKE,
handler=tools.faro_invoke,
requires_env=["FARO_API_KEY"],
description="Invoke a Faro marketplace tool by namespace + name.",
emoji="🛠️",
)# or use the askfaro CLI directly from any Hermes shell tool
pip install askfaro-cli
faro auth login
faro search "generate a 6-second product video"
faro invoke <namespace>/<tool> --params '{...}'
# REST equivalent
curl -X POST "https://api.askfaro.com/invoke/<namespace>/<tool>" \
-H "Authorization: Bearer $FARO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"arguments": {"prompt": "..."}}'What the harness can call on
Each prompt routes through one credential. The harness keeps the memory; Faro keeps the catalog fresh.
“Generate a 6-second product video of a violet aurora over a mountain at dawn”
Resolved via google-veo
“Get the latest news on Tesla's Q1 earnings”
Resolved via brave-search
“Scrape the pricing page at example.com and return the plans as JSON”
Resolved via bright-data
“Find a mobile phone number for the VP of Sales at Notion”
Resolved via datamerge