Дайджесты новостей
Архитектурная изометрия канбан-доски Hermes Agent со шлюзом согласования и фигурками роботов-воркеров, перемещающих карточки.

Автономный канбан-агент в Hermes: организация очереди задач и шлюз согласования для роя ботов

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

Традиционные попытки решить эту проблему через громоздкие массивы оперативной памяти или спагетти-скрипты на базе ранних версий мультиагентных библиотек быстро терпят крах: если падает один дочерний процесс, рушится весь конвейер, а состояние задач бесследно теряется.

Исследовательская группа Nous Research предложила остроумный и проверенный десятилетиями ответ в своем агентном фреймворке — модуль Hermes Kanban. Это распределенная, файл-ориентированная система управления задачами, ядром которой является локальная реляционная база данных SQLite (~/.hermes/kanban.db). Вместо хрупких субпроцессов каждый агент функционирует как самостоятельный изолированный воркер операционной системы, а координация и передача эстафеты происходят через привычную канбан-доску со статусами задач.

Я развернул канбан-контур Hermes, настроил агента-оркестратора и протестировал работу шлюза Human-in-the-Loop. Давай посмотрим, как устроен этот механизм и как он превращает хаотичный рой ботов в слаженную команду гибкой разработки.

Разделение ролей: Оркестраторы и Исполнители

Архитектура Hermes Kanban четко разграничивает зоны ответственности виртуальных участников процесса:

  1. Агенты-оркестраторы (Orchestrators): Оснащены инструментами декомпозиции и планирования (kanban_create, kanban_link, kanban_prioritize). Оркестратор принимает от человека высокоуровневую цель (например, «Разработать микросервис аутентификации на Go с поддержкой JWT, Redis-кэшированием и тестами»), разбивает её на граф атомарных задач, проставляет зависимости и переводит карточки в колонку Ready.
  2. Агенты-исполнители (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 соединяет скорость искусственного интеллекта с прозрачностью и надежностью классического проектного менеджмента. Это зрелый инженерный подход, превращающий хаотичные эксперименты с ботами в предсказуемый производственный конвейер.