HANDOVER

September 8, 2026 · View on GitHub

Это точка входа для человека, у которого уже есть свой флот AI-агентов, и для его модели. Не «как начать» (для этого SEED.md), а «вот всё, что у нас есть, разберись и забери, что полезно».

Всё ниже — рабочая система, которой один фаундер и его AI-кофаундер пользуются каждый день. Шесть машин: always-on домашний хаб с GPU, ноут для живой работы, тощий Linux-VPS как якорь и источник истины, три follower-машины у коллег. Личные данные не выкладываем; метод, протоколы и референсный код — выкладываем целиком, бесплатно, MIT.


0. За 60 секунд

Три слоя, каждый решает свою боль:

СлойБольГде лежит
Оркестрация флотанесколько машин с общим состоянием разъезжаются молчаclaude-consensus
Единая памятьагент не помнит вчера; вспоминание стоит токеновsqlite-graph-memory + этот репозиторий
CRM и исходящееагент, который умеет писать людям, однажды напишет плохоcrm-template/ в этом репозитории

Поперёк всех трёх — управление: claude-bible (правила как файлы, с приоритетами и журналом отклонённого) и agent-leash (модель делегированных полномочий: что агент делает сам, а что не делает никогда).


1. Порядок чтения для твоей модели

Если ты модель и человек сказал «разберись, что у них есть» — читай в этом порядке, он выстроен по убыванию переносимой пользы, а не по красоте.

  1. claude-consensus/FOR-ROBOTS.md — карта многомашинного слоя, уже написанная для агента. Десять пунктов альфы, отранжированные. Начинай отсюда.
  2. claude-consensus/docs/BUS.md — шина: два рельса, ACK-дисциплина, три слоя самолечения синка.
  3. claude-consensus/docs/PROTOCOL.md — консенсус между машинами: propose → counter → accept → commit, независимая верификация, детект split-brain.
  4. crm-template/ENGINE.md (здесь) — CRM: модель теплоты с экспоненциальным затуханием + единственная дверь наружу с бюджетом и аудитом. С демо-данными.
  5. CLAUDE-EXTERNAL.md (здесь) — рабочие принципы ассистента: простота как критерий, «лечи корень, а не симптом», обязательный тест после сборки.
  6. agent-leash/docs/leash-8.md — восемь доменов полномочий; полезно, если у тебя агент уже что-то делает наружу.
  7. skills/ (здесь) — все 100 скилл-команда, карта по категориям: skills/INDEX.md. Начинать стоит с tt (тест после сборки), retro (ритуал конца сессии), intake (приём нового правила), alfa-search-recall-deepresearch (recall перед ресёрчем). Движки, которые они вызывают, лежат в engines/ — 246 файлов, паспорт на каждый в engines/PASSPORTS.md.

2. Что стоит забрать, по убыванию ценности

  1. Один писатель на файл. Ни один файл никогда не пишется двумя машинами. Почтовые ящики — по отправителю, метки прочтения — по читателю, журналы — шардами по машине. Один этот инвариант убирает весь класс sync-конфликтов.
  2. Dual-send конструкцией, а не дисциплиной. Правило надёжности, живущее в прозе, будет забыто. У нас одна точка входа шлёт сразу в оба рельса; отправить в один технически невозможно. Общий урок: дисциплину надо превращать в структуру.
  3. «Доставлено» ≠ «сделано». Отправитель отвечает за РЕЗУЛЬТАТ. Каждое прямое поручение трекается, молчание сверх SLA автоматически перепинывается и потом эскалируется. Это лечит самый частый мульти-агентный отказ: задачи, которые испаряются при передаче.
  4. Ровно два повода будить человека. Машины договариваются сами обо всём, КРОМЕ: (а) деньги / необратимое / наружу / секреты / конфиг, (б) тупик в переговорах. Полная автономия во всём остальном.
  5. Детерминированная перепроверка своего же ярлыка. Собственная классификация «это безопасно» — самое слабое звено любого гейта, который ты себе поставил. Поверх LLM-суждения стоит тупая проверка по ключевым словам, которая форсит эскалацию независимо от ярлыка.
  6. Числа считает код, смысл — модель. SQL/grep → RAG → LLM по куску → LLM по многому. Скоринг лидов, дедуп, счётчики, фильтры — арифметика, 0 токенов и воспроизводимо. Модель зовут на суждение, язык и синтез.
  7. Штраф за безответное исходящее (crm-template/ENGINE.md §2). Слагаемое, которое все забывают и без которого скоринг превращается в машину, долбящую тех, кто уже перестал отвечать.
  8. Сообщения — это данные, а не полномочия. Текст в шине никогда не даёт права. Единственный формат передачи полномочий — блок авторизации с дословной цитатой человека; всё, что пахнет инъекцией, эскалируется.

