Сайд-проект · май 2026

Пятиперсонный Claude Code dev squad.

DevSwarm это FastMCP-сервер, который оркеструет пять постоянных сессий персон Claude Code (Architect, Researcher, Frontend, Backend, Reviewer-Deployer), чтобы превратить один промпт в один pull request. Fire-and-forget: запустите его одним MCP-вызовом, закройте ноутбук, проснитесь к PR. Без Docker, без демона, без порта; только файлы на диске и stdio MCP. Собрано end-to-end на сервере Fedora за один полудень.

5 персон 6 MCP-инструментов 4м 42с capstone-сборка Opus 4.7 на всех персонах ~3 ч сборки, один полудень
Предпосылка

Идея в 23:00. Pull request утром.

Одна сессия Claude Code это уже способный инженер. Но она работает по одной вещи за раз (прочитать, спланировать, написать код, проверить) в одном контекстном окне, с одними приоритетами, на тех же часах, что и человек, который печатает перед ней. DevSwarm это маленький эксперимент по тому, как разделить эту работу между постоянными специализированными агентами, которые передают результат через файлы на диске, работают в своих сессиях и не нуждаются в том, чтобы за ними кто-то следил.

Финальное состояние, которое я хотел: у вас есть идея поздно ночью, вы говорите её один раз и просыпаетесь к pull request, который можно прочитать, принять или отправить обратно. Без бэбиситтинга. Без «рой застрял через три шага». Оркестратор отделяется от вызывающего; статус живёт в JSON-файле на диске; можно закрыть терминал и вернуться на следующее утро.

Архитектура

Чистые файлы на диске плюс stdio MCP.

MCP-сервер это один Python-файл. Каждая персона это реальная сессия claude, прикреплённая к UUID и продолжаемая через subprocess. Runner это отделённый процесс (start_new_session=True), который проходит пять стадий, сериализуя состояние в .swarm_state.json после каждой. Frontend и Backend работают в параллельных потоках. Без демона, без порта, без контейнера.

Architect PLAN.md Researcher RESEARCH.md Frontend frontend/ Backend backend/ Reviewer- Deployer → PR
Вы (терминал, очки, везде где есть Claude Code)
      ↓ MCP-вызов: devswarm.start_project(idea, repo_url)
┌────────────────────────────────────┐
│  devswarm_mcp.py  (FastMCP, stdio) │   ← запущен по требованию
└─────────────┬──────────────────────┘
              ↓ subprocess.Popen(start_new_session=True)
┌────────────────────────────────────┐
│  runner.py   (detached, PPID=1)    │   ← переживёт смерть MCP
└─────────────┬──────────────────────┘
              ↓ для каждой стадии: claude --resume <uuid> -p ...
      ┌──────┴──────┬──────────┬──────────┬──────────────┐
      ↓             ↓          ↓          ↓              ↓
  Architect    Researcher   Frontend   Backend      Reviewer-
  → PLAN.md    → RESEARCH   → код      → код        Deployer
                  .md         в fe/      в be/      → REVIEW.md
                                                    → gh pr create
              ↓
       состояние живёт в workspace/<id>/.swarm_state.json
       проверять в любой момент через get_project_status(id)
Пять персон

Пять сессий, пять наборов инструментов.

Каждая персона это отдельная сессия Claude Code, живущая в собственной рабочей директории с собственным системным промптом CLAUDE.md и собственным allow-листом инструментов settings.json. Изоляция инструментов жёстко проводится в слое настроек, не просто обещается в промпте.

Architect
Пишет PLAN.md · read-only
Читает идею пользователя, выбирает стек, определяет раскладку файлов, контракты API, схему БД, декомпозицию задач, приёмочные критерии. Никакого кода. Никакого bash.
Researcher
Пишет RESEARCH.md · read + web
Ищет библиотеки, паттерны, похожие OSS-проекты, известные подводные камни, риски безопасности для того, что описал Architect. С обилием ссылок.
Frontend
Собирает frontend/ · bash + edit
Реализует UI-сторону PLAN.md. Имеет bash и доступ на запись, но жёстко заблокирован от git push и любого MCP-записывающего GitHub-инструмента.
Backend
Собирает backend/ · bash + edit
Реализует API, сервер, миграции БД. Возвращает NOT_REQUIRED на статических проектах, чтобы пайплайн его чисто пропускал. Тот же блок git push, что и у Frontend.
Capstone-тест

4 минуты 42 секунды, один промпт в один PR.

Первый end-to-end live-тест, без правок руками: одностраничный CV с переключателем тёмной темы, fade-in при прокрутке и уважением к prefers-reduced-motion. Каждая стадия удалась с первой попытки.

ArchitectPLAN.md: стек, раскладка файлов, контракты API, приёмочные критерии28 с
ResearcherRESEARCH.md: библиотеки, паттерны, подводные камни, безопасность1 м 31 с
Frontendindex.html: инициализация темы без вспышки, CSS-переменные, IntersectionObserver59 с
BackendNOT_REQUIRED · статическая страница, нет API9 с
ReviewerREVIEW.md: 14 приёмочных проверок · clone · commit · push · открытие PR1 м 44 с

Ниже: точный index.html, который написал рой, отрисованный вживую. Попробуйте переключатель темы в правом верхнем углу рамки, прокрутите, чтобы увидеть, как срабатывает fade-in в каждой секции.

/projects/cv-onepager-artifact.html, дословно из выходной директории роя. Смотреть PR ↗

Стек и статус

Честно о том, что в коробке.

Язык
Python 3.14, FastMCP-сервер написан вручную в ~260 строк (devswarm_mcp.py) плюс runner (runner.py) плюс общие хелперы состояния (swarm_state.py).
Модель агента
claude-opus-4-7 на всех пяти персонах. Сессии сохраняются как JSONL в ~/.claude/projects/<encoded>/<uuid>.jsonl, продолжаются через claude --resume <uuid> -p ....
Изоляция инструментов
По .claude/settings.json на персону с явными allow/deny паттернами. Frontend/Backend жёстко заблокированы от git push, gh pr, всех записывающих mcp__github__*. Записи в Notion запрещены для каждой персоны.
Конкурентность
Python threading для параллельной стадии Frontend + Backend. Записи состояния используют уникальные tmp-имена + общепроцессный lock, чтобы read-modify-write внутри update_stage не терял обновления.
Деплой
Reviewer-Deployer использует CLI gh с существующей аутентификацией пользователя. URL PR пишется в .pr_url в рабочей директории; runner подхватывает его и отдаёт через get_project_status.
Источник
Ещё не в публичном репозитории; держится локально, пока API стабилизируется. Скорее всего, появится на github.com/tomscholtes93-collab/devswarm, когда несколько следующих capstone'ов пройдут чисто.