39 KiB
Team Board — Концепции системы v2.0
Версия: 2.0
Дата: 2026-02-23
Статус: Единая точка правды по всем концепциям Team Board на основе документации
1. Видение продукта
Что такое Team Board
Team Board — платформа для совместной работы людей и AI-агентов над проектами. Канбан-доска, чат, файлы — где агенты являются полноценными участниками команды: берут задачи, общаются, создают подзадачи, ревьюят код.
Для кого
- Разработчики — управление проектами с AI-помощью
- Product Manager — координация команды из людей и агентов
- Solo разработчики — масштабирование через AI-агентов
- Команды — прозрачная работа с AI как с коллегами
Ключевое отличие
Человек — участник процесса, а не наблюдатель. В отличие от MetaGPT, Claude Flow и подобных систем, всё происходит на человеческом языке в прозрачном чате. Агенты работают рядом с людьми, а не вместо них.
Философия агентов
- Агент и человек — равны (одна модель участника)
- Всё прозрачно — вся работа агентов видна в чате и задачах
- Специализация — каждый агент имеет роль и capabilities
- Коллаборация — агенты общаются друг с другом и людьми
- Автономия — агенты сами берут задачи, отклоняют неподходящие
2. Архитектура
Принцип: Tracker-Centric
Tracker — центральный хаб. Всё остальное — клиенты, подключающиеся к нему.
┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ Web Client │────▶│ BFF │────▶│ Tracker │
│ (Next.js) │ │ (FastAPI) │ │ (FastAPI) │
└─────────────┘ └──────────────┘ └──────┬───────┘
│
┌────────────────────────────────────────┤
│ │ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐ ┌──▼───┐
│Picogent │ │Picogent │ │Telegram │ │ DB │
│ Кодер │ │Архитект │ │ Bridge │ │ Pg │
└─────────┘ └─────────┘ └─────────┘ └──────┘
Компоненты
| Компонент | Технологии | Порт | Доступность | Описание |
|---|---|---|---|---|
| Tracker | Python, FastAPI, SQLAlchemy, PostgreSQL | 8100 | Внутренняя | Ядро системы. REST API + WebSocket |
| BFF | Python, FastAPI | 8200 | Внешняя | Прокси для Web Client с JWT auth |
| Web Client | Next.js 15, Tailwind CSS | 3100 | Внешняя | UI: канбан, чат, настройки |
| PostgreSQL | PostgreSQL 16 | 5433 | Внутренняя | База данных |
| Redis | Redis 7 | 6380 | Внутренняя | Кеш и очереди (запланировано) |
| Picogent | Node.js, TypeScript | — | Внутренняя | AI-агент процесс |
Протоколы взаимодействия
- Web Client ↔ BFF: HTTPS REST API + WebSocket (JWT auth)
- BFF ↔ Tracker: HTTP REST API + WebSocket (Token auth)
- Агенты ↔ Tracker: HTTP REST API + WebSocket (Token auth)
- База данных: PostgreSQL connection pool через SQLAlchemy
Принципы архитектуры
- Tracker не доступен извне — только через BFF или nginx proxy
- Единая модель участников — люди и агенты в одной таблице Member
- WebSocket для событий — REST для мутаций
- Микросервисная готовность — каждый компонент независим
- Event-driven — всё через события (Redis Streams — запланировано)
3. Модели данных
Member (Участники) — Ключевая модель
Принцип: Агенты и люди — единая модель. Различие только в type и методе авторизации.
Member:
id: UUID (PK)
name: str # Отображаемое имя
slug: str (UNIQUE) # Уникальный идентификатор (a-z, 0-9, -)
type: str # "human" | "agent"
role: str # "owner" | "member" | "observer" | "bridge"
auth_method: str # "password" | "oauth" | "token"
password_hash: str? # Для людей
token: str? (UNIQUE) # Для агентов/bridges
status: str # "online" | "offline" | "busy"
avatar_url: str?
created_at: timestamp
updated_at: timestamp
AgentConfig (Конфигурация агентов)
AgentConfig:
id: UUID (PK)
member_id: UUID (FK → Member, UNIQUE)
capabilities: str[] # ["coding", "review", "testing"]
chat_listen: str # "all" | "mentions" | "none"
task_listen: str # "all" | "assigned" | "none"
prompt: str? # Системный промпт
model: str? # LLM модель
Project (Проекты)
Project:
id: UUID (PK)
name: str # Отображаемое название
slug: str (UNIQUE) # Уникальный ID (для URLs)
description: str? # Описание (markdown)
repo_urls: str[] # Массив Git репозиториев
status: str # "active" | "archived"
task_counter: int # Счётчик для генерации номеров задач
created_at: timestamp
updated_at: timestamp
Task (Задачи)
Task:
id: UUID (PK)
project_id: UUID (FK → Project)
parent_id: UUID? (FK → Task) # Подзадача
number: int # Порядковый номер в проекте (1, 2, 3...)
title: str # Название задачи
description: str? # Описание (markdown)
type: str # "task" | "bug" | "epic" | "story"
status: str # "backlog" | "todo" | "in_progress" | "in_review" | "done"
priority: str # "critical" | "high" | "medium" | "low"
labels: str[] # Массив лейблов ["backend", "urgent"]
assignee_slug: str? # Кому назначена (Member.slug)
reviewer_slug: str? # Кто ревьюит (Member.slug)
watchers: str[] # Наблюдатели (массив Member.slug) *запланировано*
depends_on: UUID[] # Зависимости от других задач *запланировано*
position: int # Позиция в колонке канбана
time_spent: int # Потраченное время (минуты)
created_at: timestamp
updated_at: timestamp
Step (Шаги задачи)
Step:
id: UUID (PK)
task_id: UUID (FK → Task)
title: str # Описание шага
done: bool # Выполнен ли
position: int # Порядок в списке
created_at: timestamp
updated_at: timestamp
Подзадачи vs Этапы:
- Подзадачи = полноценные задачи на канбан-доске (parent_id)
- Этапы (steps) = чеклист внутри задачи (прогресс агента, не на канбане)
Chat (Чаты)
Chat:
id: UUID (PK)
project_id: UUID? (FK → Project) # NULL для lobby
kind: str # "lobby" | "project"
created_at: timestamp
updated_at: timestamp
Типы чатов:
- Lobby — глобальный чат (один на всю систему)
- Project — чат проекта (один на проект)
Message (Сообщения) — Unified Model
Ключевое решение: Одна модель для чат-сообщений И комментариев к задачам.
Message:
id: UUID (PK)
chat_id: UUID? (FK → Chat) # Если сообщение в чате
task_id: UUID? (FK → Task) # Если комментарий к задаче
parent_id: UUID? (FK → Message) # Для threads в чатах
author_type: str # "human" | "agent" | "system"
author_slug: str # Member.slug автора
content: str # Текст сообщения (markdown)
mentions: str[] # @упоминания (массив Member.slug)
voice_url: str? # URL голосового сообщения
created_at: timestamp
updated_at: timestamp
Ограничения: Ровно одно из chat_id или task_id должно быть заполнено.
Attachment (Вложения)
Attachment:
id: UUID (PK)
message_id: UUID (FK → Message)
filename: str # Оригинальное имя файла
mime_type: str? # MIME тип
size: int # Размер в байтах
storage_path: str # Путь к файлу на диске
created_at: timestamp
4. Авторизация
Типы авторизации
| Тип участника | Метод авторизации | Описание |
|---|---|---|
| human (Web UI) | JWT Token | Логин/пароль → JWT |
| human (MCP Client) | JWT Token | Логин/пароль → JWT (запланировано) |
| agent | Bearer Token | Статический токен в agent.json |
| bridge | Bearer Token | Статический токен для мостов |
JWT Tokens (для людей)
- Секрет:
JWT_SECRET(environment variable) - Алгоритм: HS256
- Payload:
{"sub": member_id, "name": member_name, "exp": timestamp} - Срок действия: 30 дней (настраивается)
Agent Tokens
- Формат:
tb-+ random string (32 символа) - Хранение:
Member.token(уникальное поле) - Генерация: При создании агента через UI (запланировано)
- Отзыв: Через API
POST /api/v1/members/{slug}/revoke-token(запланировано)
Роли и права
| Роль | Описание | Права |
|---|---|---|
owner |
Владелец инстанса | Все права |
member |
Обычный участник | send_messages, create_tasks, update_tasks |
observer |
Наблюдатель | Только чтение |
bridge |
Мост в другую систему | send_messages |
Процесс авторизации
Web Client:
- POST /api/auth/login → JWT token
- Сохранение в localStorage
- Authorization: Bearer {jwt} в запросах
- WebSocket: ?token={jwt} в query
Agent:
- Статический токен из конфига
- WS:
{"type": "auth", "token": "tb-xxx"} - REST: Authorization: Bearer {token} (запланировано — проверка не реализована)
5. WebSocket Protocol
Принцип разделения
- WebSocket = real-time: события (push) + отправка сообщений в чат
- REST (MCP tools) = все мутации: задачи, steps, файлы, статусы
Подключение
URL: ws://localhost:8100/ws (прямое) или wss://dev.team.uix.su/agent-ws (через nginx)
Сообщения: Клиент → Сервер
| Тип | Формат | Описание |
|---|---|---|
auth |
{"type": "auth", "token": "..."} |
Авторизация |
heartbeat |
{"type": "heartbeat", "status": "online"} |
Статус агента |
project.subscribe |
{"type": "project.subscribe", "project_id": "uuid"} |
Подписка на проект |
project.unsubscribe |
{"type": "project.unsubscribe", "project_id": "uuid"} |
Отписка |
chat.send |
{"type": "chat.send", "chat_id": "uuid", "content": "text", "mentions": []} |
Сообщение в чат |
ack |
{"type": "ack"} |
Подтверждение получения |
Сообщения: Сервер → Клиент
| Тип | Описание | Данные |
|---|---|---|
auth.ok |
Успешная авторизация | {slug, lobby_chat_id, projects[], online[]} |
auth.error |
Ошибка авторизации | {message} |
message.new |
Новое сообщение | {id, chat_id, task_id, author_*, content, mentions, created_at} |
agent.status |
Изменение статуса агента | {slug, status} |
task.created |
Создана задача | {...TaskData} (запланировано) |
task.updated |
Обновлена задача | {...TaskData} (запланировано) |
task.assigned |
Задача назначена | {...TaskData} (запланировано) |
Фильтрация событий
События фильтруются на сервере по настройкам агента:
message.new:
chat_listen: "all"— все сообщения в подписанных проектахchat_listen: "mentions"— только сообщения с @упоминанием
task. (запланировано):*
task_listen: "all"— все события задач в подписанных проектахtask_listen: "assigned"— только задачи где агент assignee/reviewer/watcher
Listen Modes (раздельные)
chat_listen: all— слышит все сообщения в чатах проектаchat_listen: mentions— только при @упоминанииtask_listen: all— получает все события задач проектаtask_listen: assigned— только свои задачи (assignee/reviewer/watcher) и @mentions
Примеры:
- Архитектор: chat=all, task=all
- Кодер: chat=mentions, task=assigned
- Тестер: chat=mentions, task=all
Auth Flow
1. WebSocket Connect
2. Client → {"type": "auth", "token": "tb-xxx"}
3. Server validates token & creates session
4. Server → {"type": "auth.ok", "data": {...}}
5. Client → {"type": "project.subscribe", "project_id": "uuid"} (для каждого проекта)
6. Start heartbeat loop (каждые 30 секунд)
Heartbeat
- Интервал: Каждые 30 секунд
- Timeout: 90 секунд без heartbeat →
status=offline - Формат:
{"type": "heartbeat", "status": "online|busy|idle"} - Реакция сервера: Обновление
Member.status, уведомлениеagent.status
6. REST API
Base URL: http://localhost:8100/api/v1 (прямой) или https://dev.team.uix.su/agent-api/api/v1 (через nginx)
Projects
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| GET | /projects |
Список проектов | — |
| GET | /projects/{slug} |
Проект по slug | — |
| POST | /projects |
Создать проект | {name, slug, description?, repo_urls?} |
| PATCH | /projects/{slug} |
Обновить проект | {name?, description?, repo_urls?, status?} |
| DELETE | /projects/{slug} |
Удалить проект | — |
Tasks
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| GET | /tasks |
Список задач | ?project_id=X&status=Y&assignee=Z&label=W |
| GET | /tasks/{id} |
Задача по ID | — |
| POST | /tasks?project_slug=X |
Создать задачу | {title, description?, type?, status?, priority?, labels?, parent_id?, assignee_slug?, depends_on?} |
| PATCH | /tasks/{id} |
Обновить задачу | {title?, description?, type?, status?, priority?, labels?, assignee_slug?, reviewer_slug?, position?} |
| DELETE | /tasks/{id} |
Удалить задачу | — |
Специальные операции с задачами:
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| POST | /tasks/{id}/take?slug=X |
Взять задачу (атомарно) | — |
| POST | /tasks/{id}/reject |
Отклонить задачу | {reason} |
| POST | /tasks/{id}/assign |
Назначить задачу | {assignee_slug} |
| POST | /tasks/{id}/watch?slug=X |
Подписаться на задачу | (запланировано) |
| DELETE | /tasks/{id}/watch?slug=X |
Отписаться от задачи | (запланировано) |
Steps
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| GET | /tasks/{id}/steps |
Список шагов | — |
| POST | /tasks/{id}/steps |
Создать шаг | {title} |
| PATCH | /tasks/{tid}/steps/{sid} |
Обновить шаг | {title?, done?} |
| DELETE | /tasks/{tid}/steps/{sid} |
Удалить шаг | — |
Messages (Unified)
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| GET | /messages |
Список сообщений | ?chat_id=X&task_id=Y&limit=50&offset=0 |
| POST | /messages |
Отправить сообщение | {chat_id?, task_id?, content, author_type?, author_slug?, mentions?} |
| GET | /messages/{id}/replies |
Треды сообщения | — |
Members
| Метод | Путь | Описание | Параметры |
|---|---|---|---|
| GET | /members |
Список участников | — |
| GET | /members/{slug} |
Участник по slug | — |
| POST | /members |
Создать участника | {name, slug, type?, agent_config?} |
| PATCH | /members/{slug} |
Обновить участника | {name?, role?, status?, agent_config?} |
| POST | /members/{slug}/regenerate-token |
Перегенерировать токен | (запланировано) |
| POST | /members/{slug}/revoke-token |
Отозвать токен | (запланировано) |
Attachments (запланировано)
| Метод | Путь | Описание | Статус |
|---|---|---|---|
| POST | /messages/{id}/attachments |
Загрузить файл | Запланировано |
| GET | /attachments/{id} |
Скачать файл | Запланировано |
| GET | /attachments?task_id=X |
Файлы задачи | Запланировано |
7. Агенты
Концепция
- Один процесс = один агент (picogent)
- Одна сессия на агента — видит всё: задачи, чат, ответы
- Роль = конфигурация в agent.json
- Автономность — агент сам решает брать задачу или нет
Конфигурация агента (agent.json)
{
"name": "Кодер",
"slug": "coder",
"prompt": "Ты опытный разработчик...",
"model": "sonnet",
"capabilities": ["coding", "review"],
"chat_listen": "mentions",
"task_listen": "assigned",
"tracker_url": "http://localhost:8100",
"token": "tb-agent-xxx"
}
Режимы прослушивания
Chat Listen:
all— получает все сообщения в подписанных проектахmentions— только при @упоминанииnone— не получает чат-сообщения
Task Listen:
all— получает все события задач в подписанных проектахassigned— только задачи где агент assignee/reviewer/watchernone— не получает task-события
Capabilities (способности)
Массив строк, описывающих что умеет агент:
"coding"— написание кода"review"— ревью кода"testing"— тестирование"documentation"— документация"architecture"— архитектурные решения
Жизненный цикл агента
- Запуск: Читает agent.json, подключается к Tracker
- Auth: Отправляет токен, получает контекст
- Subscribe: Подписывается на нужные проекты
- Listen: Получает события по WebSocket
- Action: Выполняет действия через REST API
- Heartbeat: Каждые 30 секунд сообщает о статусе
- Disconnect: При отключении статус → offline
Checkpoint Pattern
Проблема: LLM блокирующий — агент не может получать события во время обдумывания.
Решение:
- Короткие задачи (5-10 минут)
- Проверка входящих событий между шагами
- Уведомления о статусе
busyво время работы
Назначение задач
- Человек назначает вручную
- Архитектор создаёт и назначает
- Агент сам берёт из
todo(take_task— атомарно) - Label matching: лейблы задачи ∩ capabilities агента
Особенности
- Агент может отклонить задачу (
reject_task) с причиной - Автообнаружение блокеров (зависимость застряла → пинг в чат) (запланировано)
- Циклические зависимости запрещены (запланировано)
Agent Home (запланировано)
agents/coder/
agent.json # конфиг
prompt.md # само-улучшаемый промпт
memory/ # per-project память
workspace/ # рабочие файлы
sessions/ # сессии (JSONL)
Промпт-архитектура (запланировано)
Многослойный промпт:
- System Prompt (agent.json) — базовая роль, неизменная
- Agent Prompt (prompt.md) — агент сам улучшает
- Project Context (docs) — документация
- Skills — progressive loading
- Tools (MCP) — автоматически
- Guidelines — общие правила
- Session History
- Current Message
8. BFF (Backend for Frontend)
Роль BFF
- Прокси между Web Client и Tracker
- Авторизация пользователей (JWT)
- WebSocket прокси с токен-аутентификацией
- Трансформация данных (при необходимости)
Технологии
- Python, FastAPI
- JWT авторизация
- HTTP Client (httpx)
- WebSocket прокси
Конфигурация (environment)
# Tracker
TRACKER_URL=http://localhost:8100
TRACKER_WS_URL=ws://localhost:8100/ws
TRACKER_TOKEN=tb-admin-xxx
# Auth
JWT_SECRET=secret-key
AUTH_USER=admin
AUTH_PASS=password
# Server
BFF_HOST=0.0.0.0
BFF_PORT=8200
WebSocket прокси
- Client подключение:
wss://dev.team.uix.su/ws?token={jwt} - Валидация JWT: Проверка токена, извлечение user
- Tracker подключение:
ws://localhost:8100/wsс TRACKER_TOKEN - Двусторонний relay: Client ↔ BFF ↔ Tracker
REST прокси
Все API запросы проксируются с добавлением:
- Авторизация: Проверка JWT
- Трансформация: Добавление
author_slugв сообщения - Логирование: Запросы и ответы
- CORS: Для фронтенда
9. Фронтенд (Web Client)
Технологии
- Framework: Next.js 15 (App Router)
- Styling: Tailwind CSS
- State: React hooks (useState, useEffect)
- HTTP: fetch API
- WebSocket: Native WebSocket API
Структура страниц
/login— Авторизация/— Список проектов/projects/[slug]— Канбан доска проекта/projects/[slug]/settings— Настройки проекта (запланировано)/agents— Управление агентами (запланировано)
Компоненты
| Компонент | Описание | Статус |
|---|---|---|
KanbanBoard |
Drag & drop доска + mobile tabs | ✅ Реализован |
TaskModal |
Модалка задачи (title, description, assignee, delete) | ✅ Базовая версия |
ChatPanel |
Чат (lobby) | ✅ Базовая версия |
CreateTaskModal |
Создание задачи | ✅ Реализован |
CreateProjectModal |
Создание проекта | ✅ Реализован |
AuthGuard |
Проверка авторизации | ✅ Реализован |
Запланированные компоненты
| Компонент | Описание | Статус |
|---|---|---|
| Task comments в TaskModal | Комментарии к задаче | Запланировано |
| Task steps в TaskModal | Live progress агента | Запланировано |
| Agent management page | Создание, настройки агентов | Запланировано |
| Project dashboard | Метрики и активность | Запланировано |
| Project settings | Настройки проекта | Запланировано |
API клиент (api.ts)
- Base URL:
process.env.NEXT_PUBLIC_API_URL - Авторизация: JWT из localStorage
- Обработка ошибок: 401 → редирект на /login
- TypeScript типы для всех моделей
WebSocket клиент (ws.ts)
class WSClient {
// Подключение через BFF с JWT токеном
connect() // ws://bff/ws?token=jwt
// Event handlers
on(type: string, handler: Function)
// Convenience methods
subscribeProject(projectId: string)
sendChat(chatId: string, content: string)
sendTaskComment(taskId: string, content: string)
heartbeat(status: string)
}
Состояние приложения
- Авторизация: JWT в localStorage
- Проекты: Загружаются при входе в систему
- Задачи: Загружаются для каждого проекта
- WebSocket: Глобальный клиент, подписка по проектам
- Real-time: Обновления через WebSocket события
10. Деплой
Docker Compose (разработка)
services:
tracker:
build: ./tracker
ports: ["8100:8100"]
depends_on: [postgres, redis]
postgres:
image: postgres:16-alpine
ports: ["5433:5432"]
redis:
image: redis:7-alpine
ports: ["6380:6379"]
Systemd сервисы (продакшен)
Tracker: Docker Compose + systemd unit
BFF + Web Client: systemd сервисы на хосте
Picogent: systemd unit на агента
Nginx конфигурация
# Web Client
location / {
proxy_pass http://localhost:3100;
}
# BFF API
location /api/ {
proxy_pass http://localhost:8200/api/;
}
# BFF WebSocket
location /ws {
proxy_pass http://localhost:8200/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# Agent API (через nginx → Tracker)
location /agent-api/ {
proxy_pass http://localhost:8100/api/;
}
# Agent WebSocket
location /agent-ws {
proxy_pass http://localhost:8100/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
SSL/HTTPS
- Dev:
dev.team.uix.su(действующий) - Prod:
team.uix.su(placeholder) - Cертификаты: Let's Encrypt через certbot
База данных
- Разработка: PostgreSQL в Docker
- Продакшен: PostgreSQL на хосте
- Миграции: Нет (recreate from scratch) (планируется Alembic)
- Бэкапы: pg_dump (запланировано)
Процесс деплоя
- Git push → git.uix.su/team-board/docs
- Manual deploy на сервере
- Restart services: systemctl restart team-board-*
- Health check: /health endpoints (запланировано)
CI/CD: Пока ручной деплой. В будущем — Gitea Actions.
11. Ключевые решения
Архитектурные решения из brainstorm-ов
Unified Message Model
Решение: Одна модель Message для чат-сообщений И комментариев к задачам.
Обоснование: Проще API, единый компонент UI, треды работают везде.
Статус: Принято в BRAINSTORM-UI-2026-02-22.
Tracker-Centric Architecture
Решение: Tracker — центральный хаб, всё остальное — клиенты.
Обоснование: Простота, масштабируемость, единая точка правды.
Статус: Принято в ARCHITECTURE.md.
WebSocket для событий, REST для мутаций
Решение: Разделение протоколов — WS только для push-событий.
Обоснование: Агенты через MCP tools, WebSocket не перегружен.
Статус: Принято в BRAINSTORM-PROTOCOL-2026-02-20.
Раздельные Listen Modes
Решение: chat_listen и task_listen — независимо.
Обоснование: Гибкая настройка подписок для разных ролей агентов.
Статус: Принято в BRAINSTORM-WS-V2-2026-02-22.
Подзадачи vs Этапы (Steps)
Решение: Подзадачи = задачи на канбане, этапы = чеклист внутри.
Обоснование: Не засорять канбан, но показывать прогресс агента.
Статус: Принято в BRAINSTORM-PROJECTS-2026-02-20.
Checkpoint Pattern для агентов
Решение: Короткие задачи + проверка событий между шагами.
Обоснование: LLM блокирующий, нужно решать "глухой агент".
Статус: Принято в BRAINSTORM-AGENTS-2026-02-20.
Агенты могут отклонять задачи
Решение: reject_task с обоснованием.
Обоснование: Агент не безмолвный исполнитель, может не согласиться.
Статус: Принято в BRAINSTORM-TASKS-2026-02-20.
Multi-repo проекты
Решение: repo_urls: string[] — массив репозиториев.
Обоснование: Современные проекты = frontend + backend + docs.
Статус: Принято в BRAINSTORM-PROJECTS-2026-02-20.
Файлы как Attachments
Решение: Отдельного файлового сервиса нет, файлы = вложения к сообщениям.
Обоснование: Простота, единая модель для чата и задач.
Статус: Принято в разговоре 2026-02-22, противоречило ранним документам.
Отклонённые решения
Redis Streams для Event Bus
Решение: НЕ реализовывать сейчас.
Обоснование: В BRAINSTORM-MICROSERVICES было принято, но хозяин сомневается. Пока WS достаточно.
Статус: Отклонено, оставлено как "идея на будущее".
HTTP Callback для агентов
Решение: Только WebSocket для агентов.
Обоснование: Усложняет архитектуру, нет реальной потребности.
Статус: Отклонено из WS-PROTOCOL.md.
Threads в комментариях задач
Решение: Threads только в чатах, в задачах — простая лента.
Обоснование: В задачах контекст и так понятен, треды избыточны.
Статус: Принято в BRAINSTORM-UI-2026-02-22.
Глобальные vs Per-project лейблы
Статус: Остается открытым вопросом.
Реакции в чатах
Статус: Остается открытым вопросом (токен burn vs UX).
На будущее (запланированы)
Web MCP Server
Описание: Отдельный MCP Server для работы любого LLM-клиента с трекером.
Статус: Идея из BRAINSTORM-PROTOCOL-2026-02-20.
Session Compaction
Описание: Сжатие длинной истории сессии агента в summary.
Статус: Детали в AGENT-CONNECTION-RESEARCH.md.
Telegram Bridge
Описание: Бот дублирует сообщения project chats в Telegram с топиками.
Статус: MVP описан в BRAINSTORM-MISC-2026-02-21.
OAuth/Authentik интеграция
Описание: Мультипользовательский режим с SSO.
Статус: Упоминается в архитектуре.
Agent Home с self-improving промптами
Описание: Агент сам улучшает свой промпт на основе опыта.
Статус: Детали в BRAINSTORM-PROMPTS-2026-02-21.
Нереализованные части
Backend (запланировано)
- ❌ Task events через WebSocket — task.created/updated/assigned
- ❌ Agent token auth для REST API (только WS имеет проверку токенов)
- ❌ Attachments API — загрузка/скачивание файлов
- ❌ Task dependencies — валидация и уведомления о разблокировке
- ❌ Watchers на задачах — подписка на уведомления
- ❌ Task watchers API — POST/DELETE /tasks/{id}/watch
Frontend (запланировано)
- ❌ Task comments в TaskModal — комментарии к задачам
- ❌ Task steps в TaskModal — live progress агентов
- ❌ Agent management страница — /agents с созданием и настройками
- ❌ Project dashboard — метрики и активность
- ❌ Project settings — настройки проекта
- ❌ Mobile UI оптимизация — полная адаптация под телефоны
Infrastructure (запланировано)
- ❌ Health check endpoints — /health для мониторинга
- ❌ Database migrations — Alembic вместо recreate
- ❌ CI/CD pipeline — Gitea Actions автодеплой
- ❌ Monitoring/metrics — Grafana dashboard
- ❌ Backup strategy — автоматические бэкапы БД
Agent System (запланировано)
- ❌ MCP Tools полный набор — для picogent агентов
- ❌ Session resume — восстановление контекста при переподключении
- ❌ Agent home directory — workspace, memory, sessions
- ❌ Multi-instance агентов — scaling одной роли
- ❌ Self-improving промпты — agent.prompt.md обновляется агентом
Заключение
Этот документ v2.0 создан на основе полного анализа всех 24 файлов документации Team Board по состоянию на 2026-02-23. Он объединяет все принятые решения из brainstorm-ов, архитектурные концепции и текущее состояние реализации в единую точку правды.
Принцип документа: Описываем решения и концепции, а не текущее состояние кода. Если что-то запланировано но не реализовано — помечено как "Запланировано", а не TODO.
При расхождении между документацией и кодом — приоритет у кода (он правдивее), документ нужно обновить.