hermes-dreaming is a free skill for Hermes Agent that helps keep its memory in order every night. It checks saved facts against what people actually said, suggests the agent lock in what matters, asks about anything stale and warns in advance that memory is filling up. After hermes-cron, it’s my second skill in the official Hermes Agent plugin catalogue: the pull request was merged on 4 October by Teknium from the Nous Research team. The skill has its own page in the catalogue: category Memory, tier Community, MIT licence.
As of 30 October 2026 the latest release is 3.8.0, and the Hermes catalogue has 3.7.1 pinned. This article covers why you need the skill, how a night works and how to install it. The follow-up covers fixes to confirmations, the optional cloud judge, merging duplicates, versions 3.5–3.8 and how to upgrade an installation that’s already running.
Why Hermes Agent memory goes bad without anyone noticing
Hermes Agent has built-in persistent memory: two files, MEMORY.md with the agent’s notes and USER.md with what it knows about you. Their contents go into every new conversation, and their size is capped in characters. This kind of memory breaks quietly. Either useful things never reach it: three times in a month you said you’d rather have calls after lunch, and in a new conversation the agent has no idea. Or it fills up with stale entries and duplicates until it hits the limit, and new entries simply stop being saved. The agent doesn’t complain and doesn’t crash; it just silently stops remembering. We’ve covered all five layers of Hermes memory, and why the agent doesn’t see a new entry straight away, in a separate article.
The word dreaming comes from OpenClaw, another open-source agent with a similar mode; the skill also borrowed its scoring weights and thresholds from there. The analogy with sleep is direct: at night the brain goes over the day and decides what to keep for the long term. Claude Code has its own version of dreaming too; we talked about it in our summary of a lecture on context engineering.
What the hermes-dreaming skill gives you
In short, the agent remembers what really matters about you and doesn’t clutter its memory. You don’t need to tell it “remember this”. If you come back to the same topic on different days (a new project, an agreement with a client, a habit), the skill notices, the agent saves the fact to persistent memory and tells you in the morning that it has remembered it. This needs a fact store, holographic by default. Since 11 October it’s no longer built into Hermes but installs as a separate plugin from the catalogue, and I maintain it as well; the details are in the article on holographic.
Meanwhile, stale things don’t hang around in memory for years. You changed jobs, moved house, closed a project: if nobody has mentioned an old entry for a long time, the agent asks whether it’s still current and removes it once you say “not any more”. If a new price, a new address or a new class day comes up in conversation, the old entry is updated rather than left sitting next to the new one; when the agent isn’t sure which version is right, it checks with you. And if an entry is so important that it must never be lost in any clean-up, say “peanut allergy”, you can name it in the settings, and the skill will raise the alarm if it disappears from memory.
A full memory won’t catch you off guard. When space is running out, the skill wakes the agent, and it tries to tidy up: merge similar entries and remove duplicates. If there’s nothing to remove, you find out in advance, not when the agent has already stopped remembering new things.
The bulk of the work is done by an ordinary script, and the model only wakes up when there’s something to decide: in the basic mode a quiet night costs no tokens. The agent changes no more than a few entries a night, a filter cuts out known password and key formats, and bots and untrusted group chats don’t count as confirming facts. This is rule-based checking, not a guarantee that any secret will be recognised. In the morning a short summary arrives: what was remembered and a couple of questions. You answer in plain words, and the same question won’t come back every day.
How hermes-dreaming works: one night
The key decision in hermes-dreaming is that rules do the main work. By default an ordinary Python script runs at night: no network, no model calls, standard library only. Since version 3.3 you can separately switch on a cloud judge, and then the script sends permitted “fact – message” pairs to a decision model. The judge is off by default and can only withdraw a confirmation that the rules have counted.
First the script looks for confirmations. A fact becomes a candidate for persistent memory only if people came back to it themselves, most often by mentioning it on different days. The script finds mentions by matching significant words and shows them to the agent as evidence, while the decision to write stays with the model. If the store marks where facts came from (holographic 0.15 and newer), only what a person said or confirmed themselves goes into persistent memory: since 3.8.0 an agent’s conclusion that nobody has confirmed isn’t carried over by any route, and if people keep repeating it on different days, the skill suggests asking for confirmation. It compares not letters but stems: “we’ve finally moved to Lisbon” confirms the fact “moved to Lisbon”, while “my brother moved to Moscow” doesn’t. This works in every language holographic reads: Latin-script languages by stems without diacritics, Chinese, Japanese, Korean and Thai by character sequences. Machine text doesn’t count: cron job prompts, internal summaries after context compression, links, untrusted chats and the agent’s own threads. Then the candidate gets a score using the OpenClaw weights: how far it can be trusted, how often and on how many different days it came up, and how fresh it is.
Next comes the check against memory. An exact repeat counts as a duplicate, and a repeat with different numbers as a conflict, a possible update: the agent replaces the old entry if the new one is more reliable, and asks if it’s unsure. A month in words and a day of the week count as numbers too: “ballet has moved to Tuesday” against the entry “ballet on Mondays” is a question about an update, not a duplicate. And “25 000”, “25,000” and “25000” are the same number, so a restated price won’t become a conflict. Secrets and prompt injection attempts go into quarantine and never reach the model, and past events with a date drop out of the proposals: the script understands dates and event keywords in 15 languages, from “14 de noviembre” to 11月14日.
If there’s no work, the nightly job prints {"wakeAgent": false}, and the main agent doesn’t start. Without the cloud judge such a night doesn’t cost a single token; with the judge switched on, its own calls may already have happened before this decision. It’s the same pre-check trick as in hermes-cron. Memory that’s nearly full, from 85% by default, also counts as work: the limit blocks writes without any warning, and without this check nobody would notice that new facts had stopped being saved.
If there is work, the agent gets a compact summary and makes its edits with the regular memory tool. The skill’s instructions keep it within bounds: no more than six changes a night, including no more than three new entries, and an entry can only be replaced using a verbatim anchor quote that the script provides. A night without a single write is also a success. The person gets a report in their own language, six short lines at most, and every candidate, with a note of where it came from, goes into the DREAMS.md diary. If memory write approval is on in Hermes, the report says exactly that: “sent for approval”, not “saved”. The script also sees entries waiting for approval and doesn’t propose them a second time.

