Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,14 +240,15 @@ the `memory-*` directories from `skills/` into your agent's skills directory.

Hermes keeps its native plugin shape under [`integrations/hermes`](integrations/hermes):

Managed installation requires a Hermes Agent release containing the
[manifest-v2 installer fix](https://github.com/NousResearch/hermes-agent/pull/85893).
Hermes Agent v0.20.5 (`v2026.8.19`) and earlier are not supported. If the installer says it only
supports `manifest_version: 1`, update Hermes to a release containing that fix.

```bash
hermes plugins install basicmachines-co/basic-memory --path integrations/hermes
hermes plugins install basicmachines-co/basic-memory/integrations/hermes
```

If your Hermes build lacks subpath installs, use the final deprecated
`basicmachines-co/hermes-basic-memory` pointer release until host support
lands.

### OpenClaw

OpenClaw stays package-native and publishes from
Expand Down
12 changes: 8 additions & 4 deletions integrations/hermes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@ The plugin replaces Hermes's "no external memory provider" with a real graph: se

## Install

Managed installation requires a Hermes Agent release containing the
[manifest-v2 installer fix](https://github.com/NousResearch/hermes-agent/pull/85893).
Hermes Agent v0.20.5 (`v2026.8.19`) and earlier are not supported. If the installer says it only
supports `manifest_version: 1`, update Hermes to a release containing that fix.

```bash
hermes plugins install basicmachines-co/basic-memory --path integrations/hermes
hermes plugins install basicmachines-co/basic-memory/integrations/hermes
```

Then activate it in `~/.hermes/config.yaml`:
Expand All @@ -21,13 +26,12 @@ memory:

If you run the gateway, restart it (`hermes gateway restart`). Done.

If your installed Hermes build does not support `--path`, use the final deprecated `basicmachines-co/hermes-basic-memory` pointer release until Hermes subpath installs are available. Ongoing development now lives in [`basic-memory/integrations/hermes`](https://github.com/basicmachines-co/basic-memory/tree/main/integrations/hermes).

The plugin self-installs the `basic-memory` CLI on first init via `uv tool install basic-memory` (one-time ~10s pause if it isn't already present). The bm binary lands at `~/.local/bin/bm` — the same location a manual `uv tool install basic-memory` would produce, so a later manual install or upgrade is a no-op rather than a second install.

### Prerequisites

- [Hermes Agent](https://github.com/NousResearch/hermes-agent)
- A supported [Hermes Agent](https://github.com/NousResearch/hermes-agent) release as described
above
- [`uv`](https://docs.astral.sh/uv/) on PATH (used for the bootstrap install)
- The `mcp` Python package in the Hermes venv. If `hermes plugins install` doesn't auto-install it (it follows `pip_dependencies` in `plugin.yaml`), run:
```bash
Expand Down
16 changes: 15 additions & 1 deletion scripts/validate_hermes_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@

from validate_skills import parse_frontmatter

HERMES_INSTALL_COMMAND = "hermes plugins install basicmachines-co/basic-memory/integrations/hermes"
UNSUPPORTED_HERMES_INSTALL_COMMAND = (
"hermes plugins install basicmachines-co/basic-memory --path integrations/hermes"
)


def parse_plugin_yaml(path: Path) -> dict[str, str]:
data: dict[str, str] = {}
Expand All @@ -23,10 +28,12 @@ def validate_hermes_plugin(plugin_dir: Path) -> None:
plugin_dir = plugin_dir.resolve()
plugin_yaml = plugin_dir / "plugin.yaml"
module = plugin_dir / "__init__.py"
readme = plugin_dir / "README.md"
root_readme = plugin_dir.parents[1] / "README.md"
skill = plugin_dir / "skill/SKILL.md"
tests = plugin_dir / "tests"

for path in [plugin_yaml, module, skill, tests]:
for path in [plugin_yaml, module, readme, root_readme, skill, tests]:
if not path.exists():
raise SystemExit(f"Missing Hermes plugin file: {path}")

Expand All @@ -46,6 +53,13 @@ def validate_hermes_plugin(plugin_dir: Path) -> None:
if frontmatter.get("name") != "basic-memory":
raise SystemExit(f"{skill}: expected name=basic-memory")

for documentation in [root_readme, readme]:
documentation_text = documentation.read_text()
if HERMES_INSTALL_COMMAND not in documentation_text:
raise SystemExit(f"{documentation}: missing supported Hermes install command")
if UNSUPPORTED_HERMES_INSTALL_COMMAND in documentation_text:
raise SystemExit(f"{documentation}: contains unsupported Hermes --path command")

print(f"validated Hermes plugin in {plugin_dir}")


Expand Down
Loading