Summary
hermes doctor in v2026.5.7 reports a duplicate Anthropic API check. The dedicated Anthropic API check passes; the new lowercase pluggable-provider anthropic check fails with HTTP 404 because it uses generic Authorization: Bearer auth instead of Anthropic's required x-api-key header.
Reproduction
- Set
ANTHROPIC_API_KEY in ~/.hermes/.env (valid key)
- Configure model to route via OpenRouter (e.g.
model.default: anthropic/claude-haiku-4.5, model.provider: openrouter)
- Run
hermes doctor
- Observe duplicate Anthropic-related lines in the API Connectivity section:
Checking Anthropic API... ✓ Anthropic API
Checking anthropic API... ⚠ anthropic (HTTP 404)
Expected behaviour
Either:
- The lowercase
anthropic provider check uses the correct Anthropic native auth (x-api-key + anthropic-version headers), or
- The provider system suppresses the duplicate check when a dedicated check already covers the same provider
Actual behaviour
Lowercase anthropic check uses Authorization: Bearer {key} (the generic pluggable-provider auth at hermes_cli/doctor.py line ~1295) and Anthropic's native API returns HTTP 404.
Root cause analysis
hermes_cli/doctor.py:
- Line 1203–1244: dedicated Anthropic check uses correct headers —
headers["x-api-key"] = anthropic_key + anthropic-version: 2023-06-01
- Line 1265–1325: generic
_apikey_providers loop uses Authorization: Bearer {key} for all providers
- The pluggable
ProviderProfile for Anthropic (loaded via from providers import list_providers) extends _apikey_providers, but the generic loop doesn't know Anthropic needs special headers
Suggested fix
In _build_apikey_providers_list() or the provider loop:
- Skip provider profiles whose canonical name matches a provider that already has a dedicated check (
anthropic in this case), or
- Have
ProviderProfile declare a custom health_check_headers field that overrides the generic Bearer auth
Environment
- Hermes Agent v0.13.0 (calver v2026.5.7-136-g524cbabd8)
- macOS 26.4.1, Apple Silicon
- Python 3.11.15
- Routing via OpenRouter (no direct Anthropic native API usage)
Impact
Cosmetic only. Hermes functions correctly; this is a noisy warning from a duplicate check, not a real connectivity failure.
Summary
hermes doctorin v2026.5.7 reports a duplicate Anthropic API check. The dedicatedAnthropic APIcheck passes; the new lowercase pluggable-provideranthropiccheck fails with HTTP 404 because it uses genericAuthorization: Bearerauth instead of Anthropic's requiredx-api-keyheader.Reproduction
ANTHROPIC_API_KEYin~/.hermes/.env(valid key)model.default: anthropic/claude-haiku-4.5,model.provider: openrouter)hermes doctorExpected behaviour
Either:
anthropicprovider check uses the correct Anthropic native auth (x-api-key+anthropic-versionheaders), orActual behaviour
Lowercase
anthropiccheck usesAuthorization: Bearer {key}(the generic pluggable-provider auth athermes_cli/doctor.pyline ~1295) and Anthropic's native API returns HTTP 404.Root cause analysis
hermes_cli/doctor.py:headers["x-api-key"] = anthropic_key+anthropic-version: 2023-06-01_apikey_providersloop usesAuthorization: Bearer {key}for all providersProviderProfilefor Anthropic (loaded viafrom providers import list_providers) extends_apikey_providers, but the generic loop doesn't know Anthropic needs special headersSuggested fix
In
_build_apikey_providers_list()or the provider loop:anthropicin this case), orProviderProfiledeclare a customhealth_check_headersfield that overrides the generic Bearer authEnvironment
Impact
Cosmetic only. Hermes functions correctly; this is a noisy warning from a duplicate check, not a real connectivity failure.