При масштабировании ИИ-автоматизации от одиночных диалоговых ботов к роям специализированных агентов разработчики неизбежно сталкиваются с проблемой координации. Как распределить обязанности между пятью виртуальными инженерами? Как предотвратить ситуацию, когда два бота одновременно пытаются редактировать один и тот же файл? И самое главное: как удержать контроль над архитектурой системы, не утонув в сотнях сообщений логов?
Традиционные попытки решить эту проблему через громоздкие массивы оперативной памяти или спагетти-скрипты на базе ранних версий мультиагентных библиотек быстро терпят крах: если падает один дочерний процесс, рушится весь конвейер, а состояние задач бесследно теряется.
Исследовательская группа Nous Research предложила остроумный и проверенный десятилетиями ответ в своем агентном фреймворке — модуль Hermes Kanban. Это распределенная, файл-ориентированная система управления задачами, ядром которой является локальная реляционная база данных SQLite (~/.hermes/kanban.db). Вместо хрупких субпроцессов каждый агент функционирует как самостоятельный изолированный воркер операционной системы, а координация и передача эстафеты происходят через привычную канбан-доску со статусами задач.
Я развернул канбан-контур Hermes, настроил агента-оркестратора и протестировал работу шлюза Human-in-the-Loop. Давай посмотрим, как устроен этот механизм и как он превращает хаотичный рой ботов в слаженную команду гибкой разработки.
Разделение ролей: Оркестраторы и Исполнители
Архитектура Hermes Kanban четко разграничивает зоны ответственности виртуальных участников процесса:
- Агенты-оркестраторы (Orchestrators): Оснащены инструментами декомпозиции и планирования (
kanban_create,kanban_link,kanban_prioritize). Оркестратор принимает от человека высокоуровневую цель (например, «Разработать микросервис аутентификации на Go с поддержкой JWT, Redis-кэшированием и тестами»), разбивает её на граф атомарных задач, проставляет зависимости и переводит карточки в колонкуReady. - Агенты-исполнители (Workers): Специализированные боты (кодеры, верстальщики, тестеры, документаторы). Каждый воркер регулярно опрашивает доску (
kanban_list), находит доступную задачу, забирает её в статусIn Progress, блокируя параллельный доступ коллег (kanban_claim), выполняет работу в изолированной песочнице и переводит карточку в колонкуReview.
Набор инструментов и шлюз согласования Human-in-the-Loop
Конфигурация профиля рабочего агента задается через понятный JSON-манифест, ограничивающий бюджет шагов и набор разрешенных утилит:
{
"profile_name": "QA-Worker-Agent",
"model": "deepseek-ai/deepseek-v4-flash",
"tools": [
"kanban_list",
"kanban_claim",
"kanban_comment",
"kanban_complete",
"run_bash_command"
],
"budget": {
"max_steps_per_task": 20,
"max_cost_usd": 2.50
},
"guardrails": {
"consecutive_failure_limit": 3,
"require_human_review_on_block": true
}
}
А на стороне шлюза согласования работает сторожевой скрипт на Python, который отслеживает колонку ревью и выводит интерактивные карточки человеку перед финальным слиянием правок:
import sqlite3
import os
def process_review_queue(db_path=os.path.expanduser("~/.hermes/kanban.db")):
"""Опрашивает колонку Review и запрашивает одобрение человека."""
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
cursor.execute("SELECT id, title, worker_id, artifacts_url FROM tasks WHERE status = 'Review'")
review_tasks = cursor.fetchall()
if not review_tasks:
print("[Hermes Kanban] Задач на ревью нет. Доска чиста.")
return
for task_id, title, worker_id, artifacts in review_tasks:
print(f"\n[Ревью тикета #{task_id}] {title}")
print(f"Исполнитель: {worker_id} | Артефакты: {artifacts}")
decision = input("Одобрить перенос в Done? (y/n/rework): ").strip().lower()
if decision == "y":
cursor.execute("UPDATE tasks SET status = 'Done' WHERE id = ?", (task_id,))
print(f"Тикет #{task_id} закрыт и слит в основную ветку.")
elif decision == "rework":
comment = input("Укажите причину доработки: ")
cursor.execute("UPDATE tasks SET status = 'In Progress', comments = comments || ? WHERE id = ?", (f"\nРевью: {comment}", task_id))
print(f"Тикет #{task_id} возвращен воркеру на исправление.")
conn.commit()
conn.close()
if __name__ == "__main__":
process_review_queue()
Почему канбан-доска идеальна для роя агентов
Использование классической канбан-методологии для автономных агентов решает сразу три фундаментальные проблемы:
- Отказоустойчивость: Если один воркер завис или упал по тайм-ауту, база данных автоматически снимает блокировку с тикета и возвращает его в статус
Ready. Другой агент может подхватить задачу без перезапуска системы; - Наглядный аудит: Человек в любой момент может открыть локальный графический интерфейс доски и увидеть, на каком именно этапе находится разработка проекта, кто исполнитель и какие комментарии оставила модель;
- Предотвращение бесконечных циклов: Если агент трижды не смог сдать задачу из-за падающих тестов, карточка переводится в статус
Blocked, а система вызывает человека через звуковое оповещение или вебхук в мессенджер; - Синхронизация с корпоративными трекерами: При необходимости Hermes Kanban умеет зеркалировать состояние колонок в Jira, Linear или GitHub Projects, обеспечивая прозрачность для всей продуктовой команды.
Hermes Kanban соединяет скорость искусственного интеллекта с прозрачностью и надежностью классического проектного менеджмента. Это зрелый инженерный подход, превращающий хаотичные эксперименты с ботами в предсказуемый производственный конвейер.
