Память Hermes Agent (Hermes Agent memory) — это не один модуль, а пять отдельных слоёв: рабочее окно разговора, заметки MEMORY.md и USER.md, архив всех сессий с поиском, скиллы и внешний провайдер памяти. У каждого слоя своё хранилище, свой автор записей и свой путь к модели. Провайдеров в Hermes было встроено семь, и как раз сейчас они переезжают из ядра в каталог плагинов.
Я держу на Hermes («Гермесе») семейного агента и регулярно слышу один и тот же вопрос: «я же просил запомнить, почему он не помнит?». Ответ почти всегда не в том, что память «сломалась», а в том, какой слой отвечает за этот факт и когда модель его увидит. Ниже — как это устроено, по коду Hermes версии 0.21.6, которая вышла 8 октября 2026 года.
Как память попадает к модели
Чтобы понять память Hermes, удобно выделить три пути, по которым сведения попадают в запрос к модели: системный промпт, история сообщений и ответы инструментов. Про любой слой памяти полезно задать один вопрос: каким из этих путей он идёт и в какой момент.
Почти все решения в памяти Hermes подчинены экономии на кэше. Провайдеры моделей кэшируют неизменное начало запроса, и повторный запрос с тем же началом стоит в разы дешевле. Поэтому Hermes старается не трогать то, что уже отправил: между событиями пересборки системный промпт остаётся прежним, даже если ты дописал агенту что-то в память. Это экономит токены, а платишь ты свежестью: новая запись попадает в промпт не сразу.

