Постоянная память
Hermes Agent имеет ограниченную, курируемую память, которая сохраняется между сеансами. Это позволяет ему запоминать ваши предпочтения, ваши проекты, ваше окружение и то, что он узнал.
Как это работает
Два файла составляют память агента:
| Файл | Назначение | Лимит символов |
|---|---|---|
| MEMORY.md | Личные заметки агента — факты окружения, соглашения, изученное | 2 200 символов (~800 токенов) |
| USER.md | Профиль пользователя — ваши предпочтения, стиль общения, ожидания | 1 375 символов (~500 токенов) |
Оба файла хранятся в ~/.hermes/memories/ и внедряются в системный промпт в виде замороженного снимка при запуске сеанса. Агент управляет своей памятью через инструмент memory — он может добавлять, заменять или удалять записи.
Как память отображается в системном промпте
В начале каждого сеанса записи памяти загружаются с диска и отображаются в системном промпте в виде замороженного блока:
══════════════════════════════════════════════
MEMORY (your personal notes) [67% — 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service at ~/code/myapi using Axum + SQLx
§
This machine runs Ubuntu 22.04, has Docker and Podman installed
§
User prefers concise responses, dislikes verbose explanations
Формат включает:
-
Заголовок, показывающий, какое хранилище (MEMORY или USER PROFILE)
-
Процент использования и количество символов, чтобы агент знал ёмкость
-
Отдельные записи, разделённые разделителем
§(знак параграфа) -
Записи могут быть многострочными
Шаблон замороженного снимка: Внедрение в системный промпт выполняется один раз при запуске сеанса и никогда не меняется в течение сеанса. Это сделано намеренно — оно сохраняет кеш префиксов LLM для производительности. Когда агент добавляет/удаляет записи памяти в течение сеанса, изменения сразу сохраняются на диск, но не появятся в системном промпте до следующего сеанса. Ответы инструментов всегда показывают актуальное состояние.
Действия инструмента Memory
Агент использует инструмент memory со следующими действиями:
-
add — Добавить новую запись памяти
-
replace — Заменить существующую запись обновлённым содержимым (использует поиск по подстроке через
old_text) -
remove — Удалить запись, которая больше не актуальна (использует поиск по подстроке через
old_text)
Действия read не существует — содержимое памяти автоматически внедряется в системный промпт при запуске сеанса. Агент видит свои воспоминания как часть контекста разговора.
Поиск по подстроке
Действия replace и remove используют короткий уникальный поиск по подстроке — вам не нужен полный текст записи. Параметр old_text должен быть уникальной подстрокой, которая идентифицирует ровно одну запись:
# If memory contains "User prefers dark mode in all editors"
memory(action="replace", target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal")
Если подстрока соответствует нескольким записям, возвращается ошибка с запросом более точного совпадения.
Два хранилища
memory — Личные заметки агента
Для информации, которую агенту необходимо помнить об окружении, рабочих процессах и извлечённых уроках:
-
Факты окружения (ОС, инструменты, структура проекта)
-
Соглашения и конфигурация проекта
-
Особенности инструментов и найденные обходные пути
-
Записи о выполненных задачах
-
Навыки и техники, которые сработали
user — Профиль пользователя
Для информации о личности пользователя, его предпочтениях и стиле общения:
-
Имя, роль, часовой пояс
-
Предпочтения в общении (кратко vs подробно, предпочтения по формату)
-
Раздражители и то, чего следует избегать
-
Привычки в рабочих процессах
-
Уровень технических навыков
Что сохранять, а что пропускать
Сохраняйте это (проактивно)
Агент сохраняет автоматически — вам не нужно просить. Он сохраняет, когда узнаёт:
-
Предпочтения пользователя: «Я предпочитаю TypeScript, а не JavaScript» → сохранить в
user -
Факты окружения: «Этот сервер работает на Debian 12 с PostgreSQL 16» → сохранить в
memory -
Исправления: «Не используйте
sudoдля команд Docker, пользователь в группе docker» → сохранить вmemory -
Соглашения: «В проекте используются табуляция, ширина строки 120 символов, Google-style docstrings» → сохранить в
memory -
Выполненная работа: «Мигрировал базу данных с MySQL на PostgreSQL 15.01.2026» → сохранить в
memory -
Явные запросы: «Запомни, что моя ротация API-ключей происходит ежемесячно» → сохранить в
memory
Пропускайте это
-
Тривиальная/очевидная информация: «Пользователь спросил о Python» — слишком расплывчато, чтобы быть полезным
-
Легко повторно обнаруживаемые факты: «Python 3.12 поддерживает вложенность f-строк» — можно найти через веб-поиск
-
Сырые дампы данных: Большие блоки кода, файлы логов, таблицы данных — слишком объёмны для памяти
-
Временные данные сеанса: Временные пути к файлам, одноразовый контекст отладки
-
Информация, уже находящаяся в контекстных файлах: Содержимое SOUL.md и AGENTS.md
Управление ёмкостью
Память имеет строгие лимиты символов, чтобы системные промпты оставались ограниченными:
| Хранилище | Лимит | Типичное количество записей |
|---|---|---|
| memory | 2 200 символов | 8–15 записей |
| user | 1 375 символов | 5–10 записей |
Что происходит, когда память заполнена
Когда вы пытаетесь добавить запись, которая превысит лимит, инструмент возвращает ошибку:
{
"success": false,
"error": "Memory at 2,100/2,200 chars. Adding this entry (250 chars) would exceed the limit. Replace or remove existing entries first.",
"current_entries": ["..."],
"usage": "2,100/2,200"
}
Затем агент должен:
-
Прочитать текущие записи (показаны в ответе с ошибкой)
-
Определить записи, которые можно удалить или объединить
-
Использовать
replaceдля слияния связанных записей в более короткие версии -
Затем
addновую запись
Лучшая практика: Когда память заполнена более чем на 80% (видно в заголовке системного промпта), объединяйте записи перед добавлением новых. Например, объедините три отдельные записи «проект использует X» в одну комплексную запись с описанием проекта.
Практические примеры хороших записей памяти
Компактные, информативные записи работают лучше всего:
# Good: Packs multiple related facts
User runs macOS 14 Sonoma, uses Homebrew, has Docker Desktop and Podman. Shell: zsh with oh-my-zsh. Editor: VS Code with Vim keybindings.
# Good: Specific, actionable convention
Project ~/code/api uses Go 1.22, sqlc for DB queries, chi router. Run tests with 'make test'. CI via GitHub Actions.
# Good: Lesson learned with context
The staging server (10.0.1.50) needs SSH port 2222, not 22. Key is at ~/.ssh/staging_ed25519.
# Bad: Too vague
User has a project.
# Bad: Too verbose
On January 5th, 2026, the user asked me to look at their project which is
located at ~/code/api. I discovered it uses Go version 1.22 and...
Предотвращение дубликатов
Система памяти автоматически отклоняет точные дублирующиеся записи. Если вы попытаетесь добавить содержимое, которое уже существует, она возвращает успех с сообщением «дубликат не добавлен».
Сканирование безопасности
Записи памяти сканируются на наличие паттернов инъекций и эксфильтрации перед принятием, поскольку они внедряются в системный промпт. Содержимое, соответствующее угрозам (инъекция промптов, эксфильтрация учётных данных, SSH-бэкдоры) или содержащее невидимые символы Unicode, блокируется.
Поиск по сеансам
Помимо MEMORY.md и USER.md, агент может искать в своих прошлых разговорах с помощью инструмента session_search:
-
Все CLI и мессенджер-сеансы хранятся в SQLite (
~/.hermes/state.db) с полнотекстовым поиском FTS5 -
Поисковые запросы возвращают релевантные прошлые разговоры с суммаризацией через Gemini Flash
-
Агент может найти то, что обсуждалось неделями ранее, даже если этого нет в его активной памяти
hermes sessions list # Browse past sessions
session_search vs memory
| Характеристика | Постоянная память | Поиск по сеансам |
|---|---|---|
| Ёмкость | ~1 300 токенов всего | Неограниченно (все сеансы) |
| Скорость | Мгновенно (в системном промпте) | Требует поиск + суммаризацию LLM |
| Использование | Ключевые факты всегда доступны | Поиск конкретных прошлых разговоров |
| Управление | Курируется агентом вручную | Автоматически — все сеансы хранятся |
| Стоимость токенов | Фиксированная за сеанс (~1 300 токенов) | По запросу (ищется когда нужно) |
Память предназначена для критически важных фактов, которые всегда должны быть в контексте. Поиск по сеансам — для запросов вроде «обсуждали ли мы X на прошлой неделе?», когда агенту нужно вспомнить детали из прошлых разговоров.
Конфигурация
# In ~/.hermes/config.yaml
memory:
memory_enabled: true
user_profile_enabled: true
memory_char_limit: 2200 # ~800 tokens
user_char_limit: 1375 # ~500 tokens
Внешние провайдеры памяти
Для более глубокой, постоянной памяти, выходящей за рамки MEMORY.md и USER.md, Hermes поставляется с 8 плагинами внешних провайдеров памяти — включая Honcho, OpenViking, Mem0, Hindsight, Holographic, RetainDB, ByteRover и Supermemory.
Внешние провайдеры работают совместно со встроенной памятью (никогда не заменяя её) и добавляют такие возможности, как графы знаний, семантический поиск, автоматическое извлечение фактов и межсеансовое моделирование пользователя.
hermes memory setup # pick a provider and configure it
hermes memory status # check what's active
Смотрите руководство Memory Providers для получения полной информации о каждом провайдере, инструкциях по настройке и сравнении.