Вернуться к блогу

Визуализация зависимостей между ИИ-агентами в реальном времени

Визуализация зависимостей между ИИ-агентами в реальном времени

У вас пять ИИ-агентов работают над эпиком фичи. Агент 1 строит API-слой. Агенту 2 нужен этот API для подключения фронтенда. Агент 3 пишет интеграционные тесты, зависящие от обоих. Агенты 4 и 5 занимаются миграциями и документацией, каждый заблокирован разными частями.

Это работает около двадцати минут. Затем Агент 2 останавливается, потому что Агент 1 столкнулся с неожиданной проблемой в схеме. Агент 3 теперь заблокирован Агентом 2, который заблокирован Агентом 1. Агенты 4 и 5 продолжают работать, но их результаты нельзя смержить, пока цепочка не разрешится. Вы узнаёте об этом, лишь когда удивляетесь, почему ничего не выкатилось за час, и начинаете проверять bd blocked по каждой задаче.

Информация о зависимостях существует. Она живёт в вашем трекере задач. Но когда вы управляете ею через CLI, вы реконструируете граф в голове из плоского текстового вывода. Эта реконструкция ломается именно тогда, когда она важнее всего: когда граф сложный и что-то идёт не так.

Как beads отслеживает зависимости

beads -- Git-backed трекер задач, созданный для координации ИИ-агентов. Он хранит всё в локальной базе данных Dolt в директории .beads/ вашего репозитория. Никакого облачного сервиса, аккаунтов или конфликтов синхронизации.

Агенты объявляют зависимости одной командой:

bd dep add ISSUE-42 ISSUE-37

Это записывает, что ISSUE-42 зависит от ISSUE-37. ISSUE-42 не может продвигаться, пока ISSUE-37 не закроется. Обратный запрос так же прост:

bd blocked

Эта команда возвращает каждую задачу в рабочем пространстве, заблокированную неразрешённой зависимостью. А для конкретной задачи:

bd dep list ISSUE-42

Это показывает, от чего зависит ISSUE-42 и что зависит от ISSUE-42.

Модель данных чистая. Проблема не в записи зависимостей. Проблема в том, чтобы их видеть. Когда у вас 30 активных задач на пять агентов, bd blocked даёт список. Список не показывает, что ISSUE-12 -- узкое место, блокирующее семь задач ниже по цепочке у трёх агентов. Список не показывает, что Агент 3 создал циклическую зависимость между ISSUE-18 и ISSUE-22. Вам нужно пространственное представление графа, а не последовательное.

Что показывает Beadbox

Beadbox -- нативное десктопное приложение, обёртка над CLI beads с визуальным интерфейсом. Оно читает ту же базу данных .beads/, в которую пишут ваши агенты, и обновляется в реальном времени по мере их работы.

В представлении дерева эпика каждая задача с неразрешёнными зависимостями показывает бейдж блокировки. Вы видите полную древовидную структуру эпика с заблокированными задачами, отмеченными с одного взгляда. Не нужно выполнять команду или разбирать вывод.

Цепочка зависимостей видна пространственно. Если ISSUE-42 зависит от ISSUE-37, а ISSUE-37 -- от ISSUE-15, и ISSUE-15 назначена на Агента 1, который застрял, вы можете проследить эту цепочку, просканировав дерево. Вы видите форму узкого места без реконструкции из отдельных CLI-запросов.

Компонент реального времени важен. Когда Агент 1 наконец закрывает ISSUE-15, UI Beadbox отражает это в течение секунды. Бейдж блокировки на ISSUE-37 исчезает. Если ISSUE-37 была единственным, что блокировало ISSUE-42, этот бейдж тоже исчезает. Вы наблюдаете, как цепочка зависимостей схлопывается по мере завершения работы, без обновления страницы или повторных запросов.

