 Как устроена моя система AI-разработки

  Что это

  Полностью автономный pipeline, где AI-агенты пишут код, тестируют и деплоят — от задачи в CRM до production. Человек ставит задачу и одобряет план. Всё остальное делают агенты.

  Терминология: Handoff vs Orchestration

  В мире AI-агентов есть два основных паттерна:

  - Handoff — агент A сам решает "я закончил, передаю управление агенту B". Агенты общаются напрямую, децентрализованно. Так работает OpenAI Swarm.
  - Orchestrated pipeline — центральный координатор (не AI, а код) вызывает агентов по очереди, передавая результаты между ними. Агенты друг о друге не знают.

  Моя система — это orchestrated pipeline. TypeScript-код управляет всем процессом, а Claude-агенты — это "рабочие руки", каждый со своей специализацией.

  Архитектура

  ┌─────────────────────────────────────────────────────┐
  │                   DIRECTUS CRM                       │
  │            (dev_tasks — 189 задач)                   │
  │   Человек создаёт задачу → статус "new"             │
  └──────────────┬──────────────────────────────────────┘
                 │ Redis BLPOP (wake signal)
                 ▼
  ┌─────────────────────────────────────────────────────┐
  │          TYPESCRIPT ORCHESTRATOR                     │
  │         (ai-pipeline/src/index.ts)                  │
  │                                                      │
  │   while(true) {                                     │
  │     1. Проверить зависшие задачи (recovery)         │
  │     2. Спланировать новые (planner)                 │
  │     3. Выполнить одобренные (до 3 параллельно)      │
  │     4. BLPOP 30s — ждать следующую задачу           │
  │   }                                                  │
  └──────────────┬──────────────────────────────────────┘
                 │
                 ▼
  ┌─────────────────────────────────────────────────────┐
  │              КОНВЕЙЕР АГЕНТОВ                        │
  │                                                      │
  │  ┌──────────┐   Claude Opus, 50 ходов               │
  │  │ PLANNER  │──→ Анализирует задачу, читает код,    │
  │  │          │   пишет пошаговый план                 │
  │  └────┬─────┘                                       │
  │       │ ⏸ Человек одобряет план в CRM               │
  │       ▼                                              │
  │  ┌──────────┐   Claude Sonnet, 30 ходов, $2 лимит   │
  │  │  CODER   │──→ Пишет код по каждому шагу плана    │
  │  │          │   (в изолированном git worktree)       │
  │  └────┬─────┘                                       │
  │       ▼                                              │
  │  ┌──────────┐   npm run build / tsc                  │
  │  │  BUILD   │──→ Собирает проект                    │
  │  └────┬─────┘                                       │
  │       │ ❌ Упал? → DEBUGGER (Sonnet, 25 ходов)      │
  │       ▼                                              │
  │  ┌──────────┐   Claude Haiku, 15 ходов              │
  │  │ VERIFIER │──→ Проверяет: код соответствует плану? │
  │  └────┬─────┘                                       │
  │       ▼                                              │
  │  ┌──────────┐   Claude Sonnet, 20 ходов             │
  │  │ REVIEWER │──→ Code review: качество, безопасность │
  │  │          │   REJECT? → Coder исправляет (до 3x)  │
  │  └────┬─────┘                                       │
  │       ▼                                              │
  │  ┌──────────┐   git merge → build → push → pm2      │
  │  │  DEPLOY  │──→ Мержит в main, деплоит, проверяет  │
  │  │          │   здоровье. Откатит если упало.        │
  │  └──────────┘                                       │
  └─────────────────────────────────────────────────────┘

  Жизненный цикл задачи

  new → planning → planned → approved → in_work → testing → done
                      │                     │
                      └→ questions       ❌ → review (ошибка → анализ → retry)

  ┌──────────┬───────────────────┬────────────────────────────────────┐
  │  Статус  │   Кто действует   │           Что происходит           │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ new      │ Pipeline          │ Подхватывает, запускает Planner    │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ planning │ AI (Opus)         │ Читает код, создаёт план с шагами  │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ planned  │ Человек           │ Читает план, одобряет или правит   │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ approved │ Pipeline          │ Берёт в работу                     │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ in_work  │ AI (Sonnet)       │ Coder пишет код шаг за шагом       │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ testing  │ AI (Haiku/Sonnet) │ Build → Verify → Review            │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ done     │ Pipeline          │ Задеплоено и работает              │
  ├──────────┼───────────────────┼────────────────────────────────────┤
  │ review   │ Человек           │ Что-то пошло не так, нужно решение │
  └──────────┴───────────────────┴────────────────────────────────────┘

  Что делает каждый агент

  ┌──────────┬────────────────────┬────────────────────────────────────────────────────┬─────────────────────┐
  │  Агент   │       Модель       │                        Роль                        │      Аналогия       │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Planner  │ Opus (самый умный) │ Архитектор — анализирует код, декомпозирует задачу │ Тимлид пишет ТЗ     │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Coder    │ Sonnet (быстрый)   │ Программист — пишет код по инструкции              │ Junior dev          │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Debugger │ Sonnet             │ Фиксит ошибки сборки                               │ QA-инженер          │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Verifier │ Haiku (дешёвый)    │ Чеклист — код соответствует плану?                 │ Ревьюер по чеклисту │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Reviewer │ Sonnet             │ Полноценный code review                            │ Senior dev          │
  ├──────────┼────────────────────┼────────────────────────────────────────────────────┼─────────────────────┤
  │ Refiner  │ Haiku              │ Уточняет план перед кодингом                       │ Техписатель         │
  └──────────┴────────────────────┴────────────────────────────────────────────────────┴─────────────────────┘

  Ключевые фишки

  Изоляция через git worktree — каждая задача работает в отдельной копии репозитория. Если что-то пошло не так — main не тронут.

  Семантическая память (pgvector) — pipeline помнит прошлые ошибки и решения. Перед каждым шагом ищет похожий опыт в базе через vector search.

  Самообучение — после каждой задачи AI извлекает уроки из ошибок и сохраняет. Следующие задачи используют эти уроки.

  Безопасность деплоя — файловый mutex на merge, health-check после деплоя, автоматический rollback если сервис упал.

  Бюджет — каждый агент имеет лимит по стоимости ($2 на coder, $1 на reviewer). Средняя задача: $0.16–$1.93.

  Статистика CRM

  ┌──────────────────┬───────────────────────────────────────────┐
  │     Метрика      │                 Значение                  │
  ├──────────────────┼───────────────────────────────────────────┤
  │ Всего задач      │ 189                                       │
  ├──────────────────┼───────────────────────────────────────────┤
  │ Завершено (done) │ 5                                         │
  ├──────────────────┼───────────────────────────────────────────┤
  │ В бэклоге        │ 36                                        │
  ├──────────────────┼───────────────────────────────────────────┤
  │ На ревью         │ 18                                        │
  ├──────────────────┼───────────────────────────────────────────┤
  │ Отменено         │ 130                                       │
  ├──────────────────┼───────────────────────────────────────────┤
  │ Типов событий    │ 8 (status_change, build, step, deploy...) │
  ├──────────────────┼───────────────────────────────────────────┤
  │ Всего событий    │ ~3,400                                    │
  └──────────────────┴───────────────────────────────────────────┘

  Почему это НЕ handoff

  В handoff-системе (как OpenAI Swarm) Planner сам бы решил: "Передаю задачу Coder'у". А Coder сам решил бы: "Код готов, передаю Reviewer'у". Агенты сами управляют процессом.

  В моей системе ни один агент не знает о существовании других. Каждый получает промпт, выполняет работу, возвращает результат. TypeScript-оркестратор решает что делать дальше. Это надёжнее — агент не может "заблудиться" в цепочке передач.

  Handoff:    Agent A → "передаю Agent B" → Agent B → "передаю Agent C"
                        (агенты решают сами)

  Мой pipeline: Orchestrator → вызывает A → получает результат
                Orchestrator → вызывает B → получает результат
                Orchestrator → вызывает C → получает результат
                        (код решает, агенты изолированы)