Память консольных агентов: Hermes, Pi, Codex, Claude Code и OpenCode
Как агенты запоминают опыт, объединяют записи, забывают устаревшее и возвращают нужное в контекст модели.

Допустим, вы поправили агента: тесты этого проекта нужно запускать в контейнере. Через неделю команда изменилась, а ещё через неделю вы попросили забыть прежнее правило. Что агент сохранит после каждого разговора? Какая версия попадёт в следующую задачу? С этих вопросов и начинается сравнение памяти.
Обзор опирается на документацию и выборочное чтение кода Hermes v0.22.2, Pi v1.3.0, Codex v0.163.0 и OpenCode v1.19.3. Здесь сопоставляются механизмы; качество запоминания на одинаковых задачах не измерялось. Версии кода зафиксированы 17 октября 2026 года, разбор жизненного цикла дополнен 21 октября. Claude Code рассмотрен по официальной документации на эту дату.
Запись отбирается, объединяется с прежними, читается для задачи и пересматривается после изменений.
Что именно сравниваем
Сессия — отдельный разговор с агентом и его состояние. История сессии хранит сообщения и действия. Рабочий контекст — сведения, переданные модели в конкретном запросе. Длинную историю сокращают до резюме и недавних сообщений: это сжатие контекста, или compaction. Межсессионная память отбирает из опыта то, что пригодится в независимой будущей задаче. Файлы AGENTS.md и CLAUDE.md задают постоянные инструкции; агент может использовать их без какого-либо обучения на прошлых разговорах.
Для каждого агента разберём четыре операции:
- Запоминание: кто выбирает полезное, в какой момент и в каком виде сохраняет.
- Консолидация: как новые сведения объединяются со старыми, устраняются повторы и противоречия.
- Воспроизведение: кто выбирает записи для задачи и как их текст попадает в контекст модели.
- Забывание: что перестаёт попадать в запрос, а что действительно удаляется из хранилища.
Это рабочая рамка сравнения. Подробнее о слоях — в обзоре state, context и memory.
Сравнение жизненного цикла памяти
На узком экране таблицу можно прокрутить в сторону.
| Агент | Запоминание и консолидация | Воспроизведение | Забывание |
|---|---|---|---|
| Hermes | Агент и фоновый разбор пополняют короткие заметки; модель редактирует их и навыки | Все короткие заметки в системном контексте; эпизоды — через поиск истории | Правка и удаление заметок; фоновое удаление требует подтверждения |
| Pi | Резюме выбранной ветки и её продолжения; межсессионная память — через расширение | Резюме + недавние сообщения; в новой сессии — инструкции и подключённое расширение | Старые сообщения исключаются из запроса, но сохраняются в дереве |
| Codex V1 | Извлечение опыта из эпизодов → тематический справочник, сводка, навыки | Сводка автоматически; справочник и резюме эпизодов — по выбору модели | Отбор по использованию и давности; пересмотр выводов при консолидации |
| Codex V2 | Резюме эпизодов → короткая сводка с областью действия и указателями | Сводка автоматически; резюме читается, если нужны дополнительные основания | Тот же отбор; удаление неподтверждённых и исправленных выводов из сводки |
| Claude Code | Заметки в ходе работы; модель объединяет и сокращает их | Индекс автоматически, тематические файлы по необходимости | Заметки сохраняются до правки или удаления |
| OpenCode V1 | Агент сжатия обновляет резюме разговора; межсессионная память — через плагин | Резюме + недавние сообщения; в новой сессии — правила и логика плагина | Старый текст исключается из запроса; отдельная очистка результатов инструментов |
Источники и условия приведены ниже. В изученном ядре Pi и OpenCode не найден отдельный автоматический цикл накопления межсессионного опыта. Это не исключает запись обычного файла по просьбе пользователя или полноценную память в расширении.
Hermes: короткие заметки, навыки и архив эпизодов
Запоминание. Основной агент может записать полезное прямо во время работы инструментом memory. Есть два небольших хранилища: USER.md — сведения и предпочтения пользователя, MEMORY.md — окружение, договорённости проекта и рабочие особенности. Стандартные лимиты — 1375 и 2200 символов соответственно. Инструмент умеет добавить запись, исправить её фрагмент или удалить запись целиком. Хранилище, операции.
Дополнительный фоновый разбор, background review, рассматривает снимок разговора после подходящих ходов. Факты он направляет в заметки, повторяемый способ работы — в навык агента, инструкцию для определённого класса задач. Промпт требует сохранять рабочую процедуру и её ограничения, не превращать разовый сбой окружения в вечный запрет. Полезной записи может не оказаться. Разбор и его инструкции.
Консолидация. При заполнении заметок модель должна сократить, объединить или удалить старое. Превышение лимита возвращает ошибку; пакетная операция позволяет освободить место и добавить новое за один вызов. Для навыков разбору предписано искать уже записанный урок и исправлять его, избегая дубликатов. Но фоновый процесс без участия пользователя не применяет patch и remove к заметкам: предлагает их на подтверждение. Ограничение фоновых правок, правила работы с навыками.
Воспроизведение. Обе короткие заметки целиком входят в системный контекст как снимок на начало сессии. Запись во время разговора меняет файл и возвращает результат агенту, но не переписывает этот снимок. Более подробный опыт агент ищет инструментом session_search: полнотекстовый поиск FTS5 в базе SQLite находит сообщения, после чего можно прочитать эпизод и его окружение. Слова для поиска и полезность результата выбирает модель; сам поиск модель не вызывает. Снимок, поиск.
Забывание. Удаление заметки не стирает породивший её разговор. Сжатие тоже сохраняет исходные сообщения в архиве. Поэтому прежнее правило может встретиться при последующем поиске; это риск архитектуры, а не измеренный здесь сбой. В рассмотренном хранилище коротких заметок нет автоматического удаления по возрасту. Операции хранения, архив сессий.
Pi: резюме внутри дерева сессии
Запоминание. Pi сохраняет сообщения в дереве: каждая запись знает своего родителя, можно продолжить другую ветку. При заполнении контекста модель делает резюме ранней части; при переходе между ветками можно отдельно суммировать покидаемую. Это сохранение хода работы внутри сессии. Формат, сжатие и ветки.
Консолидация. Повторное сжатие получает прежнее резюме и сообщения после предыдущей границы сохранения. Оно обновляет описание цели, выполненного, решений и следующего шага. Сопоставления независимых сессий и накопления общего справочника опыта в этом механизме нет. Алгоритм.
Воспроизведение. Pi собирает выбранный путь дерева. После сжатия в запрос идут резюме и сохранённый дословно хвост сообщений. Для новой независимой сессии загружаются контекстные файлы и описания навыков; межсессионный поиск и подстановку воспоминаний должно обеспечить расширение. Сборка контекста, ресурсы, расширения.
Забывание. Подробности, не вошедшие в резюме, исчезают из активного контекста, но исходные записи остаются в файле JSONL — формате с отдельной записью на каждой строке. Это исключение из запроса, а не удаление данных. Исправление в новой ветке само по себе не переписывает соседние ветки и внешние заметки. Сжатие, структура сессии.
Codex: извлечение эпизодов и консолидация V1/V2
Запоминание. Codex отдельно анализирует прошлые журналы работы. Модель должна отобрать полезные для будущего задачи, исправления пользователя, проверенные способы действий и причины неудач; пустой результат допустим. Память появляется с задержкой: законченный разговор сначала должен попасть в обработку. Для версии v0.163.0 функция выключена по умолчанию; при включении базовая версия — V1. Извлечение, промпт V1, настройки, флаг.
Консолидация V1. Из каждого эпизода получаются подробная запись опыта и резюме сессии. Затем отдельный агент объединяет выбранные записи в MEMORY.md, краткую memory_summary.md и, когда это полезно, навыки. Он группирует связанные задачи, уточняет условия применения, устраняет повторы и пересматривает противоречащие выводы по свежести и силе подтверждения. Получается справочник поверх отдельных эпизодов. Инструкции V1.
Консолидация V2. Первая стадия оставляет резюме эпизода без отдельного raw_memory. Вторая строит только memory_summary.md: профиль, подтверждённые предпочтения, общие подсказки и указатели на резюме, сгруппированные по проектам и датам. Отдельных генерируемых MEMORY.md и skills/ в этом пути нет. Сводка должна оставаться короче 10 000 байт. Извлечение V2, консолидация V2.
V2 особенно явно ограничивает обобщение: просьба «покажи план перед этой правкой» остаётся условием конкретной задачи. Постоянное предпочтение можно вывести, если пользователь назвал его общим правилом или оно подтверждено в разных задачах. Позднейшее исправление имеет приоритет над прежним утверждением. Это требования к модели, а не гарантия безошибочного исполнения. Промпты V2, правила сводки.
Воспроизведение. В обеих версиях готовая сводка автоматически добавляется в контекст с бюджетом 2500 токенов — единиц текста модели. Новая задача не ждёт фонового обновления. В V1 модель ищет нужный фрагмент справочника, затем читает подходящие резюме или навыки. В V2 она использует указатели из сводки и открывает резюме, когда дополнительные основания, хронология или неопределённость могут изменить ответ. Векторный поиск для этих путей не требуется. Подготовка сводки, бюджет, чтение V1, V2.
Забывание. Для консолидации выбираются до 256 записей, в первую очередь чаще использованные, затем более свежие. Базовое окно — 30 дней с последнего учтённого использования; для неиспользованных записей — с обновления исходной сессии. При выпадении источника агент должен убрать основанные только на нём выводы, сохранив то, что подтверждается другими источниками. Это не обещание уничтожить все следы через 30 дней: журналы, промежуточные записи и итоговая память имеют разный жизненный цикл. Отбор и очистка, пересмотр V1, V2.
Явные просьбы «запомни», «исправь», «забудь» записываются как отдельные заметки для следующей консолидации. Поэтому подтверждение записи просьбы ещё не означает, что старый текст удалён из готовой памяти. Чтение V2, применение заметок. Память общая в пределах директории данных Codex; область проекта сохраняется в тексте записей. Подробности — в статье «Как устроена память Codex» (черновик).
Claude Code: редактируемые заметки проекта
Запоминание. По документации Claude сохраняет в ходе работы предпочтения, обратную связь, контекст проекта и ссылки на внешние источники. Он выбирает полезное для будущих разговоров; запись после каждой сессии не обещана. Обычная область памяти — репозиторий. Auto memory.
Консолидация. Модель редактирует тематические файлы и индекс MEMORY.md. При приближении индекса к лимиту система напоминает сократить его, объединить или убрать устаревшее, вынести детали в отдельные файлы. Публичная документация не описывает отдельный многостадийный конвейер консолидации. Устройство и лимиты.
Воспроизведение. Автоматически загружаются первые 200 строк индекса или 25 КБ — что наступит раньше. Тематические файлы агент читает обычными файловыми инструментами по необходимости. После сжатия auto memory снова подставляется с диска. Чтение, поведение после сжатия.
Забывание. Заметки живут до правки или удаления пользователем либо Claude. Очистка старых журналов сессий их не затрагивает. Превышение лимита индекса не удаляет лишний текст: он просто не попадёт в начальную загрузку. Хранение.
Этот раздел описывает документированное поведение; внутренний код Claude Code здесь не проверен. Собственная память именованных субагентов настраивается отдельно. Память субагентов.
OpenCode: пересборка контекста и плагины
Запоминание. OpenCode V1 сохраняет разговор в SQLite. При заполнении контекста агент сжатия готовит резюме для продолжения работы, оставляя недавнюю часть дословно. Промпт нацелен на цель, ограничения, результаты, незавершённые действия и важные файлы. Хранение, агент сжатия, структура резюме.
Консолидация. При следующем сжатии учитываются прежняя сводка и новый материал. Это обновление состояния разговора. Отдельного извлечения устойчивых предпочтений из множества независимых сессий в изученном штатном пути не найдено. Плагин может добавить такую логику и изменить подготовку контекста или промпт сжатия. Обработка, интерфейс плагинов.
Воспроизведение. Продолжение получает резюме и сохранённый хвост разговора. В новую независимую сессию приходят постоянные правила и доступные навыки; наличие прошлой истории в базе само по себе не подставляет её к новой задаче. Дополнительный поиск памяти зависит от плагина. Сжатие, правила.
Забывание. Сжатие убирает старый текст из активного запроса. Отдельный механизм prune помечает старые результаты инструментов как сокращённые: вместо их полного текста в контекст идёт заглушка. Это не удаление всей истории из базы. В данном релизе prune выключен по умолчанию. Очистка результатов, настройки V1.
Здесь проверен путь V1 релиза v1.19.3. OpenCode V2 — другая реализация; её параметры к этому сравнению не приписаны.
Что меняется после исправления и просьбы забыть
Вернёмся к условному правилу запуска тестов. Ниже — следствия описанных механизмов, а не результаты эксперимента.
На узком экране таблицу можно прокрутить в сторону.
| Ситуация | Что должно произойти с памятью | Где возможен разрыв |
|---|---|---|
| «Теперь тесты запускаются иначе» | Hermes и Claude правят заметку; Codex применяет исправление при консолидации; Pi/OpenCode требуют обновить используемый файл или память расширения | Новое правило осталось только в текущем разговоре |
| «Это правило только для проекта A» | Область действия должна сохраниться при записи и чтении | Общая память Hermes/Codex может принести правило в проект B, если потерян его контекст |
| «Забудь старую команду» | Удаляются запись и её указатели либо обрабатывается запрос удаления | Старый текст всё ещё есть в загруженном контексте, истории, навыке или другой сводке |
| «Найди, почему мы так решили» | Нужен исходный эпизод: поиск истории Hermes, резюме Codex, файл со ссылкой Claude или механизм расширения | Короткая заметка сохранила решение, но потеряла основания |
У Hermes короткие заметки занимают контекст независимо от задачи; поиск добавляет нужные эпизоды. У Claude и Codex постоянно загружены индекс или сводка, а полнота воспоминания зависит от выбора дополнительных чтений. У Pi и OpenCode межсессионное поведение определяется подключённым расширением. Это разные способы распределить отбор информации между записью и чтением; их качество нужно проверять на одинаковых задачах.
Как проверить полный цикл
Возьмите тестовый проект и правило, которое нельзя угадать: например, завершать отчёт строкой КЕДР-17. Проверьте четыре перехода в независимых разговорах:
- Запись → воспроизведение: правило сохранено; следующий разговор использует его без напоминания.
- Исправление → консолидация: метка заменена на
ЛИПА-42; ещё один разговор использует новую, а не обе версии. - Удаление → забывание: после просьбы забыть метку новая задача обходится без неё; проверены запись, индекс и другие её копии.
- Смена проекта → проверка области: правило проекта A не применяется в проекте B без основания.
Для отложенной обработки дождитесь её фактического результата. Смотрите не только на ответ, но и на сохранённый текст и чтения памяти: отсутствие метки в одном ответе ещё не доказывает удаление. Сравните с запуском без памяти и с явной инструкцией. Полный протокол — в статье «Как проверить, что память действительно помогает агенту».
Термины
- Сессия — отдельный разговор с агентом и связанное с ним состояние.
- Контекст — сведения, переданные модели при конкретном вызове.
- Compaction — сжатие истории для продолжения работы в доступном контексте.
- Межсессионная память — отобранные сведения для независимых будущих задач.
- Консолидация — объединение и пересмотр записей, включая повторы и противоречия.
- Воспроизведение — выбор памяти и включение её текста в запрос к модели.
- Навык агента — инструкция для повторяемого класса задач.
- JSONL — текстовый формат с отдельной записью JSON на каждой строке.
- SQLite — встроенная база данных; FTS5 — её полнотекстовый поиск.
- Background review — фоновый разбор работы для отбора заметок или процедур.
- Токен — единица представления текста для модели.
- Плагин, расширение — подключаемый код, добавляющий функции программе.
Источники
Ссылки в тексте ведут к конкретным механизмам; код закреплён на коммитах релизов.
- Hermes v0.22.2 — короткие заметки, поиск истории, фоновый разбор.
- Pi v1.3.0 — сжатие выбранной ветки и интерфейс расширений.
- Codex v0.163.0 — общий двухстадийный процесс; различия V1/V2 проверены по реализации и промптам обеих версий. README преимущественно описывает V1.
- Claude Code — живая официальная документация, проверенная 21 октября 2026 года.
- OpenCode v1.19.3 — реализация V1, правила и плагины.
Локальные настройки и сторонние провайдеры могут менять описанный жизненный цикл.
Налаживаете работу с ИИ-агентами?
Помогаю командам выбрать рабочий процесс, подготовить знания и проверить результат внедрения. Практические заметки публикую в Telegram-канале.