Hermes Agent Long-Term Memory Curation: Four Iron Rules for "Few but Precise"
Summary
Hermes Agent's long-term memory curation is not about storing more; it follows four iron rules that keep memory "few but precise":
- Bounded:
USER.mdat ~1,375 characters andMEMORY.mdat ~2,200 characters force conciseness. - Frozen: no rewriting within a session, protecting the KV cache and inference stability.
- Transparent: every write is announced (
💾 Memory updated), and can be approved, reverted, and reviewed with/journey. - Self-consolidating: when capacity is full nothing is silently dropped; a
Memory at 2,100/2,200 chars. Consolidate now...response forces the agent to make trade-offs through the three atomic operationsadd / replace / remove.
The result: the agent understands you better over time without ever getting bloated, and memory grows richer without ever getting out of control.
A common misconception
"The more an AI assistant remembers, the smarter it is."
The opposite is true. Remembering a lot of mixed-quality information makes an agent dumber — it starts treating your temporary, mistaken, and outdated statements as stable facts about you. A genuinely useful long-term memory system is always few but precise.
To deliver that, Hermes answers four questions:
- What deserves to enter long-term memory? (the write gate)
- How do incoming fragments become well-formed entries? (curation)
- What happens when information changes? (update semantics)
- What happens when capacity is full? (forced consolidation)
The sections below work through all four in order.
1. Writing: the agent is the first gate
Hermes' first gate is the write filter. Instead of storing every sentence, the agent judges for itself whether to write at four explicit moments:
- Compression: as context approaches its limit, the agent reviews the current session and extracts what is worth keeping across sessions.
- Checkpoint: at moments like closing out a task or switching topics, it takes stock of memory.
- Nudges: the system periodically asks the agent, "anything in this stretch worth long-term memory?" so important fragments are not lost.
- Explicit user instruction: "please remember X" is written with priority.
The judgment criteria usually include:
| Dimension | Meaning | Counter-example |
|---|---|---|
| Reusability | Might this be useful in other tasks later? | "I want a latte today" |
| Stability | Is it temporary or long-lived? | "my head hurts today" |
| Specificity | A vague attitude, or a reusable fact? | "I think I prefer things a bit more concise" |
| Privacy sensitivity | Emails, passwords, addresses not explicitly confirmed | Not written by default |
A well-trained Hermes Agent would rather remember too little than remember carelessly.
2. Curation: rewriting fragments into entries
Even after passing the write filter, incoming information is usually fragmentary. Hermes' second step is to rewrite fragments into well-formed entries.
For example, the raw conversation might be:
"Oh right, that API of ours was switched to go through the gateway instead of hitting the service directly — that was last week."
Hermes does not store that verbatim. It writes:
- [~2026-07-24] Project X's API now routes through the gateway instead of connecting directly.Four things happened there:
- Fact extraction: filler words like "oh right" are dropped.
- Subject resolution: "that API of ours" becomes "Project X".
- Time anchoring: "last week" becomes an approximate date.
- Retrievability: written as a structured entry so FTS5 can match it later (~20ms to match, ~1ms to page).
Only after structured curation does an entry stand a chance of being recalled months later.
3. Three atomic operations: add / replace / remove
Every modification Hermes makes to MEMORY.md must land on one of three atomic operations:
| Operation | Semantics | Trigger |
|---|---|---|
| add | Add a new entry | New event, new decision |
| replace | Overwrite an old entry with a new one | State change ("API now goes through the gateway" replaces "API connects directly") |
| remove | Physical deletion | User denial, expired entries, old entries merged away by consolidation |
Why are fuzzy operations (like "just update the related fields") not allowed?
Reason 1: atomic operations are auditable. Every memory change maps to "this entry → that entry", which is what makes precise review such as /memory diff <id> possible.
Reason 2: it forces the agent to decide explicitly. "Am I replacing, or adding?" — that binary choice is where trade-offs begin, and it prevents split personalities.
Reason 3: it lays the groundwork for the approval gate (section 7), where each pending item can be approved or rejected independently.
4. Update semantics: modify first, never append the opposite
This is where simple memory systems fall over: what happens when information changes?
The naive approach is to add another entry, which leaves the agent holding all of these at once:
- "user prefers Vue"
- "user later switched to React"
- "user went back to Vue"
Three parallel entries, and the model itself no longer knows which to trust.
Hermes updates rather than appending the opposite:
- Preference fields in
USER.mdtend to overwrite the old value (replace). - In
MEMORY.md, historical events are kept but the current-state field is updated (replace), leaving a short migration trace. - Anything the user explicitly denies ("I was never like that") is
removed — physically deleted, not recorded as "the user denied X".
The point of all this is to keep the agent's world model self-consistent.
5. When capacity is full: Consolidate now
Hermes sets a hard ceiling of ~2,200 characters for MEMORY.md. As it fills up, any add returns:
{
"success": false,
"error": "Memory at 2,100/2,200 chars. Consolidate now...",
"current_entries": [...],
"usage": "2,100/2,200"
}That is not a bug, it is the design.
If the oldest entries were dropped automatically when capacity filled up, the agent would never learn to make trade-offs — important information might get kicked out while irrelevant information stayed. Hermes does the opposite: writes are refused until the agent clears space itself.
Consolidation usually involves:
- Topic aggregation: several similar entries are summarized by an LLM into one broader memory.
- Expiry archiving: "this week's sprint goal is…" is
removed after the date passes. - Access-frequency downweighting: entries not recalled for a long time move to the back of the queue and get merged or deleted first.
Together, these mechanisms mean your offhand remarks from months ago do not keep polluting the agent's judgment about you, while genuinely important information gets reinforced repeatedly.
6. A consent-aware learning loop: the agent learns in the background without interrupting you
Hermes has one more hidden capability: a background self-reflection loop. It periodically:
- pulls the most recent sessions;
- runs a cheap model (such as Gemini Flash) over them to extract what is worth remembering;
- produces candidate memory entries marked
[auto].
Upstream calls this a consent-aware learning loop — learning should not interrupt the user, but the user can step in at any time.
The benefits:
- Cost falls to one third or one fifth: a cheap model handles the review, with almost no impact on capture quality in upstream testing.
- The agent grows even when you are not using it — as long as it stays online.
- No interference with foreground conversation: candidate entries wait for you at the approval gate in the next section.
7. The approval gate: if you are not comfortable with the agent acting on its own
Some users worry: "what if the agent writes something wrong into MEMORY automatically?"
Hermes offers an explicit switch:
memory:
write_approval: true # turn on the approval gateWith that on, all memory writes (including automatic ones from background reflection) are staged for review. Users go through them with:
/memory pending # list pending entries (background reflection marks them [auto])
/memory diff <id> # inspect a specific change
/memory approve <id> # approve (or all)
/memory reject <id> # rejectSkills have a separate skills.write_approval, because a SKILL.md can be long and awkward to display inline; Hermes provides /skills diff <id> so you can read the full unified diff.
The approval gate is essentially an explicit decoupling of the agent's autonomous learning from user sovereignty — the agent may accumulate experience freely, but every rewrite of the user's own records has to pass through the user.
8. Transparency: you can see every memory update
Hermes surfaces memory actions through notifications in real time:
| Setting | Displayed as |
|---|---|
off | Silent writes, nothing shown |
on (default) | 💾 Memory updated |
verbose | 💾 Memory ➕ User prefers terse replies (with a content preview) |
From "something was remembered" to "this exact entry was remembered", the granularity is yours to choose. That level of observability is rare among AI agents — most treat memory as a black box.
9. Learning Journey: reviewing how the agent grew
If you want to look back on what the agent has learned over months, Hermes provides /journey (aliases /learning, /memory-graph):
- CLI:
hermes journey(supports--playanimated replay and--jsonexport) - TUI: the
/journeyoverlay - Desktop: the Star Map interactive panel
With matching cleanup commands:
hermes journey list # list all nodes
hermes journey delete <node> # archive a Skill (recoverable) or delete a memory
hermes journey edit <node> # open in $EDITORThis tool matters far beyond novelty — it acknowledges something real: the way an agent grows is itself worth reviewing.
10. Why this restraint matters in practice
Put all of the above together and Hermes' memory philosophy comes down to four iron rules:
- Bounded: character ceilings force conciseness.
- Frozen: no changes within a session, protecting the cache.
- Transparent: every write is visible to the user, approvable and revertible.
- Self-consolidating: a full store is never silently dropped; the agent is forced to make trade-offs.
When marketing "AI memory", many products emphasize how large a memory store they support and how many entries they can hold. From a user's point of view, though, only three things matter:
- Did it remember the things that actually matter?
- Did it promptly update information that no longer holds?
- Will it get more verbose and more error-prone because it remembered a pile of irrelevant things?
A memory system that can answer "what should not be remembered" is a good memory system.
11. One thing is still missing for this to work in practice
However good the memory mechanism is, it has one prerequisite: the agent has to stay alive.
If you install Hermes on your own laptop, it naps every time you close the lid, the background reflection loop stalls, and nudge_interval never reaches its next trigger. Switching machines or reinstalling the OS means moving ~/.hermes/ by hand.
This is where cloud hosting becomes genuinely useful. LightVela is a cloud-hosted Hermes Agent service:
- A dedicated cloud instance online 24×7, with
MEMORY.md/USER.md/ the SQLite session archive living there permanently; - The background reflection loop keeps running, so the agent genuinely grows even when you are not using it;
- Data stays only on your dedicated server;
- Phone, laptop, Telegram, Lark — every channel reaches the same agent that knows you.
Hermes took the philosophy of "more memory is not better" to its logical conclusion; LightVela makes that philosophy take effect every single day, right next to you. That is how the promise of understanding you better over time actually gets delivered.
Key takeaways
- A good memory system = strict writing + structured curation + three atomic operations + forced consolidation + background reflection + an approval gate + full transparency.
- Remembering more does not mean being smarter; recognizing "what should not be remembered" and being forced to make trade-offs matters more.
- Hermes provides the engineering reference; LightVela aims to turn it into a product experience users can actually reach.
Why USER.md and MEMORY.md Cannot Be Merged
Three hard constraints — capacity, loading strategy, and update semantics — explain why Hermes Agent keeps long-term memory in two separate notes instead of a single merged file.
Memory vs Skill: Declarative Memory and Procedural Memory
Grounded in declarative vs procedural memory from cognitive science, explain why Hermes Agent splits long-term memory into Memory and Skill, and how they differ in trigger, form, and evolution speed.