Память
Дословное → курируемое → сид. Gateway логирует, куратор раскладывает, утро начинается с хендаута. Модели не доверяют помнить: помнит раскладка файлов.
Зона агента beaver-agent
Всё, что агент ведёт сам, лежит в мета/бобер/, по классам затухания:
константа промпты/ в системном промпте
сессия дни/, состояние.md, наблюдения/Бобёр утренний сид
курируемое наблюдения/, куратор.md шапка - куратор, лента - все
архив реплики/, выжимки/ + индекс.md по указателю или grep
Остальное в мета/ (шаблоны, таблицы) агент не трогает.
Конверт gatewaybeaver-agent
Конверт - служебный блок, который gateway подкладывает под каждое сообщение Бобра в мастере. Модель видит его как часть твоей реплики, но с шапкой «envelope - фоновый сигнал, не сообщение; реагируй, только если относится к вопросу», и не обязана его комментировать. Так у Менеджера всегда есть контекст, а тебе не нужно ничего повторять.
Собирается в таком порядке:
- время в поясе сетапа;
- что изменилось в vault с прошлого конверта: список файлов со счётчиком добавленных строк, а для файлов из правила
full(сегодняшний дневник) - сами добавленные строки; - справка от хука
recall: адреса карточек и записок людей, которых ты упомянул, и их «## сейчас»; - следом - накопившиеся
normal-инжекты бандлом.
Экономия встроена: если прошлое сообщение было меньше 10 минут назад, идут только имена файлов без диффов; потолок 120 строк на конверт и 30 на файл. Раз в день сетап добавляет сроки из досок.
Что смотреть - VaultWatch с правилами в сетапе; что искать по тексту - хук recall. Gateway путей не знает, оба живут в beaver_agent/memory/.
Справка - указатели, не выводы beaver-agent
Recall.block находит людей в сообщении (по [[ссылке]] - любого, по голому имени - только ближний круг) и отдаёт адреса: карточка в 👤 люди/, файл записок, дни дневника, где он встречался, и ## сейчас из записок инлайн. Модель сама решает, открывать ли.
Хук user_sink рядом пишет каждую реплику Бобра в реплики/YYYY-MM.md - единственное место, где они grep-абельны: транскрипт живёт в Postgres. Из этого же файла куратор берёт новые реплики целиком, так что со временем Менеджер начинает говорить твоими же словами.
Записки о людях beaver-agent
наблюдения/<Имя> - наблюдения.md - файл на человека, Бобёр - наблюдения.md - про тебя. Папка терапевта: ты, пользователь, по умолчанию её не читаешь (хотя можешь), а Менеджер как раз читает - это его собственная память о людях и о тебе.
Шапку (## сейчас, ## паттерны, ## факты, ## открытое) ведёт куратор; ## лента - хронология - дата · факт · источник, туда пишут мастер, ветки и куратор, append-only. Что агент правит сам, а что нет. Записки о тебе он ведёт без просьбы - в этом и смысл: информация о тебе копится у него, а не ждёт команды. В карточках 👤 люди/ без просьбы он делает ровно одну правку - добавляет строку наблюдения: [[Имя - наблюдения]], когда заводит файл; остальное в карточке - твоё. Дневник 📅 дни/ он без просьбы не правит никогда: паттерн называет вслух и предлагает занести.
Куратор beaver-agent
Служебный джоб раз в несколько часов. Крон собирает детерминированный брифинг: новые реплики целиком и имена изменившихся файлов с прошлого прогона (время прогона - первая строка куратор.md). Нет нового - джоб не спавнится.
Модель разносит факты по лентам, переписывает шапки, ведёт журнал и не чаще раза за прогон может inject(master, …): паттерн повторился, обещание подошло, противоречие. Нечего сказать - молчит.
Засев из истории beaver-agent
Память не обязана начинаться с нуля. scripts/seed_memory.py в beaver-agent за один прогон собирает всё нужное из существующего vault: старые чаты → выжимки в мета/бобер/выжимки/ и строки в индекс.md, заполненные дни дневника и мысли → наблюдения по людям и о тебе, плюс строка-ссылка в карточках. Имена берёт только из 👤 люди/.
Гоняет claude -p на маке по подписке; сырые ответы лежат в scripts/seed_out/, повторный запуск их переиспользует, файлы vault дописываются без дублей. --dry-run и --only chats --limit 2 - чтобы посмотреть на паре файлов, прежде чем запускать всё.
Хендаут и состояние gatewaybeaver-agent
Хендаут - последний тёрн старого мастера: справка на утро в прошедшем времени, не задание. Императивный список завтра превратится в TODO и будет закрываться весь день, поэтому обещания в хендаут не идут: они уже в schedule.
состояние.md - меньше 60 строк, операционное и невыводимое из vault. Днём туда только поправки, в воскресенье дистиллятор переписывает его из семи последних хендаутов; потолок строк держит gateway (LineCap).
Где это видно gateway
Админка показывает зону памяти как дерево с рендером файлов, а у каждого разговора - вкладку Context: из каких гранул собран промпт, какие скиллы загружены, какие заметки тред прочитал и записал, и граф вокруг них.