Как работает память Hermes Agent: пять слоёв
| Слой | Что это | Как попадает к модели |
|---|---|---|
| Рабочая | текущий разговор | история, середина сжимается |
| Курируемая | постоянные заметки | целиком в системном промпте |
| Эпизодическая | архив разговоров | поиском session_search |
| Процедурная | скиллы | список, текст по запросу |
| Внешняя | провайдер | блок к твоему сообщению |
Рабочая память: окно разговора
Это текущая переписка плюс системный промпт: модель перечитывает её целиком на каждом ходу. Когда окно подходит к пределу, включается сжатие. Вспомогательная модель сворачивает середину разговора в структурированное резюме — цель, ограничения, что сделано, что решили, — а начало и конец остаются дословно. Сообщения при этом не удаляются: в базе им просто меняют пометку, и модель их больше не видит.
Сжатие — заметное событие. Оно занимает время, сбрасывает кэш, а при повторном сжатии старое резюме дополняется, а не пишется заново, так что неточности могут накапливаться. Движок сжатия можно заменить плагином: за это отвечает отдельная настройка context.engine.
Курируемая память: MEMORY.md и USER.md
Два обычных текстовых файла в папке memories внутри домашнего каталога Hermes. В MEMORY.md агент держит заметки о среде и работе, в USER.md — профиль пользователя. Записи разделены строкой со знаком §. Размер ограничен в символах: по умолчанию 2 200 для MEMORY.md и 1 375 для USER.md, лимиты меняются в конфиге. Поиска здесь нет: оба файла целиком лежат в системном промпте.
Пишет в них только модель, через инструмент memory. Он умеет добавить запись, заменить её по куску текста, удалить и выполнить пачку операций разом — или всю, или никакую. Перед записью текст проверяется на попытки инъекции и на секреты, файл блокируется на время записи и заменяется целиком, так что основная модель и фоновое ревью не затирают друг друга.
Если включить write_approval, изменения не применяются сразу, а ждут одобрения командой /memory approve. В терминале Hermes спрашивает прямо в чате. В Telegram и других мессенджерах такого вопроса нет, поэтому там все изменения встают в очередь, и она легко копится неделями. Если ты включил одобрение — заглядывай в /memory pending.
Эпизодическая память: архив всех сессий
Все сообщения всех сессий лежат в базе SQLite state.db, включая свёрнутые сжатием. Сама в промпт эта память не попадает. Модель достаёт из неё прошлые разговоры инструментом session_search, и поиск работает без модели: полнотекстовый индекс по словам и по сочетаниям из трёх букв.
Морфологии нет. Запрос «памяти» не найдёт «память», поэтому агенту стоит искать по началу слова, например памят*, а триграммы частично спасают ситуацию сами. Завершённые сессии по умолчанию удаляются через 90 дней.
Процедурная память: скиллы
Скилл — это знание «как сделать X»: папка с файлом SKILL.md, иногда со скриптами и шаблонами. В системный промпт попадает только список: имя и короткое описание каждого скилла. Полный текст модель открывает сама, когда задача этого требует. Так библиотека из сотни скиллов стоит в промпте немного. Практический вывод: ключевые слова, по которым агент должен узнать скилл, ставь в самое начало описания.
Скиллы пишет инструмент skill_manage — по твоей просьбе или сам агент после сложной задачи. За порядком следит куратор. Он запускается, когда агент простаивает, и не чаще заданного интервала — по умолчанию раз в семь дней. Куратор смотрит только скиллы, которые агент создал сам: через 14 дней без использования помечает их устаревшими, через 30 переносит в архив. Закреплённые скиллы он не трогает. Где брать готовые скиллы, мы разбирали в статье про скиллы и плагины для Hermes.
Внешняя память: провайдер
Пятый слой подключается по желанию: ключ memory.provider в конфиге выбирает один внешний провайдер памяти (memory provider). Он работает рядом со встроенной памятью, а не вместо неё: MEMORY.md, архив и скиллы остаются на месте. Внутри провайдера может быть что угодно — векторная база, граф знаний, модель личности пользователя, дерево Markdown-файлов. Найденное он подкладывает не в системный промпт, а к твоему текущему сообщению, в блоке <memory-context>.
Как слои перетекают друг в друга
Hermes учится без команды «запомни». Каждые 10 твоих сообщений, в которых агент ни разу не обратился к памяти, и каждые 10 шагов работы инструментов без правки скиллов запускается фоновое ревью. Это копия агента с тем же промптом и всей историей. Ей дают одно задание: просмотреть разговор и решить, что стоит сохранить. Она сама вызывает memory или skill_manage. Пороги задают memory.nudge_interval и skills.creation_nudge_interval.
У ревью есть ограничения. Одновременно идёт только одно, и новое сообщение пользователя его прерывает: в активном чате часть выводов теряется. Заменять и удалять записи без присмотра человека ревью не может, такие правки оно только предлагает. Испортить память фоновый процесс может лишь добавлением лишнего.
Остальные переходы проще. Сжатие переводит сообщения из рабочего слоя в архив: физически ничего не пропадает, а резюме подсказывает модели, что детали можно найти поиском. Успешные изменения через инструмент memory передаются внешнему провайдеру, если он есть, — что из них сохранить, решает сам провайдер. После каждого хода Hermes отдаёт провайдеру завершённый ход, предварительно замаскировав распознанные секреты, а провайдер по своим настройкам решает, что из него извлечь.