No question is left hanging forever
A proposal to move a fact into memory ends one of two ways: it’s either written or rejected. If the person answered “that’s no longer relevant”, the fact goes onto the reject list and is recognised by its text, not by a number; a mistaken rejection can be undone. But a rejection isn’t forever either. Life changes back: a child quits ballet in May and goes back in September. So a rejection older than six months is lifted if the fact has come up again since, and the agent doesn’t write it silently but asks. New facts, conflicts and “is this still current?” questions can simply be left unanswered: they then come back after 14 days at the earliest.
If the fact store is holographic 0.8.0 or newer, the person’s answer also goes to where every fact has a history. “That’s no longer true” closes the fact, “it’s changed” records a new version, “that was a mistake” marks it as wrong, and “forget” erases the fact along with its versions and its entry in memory. The skill also cleans up its own copies: the diary, reports, internal lists and the logs of its nightly jobs. A separate model-free job does this every 15 minutes. It doesn’t rewrite Git history, external dumps, system backups or the Hermes session database. In 3.4.2 this is spelled out in the instructions: the report has to tell a successful deletion from the store apart from copies left outside it, without repeating the forgotten text. And a rejected fact loses trust in the store, so search is less likely to slip it into ordinary answers.
For an entry nobody has mentioned for 60 days, the agent asks whether it’s still current. If, after the question, the entry stays unchanged for 14 days or is rewritten with a fresh date, it counts as confirmed and is left alone for the next 90 days, and the skill never asks about entries marked 📌. The pauses only start once the agent has actually answered: if a night breaks off halfway, the same questions come again. And if more than a quarter of the entries or text vanishes from memory overnight, the next report says so.

Is it safe: what the skill reads and writes
The scripts read the conversation database, the fact store and the memory files, and they write their own state, the DREAMS.md diary and, if the judge is on, its cache and a log of the pairs it sent. Only the agent changes memory, through the standard tool. The scripts don’t write to the fact store. The agent adds candidates during extraction, adjusts trust based on the check results, and on the person’s answer closes, corrects, forgets or merges existing facts. Since dreaming 3.4, the extraction job can also merge its own just-written restatement with an old fact, when holographic 0.19 suggests it and there’s no new information.
One caveat for anyone who has turned on memory write approval in Hermes: it doesn’t extend to the holographic store, and facts are written there directly. If that matters, you can switch off the fact source (fact_source: none): the nightly memory review keeps working, and the installation check will remind you of this itself. Until trusted group chats are listed in the settings, none of them counts as confirmation. By default the scripts send nothing anywhere, but in the nightly session the agent passes recent messages from people to the connected model, up to 200 of them or 40,000 characters, along with fragments of facts. The cloud judge, when switched on, has its own recipients and sending permissions; they’re covered in the follow-up.

