Hermes version: v0.14.0 (2026.5.16)
Config (~/.hermes/config.yaml):
yaml
web:
search_backend: brave-free
extract_backend: firecrawl
Env (~/.hermes/.env):
FIRECRAWL_API_KEY=fc-...
Steps to reproduce:
1. Set web.extract_backend: firecrawl in config.yaml
2. Set FIRECRAWL_API_KEY in .env
3. Restart gateway: systemctl --user restart hermes-gateway
4. Call web_extract with any URL
Expected behavior: Firecrawl extracts the page content
Actual behavior:
{"success": false, "error": "No web extract provider configured. Set web.extract_backend to firecrawl, tavily, exa, or parallel."}
Debug output:
=== Config ===
web section: {"backend": "", "search_backend": "brave-free", "extract_backend": "firecrawl", "use_gateway": false}
extract_backend: firecrawl
firecrawl available: True
=== Provider Registry ===
firecrawl provider: None
active extract provider: None
Root cause: _get_extract_backend() correctly returns "firecrawl" and _is_backend_available("firecrawl") returns True. However, get_provider('firecrawl') in agent/web_search_registry.py returns None — the Firecrawl plugin is not being loaded into the registry at import time. This causes the dispatcher in web_tools.py to fall through to the "no provider configured" error path.
Workaround: Manual curl -s "https://r.jina.ai/<URL>" works but Jina's free tier is limited and Google blocks via Jina (429).