Перейти к содержанию

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]

Подробнее о каждом провайдере, инструкции по настройке и сравнение см. в руководстве Провайдеры памяти.