Files
mem0/integrations/hermes-plugin/HANDOFF.md
T

65 lines
4.0 KiB
Markdown

# Source and compatibility notes
Imported from [NousResearch/hermes-plugin-mem0](https://github.com/NousResearch/hermes-plugin-mem0)
version 1.3.0 at commit `3fc36950b2b7c19cdd81c6de99f10d2cbed850af`.
The original native provider MIT license is retained in `LICENSE`. Generated shared core
is Apache-2.0, with its license in `LICENSE-APACHE-2.0`; package metadata records both.
This Mem0-owned port is version 1.4.0.
The source was a handoff of Hermes' bundled provider, with package-relative imports and
standalone dependency declarations; its historical authors remain in the upstream repositories.
## Changes in this port
- Generates only shared `core/message_utils.py` through `plugin-build.json`.
- Uses shared secret redaction and token-aware batching for non-empty completed-turn text.
- Preserves full message text after redaction; explicit `sync_max_chars` and the OSS default of 450
limit chunk size instead of discarding the tail. Platform/HTTP has no default character cap.
- Attaches Hermes session IDs as top-level Mem0 `run_id` on writes; existing user recall
remains unfiltered by session. The queue is in-memory, with bounded shutdown, logged failures,
and no durable retry.
- Keeps `mem0`, `memory.provider`, `mem0.json`, environment fallbacks, all four tool names,
identity precedence, SDK backends, and the three setup modes.
- Refuses OSS collection dimension mismatches without deleting existing vectors.
## Hermes contract review
Reviewed the [official memory-provider documentation](https://hermes-agent.nousresearch.com/docs/developer-guide/memory-provider-plugin),
release [v0.21.3 / v2026.9.14](https://github.com/NousResearch/hermes-agent/releases/tag/v2026.9.14)
(commit `345cd2b057a452236de401d3534b8502a7465e8d`), and main at
`c62bd9f2078a946108f1c9d9b24bf118963277ef` on September 18, 2026.
- These Hermes revisions still bundle Mem0. Bundled providers take precedence over user
directories. See README for an isolated preview; installation alone does not replace core.
- The installer supports `owner/repo/subdirectory` and copies only that subtree. All runtime
imports must stay within this directory or use Hermes/declared Python dependencies.
- Main installs dependencies from `[project].dependencies` and reapplies them after updates;
v0.21.3 does not. Install dependencies explicitly in the Hermes environment on that release.
- `register(ctx)` registers a `MemoryProvider` instance. Hermes dispatches tool schemas and
lifecycle hooks; no general-plugin hook registration is required. Background work retains
context variables through `spawn_context_thread`, including profile and secret scope.
- Hermes supports the existing `sync_turn(user, assistant, *, session_id="")` signature.
New optional `messages`/`turn_author` arguments are passed only to providers accepting them.
- `post_setup(hermes_home, config)` takes over setup and activation. The copied wizard already
owns its prompt helpers; it still uses Hermes config, curses and credential utilities.
- The handoff's original notes mentioned `config_schema.py`, but neither its actual directory
nor the checked Hermes Mem0 directory contains it. This port preserves CLI setup and does
not claim a provider-specific dashboard configuration panel.
Older Hermes releases and live cloud/OSS services require additional validation; preserving
configuration and tool names does not imply compatibility with every historical host API.
Actual external-loader and `MemoryManager` smoke checks passed on both pinned host
revisions: initialization, tool dispatch, optional sync arguments, full-turn tail capture,
session ID forwarding and shutdown. SDK backends were mocked; no live service was contacted.
Reproduce the host smoke from the repository root (use the Hermes environment or a test
venv with its imported dependencies installed):
```bash
HERMES_SOURCE=/path/to/hermes-agent python integrations/hermes-plugin/tests/smoke_hermes.py
```
The check confirms bundled precedence, then isolates external discovery by replacing the
bundled search root with an empty temporary directory in the test process only.