Система удалённого управления командой AI-агентов с интеграцией в системы управления проектами.
Agent Fleet позволяет организовать автоматизированное выполнение задач из систем управления проектами (Taiga.io, Jira) через Claude Code. Система выступает как полноценный участник команды разработки — оценивает, берёт и выполняет задачи.
Язык реализации: Python
Docker Compose на Ubuntu с единым контейнером:
┌─────────────────────────────────────────────┐
│ Контейнер "executor" │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ Bot │───▶│ Claude Code │ │
│ │ (Python) │◀───│ SDK │ │
│ └─────────────┘ └──────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌──────────────────┐ │
│ │ Redis │ │ Volumes: │ │
│ └─────────────┘ │ /projects/a │ │
│ │ /projects/b │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────┘
Компоненты:
- Executor — контейнер с ботом и Claude Code SDK
- Redis — управление состоянием (флаги занятости с TTL)
- Volumes — проекты монтируются как volumes
Agent Fleet работает с любой системой управления проектами через абстрактный интерфейс. Это позволяет легко добавлять поддержку новых систем без изменения основной логики.
class TaskSystemAdapter(Protocol):
def get_ready_tasks(self, assignee: str) -> list[Task]: ...
def update_task_status(self, task_id: str, status: TaskStatus) -> None: ...
def add_comment(self, task_id: str, comment: str) -> None: ...
def get_task_estimate(self, task_id: str) -> float | None: ...
def set_task_estimate(self, task_id: str, hours: float) -> None: ...Каждый адаптер реализует этот интерфейс для конкретной системы задач.
| Адаптер | Статус | Описание |
|---|---|---|
| Taiga | Первая реализация | Agile-система управления проектами |
| Jira | Планируется | Корпоративный стандарт |
| Custom | Планируется | Собственная система для простых проектов |
Эпик
└── Юзер-стори
└── Таска ← Agent Fleet работает на этом уровне
Agent Fleet получает таски из юзер-стори, назначенные на исполнителя (assignee), и выполняет их через Claude Code.
Система периодически опрашивает систему задач и находит таски:
- Статус: Ready
- Назначен исполнитель (assignee = Agent Fleet)
- Есть утверждённая оценка
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Task │───▶│ Agent │───▶│ Claude │
│ System │ │ Fleet │ │ Code │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ Telegram │
│ (вопросы) │
└─────────────┘
- Таска передаётся в Claude Code с контекстом проекта
- Прогресс логируется в комментариях к таске
- Затраченное время отслеживается
При возникновении вопросов система:
- Отправляет вопрос ответственному через Telegram
- Ожидает ответа
- Добавляет ответ в контекст Claude Code
- Продолжает выполнение
- Код коммитится в ветку
- Создаётся Pull Request
- Статус таски меняется на Done или In Review
- Итоговый отчёт добавляется в комментарии
| Команда | Описание |
|---|---|
/start |
Приветствие, проверка доступа |
/projects |
Список подключённых проектов |
/status |
Статус выполняемых задач |
/queue |
Очередь задач на выполнение |
/pause |
Приостановить выполнение текущей задачи |
/resume |
Возобновить выполнение |
/stop |
Остановить и отменить текущую задачу |
/ask <prompt> |
Ручной запрос к Claude Code в контексте проекта |
Запрет параллельных запросов в одном проекте реализуется через Redis:
- Флаги занятости с TTL для защиты от зависших задач
- Клиенты SDK хранятся в памяти для возможности вызова
interrupt()
TELEGRAM_BOT_TOKEN— токен Telegram-ботаTELEGRAM_ALLOWED_USERS— список разрешённых user IDREDIS_URL— URL подключения к RedisANTHROPIC_API_KEY— ключ API Anthropic- Переменные для системы задач (зависят от реализации адаптера)
projects:
trading-platform:
description: "Торговая платформа"
path: /projects/trading-platform
task_system:
adapter: taiga
project_id: 123
enterprise-crm:
description: "Корпоративная CRM"
path: /projects/crm
task_system:
adapter: jira
project_key: CRM
blog:
description: "Личный блог на Astro"
path: /projects/blog
task_system:
adapter: custom
api_url: https://tasks.example.comКаждый проект указывает свою интеграцию с системой задач через секцию task_system. Параметры зависят от выбранного адаптера.
- Бот отвечает только пользователям из списка разрешённых ID
- Секреты хранятся в .env (добавлен в .gitignore)
- Проекты изолированы в отдельных volumes
- ESTIMATION.md — система оценки задач
- INTERNAL_ARCHITECTURE.md — внутренняя архитектура Claude Service
В разработке — этап планирования