Memory
На этой странице Hermes Agent обладает ограниченной, курируемой памятью, которая сохраняется между сессиями. Это позволяет ему помнить ваши предпочтения, ваши проекты, ваше окружение и то, что он узнал.
Как это работает¶
Два файла составляют память агента:
| Файл | Назначение | Лимит символов |
|---|---|---|
| MEMORY.md | Личные заметки агента — факты об окружении, соглашения, усвоенные вещи | 2 200 символов (~800 токенов) |
| USER.md | Профиль пользователя — ваши предпочтения, стиль общения, ожидания | 1 375 символов (~500 токенов) |
Оба хранятся в ~/.hermes/memories/ и внедряются в системный промпт в виде замороженного снимка при запуске сессии. Агент управляет своей памятью через инструмент memory — он может добавлять, заменять или удалять записи.
info Лимиты символов держат память сфокусированной. Когда память заполнена, агент уплотняет или заменяет записи, чтобы освободить место для новой информации.
Как память отображается в системном промпте¶
В начале каждой сессии записи памяти загружаются с диска и отображаются в системном промпте в виде замороженного блока:
[code] ══════════════════════════════════════════════ 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
[/code]
Формат включает:
* Заголовок, показывающий, какое хранилище (MEMORY или USER PROFILE)
* Процент использования и количество символов, чтобы агент знал о ёмкости
* Отдельные записи, разделённые разделителем § (знак параграфа)
* Записи могут быть многострочными
Шаблон замороженного снимка: Внедрение в системный промпт захватывается один раз при запуске сессии и никогда не меняется в течение сессии. Это сделано намеренно — оно сохраняет кэш префиксов LLM для производительности. Когда агент добавляет/удаляет записи памяти во время сессии, изменения немедленно сохраняются на диск, но не появятся в системном промпте до начала следующей сессии. Ответы инструментов всегда показывают актуальное состояние.
Действия инструмента памяти¶
Агент использует инструмент memory со следующими действиями:
* add — Добавить новую запись в память
* replace — Заменить существующую запись обновлённым содержимым (использует поиск подстроки через old_text)
* remove — Удалить запись, которая больше не актуальна (использует поиск подстроки через old_text)
Действия read не существует — содержимое памяти автоматически внедряется в системный промпт при запуске сессии. Агент видит свои воспоминания как часть контекста разговора.
Поиск подстроки¶
Действия replace и remove используют короткий уникальный поиск подстроки — вам не нужен полный текст записи. Параметр old_text должен быть уникальной подстрокой, которая идентифицирует ровно одну запись:
[code] # Если память содержит "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")
[/code]
Если подстрока соответствует нескольким записям, возвращается ошибка с просьбой указать более конкретное совпадение.
Пояснение двух целей¶
memory — Личные заметки агента¶
Для информации, которую агенту необходимо помнить об окружении, рабочих процессах и извлечённых уроках: * Факты об окружении (ОС, инструменты, структура проекта) * Соглашения и конфигурация проекта * Особенности инструментов и найденные обходные пути * Записи о выполненных задачах * Навыки и техники, которые сработали
user — Профиль пользователя¶
Для информации о личности пользователя, его предпочтениях и стиле общения: * Имя, роль, часовой пояс * Предпочтения в общении (кратко vs подробно, предпочтения по формату) * Что раздражает и чего избегать * Привычки в работе * Уровень технических навыков
Что сохранять, а что пропускать¶
Сохранять это (проактивно)¶
Агент сохраняет автоматически — вам не нужно просить. Он сохраняет, когда узнаёт:
* Предпочтения пользователя: «Я предпочитаю TypeScript, а не JavaScript» → сохранить в user
* Факты об окружении: «Этот сервер работает на Debian 12 с PostgreSQL 16» → сохранить в memory
* Исправления: «Не используй sudo для команд Docker, пользователь в группе docker» → сохранить в memory
* Соглашения: «Проект использует табуляцию, ширину строки 120 символов, docstring в стиле Google» → сохранить в 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 записей |
Что происходит, когда память заполнена¶
Когда вы пытаетесь добавить запись, которая превысит лимит, инструмент возвращает ошибку:
[code] { "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" }
[/code]
Затем агент должен:
1. Прочитать текущие записи (показаны в ответе с ошибкой)
2. Определить записи, которые можно удалить или объединить
3. Использовать replace для слияния связанных записей в более короткие версии
4. Затем add новую запись
Лучшая практика: Когда память заполнена более чем на 80% (видно в заголовке системного промпта), объединяйте записи перед добавлением новых. Например, объедините три отдельные записи «проект использует X» в одну комплексную запись с описанием проекта.
Практические примеры хороших записей памяти¶
Компактные, информативные записи работают лучше всего:
[code] # Хорошо: объединяет несколько связанных фактов User runs macOS 14 Sonoma, uses Homebrew, has Docker Desktop and Podman. Shell: zsh with oh-my-zsh. Editor: VS Code with Vim keybindings.
# Хорошо: конкретное, действенное соглашение
Project ~/code/api uses Go 1.22, sqlc for DB queries, chi router. Run tests with 'make test'. CI via GitHub Actions.
# Хорошо: извлечённый урок с контекстом
The staging server (10.0.1.50) needs SSH port 2222, not 22. Key is at ~/.ssh/staging_ed25519.
# Плохо: слишком расплывчато
User has a project.
# Плохо: слишком многословно
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...
[/code]
Предотвращение дубликатов¶
Система памяти автоматически отклоняет точные дубликаты записей. Если вы попытаетесь добавить содержимое, которое уже существует, возвращается успех с сообщением «no duplicate added».
Сканирование безопасности¶
Записи памяти сканируются на наличие паттернов инъекций и эксфильтрации перед принятием, поскольку они внедряются в системный промпт. Содержимое, соответствующее угрожающим паттернам (инъекции в промпт, эксфильтрация учётных данных, SSH-бэкдоры) или содержащее невидимые символы Unicode, блокируется.
Поиск по сессиям¶
Помимо MEMORY.md и USER.md, агент может искать в своих прошлых разговорах с помощью инструмента session_search:
* Все сессии CLI и обмена сообщениями хранятся в SQLite (~/.hermes/state.db) с полнотекстовым поиском FTS5
* Поисковые запросы возвращают релевантные прошлые разговоры с обобщением через Gemini Flash
* Агент может найти то, что обсуждалось неделями ранее, даже если этого нет в его активной памяти
[code] hermes sessions list # Просмотр прошлых сессий
[/code]
session_search против memory¶
| Характеристика | Постоянная память | Поиск по сессиям |
|---|---|---|
| Ёмкость | ~1 300 токенов всего | Безлимитно (все сессии) |
| Скорость | Мгновенно (в системном промпте) | Требует поиска + обобщения LLM |
| Сценарий использования | Ключевые факты всегда доступны | Поиск конкретных прошлых разговоров |
| Управление | Вручную курируется агентом | Автоматически — все сессии хранятся |
| Стоимость токенов | Фиксировано за сессию (~1 300 токенов) | По запросу (ищется когда нужно) |
Память предназначена для критически важных фактов, которые всегда должны быть в контексте. Поиск по сессиям — для запросов вроде «обсуждали ли мы X на прошлой неделе?», когда агенту нужно вспомнить детали из прошлых разговоров.
Конфигурация¶
[code] # В ~/.hermes/config.yaml memory: memory_enabled: true user_profile_enabled: true memory_char_limit: 2200 # ~800 токенов user_char_limit: 1375 # ~500 токенов
[/code]
Внешние провайдеры памяти¶
Для более глубокой, постоянной памяти, выходящей за рамки MEMORY.md и USER.md, Hermes поставляется с 8 плагинами внешних провайдеров памяти — включая Honcho, OpenViking, Mem0, Hindsight, Holographic, RetainDB, ByteRover и Supermemory.
Внешние провайдеры работают наряду со встроенной памятью (никогда не заменяя её) и добавляют такие возможности, как графы знаний, семантический поиск, автоматическое извлечение фактов и моделирование пользователя между сессиями.
[code] hermes memory setup # выбрать провайдера и настроить его hermes memory status # проверить, что активно
[/code]
Подробнее о каждом провайдере, инструкции по настройке и сравнение см. в руководстве Провайдеры памяти.