NousResearch/hermes-agent

Hindsight integration bug fixes and config corrections

Cluster 6259. Data as of

Nothing open on GitHub. Fix merged in #6282 on 8 Apr 2026. Check it covers your case.

The short answer

0open issues
0open PRs
3items grouped
Known?
Yes. 3 related items grouped here, 1 issue already closed.
Fix event
A fix was merged to main in PR #6282. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this resolved, deciding PR #6282. That is separate from the fix event.
Still open
Nothing open on GitHub.

These items address configuration issues in the Hindsight integration, including a config key mismatch, an API key environment variable typo, base URL support additions, and a memory setup bug related to Hermes.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #6282 fix(hindsight): correct config key mismatch and add base URL support

    merged to main

    files: plugins/memory/hindsight/README.md, plugins/memory/hindsight/__init__.py

    Show the diff
    • plugins/memory/hindsight/README.md
      @@ -73,6 +73,7 @@ Config file: `~/.hermes/hindsight/config.json`
       |-----|---------|-------------|
       | `llm_provider` | `openai` | LLM provider: `openai`, `anthropic`, `gemini`, `groq`, `minimax`, `ollama` |
       | `llm_model` | per-provider | Model name (e.g. `gpt-4o-mini`, `openai/gpt-oss-120b`) |
      +| `llm_base_url` | — | LLM Base URL override (e.g. `https://openrouter.ai/api/v1`) |
       
       The LLM API key is stored in `~/.hermes/.env` as `HINDSIGHT_LLM_API_KEY`.
       
      @@ -92,6 +93,7 @@ Available in `hybrid` and `tools` memory modes:
       |----------|-------------|
       | `HINDSIGHT_API_KEY` | API key for Hindsight Cloud |
       | `HINDSIGHT_LLM_API_KEY` | LLM API key for local mode |
      +| `HINDSIGHT_API_LLM_BASE_URL` | LLM Base URL for local mode (e.g. OpenRouter) |
       | `HINDSIGHT_API_URL` | Override API endpoint |
       | `HINDSIGHT_BANK_ID` | Override bank name |
       | `HINDSIGHT_BUDGET` | Override recall budget |
    • plugins/memory/hindsight/__init__.py
      @@ -235,6 +235,7 @@ def get_config_schema(self):
                   {"key": "api_key", "description": "Hindsight Cloud API key", "secret": True, "env_var": "HINDSIGHT_API_KEY", "url": "https://ui.hindsight.vectorize.io", "when": {"mode": "cloud"}},
                   {"key": "llm_provider", "description": "LLM provider for local mode", "default": "openai", "choices": ["openai", "anthropic", "gemini", "groq", "minimax", "ollama"], "when": {"mode": "local"}},
                   {"key": "llm_api_key", "description": "LLM API key for local Hindsight", "secret": True, "env_var": "HINDSIGHT_LLM_API_KEY", "when": {"mode": "local"}},
      +            {"key": "llm_base_url", "description": "LLM Base URL (e.g. for OpenRouter)", "default": "", "env_var": "HINDSIGHT_API_LLM_BASE_URL", "when": {"mode": "local"}},
                   {"key": "llm_model", "description": "LLM model for local mode", "default": "gpt-4o-mini", "default_from": {"field": "llm_provider", "map": _PROVIDER_DEFAULT_MODELS}, "when": {"mode": "local"}},
                   {"key": "bank_id", "description": "Memory bank name", "default": "hermes"},
                   {"key": "budget", "description": "Recall thoroughness", "default": "mid", "choices": ["low", "mid", "high"]},
      @@ -251,12 +252,16 @@ def _get_client(self):
                       # different loop" errors during GC — we handle cleanup in
                       # shutdown() instead.
                       HindsightEmbedded.__del__ = lambda self: None
      -                self._client = HindsightEmbedded(
      +                kwargs = dict(
                           profile=self._config.get("profile", "hermes"),
                           llm_provider=self._config.get("llm_provider", ""),
      -                    llm_api_key=self._config.get("llmApiKey") or os.environ.get("HINDSIGHT_LLM_API_KEY", ""),
      +                    llm_api_key=self._config.get("llm_api_key") or os.environ.get("HINDSIGHT_LLM_API_KEY", ""),
                           llm_model=self._config.get("llm_model", ""),
                       )
      +                base_url = self._config.get("llm_base_url") or os.environ.get("HINDSIGHT_API_LLM_BASE_URL", "")
      +                if base_url:
      +                    kwargs["llm_base_url"] = base_url
      +                self._client = HindsightEmbedded(**kwargs)
                   else:
                       from hindsight_client import Hindsight
                       kwargs = {"base_url": self._api_url, "timeout": 30.0}
      @@ -311,9 +316,10 @@ def _start_daemon():
                           # If the config changed and the daemon is running, stop it.
                           from pathlib import Path as _Path
                           profile_env = _Path.home() / ".hindsight" / "profiles" / f"{profile}.env"
      -                    current_key = self._config.get("llmApiKey") or os.environ.get("HINDSIGHT_LLM_API_KEY", "")
      +                    current_key = self._config.get("llm_api_key") or os.environ.get("HINDSIGHT_LLM_API_KEY", "")
                           current_provider = self._config.get("llm_provider", "")
                           current_model = self._config.get("llm_model", "")
      +                    current_base_url = self._config.get("llm_base_url") or os.environ.get("HINDSIGHT_API_LLM_BASE_URL", "")
       
                           # Read saved profile config
                           saved = {}
      @@ -326,18 +332,22 @@ def _start_daemon():
                           config_changed = (
                               saved.get("HINDSIGHT_API_LLM_PROVIDER") != current_provider or
                               saved.get("HINDSIGHT_API_LLM_MODEL") != current_model or
      -                        saved.get("HINDSIGHT_API_LLM_API_KEY") != current_key
      +                        saved.get("HINDSIGHT_API_LLM_API_KEY") != current_key or
      +                        saved.get("HINDSIGHT_API_LLM_BASE_URL", "") != current_base_url
                           )
       
                           if config_changed:
                               # Write updated profile .env
                               profile_env.parent.mkdir(parents=True, exist_ok=True)
      -                        profile_env.write_text(
      +                        env_lines = (
                                   f"HINDSIGHT_API_LLM_PROVIDER={current_provider}\n"
                                   f"HINDSIGHT_API_LLM_API_KEY={current_key}\n"
                                   f"HINDSIGHT_API_LLM_MODEL={current_model}\n"
                                   f"HINDSIGHT_API_LOG_LEVEL=info\n"
                               )
      +                        if current_base_url:
      +                            env_lines += f"HINDSIGHT_API_LLM_BASE_URL={current_base_url}\n"
      +                        profile_env.write_text(env_lines)
                               if client._manager.is_running(profile):
                                   with open(log_path, "a") as f:
                                       f.write("\n=== Config changed, restarting daemon ===\n")

1 PR closed without merging

From the close comments: merged via another change 1

  • #6274 fix(hindsight): correct API key env var typo and add Base URL support (#6259) · merged via another change → #6282
Closed issues · 1
  • Closed#6259[Bug]: Hermes memory setup for Hindsight
How this cluster was grouped
  • Link evidence (structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
  • Pairwise link density 0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. 1.00 means every pair is linked.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Merged PRs
#6282
Closed issues
1
Attempts
1 PR closed without merging
Fix link checked
8 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.