Всем! Рассказывается история о том, как простая боль при работе с ИИ-ассистентами превратилась в open-source проект, который может пригодиться многим.
Предыстория: когда всё началось
Последний год активно использовались локальные ИИ-агенты для работы над проектами. Не просто «напиши функцию», а полноценная декомпозиция задач: разбивали большой проект на модули, модули на задачи, задачи на подзадачи. Через час работы получалась красивая иерархия из 50+ пунктов. И вот тут начинается веселье.Боль №1: «Добавь подпункт к 3.2.1»
Пишут в чат:- Добавь подпункт к 3.2.1
Боль №2: «Перепиши раздел 4»
Просят переписать один раздел, а ИИ заодно «улучшает» разделы 3 и 5. Которые уже согласованы с заказчиком. Которые были идеальны.Боль №3: «Верни как было»
- Верни структуру как было 20 сообщений назад
Боль №4: Хрупкие ссылки
Переместили пункт 2.3 в раздел 5. Теперь он 5.4. А все ссылки «см. пункт 2.3» в других местах — битые. И ИИ про них не знает.Первые попытки решения
Сначала просто копировали структуру в отдельный.txt файл. После каждого изменения — копировали заново. Это работало... примерно неделю.
Потом делали версии:
planv1.txt,planv2.txt,planv3final.txt,planv3finalFINAL.txt.
Момент озарения
Однажды работали над большим проектом с автономным агентом. Агент должен был выполнять задачи по плану. И поняли, что нужно:- Стабильные идентификаторы — чтобы ссылка на задачу не ломалась при перемещении
- Защита от изменений — чтобы утверждённые разделы нельзя было случайно изменить
- История изменений — чтобы можно было откатиться
- Простой интерфейс — чтобы и пользователи, и ИИ могли работать с этим
Что такое HBT
HBT — это CLI-инструмент для управления иерархическими задачами. Один Python-файл, никаких зависимостей, работает везде где есть Python 3.8+.Ключевые идеи:
- UUID вместо позиционных номеров
└── a1b2c3d4 ⚪ Разработка API ✍️
├── b2c3d4e5 ⚪ Аутентификация ✍️
└── c3d4e5f6 ⚪ База данных ✍️
Переместили «Аутентификацию» в другой раздел? ID остался b2c3d4e5. Все ссылки работают.
- Статус
locked/editable
hbt status --id b2c3d4e5 --mode locked
Теперь этот узел нельзя изменить или удалить. Даже случайно. Даже если очень хочется.
└── b2c3d4e5 ⚪ Аутентификация 🔒 # Заблокировано!
- Алиасы для удобства
b2c3d4e5 можно использовать человекочитаемое имя:
hbt alias --id b2c3d4e5 --name auth
Теперь можно писать @auth вместо ID:
hbt view --id @auth
hbt add --to @auth --text "JWT токены"
- Автоматические снапшоты
hbt rollback --list # Посмотреть доступные точки
hbt rollback --restore auto20240218_100000.json # Восстановить
Как это выглядит на практике
Создаётся структура проекта# Корневая задача
hbt add --text "Мой крутой проект" --alias project --locked
# Основные разделы
hbt add --to @project --text "Backend" --alias api
hbt add --to @project --text "Frontend" --alias fe
hbt add --to @project --text "DevOps" --alias devops
Детализация
hbt add --to @api --text "REST API"
hbt add --to @api --text "База данных"
hbt add --to @api --text "Авторизация" --alias auth
Смотрят что получилось
hbt view
└── a1b2c3d4 @project ⚪ Мой крутой проект 🔒
├── b2c3d4e5 @api ⚪ Backend ✍️
│ ├── c3d4e5f6 ⚪ REST API ✍️
│ ├── d4e5f6a7 ⚪ База данных ✍️
│ └── e5f6a7b8 ⚪ Авторизация 🔒
├── f6a7b8c9 @fe ⚪ Frontend ✍️
└── g7b8c9d0 @devops ⚪ DevOps ✍️
Скорректировали структуру:
hbt add --to @api --text "Серверное программирование"
hbt view
└── a1b2c3d4 @project ⚪ Мой крутой проект 🔒
├── b2c3d4e5 @api ⚪ Backend ✍️
│ ├── c3d4e5f6 ⚪ REST API ✍️
│ ├── d4e5f6a7 ⚪ База данных ✍️
│ ├── e5f6a7b8 ⚪ Авторизация 🔒
│ └── f6a7b8c9 ⚪ Серверное программирование ✍️
├── f6a7b8c9 @fe ⚪ Frontend ✍️
└── g7b8c9d0 @devops ⚪ DevOps ✍️
Скорректировали статус:
hbt status --id e5f6a7b8 --mode editable
hbt view
└── a1b2c3d4 @project ⚪ Мой крутой проект 🔒
├── b2c3d4e5 @api ⚪ Backend ✍️
│ ├── c3d4e5f6 ⚪ REST API ✍️
│ ├── d4e5f6a7 ⚪ База данных ✍️
│ ├── e5f6a7b8 ⚪ Авторизация ✍️
│ └── f6a7b8c9 ⚪ Серверное программирование ✍️
├── f6a7b8c9 @fe ⚪ Frontend ✍️
└── g7b8c9d0 @devops ⚪ DevOps ✍️
Скорректировали статус:
hbt status --id e5f6a7b8 --mode locked
hbt view
└── a1b2c3d4 @project ⚪ Мой крутой проект 🔒
├── b2c3d4e5 @api ⚪ Backend ✍️
│ ├── c3d4e5f6 ⚪ REST API ✍️
│ ├── d4e5f6a7 ⚪ База данных ✍️
│ ├── e5f6a7b8 ⚪ Авторизация 🔒
│ └── f6a7b8c9 ⚪ Серверное программирование ✍️
├── f6a7b8c9 @fe ⚪ Frontend ✍️
└── g7b8c9d0 @devops ⚪ DevOps ✍