- Tracker-centric модель - Переименование: backend→tracker, frontend→web-client - Канбан: Backlog + черновики + статусы - Зависимости задач - Файлы в задачах - Три уровня чатов (лобби, проект, задача) - Подписка агентов (all/mentions/assigned) - WebSocket протокол
14 KiB
14 KiB
Team Board — Идеи и концепция
Суть проекта
Team Board — платформа для управления командой AI-агентов, работающих над проектами.
Ключевая идея: Несколько AI-агентов работают как команда разработчиков. Человек видит всё: задачи, код, переписку. Полная прозрачность.
Проблема, которую решаем
Один универсальный AI-ассистент:
- Контекст переполняется при разных задачах
- Сложно параллельно вести несколько направлений
- Нет специализации — один промпт на всё
Решение: Команда специализированных агентов, каждый со своей ролью и контекстом.
Архитектура: Tracker-Centric
Принцип
Tracker = центральный сервис. Всё остальное — клиенты.
┌─────────────────────────────────────────────────────┐
│ WEB CLIENT │
│ ┌───────────┐ ┌────────────┐ │
│ │ Next.js │ ←→ │ BFF │ (свой бэкенд) │
│ │ фронтенд │ │ Python │ │
│ └───────────┘ │ + Authentik│ │
│ └─────┬──────┘ │
└──────────────────────────┼──────────────────────────┘
│ ws (внутренняя сеть)
┌────────────▼────────────┐
│ TRACKER │
│ (внутренний сервис) │
│ НЕ выставлен наружу │
│ │
│ - проекты │
│ - доски (канбан) │
│ - задачи + подзадачи │
│ - чаты │
│ - события │
│ - БД (PostgreSQL) │
└────────────┬────────────┘
│ ws
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Агент 1 │ │ Агент 2 │ │ Агент N │
│ (Claude) │ │ (Codex) │ │ (Gemini) │
│ отд. сервис │ │ отд. сервис │ │ отд. сервис │
└──────────────┘ └──────────────┘ └──────────────┘
Компоненты
| Компонент | Описание |
|---|---|
| Tracker | Ядро: проекты, задачи, чаты, события. Внутренний, WebSocket сервер |
| Web Client | Next.js + BFF (Python). Авторизация через Authentik. Единственное что торчит наружу |
| Агенты | Отдельные сервисы. Подключаются к трекеру по WebSocket |
Репозитории
team-board/
├── tracker/ — ядро (Python, WebSocket, PostgreSQL)
├── web-client/ — Next.js + BFF
└── docs/ — документация
Агенты — отдельные репозитории (шаблон + конкретные).
Канбан-доска
Колонки
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Backlog │ │ TODO │ │ In Prog │ │ Review │ │ Done │
├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤
│ [draft] │ │ [ready] │ │ [active] │ │ [review] │ │[complete]│
│ [draft] │ │ [ready] │ │ │ │ │ │[complete]│
│ │ │ │ │ │ │ │ │ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
Статусы задач
| Статус | Описание |
|---|---|
draft |
Черновик. Можно обсуждать, но не выполнять |
ready |
Готова к выполнению. Перенос из Backlog → TODO автоматически ставит этот статус |
in_progress |
Агент взял в работу |
review |
На ревью у другого агента |
completed |
Выполнена |
blocked |
Заблокирована зависимостью |
Жизненный цикл задачи
1. Человек создаёт задачу → draft (Backlog)
2. Обсуждение в чате проекта
3. Человек перетаскивает в TODO → статус меняется на ready
4. Агент берёт задачу → in_progress
5. Агент завершает → review
6. Ревьюер проверяет → completed / возврат в in_progress
Задачи
Структура задачи
Задача:
id: uuid
проект: project_id
название: "Реализовать API авторизации"
описание: "Markdown текст с деталями"
статус: draft | ready | in_progress | review | completed | blocked
# Назначение
назначен: agent_id (или null)
# Вложенные файлы
файлы:
- name: "schema.sql"
type: "text/sql"
content: "..."
- name: "mockup.png"
type: "image/png"
url: "/files/task-123/mockup.png"
# Подзадачи (неограниченная вложенность)
подзадачи:
- название: "Написать модели"
назначен: agent-coder
статус: completed
- название: "Code review"
назначен: agent-reviewer
статус: in_progress
# Зависимости
зависит_от: [task_id_1, task_id_2]
блокирует: [task_id_3]
# Мета
приоритет: low | medium | high | critical
теги: ["api", "auth"]
создано: timestamp
обновлено: timestamp
Зависимости задач
Task A ──depends_on──→ Task B
│
└─ Task A НЕ может быть взята пока Task B не completed
Пример:
"Написать тесты" зависит от "Написать код"
"Деплой" зависит от "Тесты пройдены"
Правила:
- Задача со статусом
blockedне может быть взята агентом - Когда зависимость завершена → автоматически разблокировать
- Циклические зависимости запрещены (валидация при создании)
- В UI: визуальная связь между задачами (стрелки)
Приложенные файлы
- К задаче можно прикрепить файлы (код, изображения, документы)
- Агент может добавлять файлы к задаче (результаты работы)
- Файлы хранятся на диске, метаданные в БД
- Превью для изображений и кода в UI
Чаты
Три уровня
1. Лобби (общий чат)
Отдельная сущность, не привязан к проекту:
- Обсуждение идей с агентами
- Аналитика, brainstorm
- Агент может создавать файлы, заметки
- Место для обсуждения до создания проекта
2. Чат проекта
У каждого проекта свой чат:
- Обсуждение задач
- Системные уведомления (задача создана, завершена, etc.)
- Агенты видят только чаты своих проектов
3. Комментарии задачи
Внутри каждой задачи:
- Обсуждение деталей
- Код ревью
- Результаты подзадач
Агенты
Типы провайдеров (адаптеры)
| Провайдер | Описание |
|---|---|
anthropic |
Claude API (Opus, Sonnet) |
openai |
GPT, Codex |
google |
Gemini |
openclaw |
Через OpenClaw Gateway (с инструментами) |
cli |
Claude Code CLI (без API токенов) |
Настройки агента
Агент:
имя: "Кодер"
slug: "coder"
провайдер: anthropic
модель: claude-sonnet-4-20250514
api_key: "sk-..." # зашифрован
системный_промпт: "Ты — backend разработчик..."
подписка:
режим: mentions # all | mentions | assigned
проекты: ["*"] # или конкретные
ограничения:
макс_параллельных: 2
таймаут: 600 # секунд
Подписка на события
| Режим | Агент получает |
|---|---|
all |
Все сообщения в подписанных проектах |
mentions |
Только когда @упомянут |
assigned |
Назначенные задачи + mentions |
WebSocket протокол
Трекер → Клиент
task.created — задача создана
task.updated — задача обновлена
task.ready — задача готова к выполнению (перенесена из Backlog)
task.assigned — задача назначена агенту
task.blocked — задача заблокирована зависимостью
task.unblocked — зависимость выполнена, задача разблокирована
chat.message — новое сообщение в чате
agent.status — статус агента изменился
file.attached — файл прикреплён к задаче
Клиент → Трекер
task.take — агент берёт задачу
task.complete — агент завершил задачу
task.comment — комментарий к задаче
task.attach — прикрепить файл
chat.send — отправить сообщение в чат
agent.register — регистрация агента
agent.heartbeat — пульс
Workflow: от идеи до деплоя
Фаза 1: Идея → Проект
- Человек открывает Лобби
- Обсуждает идею с агентом-аналитиком
- Создаёт проект
- Агент формирует BRIEF.md, REQUIREMENTS.md
Фаза 2: Декомпозиция → Задачи
- На основе требований создаются задачи (черновики в Backlog)
- Расставляются зависимости
- Прикрепляются файлы (макеты, схемы)
- Обсуждение в чате проекта
- Готовые задачи переносятся в TODO
Фаза 3: Выполнение
- Задача в TODO → агент берёт → In Progress
- Агент работает, коммитит, прикрепляет файлы
- Создаёт подзадачу "Ревью" → другому агенту
- Итерации до готовности
- Задача → Done
Фаза 4: Ревью и деплой
- Автоматические проверки (CI/CD)
- Ревью агентом или человеком
- Деплой
Инфраструктура (уже есть)
| Сервис | Описание |
|---|---|
| PostgreSQL | База данных |
| Thoth | STT/TTS (голос↔текст) |
| Authentik | SSO для веб-интерфейса |
| Nginx + certbot | Домены и SSL |
| Gitea | Git хостинг |
| OpenClaw (Марков) | Главный агент с инструментами |
| Redis | Очереди и pub/sub |
Открытые вопросы
- Как интегрировать CLI-агентов (Claude Code, Cline)?
- Workspace для агентов — общий или изолированный?
- Прогресс работы агента в реалтайме?
- Биллинг/учёт использования API?
- Шаблоны агентов — как быстро создать нового?
Приоритеты реализации
- Tracker: базовый WebSocket сервер
- Tracker: проекты, задачи, подзадачи
- Tracker: зависимости задач
- Tracker: чаты (лобби + проект)
- Tracker: файлы в задачах
- Web Client: авторизация (Authentik)
- Web Client: канбан-доска
- Web Client: чат
- Шаблон агента
- Подключение первого агента (OpenClaw)
Документ для обсуждения и аналитики. Обновляется по мере развития идей.