Hermes Tiered Memory
hermes-tiered-memory is a single Hermes Agent memory provider with a hot L1
(Mnemosyne) and durable L2 (Hindsight). It keeps the Hermes-facing namespace
small and explicit, fails closed when dependencies or configuration are invalid,
and promotes L1 writes through a durable local outbox.
Version: 1.0.2
Public tools
The provider exposes exactly these public memory tools:
tiered_memory_search— search withqueryand an optionallimit(1–100).tiered_memory_store— storecontentwith optional objectmetadata.tiered_memory_delete— delete bymemory_id.
The L1 and L2 adapters are internal implementation details. They do not register
additional Hermes tools. This project does not add native hermes tiered-memory
commands; its standalone commands are the hermes-tiered-memory console script
described below.
Architecture
Hermes Agent
└─ one CompositeProvider
├─ Mnemosyne L1 (profile/bank-scoped local memory)
├─ durable SQLite outbox (L1 write → asynchronous promotion)
└─ Hindsight L2 (HTTPS, stable document identity, provenance metadata)
Reads are L1-first, with L2 recall and L1 backfill on a miss. Writes commit to L1 and enqueue promotion. Deletes create durable L1 tombstone state and enqueue L2 deletion. The provider uses one configured profile and bank scope; it does not use ambient Mnemosyne defaults.
Installation
Requirements: Python >=3.11,<3.14 and hermes-agent>=0.7.0.
Install the package and the live adapter extras in the same Python environment used by Hermes:
python3 -m pip install 'hermes-tiered-memory[mnemosyne,hindsight]'
For a source checkout, build and install a wheel, then install the Hermes plugin
shim. HERMES_HOME must already exist:
python3 -m build --wheel
scripts/install_plugin.sh dist/hermes_tiered_memory-1.0.2-py3-none-any.whl "$HERMES_HOME"
The script installs the wheel, creates the tiered-memory plugin shim, and
writes its plugin.yaml. Then set memory.provider: tiered-memory in the
selected profile and restart Hermes. See INSTALL.md for discovery
and troubleshooting details.
Provisioning and diagnosis
These are the supported standalone commands:
hermes-tiered-memory provision --help
hermes-tiered-memory doctor --help
Provision a signed endpoint configuration and a reviewable Hermes YAML patch:
hermes-tiered-memory provision \
--output-dir ./tiered-memory-config \
--key-id operator-ed25519-1 \
--config-id hindsight-config-1 \
--host hindsight.example.invalid \
--auth-mode api_key
provision generates an Ed25519 private key, canonical protected config,
detached signature, and patch. It never accepts or reads the Hindsight API key.
Use a real HTTPS hostname and review the generated patch before applying it.
--auth-mode is exactly api_key or none.
Run read-only checks with the generated files and public key:
hermes-tiered-memory doctor \
--config ./tiered-memory-config/protected-config.json \
--signature ./tiered-memory-config/protected-config.sig \
--verification-key operator-ed25519-1=<base64-public-key>
doctor checks optional extras, protected-config validity, L1 availability, and
optionally an L2 /health endpoint. It does not write the live replay state.
Configuration and secret boundary
The provider reads memory.tiered through Hermes' effective profile
configuration. A minimal shape is:
memory:
provider: tiered-memory
tiered:
hindsight:
auth_mode: api_key # api_key or none
verification_keys:
- key_id: operator-ed25519-1
algorithm: ed25519
public_key_b64: <base64-public-key>
protected_config:
path: ./protected-config.json
signature:
path: ./protected-config.sig
profiles:
<active-profile>:
secrets:
hindsight:
api_key: <profile-secret> # required only for auth_mode: api_key
For api_key, the non-empty credential must exist in the active profile's
Hermes-owned secrets at profiles.<active-profile>.secrets.hindsight.api_key.
For none, that secret must be absent. The provider rejects both mismatches at
startup. Credentials are not stored in the protected endpoint file, generated
by provision, or sent by doctor; the API key is used only by the L2 HTTP
adapter's authorization header.
Read docs/security.md for the protected-config and crypto boundary, docs/migration.md for compatibility and upgrade notes, and docs/ci-release.md for CI and release behavior.
Quickstart
- Install
hermes-tiered-memory[mnemosyne,hindsight]into the Hermes Python environment. - Run
hermes-tiered-memory provision ...and keep the private key mode0600. - Apply the generated
memory.tieredpatch after review; put any API key in the active profile's Hermes secret configuration, never in the patch. - Set
memory.provider: tiered-memoryand restart Hermes. - Run
hermes-tiered-memory doctor ...before exercising the three public tools.
Documentation boundaries
README.md, INSTALL.md, and docs/ are user-facing documentation. The
research/ directory, map.md, issues/, and DEVELOPER.md are internal
design history or maintainer material, not product compatibility promises.
Start with docs/internal-design-history.md if
you need that distinction.
Development
python3 -m pip install -e '.[test]'
python3 -m pytest -q
See CHANGELOG.md and docs/release-notes-v1.0.0.md for the v1.0.0 release record.
Metadata
Release files for hermes-tiered-memory 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hermes_tiered_memory-1.0.2.tar.gz | 48.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hermes_tiered_memory-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 101.5 kB
Release files / hermes_tiered_memory-1.0.2.tar.gz
| Download URL | hermes_tiered_memory-1.0.2.tar.gz |
|---|---|
| Size | 48.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2cbbb7e2e6f6a7955dd65d80ccb16fabc813777462345477c8d81338335e9e53
|
|
BLAKE2b-256 checksum How to use checksums |
9574bd98ed06c39bce8b854e646694421c4ca7f066cde4666680c567cb4584af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency logRelease files / hermes_tiered_memory-1.0.2-py3-none-any.whl
| Download URL | hermes_tiered_memory-1.0.2-py3-none-any.whl |
|---|---|
| Size | 53.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26c297fc188b874e633a03ea10ff7814b4dbe4c3ec99a2d11814d435488889f4
|
|
BLAKE2b-256 checksum How to use checksums |
bba7e30a68867762a998521145be98ef8b0b0320593061ac94d87e2436bd46b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 4, 2026.
Transparency log