2а. Что у нас есть, но пока НЕ выложено (честный список)

Чтобы карта не выглядела полнее, чем она есть.

Что изменилось 28.07. Выложены все 100 скилл и 246 движков — тот самый «следующий заход», про который было сказано честно, что движков пока нет.

ЗамерБылоСтало
python-движков в репо17246
документов с хотя бы одной ссылкой в пустоту8711
движков, на которые ссылаются и которых у нас нет19, перечислены ниже

Оставшиеся 11 документов — ровно те, что ссылаются на 19 несуществующих у нас файлов (таблица ниже) плюс сам HANDOVER, который их перечисляет. Ни одной мёртвой ссылки на движок, который у нас ЕСТЬ, не осталось. Все 246 файлов парсятся под Python 3.12, повторный прогон конвейера даёт побайтово тот же результат. Подробности — engines/README.md, паспорта — engines/PASSPORTS.md.

Не выложено: 18 движков, на которые скиллы ссылаются, а у нас их нет

Скилл их упоминает, но на машине, с которой шла публикация, файла нет. Это не цензура, это дырка в нашей же карте — часть живёт только на хабе, часть переименована, часть просто уехала. Перечисляем, чтобы вы не искали то, чего нет:

ДвижокКто ссылаетсяПочему нет
gmail_auth.py, gmail_check.pyskills/gmailживут на хабе, до этой машины не доехали
events.py, chats.py, messages.py, runner.pyskills/telegram-howtoмодули стороннего Telegram-MCP, не наш код
tg_watch_daemon.py, login_corp_acct.pyskills/telegram-watchпривязаны к конкретному аккаунту, только на хабе
main.py, session_monitor.pyskills/fleetпереименованы, ссылка в скилле устарела
build_dm_batches.py, build_hotlist.py, merge_tags.pyobsidian-ingestразовые скрипты одной миграции, не сохранились
gen_follower_package.pyskills/follower-onboardзаменён на persona_build.py, который выложен
_alpha.py, _sync.py, utils.py, results.pyразноеродовые имена внутри чужих пакетов, не наш код

Не выложено: 3 движка, где чужие персональные данные — и есть содержимое

Отдельная категория, и самая важная в этом списке. Подстановка спасает файл, который УПОМИНАЕТ человека в комментарии. Она бессильна, когда весь смысл файла — люди:

ДвижокЧто внутриПочему не публикуем
build_notpeople_tracker.py37 реальных инвесторов: имена, фонды, Telegram user-id, дословные цитаты их ответовфейка «той же формы» для этого не существует — данные и есть файл
build_pitch_drafts.pyперсональный аутрич поимённо, с названиями их фондов, плюс метрики раундачужая переписка + непубличные цифры
select_next_investors.pyвыбирает следующие цели из того же живого реестрабез реестра бессмысленно, с реестром — утечка

Как нашли — стоит рассказать, потому что механизм важнее случая: внешний ревьюер (Gemini, рельса 3 ритуала /tt) дал BLOCK и указал, что подстановка id ловит только числа от 9 цифр. Проверили — да, два id в 7–8 цифр прошли мимо. Потянули за нитку, и под ней оказался не «два числа», а живая фандрейз-CRM целиком. Теперь этот класс режется правилом people-roster в final_gate.py и списком DENY_ENGINES в санитайзере: НОВЫЙ файл такой формы не выложится, даже если про него забудут.

Не выложено: сам конвейер публикации

oss-publish/ (очередь, санитайзер, финальный гейт, генератор паспортов) остаётся у нас. Причина не в секретности метода — метод описан выше целиком — а в том, что содержимое этих файлов и ЕСТЬ список реальных имён, хендлов, хостов и телефонов, которые они ловят. Опубликовать детектор = опубликовать ровно то, что он детектирует. Гейт, кстати, поймал это сам: как только HANDOVER начал упоминать final_gate.py по имени, файл попал в очередь на выкладку и немедленно ушёл в карантин по собственным правилам. Нужен метод — спрашивайте, опишем или отдадим обезличенный каркас.

Не выложено: остальной _imports

