hermes - ✅(Solved) Fix UX: hermes memory setup picker always defaults to 'Built-in only' regardless of saved config [1 pull requests]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Fix Action

Fixed

PR fix notes

PR #13023: fix(memory_setup): default picker to configured provider

Description (problem / solution / changelog)

Summary

The hermes memory setup picker always defaulted to 'Built-in only' regardless of the user's saved config, causing confusion.

Fix

  • Move config = load_config() before building picker items
  • Read currently configured provider from config.get("memory").get("provider")
  • Set default picker index to the configured provider if it exists
  • Fall back to 'Built-in only' if no provider is configured

Changes

  • File: hermes_cli/memory_setup.py
  • Lines: +12, -2

Testing

  • Code compiles without errors (lint passed)
  • Tested locally

Closes #12990

Changed files

  • hermes_cli/memory_setup.py (modified, +12/-2)

Code Example

# hermes_cli/memory_setup.py, line ~239
builtin_idx = len(items) - 1
selected = _curses_select("Memory provider setup", items, default=builtin_idx)

---

config = load_config()
provider_name = (config.get("memory") or {}).get("provider", "")

default_idx = builtin_idx
if provider_name:
    for i, (name, _, _) in enumerate(providers):
        if name == provider_name:
            default_idx = i
            break

selected = _curses_select("Memory provider setup", items, default=default_idx)
RAW_BUFFERClick to expand / collapse

Problem

The hermes memory setup interactive picker (cmd_setup() in hermes_cli/memory_setup.py) hardcodes default=builtin_idx when calling the curses radiolist. This means every time the user opens the picker — even if they already have a provider configured — the selection defaults to "Built-in only" (the last item).

This creates significant user confusion. Users repeatedly select their provider (e.g. option 9 for Mnemosyne), exit, reopen the picker to verify, see "Built-in only" highlighted again, and assume their selection was not persisted.

Expected Behavior

The picker should default to the currently configured provider if one is set in config.yaml. Only if no provider is configured should it default to "Built-in only".

Current Code

# hermes_cli/memory_setup.py, line ~239
builtin_idx = len(items) - 1
selected = _curses_select("Memory provider setup", items, default=builtin_idx)

Suggested Fix

Read config.get("memory", {}).get("provider") before building the picker. If a provider is configured and present in the discovered list, set default to that index. Otherwise fall back to builtin_idx.

config = load_config()
provider_name = (config.get("memory") or {}).get("provider", "")

default_idx = builtin_idx
if provider_name:
    for i, (name, _, _) in enumerate(providers):
        if name == provider_name:
            default_idx = i
            break

selected = _curses_select("Memory provider setup", items, default=default_idx)

Impact

This is a pure UX improvement — no functional breakage. Users who already configured a provider will see it pre-selected. New users still see "Built-in only" as the default.

extent analysis

TL;DR

Update the cmd_setup() function in hermes_cli/memory_setup.py to dynamically set the default selection in the curses radiolist based on the currently configured provider in config.yaml.

Guidance

  • Before calling _curses_select(), read the current provider configuration from config.yaml using config.get("memory", {}).get("provider").
  • Iterate through the list of providers to find the index of the currently configured provider, if any, and set default_idx to that index.
  • If no provider is configured, fall back to the index of the "Built-in only" option.
  • Pass the determined default_idx to _curses_select() to ensure the correct default selection.

Example

config = load_config()
provider_name = (config.get("memory") or {}).get("provider", "")

default_idx = builtin_idx
if provider_name:
    for i, (name, _, _) in enumerate(providers):
        if name == provider_name:
            default_idx = i
            break

selected = _curses_select("Memory provider setup", items, default=default_idx)

Notes

This fix assumes that the config.yaml file is correctly loaded and parsed, and that the providers list contains the names of all available providers.

Recommendation

Apply the suggested fix to update the cmd_setup() function, as it provides a clear and concise solution to the problem and improves the user experience without introducing any functional breakage.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - ✅(Solved) Fix UX: hermes memory setup picker always defaults to 'Built-in only' regardless of saved config [1 pull requests]