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

Local-first трекинг задач с Dolt

Local-first трекинг задач с Dolt

Каждый трекер задач, которым вы пользовались, следует одному паттерну. Есть облачный сервис. У него есть веб-UI. Кто-то строит CLI, который общается с облачным API. CLI — гражданин второго сорта: медленнее, менее функционален, всегда на версию позади API.

Теперь переверните архитектуру. Начните с CLI. Пусть он пишет в локальную базу данных. Пусть база поддерживает версионирование с теми же семантиками ветвления и мержа, что и ваш исходный код. А затем поставьте сверху нативное десктопное приложение, читающее те же файлы базы напрямую, без промежуточного API.

Это то, что делают beads и Beadbox. И причина существования этой архитектуры — ИИ-агенты.

Проблема: агенты не умеют кликать кнопки

Если вы координируете флот ИИ-агентов (генераторы кода, ревьюеры, тестировщики, деплойеры), им нужно создавать задачи, обновлять статусы и читать рабочие очереди. Они не могут аутентифицироваться в Jira. Не могут навигировать UI Linear. Им нужен CLI, пишущий в локальную базу, быстрый, с нулевой зависимостью от сети.

beads — такой CLI. Опенсорсный Git-нативный трекер, спроектированный именно для этого. Команда bd создаёт, обновляет, выводит список и закрывает задачи. Каждая запись попадает в локальную базу Dolt внутри директории .beads/ вашего репозитория.

Цифры важны. bd create занимает примерно 15ms. bd list на 10 000 задач возвращает за примерно 200ms. Эти бенчмарки из тестового набора beads. Когда агенты перебирают задачи в тесных циклах, миллисекунды на операцию определяют, успевает ли ваш трекер или становится бутылочным горлышком.

Почему Dolt, а не SQLite?

Dolt — SQL-база данных с семантикой Git. Каждая запись — коммит. Есть dolt diff, чтобы увидеть изменения между двумя точками. Есть dolt log для полной истории аудита. Есть dolt branch и dolt merge с той же ментальной моделью, что вы используете для кода.

Для трекинга задач это значит, что история проекта имеет два параллельных аудит-трейла: git log для изменений кода, dolt log для изменений задач. Можно ответить на вопрос «как выглядела база задач, когда мы поставили тег v2.1.0?» — просто чекаутнув ту точку в истории Dolt. Можно создать ветку базы задач для эксперимента, а потом смерджить или выбросить.

beads убрал поддержку SQLite в v0.9.0 и полностью перешёл на Dolt. Семантика версионирования — не приятный бонус, а фундамент. Когда двадцать агентов пишут в одну базу задач, нужна возможность делать diff, ветвить и мерджить данные с тем же доверием, что и к контролю исходников.

Опциональная совместная работа через DoltHub. Пушите базу задач на remote, тиммейты пуллят. Тот же push/pull, что и в Git, для структурированных данных.

Визуальный слой: Beadbox

Агенты прекрасно работают с CLI. Люди — нет, по крайней мере, когда нужна общая картина. Графы зависимостей, деревья прогресса эпиков, цепочки заблокированных задач — это пространственные задачи, с которыми терминал справляется плохо.

Beadbox — нативное десктопное приложение на Tauri (не Electron), читающее ту же директорию .beads/, в которую пишет CLI. Нет этапа импорта, нет процесса синхронизации, нет API-слоя. GUI следит за файловой системой через fs.watch(), обнаруживает изменения базы Dolt и вещает обновления по локальному WebSocket. Когда агент запускает bd update BEAD-42 --status in_progress, бейдж статуса в Beadbox меняется за миллисекунды.

Вот как выглядит рабочий процесс:

# Агент создаёт задачу
bd create --title "Migrate auth to OIDC" --type task --priority 1

# Другой агент берёт её
bd update BEAD-42 --claim --actor agent-3

# Человек открывает Beadbox и видит полную доску:
# графы зависимостей, деревья эпиков, фильтры по статусу/приоритету/исполнителю
# Никаких команд. Просто смотришь.

# Агент заканчивает и отмечает для ревью
bd update BEAD-42 --status ready_for_qa

# Beadbox обновляется в реальном времени. QA-агент подхватывает.

Агенты пишут через CLI. Люди читают через GUI. Оба работают с одной локальной базой Dolt. Без согласования, без устаревших кэшей, без «дай обновлю страницу».

Beadbox работает на macOS, Linux и Windows. Поддерживает множество воркспейсов — переключайтесь между проектами без перезапуска.

Что «local-first» означает на самом деле

Термин перегружен. Вот что он означает конкретно для beads и Beadbox:

Нет аккаунта. Не нужно ни на что регистрироваться. Установите CLI, установите приложение, укажите на директорию. Готово.

Нет облачной зависимости. Всё работает на файловой системе. Данные никогда не покидают машину, если вы явно не сделаете dolt push на remote. Интернет пропал? Ничего не меняется. Работаете дальше.

Нет сервера. Нет демона для управления, нет Docker-контейнера для запуска. База Dolt — директория с файлами. CLI читает и пишет эти файлы. Beadbox следит за ними.

Опциональная совместная работа. Когда захотите поделиться — пушьте на DoltHub. Тиммейты пуллят. Конфликты мержа данных задач разрешаются так же, как и в коде. Но это opt-in, не обязательно.

Для сравнения: Jira нужен сервер (или Atlassian Cloud). Linear нужен аккаунт и интернет. GitHub Issues нужен репозиторий на серверах GitHub. Даже self-hosted варианты вроде Gitea требуют запуска веб-сервиса.

beads нужна директория. Beadbox — та же директория и двойной клик.

Для кого это

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

Если вы ведёте проекты соло и хотите версионированный трекинг задач рядом с кодом, без облачного аккаунта — этот стек тоже подходит.

Если нужна enterprise-модель прав Jira или совместное редактирование Linear в реальном времени для распределённой команды — это не тот инструмент. beads спроектирован как local-first. Это компромисс, не упущение.

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

Установите CLI beads с github.com/steveyegge/beads, затем Beadbox:

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

Инициализируйте базу beads в любом проекте:

cd your-project
bd init

Откройте Beadbox, укажите на директорию — и вы смотрите на свою доску задач. Без регистрации. Без визарда настройки. Без модалки «подключите GitHub-аккаунт».

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