Hermes Agent Can Now Remember: Persistent Memory in Three Commands

John Rood··4 min read

You explain a project constraint to your agent. You work through a decision together. The conversation ends. Tomorrow, you would rather keep working than repeat the background that made yesterday's answer useful.

That is why we built hermes-memoryrouter, a native memory provider for Nous Research's Hermes Agent. It captures completed conversational exchanges and retrieves relevant context before the next turn. The package is now available on PyPI, with MIT-licensed source on GitHub.

And we tested the thing people actually want: teaching an agent something in one session and having it remember in another.

What this adds to Hermes

Hermes already has persistent MEMORY.md and USER.md files. Those are useful, and this release does not pretend they disappear when you close a session.

MemoryRouter adds automatic conversational memory. Instead of manually deciding which useful detail deserves a line in a file, the provider captures clean user messages and final assistant replies. When you ask something later, it retrieves relevant memories from the vault behind your key.

Your existing model stays in Hermes. Your model credentials stay in Hermes. The plugin supplies memory through Hermes's native MemoryProvider interface, rather than routing your inference through another service.

Three commands to install

Start with a working Hermes installation using Python 3.11 through 3.13. Create a MemoryRouter account from the Hermes integration page, get your key, and export MEMORYROUTER_API_KEY in the environment where Hermes runs.

Then, in the same Python environment as Hermes:

pip install hermes-memoryrouter
hermes-memoryrouter install
hermes config set memory.provider memoryrouter

The middle command matters. The current Hermes 0.19.0 release discovers memory providers from its plugins directory. Installing a Python package alone does not put this provider there. Our helper copies the packaged source into $HERMES_HOME/plugins/memoryrouter/, using ~/.hermes when no custom home is set.

Re-run the helper after upgrading the package. We also include the memory-provider pip entry point for Hermes versions that support it, while retaining the directory installation as a fallback.

Prefer a key file? Use memoryrouter.key in your Hermes home with mode 0600. The setup documentation covers key lookup, profiles, configuration, and troubleshooting.

What happens during a conversation

Before a turn, the plugin asks MemoryRouter for relevant context using /v1/memory/prepare. It wraps the result as background memory for Hermes. Recall has a default 24,000-character cap and a 2.5-second timeout, so it can add bounded latency but never waits indefinitely.

After a completed turn, it sends the clean user message and final assistant reply to /v1/memory/ingest. Tool calls, tool results, thinking blocks, system text, and recalled-memory wrappers are filtered out. Capture runs in the background with one retry.

These exchanges go to the MemoryRouter account behind your key. Only enable capture for conversations you want stored there. An unavailable memory service does not crash Hermes, but failed writes are not guaranteed to be retained.

Tested before publishing. Tested again after.

The release gate started with a fresh Python 3.12 environment, isolated Hermes home, and the current PyPI release of Hermes: 0.19.0. All 32 offline tests passed.

Then we ran actual Hermes conversations using GPT-4.1 mini with no enabled toolsets. Session A learned a randomly generated HERMES-SHIP- token. That process ended. Session B started in a separate process with a different session ID and no shared conversation history. Its question named the test, but did not include the token.

Hermes returned the exact token.

After publishing hermes-memoryrouter 0.1.1, we created another fresh environment, installed both packages from PyPI, and repeated the same test with a new token. Exact recall again. The integration page shows that published-package result.

That proves the tested setup, not every possible model or deployment. It does establish the important part: the published package works through a real Hermes conversation loop, not just a successful import or a mocked API call.

Pick up where you left off

The plugin is open source. The setup is short. The next step is a conversation: tell Hermes a distinctive fact, end the session, start a fresh one, and ask about it.

Install the Hermes integration, read the docs, or inspect the source. Your next session should have more to work with than your last prompt.