Артель — агентный стек по контракту
Стек агентов, переписанный с нуля вокруг одного правила: ход модели обязан заканчиваться машинно-проверяемым действием.
- Каждый агент — отдельный бот в Telegram, вмешаться можно в любой момент
- Ошибка агента не роняет цикл, а превращается в корректирующий ход
- Проверено стресс-харнессами и хаос-прогонами, а не только юнит-тестами
Задача
В предыдущем стеке агенты «договаривались» свободным текстом, и любой сбой формата превращался в тихую поломку: система выглядела работающей, а результата не давала. Хотелось противоположного — чтобы невалидный ход было невозможно исполнить.
Как устроено
Один runtime в нескольких экземплярах по YAML-конфигам. Ход модели обязан завершаться fenced-JSON со списком действий; он валидируется схемой и проходит гейт возможностей по роли — аналитик не может выкатить релиз, даже если очень захочет. Починка формата — не больше двух попыток, дальше эскалация человеку. Доставка между агентами через Redis Streams, истина хранится в Postgres, Telegram остаётся зеркалом.
Что было трудно
Сложным оказался не разбор JSON, а поведение агентов во времени. Пришлось строить сторожей на исполнении: сторож ожиданий (подтолкнуть, потом эскалировать), бюджет ходов с паузой, разрыватель циклов на двенадцати сообщениях пары без события, очередь недоставленного после трёх попыток. Это ловит не баги в коде, а зацикливание самих участников.
Чем подтверждено
- Харнессы: стресс 31/31, инъекция отказов 31/31, отскок 9/9, фаззинг парсера 20/20
- Длительный прогон с хаос-инъекцией 0.4–0.5 — чисто
- 99/99 юнит-тестов
- Шесть находок уровня HIGH, найденных харнессами, закрыты до релиза