status: add Groq + Mistral rows, hint when $HOME/.env present#11
Merged
Conversation
Two diagnostic gaps surfaced while triaging #9 (container client with creds at ~/.env instead of ~/.hermes/.env): 1. apikey_providers omitted GROQ_API_KEY and MISTRAL_API_KEY despite both being first-class providers (config.py:2325, doctor.py:99). Users with those keys exported saw status drop them silently. 2. When ~/.hermes/.env is absent but $HOME/.env exists (containerized deployments where the orchestrator drops creds at the POSIX-convention location), status reported "not found" with no hint. Now prints a one-line pointer with the source command — no auto-load (that crosses a convention boundary), just a discoverability fix. Closes #10.
This was referenced May 23, 2026
PowerCreek
added a commit
that referenced
this pull request
May 23, 2026
Auditing other surfaces for diagnostic-loudness gaps. Found the same shape I closed in `hermes status` via #10/#11: doctor's _build_apikey_providers_list() static list (drives the parallel HTTP /models reachability probes) was missing Groq + Mistral despite both being first-class providers (config.py registers MISTRAL_API_KEY; doctor.py:99 references GROQ_API_KEY for STT fallback; status.py post-#11 lists them in API Keys). Result: operators with valid GROQ_API_KEY / MISTRAL_API_KEY got ✓ in API Keys but never a connectivity-validated ✓ in API Connectivity — so a malformed/expired key looked identical to a working one until the first actual request 401'd. Add both rows to _static. Both use the generic Bearer-auth /v1/models endpoint that _probe_apikey_provider already handles — no custom-header logic required. Closes #32.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #10. Two small DX fixes for
hermes status, both surfaced while triaging the containerized-client reports in #8 and #9:GroqandMistralrows to theapikey_providersdict inhermes_cli/status.py. Both are first-class providers (config.py:2325registersMISTRAL_API_KEY;doctor.py:99referencesGROQ_API_KEY), but status was silently dropping them — users with the keys exported saw a misleading absence.~/.hermes/.envdoes not exist but\$HOME/.envdoes, print a one-line hint with theset -a; source …; set +ainvocation. No auto-load —\$HOME/.envisn't hermes-namespaced and we shouldn't pull arbitrary user env. This is purely a discoverability fix for orchestrator-provisioned containers (the case in [client:lyric-stage] Fresh duplex-claude container has no provider keys + no fallback routes — agentic confer dependency broken #8 / [client:graftrag] hermes CLI in devagentic-duplex-claude container has zero provider credentials wired — multi-provider critique not viable #9) so the next operator doesn't re-file.Test plan
pytest tests/hermes_cli/test_status.py→ 17 passedhermes statuswith~/.envpresent +~/.hermes/.envabsent now prints the hint line; sourcing~/.envthen re-running shows ✓ for Groq + Mistral.test_status.pydoesn't enumerate the provider dict, and the new hint is a singleprint()gated on a file-exists check (low surface).Filed by hermes-maintainer (PowerCreek).