AI и агенты16 мин чтения

Память Hermes Agent: 5 слоёв, 7 провайдеров и как выбрать

Как работает память Hermes Agent: пять слоёв от MEMORY.md до скиллов, семь провайдеров от holographic до mem0 и почему агент не помнит новые записи.

Память Hermes Agent: 5 слоёв, 7 провайдеров и как выбрать
Содержание

Память Hermes Agent (Hermes Agent memory) — это не один модуль, а пять отдельных слоёв: рабочее окно разговора, заметки MEMORY.md и USER.md, архив всех сессий с поиском, скиллы и внешний провайдер памяти. У каждого слоя своё хранилище, свой автор записей и свой путь к модели. Провайдеров в Hermes было встроено семь, и как раз сейчас они переезжают из ядра в каталог плагинов.

Я держу на Hermes («Гермесе») семейного агента и регулярно слышу один и тот же вопрос: «я же просил запомнить, почему он не помнит?». Ответ почти всегда не в том, что память «сломалась», а в том, какой слой отвечает за этот факт и когда модель его увидит. Ниже — как это устроено, по коду Hermes версии 0.21.6, которая вышла 8 октября 2026 года.

Как память попадает к модели

Чтобы понять память Hermes, удобно выделить три пути, по которым сведения попадают в запрос к модели: системный промпт, история сообщений и ответы инструментов. Про любой слой памяти полезно задать один вопрос: каким из этих путей он идёт и в какой момент.

Почти все решения в памяти Hermes подчинены экономии на кэше. Провайдеры моделей кэшируют неизменное начало запроса, и повторный запрос с тем же началом стоит в разы дешевле. Поэтому Hermes старается не трогать то, что уже отправил: между событиями пересборки системный промпт остаётся прежним, даже если ты дописал агенту что-то в память. Это экономит токены, а платишь ты свежестью: новая запись попадает в промпт не сразу.

Пять слоёв памяти Hermes Agent и три пути в запрос к модели: системный промпт, сообщения и ответы инструментов

Как работает память 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 Agent: что происходит с памятью до вызова модели, во время работы, после ответа и на границе сессии

Почему 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 года уйдут и они, а их отдельные репозитории пока без мейнтейнера — проект ищет того, кто возьмёт их на поддержку.

Семь провайдеров памяти Hermes Agent: какие остались в ядре в версии 0.21.6, какие переехали в каталог и что уходит с машины

Провайдер Хранилище Что уходит с машины
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, а потом загляни в настройки после установки.

Источники

  1. Hermes Agent: постоянная память
  2. Hermes Agent: провайдеры памяти
  3. Hermes Agent v0.21.6: релиз
  4. Hermes Agent: исходный код провайдеров памяти
Свои рядомСпросите своих — в чате отвечают быстрее, чем поискОсновной чат IT-тусовки Паттайи: айтишники, диджитал-специалисты и предприниматели, которые уже прошли через то же самое. С июля 2023 года.Вступить в чатНужны батыОбмен рублей и USDT на баты — внутри сообществаIT ОБМЕН работает с 2023 года: рубли с любого банка РФ и по СБП, USDT с Bybit и Binance. Наличные привезут по Паттайе, переведут на тайский счёт или выдадут через банкомат. Курс обновляется каждый день.Условия и курс

Читайте также по теме