Вы создаёте эпик с 15 подзадачами. Распределяете их между несколькими агентами или коллегами. Через два дня кто-то спрашивает: "Как дела с переписыванием авторизации?"
Вы запускаете bd show bb-r4f. Это показывает сам эпик. Название, описание, приоритет. Не говорит, сколько дочерних задач выполнено. Тогда вы запускаете bd list --parent bb-r4f. Получаете плоский список ID и заголовков. Чтобы увидеть статус каждой, пропускаете через jq или запускаете bd show для каждой дочерней задачи отдельно. У некоторых из них есть собственные подзадачи. Теперь вы на третьем уровне вложенности, реконструируя дерево в голове из вывода терминала.
Это работает, когда у эпика три дочерних элемента. При десяти -- рушится. А если вы координируете ИИ-агентов, которые в быстром темпе создают подзадачи, сообщают о блокерах и закрывают задачи, вывод CLI устаревает между моментом ввода команды и моментом, когда вы закончите читать результат.
Проблема не в beads. CLI beads отлично справляется со структурированным, скриптуемым управлением задачами. Проблема в том, что иерархический прогресс -- это визуальное понятие, а терминалы отображают текст построчно.
Как выглядит дерево эпика в Beadbox
Откройте Beadbox, нажмите на эпик, и вы увидите его дочерние элементы в раскрываемом дереве. Каждый дочерний элемент показывает статусный бейдж (open, in_progress, ready_for_qa, closed), индикатор приоритета и ответственного. Сам эпик отображает прогресс-бар: "9 из 14 выполнено (64%)." Это число обновляется по мере закрытия дочерних задач.
Раскройте дочерний элемент, который сам является эпиком, и увидите его подзадачи, вложенные ниже. Прогресс родительского элемента агрегируется по всем потомкам, а не только по прямым дочерним. Трёхуровневый эпик с 40 задачами в инженерии, QA и документации показывает вам реальный процент выполнения вверху, учитывая каждый листовой узел в дереве.
Заблокированные задачи получают особое визуальное оформление. Если bb-m3q зависит от bb-k7p, а bb-k7p ещё открыта, бейдж блокировки стоит рядом со статусом bb-m3q. Не нужно запускать bd dep list, чтобы обнаружить узкое место. Оно видно в дереве, на том уровне, где это важно.
Сравните с CLI-процессом. Чтобы ответить на вопрос "что блокирует прогресс по эпику авторизации", вы бы запустили:
bd list --parent bb-r4f --status=open --json | \
jq -r '.[].id' | \
xargs -I{} bd show {} --json 2>/dev/null | \
jq -r 'select(.blocked_by | length > 0) | "\(.id) blocked by \(.blocked_by | join(", "))"'
Это вполне рабочий pipeline. Он даёт правильный ответ. Но вам нужно его написать, запомнить флаги и перезапускать каждый раз, когда нужно обновление. В Beadbox та же информация всегда видна в дереве. Никаких запросов не требуется.
Обновления в реальном времени: дерево меняется на ваших глазах
Именно здесь визуальная модель оправдывает себя по-настоящему. Когда агент выполняет bd update bb-k7p --status=closed в терминале, Beadbox обнаруживает изменение файловой системы за миллисекунды. WebSocket-сервер фиксирует запись в директории .beads/, рассылает изменение, и React UI перерисовывается.
В дереве эпика это выглядит так: bb-k7p переключается с оранжевого бейджа "in_progress" на зелёный "closed". Прогресс-бар родительского эпика поднимается с 64% до 71%. А bb-m3q, которая была заблокирована на bb-k7p, теряет индикатор блокировки и показывается как доступная работа.
Всё это происходит без выполнения команд или нажатия кнопки обновления. Если вы наблюдаете за флотом агентов, работающих над релизным эпиком, вы смотрите, как дерево заполняется по мере завершения задач. Узкие места проявляются в момент их формирования, потому что бейджи блокировки появляются в реальном времени. Застоявшиеся поддеревья (кластеры задач, у которых перестал меняться статус) становятся визуально очевидными через несколько минут бездействия на фоне стабильного прогресса в других местах.
Механизм прост. Beadbox запускает WebSocket-сервер, который вызывает fs.watch() на директории .beads/. Каждая запись в базу данных запускает рассылку. Клиентский хук получает сигнал и повторно запрашивает соответствующую server action. Без интервала polling, без ручного обновления. Задержка от CLI-команды до обновления UI обычно менее одной секунды.
Навигация с клавиатуры
Beadbox -- десктопное приложение для разработчиков, и ведёт себя соответственно. j и k перемещают по списку задач (стиль Vim). Enter открывает выбранную задачу в панели деталей. / фокусирует строку поиска. Escape закрывает текущий элемент. Стрелки разворачивают и сворачивают узлы дерева эпиков.
Вы можете разобрать весь бэклог, не прикасаясь к мыши. Двигайтесь по списку с j, откройте задачу для чтения описания, нажмите Escape для закрытия, перейдите к следующей. Если заметите что-то, требующее смены статуса, переключитесь в терминал для изменений (bd update). Beadbox по замыслу является интерфейсом, оптимизированным для чтения. CLI занимается записью. GUI занимается пониманием.
Это разделение намеренное. GUI, пытающийся заменить CLI для записи, в итоге строит формы для каждой возможной комбинации флагов. GUI, сосредоточенный на чтении и навигации, может оптимизировать то, в чём терминалы хуже всего: показывать иерархические, перекрёстно связанные данные с одного взгляда.
Несколько проектов, одно окно
Если вы работаете с несколькими кодовыми базами, каждая со своей базой данных .beads/, переключатель рабочих пространств Beadbox справится с этим. Выпадающий список в заголовке показывает все обнаруженные рабочие пространства. Нажмите на одно (или найдите через поиск /), и вся область перезагрузится из базы данных этого проекта. Фильтры и позиция прокрутки сохраняются для каждого рабочего пространства, так что при переключении обратно вы не потеряете своё место.
Обнаружение автоматическое. Beadbox сканирует зарегистрированные рабочие пространства в конфигурации bd и директории с базами данных .beads/. Добавьте новый проект, инициализируйте в нём beads, и при следующем запуске Beadbox он появится в выпадающем списке. Без импорта, без экрана настройки.
Для разработчиков, обслуживающих несколько сервисов, или для команд, где каждый агент работает в отдельном репозитории, это превращает Beadbox в единое окно на все активные проекты. Альтернатива -- несколько окон терминала, каждое с bd list для разного пути --db.
Что это заменяет
Beadbox не заменяет CLI. Если вы скриптуете рабочие процессы, пропускаете bd list через jq или имеете агентов, программно создающих и закрывающих задачи, всё это продолжает работать без изменений. Beadbox читает ту же базу данных, в которую пишут ваши скрипты.
Что он заменяет -- так это умственные затраты на восстановление состояния проекта из плоского текстового вывода. Вопросы, на которые Beadbox отвечает с одного взгляда, а CLI -- только через составные запросы:
- Как далеко продвинулся этот эпик на самом деле?
- Что сейчас заблокировано и чем?
- К каким подзадачам не прикасались часами?
- Агенты продвигаются или застряли?
Это визуальные вопросы. Они заслуживают визуальных ответов.
Начало работы
Beadbox бесплатен в период бета-тестирования. Установка через Homebrew:
brew tap beadbox/cask && brew install --cask beadbox
Если вы уже используете beads, Beadbox обнаружит ваши рабочие пространства .beads/ при запуске. Без импорта, без аккаунта. Откройте приложение, разверните эпик и увидьте, где ваш проект на самом деле находится.
Работает на macOS, Linux и Windows.