Внутренний механизм прост: WebSocket-сервер следит за директорией .beads/ с помощью fs.watch(). Когда агент пишет в базу данных (закрытие задачи, добавление зависимости, обновление статуса), событие файловой системы запускает рассылку всем подключённым клиентам. React UI перерисовывается с новыми данными. Задержка от действия агента до визуального обновления -- менее секунды.

Конкретный сценарий: обнаружение узкого места

Пять агентов работают над эпиком фичи с 24 задачами. Вы открываете Beadbox и смотрите на дерево эпика. Двенадцать задач в работе. Шесть показывают бейджи блокировки.

Это уже информация, которой у вас не было. bd list показал бы 12 задач в работе, но вам пришлось бы отдельно запускать bd blocked и сопоставлять, чтобы понять, какие из задач в работе на самом деле стоят.

Вы просматриваете бейджи блокировки и замечаете: четыре из шести заблокированных задач зависят от ISSUE-19, миграции схемы базы данных, назначенной на Агента 4. Агент 4 ещё работает, но ISSUE-19 стала единственным узким местом. Четыре агента фактически простаивают в ожидании одной задачи.

Без визуального представления вы могли бы не обнаружить это ещё час. С ним вы можете вмешаться немедленно. Возможно, переназначите ISSUE-19 на более быстрого агента. Возможно, разделите её на части, которые разблокируют некоторых зависимых раньше. Возможно, поймёте, что две из четырёх зависимостей были избыточными и могут быть удалены через bd dep remove.

Суть не в том, что информация была ранее недоступна. Она всегда была в базе данных. Суть в том, что визуальное представление выявляет паттерны, которые плоский текст скрывает.

Распространённые антипаттерны зависимостей

Запуск нескольких ИИ-агентов на одном репозитории порождает несколько повторяющихся проблем с зависимостями. Все они легче обнаруживаются визуально, чем через CLI-запросы.

Избыточное объявление. Агенты склонны к осторожности. В случае сомнений они объявляют зависимость. Результат -- граф зависимостей, который плотнее необходимого, с задачами, заблокированными работой, которая им на самом деле не нужна. В Beadbox вы замечаете это, когда задача показывает бейдж блокировки, но блокирующая задача находится в совершенно несвязанной части кодовой базы. Быстрый bd dep remove решает проблему.

Циклические цепочки. Агент A объявляет зависимость от работы Агента B. Агент B, работая независимо, объявляет зависимость от работы Агента A. Теперь оба заблокированы друг другом, и ни один не может продвигаться. CLI beads обнаруживает очевидные циклические зависимости при создании, но непрямые циклы через три и более задачи сложнее выявить. В дереве эпика они заметны как кластеры бейджей блокировки, которые никогда не разрешаются, даже когда другая работа вокруг завершается.

Единая точка отказа. Одна задача накапливает пять, шесть, семь зависимых ниже по цепочке. Это происходит естественно, когда агенты, работающие параллельно, все нуждаются в одном и том же базовом элементе. Сценарий выше иллюстрирует паттерн. В списке вы видите семь заблокированных задач. В дереве вы видите семь стрелок, направленных на один узел. Узкое место очевидно.

Начало работы

Beadbox работает на macOS, Linux и Windows. Установка через Homebrew:

brew tap beadbox/cask && brew install --cask beadbox

Направьте его на любой репозиторий с директорией .beads/. Если вы уже используете beads с флотом агентов, Beadbox подхватит существующую базу данных и начнёт отображение немедленно. Без импорта, настройки или создания аккаунта.

Ваши агенты продолжают использовать CLI. Они запускают bd dep add, bd update, bd close как обычно. Beadbox следит за базой данных и отражает каждое изменение в реальном времени. Вы получаете визуальный слой без изменения рабочих процессов агентов.

Beadbox бесплатен в период бета-тестирования.

Если вы координируете нескольких ИИ-агентов на одной кодовой базе, граф зависимостей -- это то, что первым сломает ваш рабочий процесс. Вы можете управлять им вслепую через CLI, или можете его видеть. Видеть -- быстрее.