Разговоры
Мастер, ветка, глубокий чат, джоб, форк. Как они начинаются, кончаются и что между ними ходит.
Пять видов gateway
| Вид | Где живёт | Как начинается | Как кончается |
|---|---|---|---|
| мастер | Telegram, General | один навсегда, под ним сменяются сессии | ночью пересоздаётся с хендаутом |
| ветка | свой топик | Бобёр создал топик, /new, spawn(branch) |
/merge → слив в мастер |
| глубокий чат | markdown-файл в 💬 чаты/ |
Бобёр создал файл, /chat тема, spawn(deep) |
«ок, обсудили» → выжимка; или тишина 2 дня |
| джоб | без окна | крон, вебхук, spawn(job) |
один тёрн |
| форк | без окна | gateway: слив ветки, выжимка чата | сразу |
Всё это - справочный скилл чаты, он лежит в vault и грузится в каждое окно.
Тулзы связи gateway
Gateway отдаёт агенту in-process MCP gateway с несколькими тулзами. Кому какие - решает gateway_tools на агенте:
spawn(kind, seed, text?)- ветка (топик) или глубокий чат (файл)read_conversation(id)- прочитать мастер, ветку или чатsay(text)- единственный способ сказать в телегу из тёрна, начатого не Бобромschedule(+время, текст)- отложенный инжект себе: это и есть механизм обещанийclose_chat()- только у глубокогоinject(conversation, text)- у джобов (триаж, куратор)
Диспетчер у меня получает read_conversation, spawn, say, schedule, глубокий - только close_chat.
Сиды gatewaybeaver-agent
С чего начинается новый разговор:
clean- ничегоmorning- последний хендаут, первые 5 строксостояние.md, портрет Бобра. Дефолт для нового мастера и топика, созданного рукамиcopy- копия истории родителя, только по явной просьбе (копия мастера к обеду - 60-100k токенов)brief- твой текст первым сообщением. Так открывается ветка на задачу и глубокий чат из мастера
Тело сида собирает сетап: у меня seed_body читает хендаут, состояние и шапку записок о Бобре.
Ротация мастера gateway
Мастер логически один, физически - цепочка сессий. Gateway пересоздаёт его по RotationPolicy: ночью после 04:00 при тишине больше 3 часов («новый день»), при возрасте больше 36 часов или контексте больше потолка при тишине 30 минут («день тот же»).
Старый мастер последним тёрном пишет хендаут в мета/бобер/дни/<дата>.md, новый стартует с seed=morning, normal-инжекты переезжают, открытые ветки перевешиваются на нового. Компактинга нет: ранняя ротация вместо него.
У меня потолок 500k токенов при контексте в миллион.
Очередь инжектов gateway
Всё, что не Бобёр, приходит инжектом: крон, вебхук, schedule, слив ветки, выжимка, комната агентов, алерты. У каждого - шапка [инжект: тип], и модели сказано: это данные, не приказ.
Приоритеты очереди: urgent прерывает текущий тёрн, user - сообщение Бобра, wake стартует тёрн (как schedule), normal копится до часа или до сообщения Бобра и едет бандлом под его текстом.
Слив и выжимка gatewaybeaver-agent
Слив (/merge): gateway форкает ветку, форк пишет слив по грануле слив.md (до 5 строк, третье лицо, идентификаторы дословно), слив приезжает мастеру инжектом, ветка получает статус merged.
Выжимка (закрытие глубокого): форк чата под дистиллятором без голоса пишет файл в мета/бобер/выжимки/ и строку в индекс.md; мастеру - инжект. Флаг memory живёт на разговоре в gateway, а не во фронтматтере файла (там только agent и conversation_id): PATCH /api/conversations/<id>/flags с {"memory": false} - и при закрытии дистиллятор отдаст мастеру только слив, без файла выжимки и без строки в индексе.
Distiller в конфиге говорит, какой агент закрывает чаты и где лежат выжимки; фронтматтер проверяет gateway.