Hermes Agent Memory: Long-Term Memory for Hermes (2026)
Hermes runs across Telegram, Discord, Slack, WhatsApp, Signal, and the CLI - and forgets you between sessions. The supermemory memory provider gives it profiles, hybrid search, automatic capture, and namespaced memory in one setup command.
Hermes is the most interesting agent runtime out right now: one gateway, and your agent lives everywhere you do - Telegram, Discord, Slack, WhatsApp, Signal, the CLI. Always on, always reachable.
Which makes its memory problem worse, not better. An agent you talk to five times a day across four apps re-introduces itself to you five times a day. Flat MEMORY.md files help until they're a 3,000-line junk drawer nobody searches.
Hermes ships a native supermemory memory provider. One setup command and the agent actually knows you.
Setup
pip install supermemory
hermes memory setup
Choose supermemory when prompted, paste your API key (grab one at app.supermemory.ai), done. Or set it manually:
hermes config set memory.provider supermemory
echo 'SUPERMEMORY_API_KEY=sm_...' >> ~/.hermes/.env
Why a native provider matters
This is not a script that hopes the model remembers to call it. The provider runs through Hermes's normal memory lifecycle:
- Prefetch - relevant memory context loads before each turn. You say "hi" and it already knows your name, your projects, and what you were doing yesterday.
- Turn capture - cleaned user/assistant turns are stored after each response.
- Session ingest - the full session is ingested at the end for richer graph updates.
- Explicit tools - search, store, forget, and profile tools are available to the model when it needs them.
The model never has to decide to remember. Remembering is the default.
The tools
| Tool | What it does |
|---|---|
supermemory-save |
Store an explicit memory |
supermemory-search |
Semantic search across memories |
supermemory-forget |
Forget by ID or best-match query |
supermemory-profile |
Retrieve the persistent profile and recent context |
Snake_case aliases (supermemory_store, ...) work too, for older configs.
Profiles: it knows YOU, not just your facts
Most memory is a bag of retrieved chunks. Supermemory maintains an evolving profile - static facts (name, role, stack) plus dynamic context (what you're focused on this week) - refreshed on a cadence and surfaced into context automatically.
That's the difference between an agent that recalls "user mentioned postgres once" and one that knows you're mid-migration off MySQL this sprint and answers accordingly.
Work brain, personal brain, project brains
One agent across Telegram and Slack means your memory namespaces matter. Multi-container tags give you separate buckets:
{
"container_tag": "hermes",
"enable_custom_container_tags": true,
"custom_containers": ["work", "personal", "project-alpha"],
"custom_container_instructions": "Use work for job and coding context, personal for life and hobbies, project-alpha for the alpha launch."
}
Automatic capture always lands in your primary container - no surprise writes. The agent reaches for a namespace only when your intent matches ("check my personal notes" → personal), steered by the instructions you write. Profile-scoped tags work too: hermes-{identity} becomes hermes-coder, hermes-personal, and so on.
Unlike a flat MEMORY.md, supermemory also gives you hybrid search (memories and documents together), versioned memory updates, and real forgetting - so namespaces stay clean instead of fossilizing.
Context compression stops being amnesia
Long threads hit compression and the summary eats the details. The provider hooks in before the window is discarded and pushes the salient content into long-term memory first. Compress the window, keep the memories.
MEMORY.md stays
We're not replacing Hermes's built-in files. Writes to MEMORY.md and USER.md can mirror into supermemory in the background - local files stay the editable source, and supermemory adds search, profiles, and structure on top. Keep your files; lose the junk drawer.
Knobs worth turning
$HERMES_HOME/supermemory.json:
| Key | Default | What it controls |
|---|---|---|
auto_recall |
true |
Inject memory context before turns |
auto_capture |
true |
Store turns after each response |
max_recall_results |
10 |
How much memory merges into context |
profile_frequency |
50 |
Profile refresh cadence (first turn + every N turns) |
capture_mode |
all |
How aggressively turns are captured |
search_mode |
hybrid |
hybrid, memories, or documents |
Self-host the whole thing
Supermemory is MIT-licensed and runs as a single binary. Set base_url in supermemory.json to your own instance and the agent's memory never leaves your infrastructure. Full config details are in the docs.
Your Hermes agent is already everywhere you are. Now it remembers like it.