| name | memory-compactor |
| description | Автоматическое сжатие памяти при заполнении. Группировка, дедупликация, архивация в скиллы. Чтобы не упираться в лимит 2.2K и не терять важное. |
| tags | ["memory","compression","meta","maintenance"] |
Memory Compactor — Автоматическое сжатие памяти
Зачем
Память ограничена ~2,200 символами. Когда заполняется:
- Новые факты не помещаются
- Старые факты вытесняются
- Теряются предпочтения пользователя и lessons learned
Триггер
Запускать автоматически когда memory >70% заполнения (проверять в usage в memory tool result).
Также запускать:
- После 10+ session_search запросов
- Когда user correction не влез в память
- По просьбе пользователя
Протокол сжатия
Шаг 1: Прочитать всю память
Использовать memory(action='add') нельзя читать. Читать из persona (memory секция в system prompt).
Собрать в голове что есть:
- Факты об окружении (WSL, провайдеры, пути)
- Предпочтения пользователя
- Технические решения (что работает, что нет)
- Исторические решения (почему выбрали X, отказались от Y)
Шаг 2: Классификация
| Тип | Куда |
|---|
| Личные данные пользователя (имя, язык, стиль общения, контакты) | Оставить в памяти |
| Настройки провайдера (endpoint, модель, цены) | Оставить в памяти или provider-polza |
| Рабочие решения (как парсить WB, обход блокировок) | ➡️ В скилл (создать или дополнить существующий) |
| Cronjob настройки (расписание, скрипты) | 🗑️ Удалить — лежат в cronjob конфиге |
| Инструменты (как что работает) | ➡️ В скилл |
| Устаревшие решения (не используем больше, не работает) | 🗑️ Удалить |
| Выводы о качестве моделей | ➡️ В cost-aware-orchestrator или provider-polza |
| Ошибки пользователя ("не делай X") | 🗑️ Удалить — уже сохранено в rules-and-bounds |
Шаг 3: Сжатие
Правила сжатия:
ДО: "DeepSeek V4 Flash через polza.ai. Цена 26.88₽ input / 53.76₽ output. Кэш запросов есть. Provider — custom."
ПОСЛЕ: "Polza(DeepSeek V4): 26.88/53.76₽. Кэш есть."
ДО: "Dima использует polza.ai для основного чата, AITunnel для делегации, не использует OpenRouter, предпочитает дешёвые модели, ценит скорость."
ПОСЛЕ: "Dima: Polza↔чат, AITunnel↔delegate. Цена > скорость."
Шаг 4: Архивировать детали в скиллы
То что вытащил из памяти — сохрани в соответствующий скилл или создай новый.
Примеры:
- Детали по WSL →
environment-wsl
- Настройки Polza →
provider-polza
- Правила →
rules-and-bounds
- Воркфлоу → соответствующий скилл
Шаг 5: Записать сжатую версию
memory(action='add', target='memory', content='сжатая версия') — заменит старую.
memory(action='add', target='user', content='сжатая версия') — заменит старую.
Важно: Не нужно удалять старые записи по одной. Новая запись добавится сверху, гигиена сделает своё дело.
Аварийное сжатие (когда <10% места)
Если памяти осталось <200 символов:
- Удали всё не-essential
- Оставь только: имя пользователя, основной провайдер, 1 ключевой проект
- Остальное → в скиллы
- Скажи пользователю что провёл сжатие (1 предложение)
Чек-лист сжатия
- Проверил % заполнения
- Отфильтровал что можно удалить
- Отфильтровал что можно сжать
- Отфильтровал что можно перенести в скилл
- Создал/дополнил скиллы
- Сохранил сжатую память
- Новая запись влезет? Если нет — повторить