Вслед за hermes-cron в официальный каталог плагинов Hermes Agent вошёл второй мой скилл — hermes-dreaming. Это ночная уборка памяти агента: раз в сутки скрипт сверяет то, что агент помнит, с тем, что люди на самом деле говорили, предлагает сохранить несколько проверенных фактов, спрашивает про устаревшие записи и заранее предупреждает, что память заполняется. Pull request 4 октября влил Teknium из команды Nous Research — после ревью, по итогам которого пришлось кое-что переделать. У скилла появилась своя страница в каталоге: категория Memory, уровень Community, версия 2.1.1, лицензия MIT.
Как память агента портится без шума
У Hermes есть встроенная постоянная память — два файла: MEMORY.md с заметками агента и USER.md с тем, что он знает о тебе. Их содержимое попадает в каждый новый разговор, а объём ограничен числом символов. Ломается такая память тихо. Либо полезное до неё не доходит: ты трижды за месяц сказал, что созвоны лучше ставить после обеда, а в новом разговоре агент об этом не знает. Либо она забивается устаревшими записями и дублями, пока не упрётся в лимит, — и новые записи просто перестают сохраняться. Агент не жалуется и не падает, он молча перестаёт запоминать.
Слово dreaming взято из OpenClaw — ещё одного open-source агента с похожим режимом; оттуда же скилл позаимствовал веса и пороги оценки. Аналогия со сном прямая: ночью мозг перебирает прожитый день и решает, что сохранить надолго. Свой вариант dreaming есть и у Claude Code — о нём мы рассказывали в выжимке лекции про context engineering.
Как проходит одна ночь
Главное решение в hermes-dreaming — тяжёлую работу делает не модель. Ночью запускается обычный скрипт на Python: без сети, без вызовов языковой модели, только на стандартной библиотеке.
Сначала он ищет подтверждения. Факт становится кандидатом в постоянную память, только если люди сами к нему возвращались — чаще всего упоминали его в разные дни. Упоминания скрипт находит по совпадению значимых слов и показывает агенту как доказательства, а решение о записи остаётся за моделью. Машинный текст не засчитывается: промпты cron-задач, служебные сводки после сжатия контекста, ссылки, недоверенные чаты и собственные ветки агента. Потом кандидат получает оценку по весам из OpenClaw: насколько ему можно доверять, как часто и в сколько разных дней о нём говорили, насколько он свежий. Дальше — сверка с памятью. Точный повтор считается дублем, а повтор с другими цифрами — конфликтом, возможным обновлением: агент заменит старую запись, если новая надёжнее, а если сомневается — спросит. Секреты и попытки prompt injection уходят в карантин и до модели не доходят, а прошедшие события с датой выпадают из предложений — даты скрипт понимает на русском, английском и тайском.
Если работы нет, ночная задача печатает {"wakeAgent": false}, и модель не запускается вовсе: тихая ночь обходится этой задаче без единого токена. Это тот же приём предварительной проверки, что и в hermes-cron. Работой считается и память, заполненная почти до предела, по умолчанию от 85 %: лимит блокирует запись без предупреждений, и без такой проверки никто не заметит, что новые факты перестали сохраняться.
Если работа есть, агент получает компактную сводку и вносит правки обычным инструментом памяти. Инструкция скилла держит его в рамках: не больше шести изменений за ночь, из них не больше трёх новых записей, а заменить запись можно только по дословной цитате-якорю, которую выдаёт скрипт. Ночь без единой записи — тоже успех. Человеку приходит отчёт на его языке, максимум шесть коротких строк, а все кандидаты с указанием, откуда они взялись, ложатся в дневник DREAMS.md.

Ни один вопрос не висит вечно
Предложение перенести факт в память заканчивается одним из двух: его записывают или отклоняют. Если человек ответил «это уже неактуально», факт уходит в список отказов без срока давности — ошибочный отказ можно отменить, — причём узнаётся по тексту, а не по номеру. Новые факты, конфликты и вопросы «это ещё актуально?» можно просто оставить без ответа: тогда они вернутся не раньше чем через 14 дней.
О записи, про которую 60 дней никто не вспоминал, агент спросит, актуальна ли она. Если после вопроса запись пролежала без изменений 14 дней или её переписали со свежей датой, она считается подтверждённой и следующие 90 дней отдыхает, а о записях с пометкой 📌 скилл не спрашивает никогда. Паузы начинаются, только когда агент действительно ответил: если ночь сорвалась на середине, те же вопросы придут снова. А если за ночь из памяти исчезло больше четверти записей, следующий отчёт об этом скажет.

