OptMem: постоянная память для AI-агентов в 426 токенов

«Every memory solution I tried sucks, so I rolled my own» — Victor Taelin, автор HVM и Kind

AI-агенты забывают всё после завершения сессии. Это фундаментальная проблема: каждый новый чат начинается с нуля, контекст теряется, решения приходится объяснять заново. Большинство существующих решений отвечают на неё тяжёлой артиллерией — векторными базами данных, embedding-моделями, RAG-пайплайнами. OptMem предлагает радикально иной ответ: один Python-файл и 426 токенов в системном промпте.

Что такое OptMem и для кого он

OptMem — это система постоянной памяти для AI-агентов: 426-токенный промпт плюс однофайловый Python-скрипт, plug and play. Автор проекта — Victor Taelin, создатель HVM (Higher-Order Virtual Machine) и языка Kind, известный радикальным минимализмом в системном дизайне.

Достаточно вставить блок в AGENTS.md или CLAUDE.md, и агент начнёт записывать однострочные заметки в append-only лог на диске. Никаких векторных баз данных, никаких эмбеддингов, никакого сервера.

Для кого подойдёт:

  • Разработчики, использующие Claude, Codex или любых агентов с поддержкой AGENTS.md/CLAUDE.md
  • Все, кто хочет, чтобы агент «помнил» предпочтения, решения и историю проекта между сессиями
  • Пользователи, которых отпугивает инфраструктурная сложность Mem0, Zep и аналогов
  • Энтузиасты open source, которым важна полная локальность и отсутствие вендор-локина
ℹ Контекст появления
До OptMem доминирующим подходом были векторные базы данных + embedding-модели + RAG-пайплайны — тяжёлые, медленные и привязанные к конкретным вендорам. OptMem появился на GitHub 25 июля 2026 года и набрал 289 звёзд за два дня.

Как работает OptMem

Архитектура OptMem строится на трёх простых принципах.

1. Append-only лог

LOG.txt только дополняется, никогда не редактируется на месте. Это паттерн event sourcing: каждая заметка — неизменяемое событие, дерево сжатия — чистый кеш, а удалённое дерево полностью восстанавливается из лога.

2. Бинарное дерево сжатия

По мере роста лога команда memo nap просит агента объединить пары старых записей в однострочные сводки. Эти сводки образуют бинарное дерево: свежие воспоминания остаются подробными, старые пары становятся одной сводкой, ещё более старые группы — всё более грубыми.

3. Фиксированная ширина записей = O(1)-адресация

Записи имеют фиксированную ширину, поэтому позиция является идентификатором, а каждый поиск — это один seek. При миллионе воспоминаний (608 МБ) команда wake выполняется за 0,03 с.


graph TD
    A[Агент стартует сессию] --> B[memo wake]
    B --> C[Дерево сводок загружается в контекст]
    C --> D[Агент работает]
    D --> E[memo note: записать факт]
    E --> F[LOG.txt — append only]
    F --> G{Нужно сжатие?}
    G -- Да --> H[memo nap: объединить пары]
    H --> I[TREE/ — бинарное дерево сводок]
    G -- Нет --> D
    D --> J[memo recall: regex-поиск по всему логу]
    D --> K[memo zoom: раскрыть узел дерева]

Ключевые команды

Инструмент предоставляет следующие команды:

  • memo wake — прочитать память, первая команда каждой сессии
  • memo note — записать одно воспоминание из stdin: одна строка текста до 280 байт
  • memo nap — выполнить очередные слияния
  • memo recall <regex> — найти любое записанное воспоминание по регулярному выражению
  • memo zoom <lo>-<hi> — раскрыть узел дерева в два его потомка
  • memo forget <lo>-<hi> — удалить плохую сводку, следующий nap её пересоздаст
💡 Установка за одну команду
curl -fsSL https://raw.githubusercontent.com/VictorTaelin/OptMem/main/install.sh | sh

Установщик печатает блок Memory, который нужно вставить в начало AGENTS.md или CLAUDE.md агента — и всё готово.

Пример использования

Допустим, вы работаете над проектом с Claude несколько недель. После настройки OptMem агент в начале каждой сессии автоматически выполняет memo wake и получает сводку всего, что было записано:

## Memory
#0-7  [Project Phoenix] Auth stack: JWT + Redis sessions, Postgres 16
#8-11 [Deployment] Docker Compose, staging on fly.io, prod manual
#12   Preferred test framework: pytest with factory_boy
#13   Never use ORM bulk_create — triggers miss

Затем в ходе работы агент сам фиксирует важные решения:

memo note "Switched from Celery to ARQ for task queue — 2026-10-01"
memo note "Rate limiter threshold: 100 req/min per user, Redis key TTL=60s"

Вывод wake ограничен параметром WAKE_LINES (по умолчанию 208 строк ≈ 16K токенов). Сколько бы воспоминаний ни накопилось, бюджет контекста остаётся константным — это фундаментальное отличие от любого подхода «инжектировать всё».

