Bug Description
hermes doctor (and hermes status) report Nous Portal auth as "not logged in" even when valid credentials exist and hermes auth list correctly shows them.
Root Cause
get_nous_auth_status() in hermes_cli/auth.py only checks the legacy providers section of auth.json. When credentials are added via hermes auth add (or stored directly in the credential pool), they live in the credential_pool section and are never seen by the doctor/status checks.
auth.json:
"providers": {} <-- get_nous_auth_status() looks HERE (empty)
"credential_pool": {
"nous": [{ ...valid token... }] <-- hermes auth list looks HERE (has credential)
}
Steps to Reproduce
- Add Nous credentials via
hermes auth add (or have them migrate into the credential pool)
- Run
hermes auth list — shows the credential correctly
- Run
hermes doctor — reports "Nous Portal auth (not logged in)"
Expected Behavior
hermes doctor should report "logged in" when valid Nous credentials exist in either the legacy provider state or the credential pool.
Fix
get_nous_auth_status() should fall back to checking the credential pool when the legacy provider state is empty — the same pattern already used by get_codex_auth_status().
Environment
- macOS
- Hermes Agent latest main
Bug Description
hermes doctor(andhermes status) report Nous Portal auth as "not logged in" even when valid credentials exist andhermes auth listcorrectly shows them.Root Cause
get_nous_auth_status()inhermes_cli/auth.pyonly checks the legacyproviderssection ofauth.json. When credentials are added viahermes auth add(or stored directly in the credential pool), they live in thecredential_poolsection and are never seen by the doctor/status checks.Steps to Reproduce
hermes auth add(or have them migrate into the credential pool)hermes auth list— shows the credential correctlyhermes doctor— reports "Nous Portal auth (not logged in)"Expected Behavior
hermes doctorshould report "logged in" when valid Nous credentials exist in either the legacy provider state or the credential pool.Fix
get_nous_auth_status()should fall back to checking the credential pool when the legacy provider state is empty — the same pattern already used byget_codex_auth_status().Environment