Skip to content

Latest commit

 

History

History
185 lines (139 loc) · 8.62 KB

File metadata and controls

185 lines (139 loc) · 8.62 KB

Agent Fleet

Концепция

Система удалённого управления командой 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.

Workflow выполнения задачи

1. Получение таски

Система периодически опрашивает систему задач и находит таски:

  • Статус: Ready
  • Назначен исполнитель (assignee = Agent Fleet)
  • Есть утверждённая оценка

2. Выполнение

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   Task      │───▶│   Agent     │───▶│   Claude    │
│   System    │    │   Fleet     │    │   Code      │
└─────────────┘    └─────────────┘    └─────────────┘
                          │
                          ▼
                   ┌─────────────┐
                   │  Telegram   │
                   │  (вопросы)  │
                   └─────────────┘
  • Таска передаётся в Claude Code с контекстом проекта
  • Прогресс логируется в комментариях к таске
  • Затраченное время отслеживается

3. Вопросы ответственному

При возникновении вопросов система:

  • Отправляет вопрос ответственному через Telegram
  • Ожидает ответа
  • Добавляет ответ в контекст Claude Code
  • Продолжает выполнение

4. Завершение

  • Код коммитится в ветку
  • Создаётся Pull Request
  • Статус таски меняется на Done или In Review
  • Итоговый отчёт добавляется в комментарии

Команды бота

Команда Описание
/start Приветствие, проверка доступа
/projects Список подключённых проектов
/status Статус выполняемых задач
/queue Очередь задач на выполнение
/pause Приостановить выполнение текущей задачи
/resume Возобновить выполнение
/stop Остановить и отменить текущую задачу
/ask <prompt> Ручной запрос к Claude Code в контексте проекта

Управление состоянием

Запрет параллельных запросов в одном проекте реализуется через Redis:

  • Флаги занятости с TTL для защиты от зависших задач
  • Клиенты SDK хранятся в памяти для возможности вызова interrupt()

Конфигурация

Секреты (.env)

  • TELEGRAM_BOT_TOKEN — токен Telegram-бота
  • TELEGRAM_ALLOWED_USERS — список разрешённых user ID
  • REDIS_URL — URL подключения к Redis
  • ANTHROPIC_API_KEY — ключ API Anthropic
  • Переменные для системы задач (зависят от реализации адаптера)

Реестр проектов (YAML)

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

Связанные документы

Статус

В разработке — этап планирования