Память AI-агента: как Hermes запоминает контекст между сессиями

Каждый раз, когда вы открываете новый чат с AI-ассистентом, он начинает с нуля — не знает вашего имени, не помнит проект, над которым вы работали вчера, не记得 ваши偏好. Hermes Agent решает эту проблему с помощью системы persistent memory: агент запоминает контекст между сессиями, хранит важные факты о вас и вашем окружении, и может найти информацию из разговоров недельной давности.

Что такое persistent memory в AI-агенте?

Persistent memory (постоянная память) — это механизм, который позволяет AI-агенту сохранять информацию между сессиями. В отличие от обычного чат-бота, который «забывает» всё после закрытия окна, агент с persistent memory помнит ваши preferences, настройки окружения, детали проектов и уроки из прошлых разговоров.

У Hermes Agent persistent memory реализована через три слоя:

  • MEMORY.md — заметки агента об окружении, проектах и conventions (до 2 200 символов)
  • USER.md — профиль пользователя: роль, стек,偏好 (до 1 375 символов)
  • Session search — полнотекстовый поиск по всем прошлым сессиям через SQLite FTS5
  • Каждый слой решает свою задачу. MEMORY.md и USER.md — это «память на каждый день», всегда доступная в контексте. Session search — это «долговременная память» для поиска конкретных деталей из прошлых разговоров.

    Как Hermes запоминает контекст: два файла на диске

    Система памяти Hermes построена на двух markdown-файлах в директории ~/.hermes/:

    Файл Назначение Лимит
    MEMORY.md Заметки агента: окружение, инструменты, conventions 2 200 символов
    USER.md Профиль пользователя: роль,偏好, стиль общения 1 375 символов

    Оба файла загружаются в system prompt при старте каждой сессии. Агент видит свои «воспоминания» как часть контекста — ему не нужно заново узнавать, что вы используете macOS, предпочитаете TypeScript, или что ваш staging-сервер работает на порту 2222.

    Как это выглядит в system prompt:

    ══════════════════════════════════════════════
    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
    

    Символ § разделяет записи. Процент показывает заполненность — агент видит, когда память почти полна, и консолидирует записи.

    Frozen snapshot: почему память не обновляется мгновенно

    Важная деталь: system prompt захватывается один раз при старте сессии и не меняется в её процессе. Это сделано для производительности — LLM использует prefix cache, и изменение system prompt сбрасывало бы кеш.

    Когда агент добавляет или удаляет запись из памяти, изменения записываются на диск немедленно, но появятся в system prompt только в следующей сессии. Ответы инструмента memory всегда показывают актуальное состояние.

    Как агент управляет памятью: инструмент memory

    Hermes использует инструмент memory с тремя действиями:

  • add — добавить новую запись
  • replace — заменить существующую запись (по подстроке old_text)
  • remove — удалить запись (по подстроке old_text
  • Действия replace и remove используют substring matching — не нужно передавать текст записи целиком. Достаточно уникальной подстроки:

    # Если в памяти есть "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")
    

    Если подстрока совпадает с несколькими записями, система вернёт ошибку с просьбой уточнить.

    Что агент запоминает автоматически

    Агент сохраняет информацию проактивно — без явной просьбы пользователя:

  • Preferences пользователя: «Я предпочитаю TypeScript» → сохраняется в USER.md
  • Факты об окружении: «Этот сервер работает на Debian 12 с PostgreSQL 16» → MEMORY.md
  • Коррекции: «Не используй sudo для Docker, я в группе docker» → MEMORY.md
  • Conventions: «Проект использует табы, 120 символов в строке» → MEMORY.md
  • Завершённые задачи: «Мигрировал базу с MySQL на PostgreSQL 2026-01-15» → MEMORY.md
  • Когда память переполняется

    MEMORY.md ограничен 2 200 символами. Когда новая запись не влезает, инструмент возвращает ошибку с текущим содержимым:

    {
      "success": false,
      "error": "Memory at 2,100/2,200 chars. Adding this entry (250 chars) would exceed the limit.",
      "current_entries": ["..."]
    }
    

    Агент тогда сам консолидирует: объединяет связанные записи в одну более компактную, удаляет устаревшие, и повторяет попытку. Это не баг, а фича — лимит заставляет агента хранить только самое важное.

    Session Search: поиск по прошлым разговорам

    MEMORY.md вмещает только ключевые факты. Но что, если нужно вспомнить детали обсуждения трёхнедельной давности? Для этого в Hermes есть session search — полнотекстовый поиск по всем прошлым сессиям.

    Все CLI- и messaging-сессии хранятся в SQLite базе (~/.hermes/state.db) с индексом FTS5. Агент может:

  • Найти конкретное обсуждение по ключевым словам
  • Прокрутить найденную сессию вперёд и назад
  • Просмотреть последние сессии хронологически
  • Скорость поиска: ~20 мс на FTS5-запрос, ~1 мс на прокрутку. Никаких LLM-вызовов — чистый поиск по тексту.

    Память vs поиск: когда что использовать

    Возможность Persistent Memory Session Search
    Ёмкость ~1 300 токенов Без ограничений
    Скорость Мгновенно (в system prompt) ~20 мс запрос
    Стоимость Токены в каждом промпте Бесплатно
    Назначение Ключевые факты всегда под рукой Поиск конкретных обсуждений
    Управление Агент курирует Автоматически

    Memory — для фактов, которые должны быть в контексте всегда. Session search — для «мы что обсуждали X на прошлой неделе?»

    Honcho: глубокое моделирование пользователя

    Помимо встроенной памяти, Hermes поддерживает внешние провайдеры. Один из самых интересных — Honcho от Plastic Labs.

    Honcho добавляет диалектическое рассуждение: после каждого разговора система анализирует его, задаёт себе вопросы о том, что разговор reveals о пользователе, и выводит «conclusions» — структурированные insights о preferences, привычках и целях.

    В отличие от MEMORY.md, где агент записывает явные факты, Honcho выводит неявные паттерны — например, что вы consistently отвечаете лучше на короткие ответы, или что вы часто работаете с определённым типом задач.

    Инструменты Honcho:

  • honcho_profile — накопленная модель пользователя
  • honcho_search — семантический поиск по всем разговорам
  • honcho_context — контекст для текущей задачи
  • honcho_conclude — запуск диалектического рассуждения
  • Сравнение с ChatGPT, Claude и Gemini

    Как память Hermes отличается от памяти в коммерческих AI-ассистентах?

    ChatGPT Memory

    ChatGPT хранит два слоя: saved memories (явные факты, которые вы просили запомнить) и temporary context (информация из текущего чата). Типичный месячный пользователь накапливает 40–80 сохранённых фактов.

    В июне 2026 OpenAI запустила функцию Dreaming — фоновый процесс, который анализирует годы прошлых разговоров и обновляет память без явного запроса. Все воспоминания хранятся на серверах OpenAI indefinitely.

    Ключевое отличие от Hermes: ChatGPT хранит память на своих серверах, вы не контролируете процесс. Hermes хранит всё локально в markdown-файлах — вы видите и контролируете каждую запись.

    Claude Memory

    Claude запустила automatic Chat Memory для всех планов в марте 2026. Система автоматически сканирует историю чатов и создаёт синтезированный summary ключевых фактов.

    Лимит: 30 ручных правок, по 200 символов каждая — как коллекция Post-it записок. Есть Temporary Chat mode для приватных разговоров без создания воспоминаний.

    Ключевое отличие от Hermes: Claude хранит память в своём облаке, лимит на ручные правки жёстче (30 × 200 = 6 000 символов vs 3 575 у Hermes). Зато Hermes даёт session search — неограниченный поиск по всем прошлым разговорам.

    Gemini

    Gemini Notebooks не имеет persistent memory в классическом смысле — только контекст из загруженных документов. Нет автоматического запоминания фактов между сессиями.

    Сводная таблица

    Платформа Где хранится Лимит Автозапоминание Поиск по истории
    **Hermes Agent** Локально (markdown + SQLite) 3 575 символов + FTS5 Да, агент курирует Да, FTS5
    **ChatGPT** Серверы OpenAI ~40–80 фактов Да + Dreaming Ограниченный
    **Claude** Серверы Anthropic 30 × 200 символов Да (с марта 2026) Chat search
    **Gemini** Нет persistent memory Нет Нет

    Практические примеры: что записывать в память

    Хорошие записи (компактные, информативные)

    # Окружение
    User runs macOS 14 Sonoma, uses Homebrew, has Docker Desktop. Shell: zsh.
    Editor: VS Code with Vim keybindings.
    
    # Проект
    Project ~/code/api uses Go 1.22, sqlc for DB, chi router. Tests: 'make test'.
    CI via GitHub Actions.
    
    # Урок
    Staging server (10.0.1.50) needs SSH port 2222, not 22. Key: ~/.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...
    

    Настройка памяти в config.yaml

    memory:
      memory_enabled: true          # Включить persistent memory
      user_profile_enabled: true    # Включить USER.md
      memory_char_limit: 2200       # Лимит MEMORY.md
      user_char_limit: 1375         # Лимит USER.md
      write_approval: false         # false = агент пишет свободно | true = требует одобрения
    

    Параметр write_approval: true полезен, если вы хотите контролировать каждую запись в память — агент будет запрашивать подтверждение перед сохранением.

    Ограничения и tradeoffs

  • MEMORY.md маленький. 2 200 символов — это ~800 токенов. Агент должен агрессивно приоритизировать.
  • Один внешний провайдер. Нельзя одновременно использовать Honcho и другой плагин.
  • Session search локальный. База не синхронизируется между машинами.
  • Память агента, а не пользователя. В отличие от OpenClaw, где пользователь редактирует MEMORY.md напрямую, в Hermes агент курирует память сам.
  • Нет версионирования. Старые записи перезаписываются без истории.
  • FAQ

    Что произойдёт, если я удалю MEMORY.md?

    Агент начнёт с чистого листа — не будет знать ничего об окружении, проектах или preferences. Файл будет создан заново при первой записи в память. USER.md при этом не затрагивается.

    Можно ли редактировать MEMORY.md вручную?

    Технически да — это обычный markdown-файл. Но агент может перезаписать ваши изменения при следующей сессии. Лучше использовать инструмент memory или настроить write_approval: true.

    Чем Hermes memory отличается от RAG?

    RAG (Retrieval-Augmented Generation) ищет по внешней базе знаний при каждом запросе. Hermes memory — это фиксированный контекст, всегда загружаемый в system prompt. Session search работает как RAG, но по вашим собственным разговорам, а не по внешним документам.

    Сколько токенов потребляет память?

    MEMORY.md + USER.md — примерно 1 300 токенов в каждом промпте. Это фиксированные расходы независимо от длины разговора.

    Работает ли память в Docker?

    Да, если директория ~/.hermes примонтирована как volume. Без этого память теряется при пересоздании контейнера.

    Ссылки

  • Документация Hermes: Persistent Memory
  • Hermes Agent Skills
  • Hermes для разработчика