Почему Hermes не помнит только что записанное
Это самый частый повод для «он не помнит». Модель видит MEMORY.md и USER.md как снимок, сделанный при запуске агента. Ты попросил запомнить, агент честно записал в файл, но системный промпт пока прежний. В этом же разговоре агент, скорее всего, и так учтёт новое: твоя просьба лежит в истории сообщений. Проблема всплывает в другом месте — например, ты сказал что-то в одном чате, а другой, давно открытый, об этом не знает.
Снимок обновляется, когда Hermes перечитывает файлы памяти: после сжатия, команд /new или /reset. В терминале смена модели или провайдера тоже пересоздаёт агента и заодно обновляет снимок. Самый надёжный способ — начать новую сессию командой /new.
В терминале всё это почти незаметно: сессии короткие. В мессенджере разговор может жить неделями, а момент сжатия зависит от размера окна модели и настроек. Поэтому снимок в длинном чате бывает старым довольно долго.
Как устроен внешний провайдер
Встроенная память включена по умолчанию, внешний провайдер — максимум один. Значения none, builtin или пустая строка в memory.provider означают, что его нет. Проверить, что сейчас подключено, можно командой hermes memory status в терминале, выбрать и настроить провайдер — hermes memory setup. Не путай её с командой /memory внутри чата: та работает с очередью одобрения.
Каркас вызывает провайдера в фиксированных точках хода. Перед обращением к модели идёт запрос памяти: Hermes ждёт ответ до 8 секунд, и всё это время ты ждёшь тоже. Документация называет этот шаг фоновым, но в коде он блокирует ход. После ответа запись хода и подготовка памяти к следующему ходу уходят в фоновую очередь. Поэтому у части провайдеров память отстаёт на ход: на твоё сообщение они отдают то, что нашли по предыдущему.
Найденное провайдером Hermes заворачивает в блок <memory-context> с пометкой для модели: это не новый ввод пользователя, а справочные данные, которым можно доверять. Блок сохраняется в истории и повторяется в следующих запросах до сжатия, чтобы не ломать кэш. У этого две стороны. Каждый ход добавляет в окно ещё один блок памяти. А если в хранилище провайдера попадёт вредоносная инструкция, такая пометка повышает риск, что модель ей последует.
Есть и мелочи, о которых полезно знать заранее. Фильтр «пустых» реплик, на которых Hermes не дёргает провайдера, знает только английские слова вроде ok, thanks, yes. Русские «ок», «да» и «спасибо» запускают полный поиск. И удаление факта из USER.md не гарантирует, что он исчезнет у провайдера: как обрабатывать замены и удаления, решает сам провайдер.
Провайдеры памяти Hermes Agent: сравнение семи вариантов
До версии 0.21.5 включительно в Hermes было встроено семь провайдеров: byterover, holographic, honcho, mem0, openviking, retaindb и supermemory. Ставить их не требовалось — достаточно было указать имя в memory.provider и, если нужно, ключ.
В 0.21.6 картина поменялась. Со 2 по 7 октября из ядра убрали honcho, supermemory, mem0 и openviking, а ещё раньше, 23 сентября, — hindsight. Теперь они живут в официальном каталоге плагинов, и их код поддерживают сами разработчики сервисов. Ломать настройку это не должно: если в memory.provider стоит бывший встроенный провайдер, Hermes при hermes update или старте агента сам поставит его из каталога, с тем же именем, ключами и данными. Встроенными пока остались три: byterover, holographic и retaindb. Документация объявляет, что 15 октября 2026 года уйдут и они, а их отдельные репозитории пока без мейнтейнера — проект ищет того, кто возьмёт их на поддержку.

