feat(dashboard): catalogue all memory-provider API keys in OPTIONAL_ENV_VARS - #54546
Merged
Conversation
…NV_VARS The dashboard Keys page and `hermes setup` render API-key rows from OPTIONAL_ENV_VARS, but only Honcho had an entry — so Hindsight, Supermemory, Mem0, RetainDB, ByteRover, and OpenViking read their keys straight from os.environ yet had no place to set them in the GUI. Add catalog entries (category=tool, password-masked, with get-key URLs and the tool each powers) for all six, plus the relevant base-URL/endpoint companions. Pure declaration: the generic GET /api/env endpoint, the save/reveal write path, and the sandbox env blocklist (which auto-derives from tool-category OPTIONAL_ENV_VARS) all pick these up with no further wiring. Adds a behavior-contract test asserting every memory provider's primary credential key is catalogued, tool-categorised, and password-masked.
Contributor
🔎 Lint report:
|
| Rule | Count |
|---|---|
unresolved-attribute |
2 |
unsupported-operator |
1 |
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_credits_session_start_micros` on type `AIAgent`
run_agent.py:3040: [unresolved-attribute] unresolved-attribute: Object of type `Self@get_credits_spent_micros` has no attribute `_credits_session_start_micros`
tests/hermes_cli/test_config.py:743: [unsupported-operator] unsupported-operator: Operator `in` is not supported between objects of type `str` and `str | None | bool | list[Unknown] | list[str]`
✅ Fixed issues (1):
| Rule | Count |
|---|---|
invalid-assignment |
1 |
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [invalid-assignment] invalid-assignment: Object of type `None` is not assignable to attribute `_credits_session_start_micros` of type `int`
Unchanged: 6140 pre-existing issues carried over.
Diagnostics are surfaced as warnings — this check never fails the build.
tonydwb
reviewed
Jun 29, 2026
tonydwb
left a comment
There was a problem hiding this comment.
Code Review Summary
Verdict: LGTM
Clean feature that catalogs memory provider API keys in OPTIONAL_ENV_VARS.
Key observations:
- Comprehensive: Adds entries for Hindsight, Supermemory, Mem0, RetainDB, ByteRover, and OpenViking API keys with proper metadata (description, prompt, url, tools, password, category).
- Well-tested: Dedicated test class verifies all provider keys are catalogued, tool-categorized, password-masked, and advertise their tools.
- Consistent: Follows the same pattern as existing entries (Honcho).
- No security concerns: API keys are properly marked as password=True for redaction.
Reviewed by Hermes Agent
1 task
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.
Infographic
What
The dashboard Keys page (and
hermes setup) renders an API-key row for amemory provider only if that provider's env var has an entry in
OPTIONAL_ENV_VARS. Today only Honcho has one — so the other memoryproviders read their keys straight from
os.environbut offer no place toset them in the GUI:
HONCHO_API_KEYHINDSIGHT_API_KEYSUPERMEMORY_API_KEYMEM0_API_KEYRETAINDB_API_KEYBRV_API_KEYOPENVIKING_API_KEY(
holographicis a local HRR store with no key, so nothing to add.)Change
Add
OPTIONAL_ENV_VARSentries for all six missing providers, mirroring theexisting Honcho block:
category="tool",password=True, a get-keyurl, andthe
toolsbadge for the tool each key powers. Also adds the relevantnon-secret companions (
HINDSIGHT_API_URL,RETAINDB_BASE_URL,OPENVIKING_ENDPOINT) markedadvanced.This is pure declaration — no new endpoints or UI:
GET /api/envalready iteratesOPTIONAL_ENV_VARS, so the rows appear nextto Honcho under the Tools section automatically.
PUT /api/env) and reveal (POST /api/env/reveal) paths aregeneric and already handle any key.
tools/environments/local.py) auto-derivesfrom
tool/messaging-categoryOPTIONAL_ENV_VARS, so these secrets are nowcorrectly stripped from the sandboxed terminal env with no extra wiring.
These are not new
HERMES_*env vars — every key is an existing credentialthe corresponding plugin already reads; this only makes them settable from the
GUI instead of requiring a hand-edited
.env.Tests
tests/hermes_cli/test_config.py::TestMemoryProviderEnvVarsRegistry— abehavior contract (not a snapshot count) asserting every memory provider's
primary credential key is catalogued,
tool-categorised, password-masked, andadvertises its tool. Verified to fail on
origin/main(6 of 7 keys missing)and pass with this change. The existing
test_optional_tool_and_messaging_vars_are_in_blocklistcontinues to pass(the new keys are auto-blocklisted).