Что выяснилось на живом агенте
С июня hermes-dreaming каждую ночь работает у нашего семейного ассистента на Hermes и вместе с ним пережил обновления с 0.18 до 0.21.5. Многие правила в нём выросли из конкретных сбоев.
Ночной запуск 16 августа не сохранил ни одной записи. Агент подставил в замену записи пересказ вместо точной цитаты. Инструмент памяти ищет заменяемый текст как дословную подстроку, каждый промах засчитывается во встроенную защиту от повторяющихся ошибок, и примерно после четвёртого запись блокируется до конца хода. Теперь скрипт сам выдаёт агенту дословный якорь, а замена без него запрещена.
Другой случай показал, что удалить запись из памяти не значит забыть факт. После ручной уборки в памяти осталось 13 записей из 30, а скрипт в ответ предложил 29 кандидатов: факты лежали в хранилище и снова числились «не в памяти». Так появились список отказов и команда, которая одним движением заносит туда всё, что удалено при уборке.
Что поменяли по ревью
Teknium отметил, что скрипты аккуратные: базы открываются только на чтение, сеть не используется, содержимое сообщений подаётся модели как данные, а не как инструкции. Но перед включением в каталог попросил исправить две вещи.
Первая — скрипт, который переписывал файл самого Hermes, cron/scheduler.py. Он остался со времён, когда у cron-задач не было доступа к памяти; в Hermes 0.21 доступ появился штатно. Плагинам каталога менять ядро запрещено, а скиллу, который требует 0.21 и новее, патч и не нужен, — его убрали. Вторая — ночные задачи запускали не ту копию скилла, что прошла ревью: установщик требовал отдельно поставить скилл из последнего коммита репозитория. Теперь задачи привязаны к скиллу внутри самого плагина, и ночью работает ровно то, что установлено из каталога.
Независимое повторное ревью нашло ещё и слабое место в обновлении со старых версий — его закрыли в версии 2.1.1. 4 октября Teknium проверил исправления и одобрил запись, а при слиянии дописал в описание плагина оговорку: агент в ночной сессии отправляет настроенной у тебя модели недавние сообщения людей (до 200 штук или 40 тысяч символов) и фрагменты фактов. Сами скрипты никуда ничего не отправляют, но часть переписки модель видит — это стоит знать до установки.
Для пользователя у каталога есть ещё один плюс: запись в нём закреплена за конкретным проверенным коммитом. Новый код из репозитория дойдёт до тех, кто ставит плагин из каталога, только через новый pull request и новое ревью.
Что скилл читает и пишет
Скрипты читают базу разговоров, хранилище фактов и файлы памяти, а пишут только собственное состояние (паузы, список отказов, снимок для сторожа потерь) и дневник DREAMS.md. Память меняет только агент, через штатный инструмент, а из хранилища фактов не удаляется ничего. Пока в настройках не перечислены доверенные групповые чаты, ни один из них не считается подтверждением.

Как установить hermes-dreaming
Нужен Hermes Agent 0.21 или новее и Python 3.9+; в каталоге заявлены Linux, macOS и Windows. Команды ниже — для Linux и macOS, в Windows пути к скриптам и интерпретатору Hermes будут свои. Плагин ставится из каталога по имени — установщик забирает ровно проверенный коммит:
hermes plugins install hermes-dreaming
hermes plugins enable hermes-dreaming
Hermes запускает скрипты cron-задач только из ~/.hermes/scripts/, поэтому следующий шаг копирует туда две проверки, создаёт файл настроек ~/.hermes/dreaming.json и делает пробный прогон на копиях данных:
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install.py
Дальше часть, которую за тебя никто не сделает: открыть dreaming.json и вписать часовой пояс, доверенные чаты (trusted_chat_ids), имена агента и источник фактов. Если доверенный чат — форум, перечисли в excluded_threads ветки, где пишут не люди, а боты и уведомления агента. А если менял лимиты памяти в настройках Hermes, повтори их в memory_char_limits — иначе процент заполненности в отчёте разойдётся с реальностью. Потом — ночные задачи. Их создают интерпретатором самого Hermes, и сначала стоит посмотреть план:
~/.hermes/hermes-agent/venv/bin/python \
~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/install_cron.py --deliver local --dry-run
Если план устраивает — та же команда без --dry-run. Чтобы отчёт приходил в Telegram, вместо local укажи telegram:<chat_id>:<thread_id>. Задач две: сам ночной проход и извлечение фактов из переписки. Извлечение можно гонять раз в неделю: в небольшой семье ночной запуск чаще всего отвечает [SILENT] — добавить нечего.
Источник фактов по умолчанию — встроенное в Hermes хранилище holographic (memory.provider: holographic), и извлечение работает только с ним. Подойдёт и выгрузка в SQLite или JSONL, а без хранилища скилл работает только с файлами памяти: спрашивает про старые записи и следит за заполненностью. В обоих случаях ставь одну уборку, добавив к команде --extract-schedule "". Для облачных mem0, Honcho и Supermemory адаптера нет — их можно выгрузить в JSONL. Посмотреть, что предложит сегодняшняя ночь, ничего не меняя:
python3 ~/.hermes/plugins/hermes-dreaming/skills/dreaming/scripts/dream.py --dry-run
Если Hermes у тебя ещё не стоит, начни с установки и подключения к Telegram, потом — настройки после установки. Код, документация, инструкция по обновлению со старых версий и место для вопросов — в репозитории на GitHub. Issues и pull requests приветствуются.




