Noema Memory Provider for Hermes

August 3, 2026 · View on GitHub

A Hermes memory provider plugin that gives any Hermes agent structured, persistent memory backed by a Noema Cortex.

Every memory is a plain markdown file (a "Trace") with typed frontmatter — searchable via FTS5, linked through derivation lineage, and federable across Cortexes.

Installation

  1. Install the Noema binary:

    brew install Fail-Safe/tap/noema
    
  2. Create a Cortex if you don't already have one:

    noema init --name my-cortex
    
  3. Install the plugin files embedded in the Noema binary:

    noema plugin hermes install --hermes-home <hermes-install>
    

    This is local and network-free. Matching files are skipped; changed managed files are preserved unless you explicitly pass --force. To check for drift without changing anything:

    noema plugin hermes status --check --hermes-home <hermes-install>
    

    The matching release's noema-hermes-plugin.tar.gz remains available for manual/offline installation.

  4. Run the Hermes memory setup wizard:

    hermes memory setup
    

    Select noema when prompted and provide your cortex name.

Configuration

KeyRequiredSecretEnv varDefaultDescription
cortex_nameYesNoNOEMA_CORTEXNoema cortex to use
noema_binaryNoNoNOEMA_BINARYauto-detectPath to noema binary
transportNoNostdiostdio or http
http_urlNoNoNOEMA_HTTP_URLMCP endpoint URL (HTTP transport only)
bearer_keyNoYesNOEMA_MCP_KEYBearer key for keyed mode

Config is saved to {hermes_home}/noema.json.

Transport modes

stdio (default) — the plugin spawns noema serve --transport stdio as a subprocess. No network configuration needed. The process lifecycle is fully managed: started on initialize(), terminated on shutdown().

http — the plugin connects to an already-running noema serve --transport http endpoint. Use this for remote Cortexes or multi-agent setups sharing one server. Set http_url to the server's base URL (e.g., http://localhost:3000).

Agent tools

Six Noema tools are exposed to the Hermes agent:

Hermes toolNoema toolPurpose
noema_searchsearch_tracesFull-text search across traces
noema_remembercreate_traceCreate a new memory trace
noema_recallget_traceRead a specific trace by ID
noema_listlist_tracesBrowse/filter by type, tag, author
noema_updateupdate_traceModify an existing trace
noema_lineagetrace_lineageFollow derivation chains

Session lifecycle

The plugin automatically manages session state:

  • On initialize — creates a session log trace (type: context) and caches the Cortex instructions for system prompt injection.
  • Each turn — appends the user/assistant exchange to the session log (non-blocking, runs in a background thread).
  • On context compression — appends the compressed context to the session log and returns a breadcrumb pointing back to the trace.
  • On session end — creates a summary trace (type: observation) derived from the session log, then archives the session log.

Prefetch

On each turn, prefetch() searches the Cortex with the user's message and returns the top 5 matching traces (excluding verbose session logs). FTS5 on local SQLite is sub-millisecond, so no cache warming is needed.

Memory mirroring

When Hermes writes to its built-in memory via on_memory_write(), the plugin mirrors the operation as a Noema trace tagged hermes-mirror:

  • add creates a new trace (type: note)
  • update updates the matching mirrored trace
  • delete archives the mirrored trace (never hard-deletes)

Requirements

  • Python 3.9+
  • Noema binary (v0.6.0+) installed and accessible
  • A Noema Cortex initialized with noema init

License

MIT — same as Noema.