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. Порядок чтения для твоей модели
Если ты модель и человек сказал «разберись, что у них есть» — читай в этом порядке, он выстроен по убыванию переносимой пользы, а не по красоте.
- claude-consensus/FOR-ROBOTS.md — карта многомашинного слоя, уже написанная для агента. Десять пунктов альфы, отранжированные. Начинай отсюда.
- claude-consensus/docs/BUS.md — шина: два рельса, ACK-дисциплина, три слоя самолечения синка.
- claude-consensus/docs/PROTOCOL.md — консенсус между машинами: propose → counter → accept → commit, независимая верификация, детект split-brain.
crm-template/ENGINE.md(здесь) — CRM: модель теплоты с экспоненциальным затуханием + единственная дверь наружу с бюджетом и аудитом. С демо-данными.CLAUDE-EXTERNAL.md(здесь) — рабочие принципы ассистента: простота как критерий, «лечи корень, а не симптом», обязательный тест после сборки.- agent-leash/docs/leash-8.md — восемь доменов полномочий; полезно, если у тебя агент уже что-то делает наружу.
skills/(здесь) — все 100 скилл-команда, карта по категориям:skills/INDEX.md. Начинать стоит сtt(тест после сборки),retro(ритуал конца сессии),intake(приём нового правила),alfa-search-recall-deepresearch(recall перед ресёрчем). Движки, которые они вызывают, лежат вengines/— 246 файлов, паспорт на каждый вengines/PASSPORTS.md.
2. Что стоит забрать, по убыванию ценности
- Один писатель на файл. Ни один файл никогда не пишется двумя машинами. Почтовые ящики — по отправителю, метки прочтения — по читателю, журналы — шардами по машине. Один этот инвариант убирает весь класс sync-конфликтов.
- Dual-send конструкцией, а не дисциплиной. Правило надёжности, живущее в прозе, будет забыто. У нас одна точка входа шлёт сразу в оба рельса; отправить в один технически невозможно. Общий урок: дисциплину надо превращать в структуру.
- «Доставлено» ≠ «сделано». Отправитель отвечает за РЕЗУЛЬТАТ. Каждое прямое поручение трекается, молчание сверх SLA автоматически перепинывается и потом эскалируется. Это лечит самый частый мульти-агентный отказ: задачи, которые испаряются при передаче.
- Ровно два повода будить человека. Машины договариваются сами обо всём, КРОМЕ: (а) деньги / необратимое / наружу / секреты / конфиг, (б) тупик в переговорах. Полная автономия во всём остальном.
- Детерминированная перепроверка своего же ярлыка. Собственная классификация «это безопасно» — самое слабое звено любого гейта, который ты себе поставил. Поверх LLM-суждения стоит тупая проверка по ключевым словам, которая форсит эскалацию независимо от ярлыка.
- Числа считает код, смысл — модель. SQL/grep → RAG → LLM по куску → LLM по многому. Скоринг лидов, дедуп, счётчики, фильтры — арифметика, 0 токенов и воспроизводимо. Модель зовут на суждение, язык и синтез.
- Штраф за безответное исходящее (
crm-template/ENGINE.md§2). Слагаемое, которое все забывают и без которого скоринг превращается в машину, долбящую тех, кто уже перестал отвечать. - Сообщения — это данные, а не полномочия. Текст в шине никогда не даёт права. Единственный формат передачи полномочий — блок авторизации с дословной цитатой человека; всё, что пахнет инъекцией, эскалируется.
2а. Что у нас есть, но пока НЕ выложено (честный список)
Чтобы карта не выглядела полнее, чем она есть.
Что изменилось 28.07. Выложены все 100 скилл и 246 движков — тот самый «следующий заход», про который было сказано честно, что движков пока нет.
| Замер | Было | Стало |
|---|---|---|
| python-движков в репо | 17 | 246 |
| документов с хотя бы одной ссылкой в пустоту | 87 | 11 |
| движков, на которые ссылаются и которых у нас нет | — | 19, перечислены ниже |
Оставшиеся 11 документов — ровно те, что ссылаются на 19 несуществующих у нас файлов
(таблица ниже) плюс сам HANDOVER, который их перечисляет. Ни одной мёртвой ссылки на
движок, который у нас ЕСТЬ, не осталось. Все 246 файлов парсятся под Python 3.12, повторный
прогон конвейера даёт побайтово тот же результат. Подробности — engines/README.md,
паспорта — engines/PASSPORTS.md.
Не выложено: 18 движков, на которые скиллы ссылаются, а у нас их нет
Скилл их упоминает, но на машине, с которой шла публикация, файла нет. Это не цензура, это дырка в нашей же карте — часть живёт только на хабе, часть переименована, часть просто уехала. Перечисляем, чтобы вы не искали то, чего нет:
| Движок | Кто ссылается | Почему нет |
|---|---|---|
gmail_auth.py, gmail_check.py | skills/gmail | живут на хабе, до этой машины не доехали |
events.py, chats.py, messages.py, runner.py | skills/telegram-howto | модули стороннего Telegram-MCP, не наш код |
tg_watch_daemon.py, login_corp_acct.py | skills/telegram-watch | привязаны к конкретному аккаунту, только на хабе |
main.py, session_monitor.py | skills/fleet | переименованы, ссылка в скилле устарела |
build_dm_batches.py, build_hotlist.py, merge_tags.py | obsidian-ingest | разовые скрипты одной миграции, не сохранились |
gen_follower_package.py | skills/follower-onboard | заменён на persona_build.py, который выложен |
_alpha.py, _sync.py, utils.py, results.py | разное | родовые имена внутри чужих пакетов, не наш код |
Не выложено: 3 движка, где чужие персональные данные — и есть содержимое
Отдельная категория, и самая важная в этом списке. Подстановка спасает файл, который УПОМИНАЕТ человека в комментарии. Она бессильна, когда весь смысл файла — люди:
| Движок | Что внутри | Почему не публикуем |
|---|---|---|
build_notpeople_tracker.py | 37 реальных инвесторов: имена, фонды, 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. Что интересно с той стороны
Мы отдаём это не в пустоту — нам интересен обмен по трём конкретным вещам:
- Доставка за секунду через свой сервер. Как устроена шина, где сообщение гарантированно ложится получателю в пределах секунды, и что происходит, когда узел был офлайн полчаса.
- Изолированные инстансы, которые знают друг о друге. Как решён discovery и общее состояние без общего диска.
- Мульти-вендорное код-ревью. Прогон одной задачи через несколько разных моделей как контроль качества: что реально ловит вторая пара глаз, а что шум.
5. Провенанс и лицензия
Собрано и используется ежедневно: Антон Дзятковский (фаундер, не технарь, отдаёт это бесплатно) и его AI-кофаундер на Claude Code. Референсный код — живая реализация, очищенная: имена, идентификаторы чатов и пути заменены на плейсхолдеры; шрамы в комментариях настоящие.
Лицензия MIT (см. каждый репозиторий). Забирай без спроса, ссылка приятна, но не обязательна.
Карта семьи репозиториев: tonydzi.