OptMem: постоянная память для AI-агентов в 426 токенов
Обзор OptMem — минималистичной системы постоянной памяти для AI-агентов: 426-токенный промпт, один Python-скрипт, без зависимостей.
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
Архитектура 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 токенов). Сколько бы воспоминаний ни накопилось, бюджет контекста остаётся константным — это фундаментальное отличие от любого подхода «инжектировать всё».
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 с двумя популярными альтернативами:
| Параметр | OptMem | Mem0 | Letta (MemGPT) |
|---|---|---|---|
| Философия | Память как файловый формат | Управляемый memory API | OS-уровень управления памятью |
| Хранилище | Append-only текстовый лог | Вектор + граф + KV | PostgreSQL + pgvector |
| Поиск | Regex по всему логу | Семантический (векторный) | Семантический + архивная память |
| Сжатие | Детерминированное бинарное дерево | Автоматическое извлечение фактов | OS-подобные уровни памяти |
| Зависимости | Нет (stdlib Python) | Требует БД / облако | Требует PostgreSQL |
| Self-host | Да, по умолчанию | Да / облако | Да / облако |
| Цена | Бесплатно (open source) | Free / от $19/мес | Бесплатно (open source) |
| Звёзды GitHub | ~1800 | 65 000+ | — |
| Мультиагентность | Ограничена (промпт) | Частичная | Полная |
| Вендор-локин | Нет | Возможен (облако) | Нет |
Экосистема и форки
Популярность 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 — образцово минималистичный инструмент, который делает именно то, что обещает, без лишнего шума.