Ритуалы, которые закрывают день, неделю, месяц и квартал в памяти агента
Агент без памяти каждый раз начинает с нуля: заново выясняет, что за проект, какие решения уже приняты и обо что мы спотыкались в прошлый вторник. Личная база знаний растёт быстрее, чем успеваешь её структурировать, и без ритуала закрытия периода остаётся необработанным логом, а не памятью, которой можно пользоваться.
Хранилище простое намеренно: markdown, JSONL и git, без векторных баз и внешних сервисов. Сложность не в хранении, а в дисциплине записи и в том, чтобы чтение стоило дёшево.
Ритуалы
Пять скиллов закрывают периоды. Закрытие дня сводит шарды параллельных сессий в файл дня и находит незакрытые дни поиском по транскриптам. Закрытие недели ротирует раздутые карточки проектов и донастраивает остальные скиллы по накопленным данным. Закрытие месяца чистит журнал фактов и проверяет записи решений, закрытие квартала сжимает три месячных отчёта в одну-две страницы. Отдельно - протокол допроса: агент задаёт по одному вопросу за раз и помечает каждый свой ответ меткой уверенности, чтобы догадка не выдавала себя за факт.
Инженерия под ритуалами
Три скрипта хуков, 693 строки, 137 тестов. Интересное начинается там, где сессий несколько.
Гонка идентификаторов. Две параллельные сессии сгенерировали одинаковый номер записи, и редактирование строки переписывало весь файл. Лечится не блокировкой, а пересчётом: номер вычисляется в момент записи, а сам журнал переведён в строго добавляемый режим - писать в него можно только через скрипт-обёртку.
Сессии затирали друг друга. Пока чекпоинты писались в общий файл дня, соседняя сессия могла перезаписать чужую секцию. Развёл по шардам: у каждой сессии свой файл, сведение - в момент закрытия дня.
У модели нет часов. Свежесть чекпоинта считалась по полю «обновлено», которое агент заполнял сам - и выдумывал время на пятьдесят две минуты вперёд. Теперь берётся время изменения файла.
Тихая порча данных. Аудит нашёл 41 запись (8% фактов), невидимую для поиска: они жили в старых схемах, которых текущий разбор не знал. И 220 файлов из 370 в индексе тем оказались невалидным UTF-8 - awk в BSD-варианте режет строку по байтам, а не по символам, и кириллица разваливалась. Ничего из этого не роняло систему, поэтому и не замечалось.
Попутно стоимость стартовой загрузки контекста упала с 21 700 до 12 000 токенов на запуск, а покрытие тестами выросло с 30 до 135.