The diagram shows the basic mode without the cloud judge. If you switch the judge on, network requests and its internal files appear.
What’s new in 3.4–3.8
Since dreaming 3.4.0 and holographic 0.19.0, the nightly pass looks for similar facts across the whole main database and proposes one pair a night: a number like D-17, both texts in full and the question “merge?”. There’s no merging at night. The person answers the specific number, and the agent calls fact_store merge with a check on the versions that were shown. The duplicate’s history is kept; if the texts have changed in the meantime, the merge doesn’t happen. Both required versions are already in the catalogue.
In 3.4.1 the extraction instructions were refined: notice long-term rules and constraints mentioned in passing, check which keywords the store actually accepted, and keep the ones already there. These are instructions to the agent, not proof that the model now misses nothing.
Since 3.5.0 updating the nightly jobs has become easier: the cron installer updates the standard instructions of existing jobs itself and leaves manually edited ones alone, with a warning. 3.6.0 can optionally add a summary of job results from the holographic 0.20 log to the nightly report. 3.7 sped up the night on large databases: the duplicate search no longer gives up on thousands of similar facts, and neither does the confirmation count on long conversation windows. 3.8.0 closed a loophole through which an unconfirmed agent conclusion could get into persistent memory. The detailed breakdown is in the follow-up.
How to install hermes-dreaming in Hermes Agent
You need Hermes Agent 0.21 or newer and Python 3.9+. The commands below are for Linux and macOS; on Windows the paths to the scripts and the Hermes interpreter will be different. The plugin installs from the catalogue by name, and as of 30 October the installer fetches the pinned 3.7.1. Installing from the repository URL changes the source of trust and can then update past the pinned commit. For a skill that’s already running, and for installing the latest 3.8.0 by hash, see the upgrade instructions.
hermes plugins install hermes-dreaming
hermes plugins enable hermes-dreaming
Hermes only runs cron job scripts from ~/.hermes/scripts/, so the next step copies the checks there, creates the settings file ~/.hermes/dreaming.json, does a trial run on copies of the data and checks the fact source:
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install.py
The same script with the --check flag changes nothing and only checks the installation. It’s worth running after every update: the copies in scripts/ can drift away from the skill. The copies themselves and the nightly job instructions are brought back in line after an update by install_cron.py --upgrade; that’s covered in the upgrade instructions. For a full check of how the jobs are bound to the plugin, run the check with Hermes’s own interpreter, shown in the next block; a plain python3 may not find the plugin registry.
Next comes the part nobody will do for you: open dreaming.json and fill in the trusted chats (trusted_chat_ids), the agent’s names and the fact source. If a trusted chat is a forum, list in excluded_threads the threads where it’s not people writing but bots and the agent’s notifications. There’s no need to duplicate the time zone and memory limits: if they’re not in dreaming.json, the skill takes them from Hermes’s own settings. Then the nightly jobs. They’re created with Hermes’s own interpreter, and it’s worth looking at the plan first:
~/.hermes/hermes-agent/venv/bin/python \
~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install_cron.py --deliver local --dry-run
If you’re happy with the plan, run the same command without --dry-run. To get the report in Telegram, put telegram:<chat_id>:<thread_id> instead of local. There are three jobs: the nightly pass itself, fact extraction from conversations, and the clean-up of copies of forgotten facts, which runs every 15 minutes without a model and stays silent if there’s nothing to clean. Extraction can be run once a week: in a small family the nightly run most often replies [SILENT], with nothing to add.
The default fact source is the holographic store (memory.provider: holographic), and extraction only works with it. You need version 0.8.0 or newer: versions 0.2–0.7 refuse writes from nightly jobs, and extraction saves nothing. If holographic is set to keep a separate database for each chat, the nightly pass doesn’t read it by default, so as not to carry facts from one chat into memory that everyone sees, and the report will name the reason plainly. You can allow the chats you need in the settings (chat_stores). An export to SQLite or JSONL works too, and without a store the skill only works with the memory files: it asks about old entries and keeps an eye on how full they are. In both cases extraction isn’t needed, so add --extract-schedule "" to the command. And if you don’t need the clean-up of forgotten facts either (without holographic there’s nothing to forget), also add --sweep-schedule "": then only the nightly job remains. To see what tonight would propose without changing anything:
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/dream.py --dry-run
If you don’t have Hermes yet, start with installing it and connecting it to Telegram, then the settings after installation. The code, documentation, instructions for upgrading from older versions and a place for questions are in the GitHub repository. Issues and pull requests are welcome.
I’ve put together a separate overview of where to find other skills and plugins for Hermes and how to vet them before installing.
FAQ
How much does hermes-dreaming cost?
The skill is free, and the code is open under the MIT licence. In the basic mode you pay for the Hermes model’s tokens when there’s work for it. If you switch on the cloud judge, its own calls are paid for too, even if the main agent doesn’t end up waking.
Do I need internet access and API keys?
In the basic mode the scripts need neither internet nor keys. In the nightly session it’s the model connected to Hermes that does the work. The optional cloud judge needs the network and an OpenRouter key, an OpenAI key or both; it’s off by default.
How is hermes-dreaming different from Hermes’s built-in memory?
It doesn’t replace it. It’s not a new memory provider but a nightly auditor: it checks what’s already in the built-in memory and the fact store, and suggests to the agent what to add, update or remove.
What languages does the skill work in?
All the ones holographic reads, currently 18. Russian and other languages written in Latin or Cyrillic script are compared by word stems; Chinese, Japanese, Korean and Thai by character sequences. The skill recognises dates and past events in 15 languages.
What should I do if memory disappeared after hermes update?
Since 11 October holographic no longer comes with Hermes; it installs as a separate plugin from the catalogue. If it didn’t install during the update, memory switches off. How to fix that is covered in the article on holographic and in the plugin’s README. After that, run install.py --check: it will show whether the skill can see the fact store.
Does the skill work with mem0, Honcho or Supermemory?
Not directly: cloud stores extract facts and remove duplicates on their own servers. If what you need is specifically a check against live conversations, you can export the facts to JSONL and connect that as a source.





