# NousResearch/hermes-agent · Hindsight integration bug fixes and config corrections

## Open now

- 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.

## TL;DR

- 3 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #6282. Verify it addresses your case.
- **Recommended:** read PR #6282 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-6282`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.67`: the share of member 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.

## Closed / duplicate issues

- #6259: \[Bug\]: Hermes memory setup for Hindsight

## Prior & competing PRs

- **#6282: fix(hindsight): correct config key mismatch and add base URL support**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `plugins/memory/hindsight/README.md`, `plugins/memory/hindsight/__init__.py`
  - fix hunks:
  - `plugins/memory/hindsight/README.md`

    ```diff
    @@ -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`.
     
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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"]},
    ```

    ```diff
    @@ -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}
    ```

    ```diff
    @@ -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 = {}
    ```

    ```diff
    @@ -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")
    ```
- **#6274: fix(hindsight): correct API key env var typo and add Base URL support (#6259)**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#6282`

## Fix status

- Merged to main in PR #6282 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-08`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