⚠ Важно для мультиагентных сценариев
OptMem инструктирует агента никогда не запускать memo в субагентах, поскольку субагент не может оценить, что уже известно, и его заметки могут прийти дублированными и неверными.

Структура файлов

~/.optmem/
  memo            # инструмент: один файл Python 3, без зависимостей
  memory/
    LOG.txt       # все воспоминания, по одной строке, append-only
    TREE/         # сводки: кеш, восстановимый из лога
    config        # размеры, задаются через `memo config`

Переменная окружения $MEMORY_DIR позволяет хранить память в другом месте — синхронизируемой папке или git-репозитории.

Тарифы и цены

OptMem — полностью открытый проект на GitHub. Репозиторий написан на Python, имеет 1847 звёзд и 118 форков. Никаких платных планов, подписок или облачных сервисов нет. Единственные затраты — токены LLM, которые агент тратит на выполнение команд nap (сжатие), но они минимальны.

Плюсы и минусы

КритерийОценка
✅ Нет внешних зависимостейОдин файл Python 3, stdlib only
✅ Полная локальностьВсе данные на вашем диске
✅ Нет вендор-локинаПамять переносима как git-репозиторий: нет привязки к фреймворку, платформе или модели.
✅ Константный контекстРазмер памяти не растёт с историей
✅ Надёжное хранилищеAppend-only лог — каноничен, дерево сводок — кеш. Удаление дерева не удаляет воспоминания.
❌ Поиск только regexПоиск — regex, не семантический. Это основное ограничение дизайна, не исправляемое конфигурацией.
❌ Нет мультиагентной синхронизацииНет описанного протокола блокировок, конфликты разрешаются только на уровне промпт-инструкций.
❌ Записи ≤ 280 байтКаждый факт — одна короткая строка, длинный контекст не сохранить напрямую
❌ Сжатие LLM-зависимоКачество сводок зависит от того, насколько хорошо модель следует инструкции nap

Сравнение с альтернативами

Сравнение OptMem с двумя популярными альтернативами:

ПараметрOptMemMem0Letta (MemGPT)
ФилософияПамять как файловый форматУправляемый memory APIOS-уровень управления памятью
ХранилищеAppend-only текстовый логВектор + граф + KVPostgreSQL + pgvector
ПоискRegex по всему логуСемантический (векторный)Семантический + архивная память
СжатиеДетерминированное бинарное деревоАвтоматическое извлечение фактовOS-подобные уровни памяти
ЗависимостиНет (stdlib Python)Требует БД / облакоТребует PostgreSQL
Self-hostДа, по умолчаниюДа / облакоДа / облако
ЦенаБесплатно (open source)Free / от $19/месБесплатно (open source)
Звёзды GitHub~180065 000+—
МультиагентностьОграничена (промпт)ЧастичнаяПолная
Вендор-локинНетВозможен (облако)Нет
📝 Когда выбрать OptMem
Отдайте предпочтение OptMem, если вам нужна максимально простая, переносимая и полностью локальная память для одного агента без какой-либо инфраструктуры. Выберите Mem0, если нужны семантический поиск и мультиагентность с управляемым сервисом. Выберите Letta/MemGPT, если у вас долго работающие агенты с глубокой иерархией памяти.

Экосистема и форки

Популярность OptMem породила активную экосистему. Появился TypeScript-порт для агента Pi (pi-optmem), не требующий Python — только Node.js с встроенными модулями. Форк mneves75/OptMem сохраняет формат хранения оригинала и добавляет байт-лимитированный wake и более строгую защиту записи. Проект также вдохновил плагины для Hermes Agent и мультиплеерный форк Intrepidus для командной работы.

Вердикт

OptMem — это воплощение принципа «делай одно и делай хорошо». Он не пытается конкурировать с Mem0 или Zep по функциональности: у него нет семантического поиска, графа знаний или облачного дашборда. Зато он даёт то, чего нет ни у кого другого: полностью автономную, детерминированную, переносимую память без единой внешней зависимости.

«Большинство проектов памяти для агентов — это базы данных, требующие инфраструктуры; OptMem сводит всю идею к промпту и скрипту, который можно вставить в любой конфиг агента. Дизайн с фиксированной шириной записей и восстанавливаемым деревом сводок — исключительно элегантный ответ на проблему сжатия контекста.»

Кому подойдёт:

  • ⭐ Разработчикам-одиночкам, активно работающим с coding-агентами (Claude Code, Codex)
  • ⭐ Тем, кто ценит простоту и воспроизводимость выше функциональности
  • ⭐ Пользователям, которым критически важна локальность данных

Кому не подойдёт:

  • ✗ Командам с несколькими параллельными агентами
  • ✗ Задачам, требующим семантического или смыслового поиска
  • ✗ Продакшн-сервисам с требованиями к SLA и мониторингу

Рейтинг: 8/10 — образцово минималистичный инструмент, который делает именно то, что обещает, без лишнего шума.