Standalone Hermes memory-provider plugin scaffold for Metronix
Project description
hermes-memory-metronix
Standalone Hermes MemoryProvider backed by Metronix Memory.
This repository owns the Hermes-native adapter layer:
- Hermes plugin packaging
- config and auth resolution
- prefetch and write-through behavior
- Hermes-focused unit, integration, and smoke tests
Metronix backend contracts and MCP integration docs remain in the
metronix-memory repository.
Status
This is a scaffold, not a finished public plugin release.
What it already does:
- Implements the Hermes
MemoryProvidercontract - Prefetches relevant Metronix memory records before a turn
- Mirrors Hermes
memory(action="add")writes into Metronix - Optionally writes completed turns as session-scoped Metronix memory
- Supports bearer-token auth, with email/password login fallback
What is intentionally still conservative:
- No custom Hermes setup wizard yet
- No extra provider-specific model tools yet
- Prefetch currently targets
/api/v1/memory/search - Knowledge-document / page retrieval is left as a follow-up
Layout
The installable Hermes plugin is this repository root. Its provider implementation lives in:
plugin/metronix/
Hermes discovers user-installed memory providers from:
~/.hermes/plugins/<name>/__init__.py
Install
Requires Hermes and Python 3. Choose one option. Both use the same secure, interactive setup command.
Option 1: install script
curl -fsSL https://raw.githubusercontent.com/mtrnix/hermes-memory-metronix/main/scripts/install-plugin.sh | bash
The script installs the latest main branch, then starts
hermes-metronix-setup.
Option 2: PyPI
python3 -m pip install --upgrade "hermes-memory-metronix>=0.1.3"
hermes-metronix-setup
The setup command prompts for your Metronix base URL, workspace ID, and a REST
JWT or personal API key. It copies the provider to
~/.hermes/plugins/metronix, writes non-secret settings to
~/.hermes/metronix.json, stores the token in ~/.hermes/.env with 0600
permissions, and runs hermes memory setup metronix.
It never prints the token. Save the original token in a password manager and
rotate it if it is exposed. Do not use METRONIX_MCP_API_KEY: it is for MCP,
not the REST API used by this provider.
Hermes plugin manager
Alternatively, install this repository directly with Hermes:
hermes plugins install mtrnix/hermes-memory-metronix --no-enable
Quick smoke test
-
Run
hermes memory status; it should showProvider: metronix. -
Run
hermes chat—there is no--memory-providerchat flag—and enter:Remember that my test marker is hermes-metronix-001.
-
Start a fresh
hermes chatsession and ask for the test marker. A pass includeshermes-metronix-001in the answer.
hermes memory status may display unused secret fields as “Missing”. The
provider accepts either METRONIX_AUTH_TOKEN, or both METRONIX_EMAIL and
METRONIX_PASSWORD.
Plugin config
The plugin reads non-secret config from:
$HERMES_HOME/metronix.json
And secrets from:
$HERMES_HOME/.env- process environment
Example metronix.json:
{
"base_url": "http://localhost:8000",
"workspace_id": "MTRNIX",
"agent_id": "hermes",
"prefetch": true,
"prefetch_top_k": 8,
"prefetch_types": ["fact", "preference", "pinned"],
"cite_sources": true,
"write_through": true,
"write_scope": "workspace",
"sync_turns": true
}
Secrets:
METRONIX_AUTH_TOKEN=...
# or:
METRONIX_EMAIL=admin@metronix.local
METRONIX_PASSWORD=...
Important:
METRONIX_AUTH_TOKENmust be a REST JWT or personal API key for/api/v1/*METRONIX_MCP_API_KEYis for/mcp, not/api/v1/memory/*- if you provide both a bearer token and login credentials, the client will
retry once with a fresh login JWT when the original bearer gets a
401
Mapping notes
Hermes write scopes map to Metronix scopes like this:
per_agent->per_agentworkspace->globalshared->globalsession->session
The current prefetch path uses Metronix memory search, so prefetch_types
maps to Metronix memory kinds:
factpreferencepinned
page is not wired yet because the current scaffold does not call a unified
knowledge-search endpoint.
Migrating an existing llm-wiki into Metronix
Hermes's bundled llm-wiki skill maintains a directory of markdown pages
(entities/, concepts/, comparisons/, queries/, raw/) at $WIKI_PATH
(default ~/wiki). To bulk-ingest an existing wiki into Metronix's Knowledge
Base (chunked, embedded, searchable via metronix_search_fast/metronix_get):
python scripts/migrate_wiki.py \
--wiki-path ~/wiki \
--base-url http://localhost:8000 \
--workspace-id MTRNIX \
--auth-token "$METRONIX_AUTH_TOKEN"
Each page becomes a document with source_type="hermes_llm_wiki" and a
deterministic doc_label derived from its wiki-relative path, so re-running
the script updates existing documents instead of duplicating them. By
default, only raw/, entities/, concepts/, comparisons/, and
queries/ are ingested; SCHEMA.md, index.md, log*.md, and
_archive/** are skipped (pass --include-archive to include archived
pages instead).
Requires METRONIX_AUTH_TOKEN to be a REST JWT or personal API key for
/api/v1/*, not METRONIX_MCP_API_KEY, which is for /mcp only.
Development
Run the fast local checks:
uv run --extra dev pytest tests/unit -v
RUN_INTEGRATION_TESTS=1 uv run --extra dev pytest tests/integration/test_live_metronix.py -v
Verify against Hermes
Clone a clean Hermes checkout separately, then verify both the current
MemoryProvider abstract base class and Hermes's real plugin loader:
HERMES_AGENT_SRC=/absolute/path/to/hermes-agent \
uv run --extra dev pytest \
tests/unit/test_real_abc_contract.py tests/unit/test_hermes_plugin.py -v
The compatibility tests skip with an explicit reason when HERMES_AGENT_SRC
does not point to a Hermes checkout. They should pass before publishing a
plugin release.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_memory_metronix-0.1.3.tar.gz.
File metadata
- Download URL: hermes_memory_metronix-0.1.3.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eea07abd164956fc0d8d045e23bfc89b1683a9fb1785b514d4df7c08728b25b3
|
|
| MD5 |
75ff152509e4428a6a37461644d73772
|
|
| BLAKE2b-256 |
335570fe23d59cdd15b2a746d0579d717a3372a5e310ee1726aaaaad18ce52c4
|
Provenance
The following attestation bundles were made for hermes_memory_metronix-0.1.3.tar.gz:
Publisher:
pypi-publish.yml on mtrnix/hermes-memory-metronix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_memory_metronix-0.1.3.tar.gz -
Subject digest:
eea07abd164956fc0d8d045e23bfc89b1683a9fb1785b514d4df7c08728b25b3 - Sigstore transparency entry: 2217460522
- Sigstore integration time:
-
Permalink:
mtrnix/hermes-memory-metronix@dfabebb5cd034b68e213655ffddcdc816add9619 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/mtrnix
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@dfabebb5cd034b68e213655ffddcdc816add9619 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hermes_memory_metronix-0.1.3-py3-none-any.whl.
File metadata
- Download URL: hermes_memory_metronix-0.1.3-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1690ed8a5eff9a735b52942b56f5803d5fd8e5d7f49bd30394a1e5e973cc12d
|
|
| MD5 |
e20511ae62626971e93a6f718b700cbe
|
|
| BLAKE2b-256 |
f966da90550d17517be38ddf4808526b8a3b172a289fabf98b4cfbd27f83e0fb
|
Provenance
The following attestation bundles were made for hermes_memory_metronix-0.1.3-py3-none-any.whl:
Publisher:
pypi-publish.yml on mtrnix/hermes-memory-metronix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_memory_metronix-0.1.3-py3-none-any.whl -
Subject digest:
b1690ed8a5eff9a735b52942b56f5803d5fd8e5d7f49bd30394a1e5e973cc12d - Sigstore transparency entry: 2217461257
- Sigstore integration time:
-
Permalink:
mtrnix/hermes-memory-metronix@dfabebb5cd034b68e213655ffddcdc816add9619 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/mtrnix
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@dfabebb5cd034b68e213655ffddcdc816add9619 -
Trigger Event:
release
-
Statement type: