Постоянная память

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

Формат включает:

Шаблон замороженного снимка: Внедрение в системный промпт выполняется один раз при запуске сеанса и никогда не меняется в течение сеанса. Это сделано намеренно — оно сохраняет кеш префиксов LLM для производительности. Когда агент добавляет/удаляет записи памяти в течение сеанса, изменения сразу сохраняются на диск, но не появятся в системном промпте до следующего сеанса. Ответы инструментов всегда показывают актуальное состояние.

Действия инструмента Memory

Агент использует инструмент memory со следующими действиями:

Действия 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 — Профиль пользователя

Для информации о личности пользователя, его предпочтениях и стиле общения:

Что сохранять, а что пропускать

Сохраняйте это (проактивно)

Агент сохраняет автоматически — вам не нужно просить. Он сохраняет, когда узнаёт:

Пропускайте это

Управление ёмкостью

Память имеет строгие лимиты символов, чтобы системные промпты оставались ограниченными:

Хранилище Лимит Типичное количество записей
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"
}

Затем агент должен:

  1. Прочитать текущие записи (показаны в ответе с ошибкой)

  2. Определить записи, которые можно удалить или объединить

  3. Использовать replace для слияния связанных записей в более короткие версии

  4. Затем 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:

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 для получения полной информации о каждом провайдере, инструкциях по настройке и сравнении.