| Провайдер | Хранилище | Что уходит с машины |
|---|---|---|
| holographic | SQLite на диске | ничего |
| byterover | Markdown-файлы | запросы к модели |
| retaindb | облако RetainDB | переписка |
| honcho | облако или свой сервер | переписка |
| mem0 | облако, сервер или локально | переписка или запросы к модели |
| openviking | свой сервер | переписка |
| supermemory | облако или свой сервер | переписка |
Одна оговорка для всех вариантов: найденные факты в итоге получает основная модель агента. Если она облачная, «ничего не уходит» относится к хранилищу памяти, а не к разговору целиком.
Holographic: локально и без модели
Хранит факты локально в базе SQLite и сам не вызывает модель. По умолчанию факты попадают туда, только когда агент явно сохраняет их инструментом fact_store или добавляет запись во встроенную память. Есть и необязательное автоизвлечение в конце сессии, но оно работает по английским шаблонам. У каждого факта есть уровень доверия от 0 до 1: инструмент fact_feedback поднимает его за полезный факт и опускает за бесполезный. По умолчанию в автоматическую подстановку не попадают факты с доверием ниже 0,3, порог настраивается.
«Голографические» векторы, которые дали провайдеру имя, на деле почти ничего не добавляют. Я прогнал код версии 0.21.6 на тестовой базе из 200 фактов о 20 людях. Обычный полнотекстовый поиск и операция related («с чем связан человек») находят нужное в 9 случаях из 10 и чаще. А probe («все факты о человеке»), reason («факты о двух людях сразу») и contradict («противоречия») практически не работают: probe фактически сортирует факты по уровню доверия, reason нашёл нужный факт в одном случае из 15, а contradict не нашёл ни одного противоречия даже в паре «живёт в Париже» и «живёт в Лондоне». При этом описание инструмента советует модели начинать именно с probe и reason. Подстановка памяти перед каждым ходом идёт через рабочий полнотекстовый поиск, так что основная польза от holographic сохраняется.
Второе слабое место — русский язык. Имя человека holographic выделяет, только если оно написано латиницей и состоит хотя бы из двух слов, вроде «Alice Smith». «Мария» и «Мария Иванова» не выделяются, кавычки-ёлочки не помогают, а в прямых кавычках сущностью становится вся фраза целиком. Полнотекстовый поиск по-русски работает, но без словоформ: «Маша» находит факт про Машу, а «Маши» уже нет. У моего агента стоит именно holographic: для семейных данных важно, что хранилище лежит у меня и ничего не стоит. Но факты я дополнительно проверяю ночным плагином hermes-dreaming, который сверяет память с реальной перепиской.
ByteRover: память в Markdown-файлах
Память как дерево Markdown-файлов «домен — тема — файл», которое раскладывает внешняя программа brv, а при поиске подключает модель. Дерево лежит на диске, его можно открыть, поправить руками и положить в git. Облако ByteRover нужно только для синхронизации, ключ BRV_API_KEY необязателен. Подходит, если хочется видеть и контролировать, что агент о тебе знает. Минус — каждая операция запускает отдельный процесс, а сбои проходят молча.
RetainDB: облако с локальной очередью
Облачная память с локальной очередью: если сеть пропала, ходы копятся на диске и досылаются потом. Кроме фактов хранит профиль пользователя, «самомодель» агента и файлы. Ответ на ход готовится в фоне, поэтому память отстаёт на ход-два. Сервис платный, нужен ключ RETAINDB_API_KEY. Для русского важная деталь: при подготовке блока для модели строки сравниваются только по латинице и цифрам, поэтому разные русские факты могут счесться дублями, и часть из них до модели не дойдёт.
Honcho: портрет пользователя
Сервис строит модель человека: карточку фактов, представление о личности, сводку сессий, и отвечает на вопросы о пользователе. Хорош там, где у агента много собеседников или общие чаты. Переписка при этом уходит на сервер Honcho или на твой собственный. Теперь ставится из каталога, плагин ведёт команда Honcho.
Mem0: факты в векторной базе
Сервер mem0 своей моделью извлекает из переписки факты, убирает дубли и кладёт всё в векторную базу, а перед ходом находит похожие. Работает в трёх режимах: облако mem0, свой сервер или локальная установка. Плагин по умолчанию отправляет телеметрию, она выключается переменной MEM0_TELEMETRY=false. С 6 октября ставится из каталога, код ведёт сама команда mem0.
OpenViking: память и документы
Память и база знаний в одном: файловая система с несколькими уровнями подробности, от аннотации до полного текста. Сервер сам извлекает память из сессий и умеет принимать документы. Требует свой сервер OpenViking. Подходит, когда нужна и память, и поиск по документам. Теперь в каталоге.
Supermemory: профиль из переписки
Логика «пиши переписку, сервер разберётся»: плагин отправляет ходы, а сервис сам извлекает воспоминания и профиль пользователя. Облако или свой сервер. Если агентом пользуются несколько человек, до включения проверь, как плагин разделяет пользователей и чаты. Тоже переехал в каталог.
Кроме этих семи, в каталоге плагинов Hermes десятки сторонних провайдеров: hindsight, chronicle, cognee, mnemosyne, lancedb и другие. Их нужно поставить командой hermes plugins install <имя> и указать в memory.provider. Как проверять пакеты перед установкой, мы разбирали в статье про скиллы и плагины.
Какой провайдер памяти выбрать для Hermes Agent
Сначала поставь диагноз: что именно агент «не помнит». Во многих случаях провайдер не поможет.
| Симптом | Причина | Что делать |
|---|---|---|
| Другой чат не знает новое | старый снимок памяти | /new |
| «Ничего не выучил» | записи ждут одобрения | /memory pending |
| Не находит разговор | нет морфологии | искать памят* |
| Память переполнена | лимит символов | поднять лимит, сократить записи |
| Нужен поиск по смыслу | в ядре его нет | вот тут нужен провайдер |
И проверь, что память вообще включена: в разделе memory конфига за это отвечают memory_enabled и user_profile_enabled, по умолчанию оба включены. Если провайдер всё-таки нужен, пропусти варианты через четыре вопроса.
Можно ли отдавать переписку третьей стороне? Если нет, остаются локальные варианты: holographic или локальные плагины каталога. Облачные провайдеры получают твои реплики и ответы агента.
Кто платит за модель? Holographic обходится без неё. Большинство остальных извлекают факты моделью — по твоему ключу или по тарифу сервиса.
Что именно помнить? Портрет человека — honcho или supermemory, хотя аккуратный USER.md часто справляется не хуже. Отдельные факты — mem0. Документы вместе с памятью — openviking. Процедуры «как сделать» — это скиллы, а не провайдер.
На каком языке ты общаешься? Многое в провайдерах рассчитано на английский: фильтры, шаблоны, промпты извлечения. Прежде чем включать что-то на русских диалогах, прогони пилот на копии профиля, а не на рабочем агенте, и смотри на три вещи: задержку ответа, рост токенов и качество поиска.
Hindsight или Honcho
Эту пару сравнивают чаще всего. Hindsight строит граф знаний: связывает людей, проекты и события между собой, сам сохраняет ходы целиком, включая вызовы инструментов, а отдельным инструментом умеет делать выводы по всей памяти сразу. Работает в облаке Hindsight или локально — со встроенной базой PostgreSQL или своим сервером; для локального режима нужен ключ к модели, сам плагин в этом режиме бесплатный. Honcho сосредоточен на человеке: строит его портрет и отвечает на вопросы о нём. Если важны связи между фактами — смотри на Hindsight, если портрет собеседника — на Honcho. Оба ставятся из каталога: hermes plugins install hindsight или honcho.
Holographic или Hindsight
Holographic — простое локальное хранилище фактов без модели: ничего не стоит и ничего не отправляет наружу, но и сам почти ничего не извлекает. Hindsight умнее, зато требует модель для извлечения фактов и больше ресурсов. Начать имеет смысл с holographic и встроенной памяти, а к Hindsight переходить, когда упрёшься в поиск по связям.
Частые вопросы
Нужен ли Hermes внешний провайдер памяти?
Для одного пользователя и обычных задач — чаще нет. Встроенных слоёв хватает: MEMORY.md и USER.md держат главное, архив ищется через session_search, процедуры живут в скиллах. Провайдер нужен, когда фактов становится больше, чем помещается в лимит, и требуется поиск по смыслу.
Почему Hermes не помнит то, что я просил запомнить?
Чаще всего по одной из двух причин. Либо запись сделана, но этот чат ещё работает со старым снимком памяти — помогает /new. Либо включён write_approval, и запись ждёт одобрения в /memory pending.
Сломается ли провайдер памяти после обновления Hermes?
Не должен. Бывшие встроенные провайдеры Hermes при обновлении или старте сам ставит из каталога плагинов, если они указаны в memory.provider, и сохраняет имя, ключи и данные. О результате он сообщает в терминале или в чате. Автоустановку отключает настройка security.allow_lazy_installs: false — тогда Hermes только покажет команду. Остальные плагины памяти и провайдер, который ты подключаешь впервые, ставь сам: hermes plugins install <имя>.
Где лежит MEMORY.md в Hermes Agent?
В папке memories домашнего каталога Hermes: по умолчанию это ~/.hermes/memories/, рядом с MEMORY.md лежит USER.md. У каждого профиля Hermes свой домашний каталог, а значит, и своя память. Если правишь их руками, делай это, пока агент не работает, и сохраняй строки-разделители § между записями.
Какой провайдер памяти Hermes работает локально?
Полностью локально и без модели — holographic. Хранилище на твоей машине, но с моделью для поиска или извлечения фактов — у byterover, Hindsight в локальном режиме и mem0 в локальной установке. Данные лежат у тебя, а вот тексты, которые разбирает модель, уходят туда, где она работает: если модель облачная — её провайдеру.
Как увеличить объём памяти Hermes?
Лимиты MEMORY.md и USER.md задаются в конфиге, в разделе memory: memory_char_limit и user_char_limit. Помни, что оба файла целиком уходят в каждый запрос, так что каждая тысяча символов — это постоянная прибавка к цене. Полезнее держать записи короткими и раздельными, чтобы агент мог заменить одну, не переписывая всё.
Если Hermes у тебя ещё не стоит, начни с установки и подключения к Telegram, а потом загляни в настройки после установки.