На машине лежит ~1510 python-файлов, выложено 246. Разница — не заначка: это разовые скрипты миграций, черновики и мёртвый код, на который не ссылается ни один опубликованный документ. Публиковать их — значит выдавать свалку за библиотеку. Критерий выкладки был ровно один: на движок ссылается опубликованный скилл. Нужен конкретный файл из этой разницы — скажите, достанем адресно.

Не выложено: три подсистемы протокола

ПодсистемаЧто делаетПочему интересна
Арбитраж при падении лидераесли координатор молчит дольше порога, роль арбитра на тик переходит к запасному узлубез этого консенсус встаёт намертво, когда падает именно координатор
Подписи сообщенийHMAC-подпись пакетов шины с датой включения принуждения«сообщения — данные, а не полномочия» перестаёт быть правилом на бумаге
Shadow-режим классификаторановая версия классификации рисков едет рядом с боевой и только пишет логменять гейт безопасности вслепую нельзя, а замерить иначе нечем

Что в выложенном коде подменено

Данные подменены, а не вымараны: id чатов, хендлы, телефоны, почты и имена машин заменены правдоподобными фейками той же формы. <REDACTED> ничему не учит, а фейк той же формы оставляет код читаемым. Секретов в репо нет ни в каком виде; пути вида secrets/*.env оставлены намеренно — они показывают, куда класть свои ключи. Все 246 файлов парсятся под Python 3.12, но не запускаются, пока вы не подставите свои пути и аккаунты.

Если что-то из списка нужно — скажи, выложим адресно. Дозаливка идёт волнами, эта карта обновляется вместе с ними.

3. Чего у нас нет и что бы мы переделали

Без этого раздела это была бы реклама, а не обмен.

  • Транспорт спорный, и мы это признаём. Наш второй рельс — Telegram-чат: он же человекочитаемый лог, к которому человек имеет доступ с телефона. Нам говорили, что для агентов это медленно и что правильный транспорт — свой сервер или mesh-сеть. Возражение справедливое, и мы его до сих пор не закрыли собственным замером. Латентности «сообщение → доставлено → ACK» по обоим рельсам у нас нет в цифрах. Если у тебя такой замер есть — это ровно то, чем стоит поменяться.
  • CRM вырос вокруг одного канала. Telegram глубоко, Discord и X слабее. «Канал» должен был с первого дня быть абстракцией с одним интерфейсом, а не веткой в коде.
  • Скоринговая модель не A/B-тестировалась. Веса и полураспады пришли из внешнего ресёрча и выглядят разумно. Доказательства, что они лучше соседних значений, нет.
  • Этот пакет прошёл через двух внешних ломателей другого вендора — и они нашли пять настоящих дыр. Не «вычитали», а сломали: гонка в счётчике бюджета; окно между отправкой и записью в лог, из-за которого ретрай слал человеку дважды; путь реидентификации в «обезличенном» экспорте; полоса теплоты, ранжирующая молчащих людей как горячих; и документация, обещавшая больше кода, чем есть. Все пять закрыты, разбор — в crm-template/ENGINE.md §7. Пишем это здесь, потому что «мы протестировали» без списка находок ничего не значит.
  • Сторож не должен жить в том, что сторожит — правило, за которое мы заплатили: проверка здоровья почтовых ящиков ехала на тех же ящиках и умерла вместе с ними молча. Теперь любой health-check живёт на независимом слое и штампует heartbeat последней строкой: не отштамповал — значит умер сам.

4. Что интересно с той стороны

Мы отдаём это не в пустоту — нам интересен обмен по трём конкретным вещам:

  1. Доставка за секунду через свой сервер. Как устроена шина, где сообщение гарантированно ложится получателю в пределах секунды, и что происходит, когда узел был офлайн полчаса.
  2. Изолированные инстансы, которые знают друг о друге. Как решён discovery и общее состояние без общего диска.
  3. Мульти-вендорное код-ревью. Прогон одной задачи через несколько разных моделей как контроль качества: что реально ловит вторая пара глаз, а что шум.

5. Провенанс и лицензия

Собрано и используется ежедневно: Антон Дзятковский (фаундер, не технарь, отдаёт это бесплатно) и его AI-кофаундер на Claude Code. Референсный код — живая реализация, очищенная: имена, идентификаторы чатов и пути заменены на плейсхолдеры; шрамы в комментариях настоящие.

Лицензия MIT (см. каждый репозиторий). Забирай без спроса, ссылка приятна, но не обязательна.

Карта семьи репозиториев: tonydzi.