Chief Beaver Officer

Разговоры

Мастер, ветка, глубокий чат, джоб, форк. Как они начинаются, кончаются и что между ними ходит.

Пять видов 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.