У вас есть фича, которая требует трех вещей одновременно. Можно запустить субагентов внутри одной сессии Claude Code и дать им работать параллельно. Или разбить работу на три независимые задачи, передать каждую отдельному агенту в его собственном tmux-панели, и дать им работать, не зная друг о друге.
Оба подхода параллелизируют работу. Решают разные проблемы. Выберите неправильный, и вы либо сожжете окно контекста на координационные накладные расходы, либо создадите конфликты слияния, которые дольше исправлять, чем оригинальная задача.
Это фреймворк принятия решений, который я использую каждый день, запуская 13 агентов Claude Code на одной кодовой базе. Не теория. Результат достаточного количества ошибок, чтобы знать, где проходит граница.
Два вида параллелизма
Claude Code поддерживает два различных способа конкурентного выполнения работы.
Субагенты это дочерние процессы, запущенные внутри одной сессии Claude Code. Родительский агент запускает несколько субагентов, каждый берется за часть задачи, затем собирает результаты. Они делят одну рабочую директорию и контекст родителя. Думайте о них как о потоках в одном процессе.
Parent agent
├── Subagent A: "Search lib/ for all usages of parseConfig"
├── Subagent B: "Search server/ for all usages of parseConfig"
└── Subagent C: "Search components/ for all usages of parseConfig"
Отдельные агенты работают в независимых сессиях Claude Code, обычно в отдельных tmux-панелях. У каждого своё окно контекста, свой файл идентичности CLAUDE.md и свой взгляд на кодовую базу. Они не делят память. Общаются через артефакты: комментарии к задачам, обновления статусов, закоммиченный код. Думайте о них как об отдельных процессах без общего состояния.
tmux pane 1: eng1 agent → "Build the REST endpoint"
tmux pane 2: eng2 agent → "Build the React component"
tmux pane 3: qa1 agent → "Write integration tests for both"
Ментальная модель важна, потому что определяет, как работа течет между единицами. Субагенты могут дешево передавать данные родителю. Отдельные агенты передают данные через файловую систему, git или внешний трекер задач.
Когда побеждают субагенты
Используйте субагентов, когда работа разделяет состояние и результаты должны сойтись.
Параллельное исследование. Нужно найти паттерн в пяти директориях, прочитать три файла документации и синтезировать находки в одну рекомендацию. Субагенты могут взять каждый по пути поиска, вернуть результаты, и родитель может объединить их без накладных расходов на сериализацию.
Независимые преобразования одних данных. Вы рефакторите модуль и должны обновить определения типов, тесты и документацию в одном когерентном изменении. Каждый субагент обрабатывает один файл, но родитель обеспечивает согласованность, потому что видит все три результата перед коммитом.
Быстрое исследование. Вы дебажите и нужно одновременно проверить git log, вывод тестов и конфигурацию runtime. Субагенты могут собрать все три параллельно, и родитель синтезирует диагноз.
Паттерн: разослать, собрать, действовать на основе комбинированного результата. Если ваш параллелизм заканчивается тем, что родитель должен рассуждать обо всех выходах вместе, субагенты правильный инструмент.
В чем субагенты плохи: все, что занимает больше нескольких минут на ветку, все, что модифицирует файлы в пересекающихся путях, или все, что требует независимой верификации. Субагенты делят рабочую директорию, поэтому два субагента, пишущих в один файл, испортят работу друг друга. И поскольку они делят контекст, долго работающий субагент съедает доступное окно родителя.
Когда побеждают отдельные агенты
Используйте отдельных агентов, когда работу можно верифицировать независимо и ей не нужен общий контекст, чтобы иметь смысл.
Разные компоненты одной фичи. "Построить API-эндпоинт" и "Построить фронтенд, который его вызывает" независимы до интеграции. API-инженеру не нужен React-компонент в контексте. Фронтенд-инженеру не нужна схема базы данных. Дать каждому свой агент с ограниченным CLAUDE.md держит контекст чистым и предотвращает утечку сложности одного агента в работу другого.
Разные критерии приемки. Если задача A выполнена, когда эндпоинт возвращает 200 с правильной JSON-структурой, а задача B выполнена, когда компонент отображает данные с правильными состояниями ошибок, это отдельные цели верификации. QA-агент может проверить каждую независимо. Субагенты не могут быть проверены независимо, потому что производят один комбинированный выход.
Работа, затрагивающая разные части кодовой базы. Владение файлами это простейший способ предотвратить конфликты слияния. Агент A владеет server/, Агент B владеет components/. Ни один не заходит на территорию другого. Если попробовать это с субагентами, родителю придется управлять блокировкой файлов, что обесценивает параллелизм.
Задачи с разными временными горизонтами. Одна задача занимает 10 минут, другая 2 часа. С субагентами родитель ждет самого медленного ребенка. С отдельными агентами короткая задача завершается, верифицируется и отправляется, пока длинная ещё работает.
Паттерн: запустить, забыть, верифицировать отдельно. Если каждый кусок работы стоит сам по себе и может быть проверен сам по себе, отдельные агенты со структурированными задачами чище.
Проблема передачи
Настоящая точка принятия решения сводится к передачам.
Передачи субагентов дешевые. Ребенок возвращает данные родителю в том же контексте. Без сериализации, без записи файлов, без ожидания обновлений статуса. Родитель запускает трех субагентов, они возвращают три результата, у родителя есть все необходимое.
Передачи между отдельными агентами дорогие, но долговечные. Агент A завершает работу, коммитит код, обновляет статус задачи и комментирует, что сделал. Агент B подхватывает этот сигнал (через координатора или опрашивая трекер задач) и начинает свою зависимую работу. Накладные расходы реальны: нужна система задач, протокол статусов и способ для агентов узнать, что сделали другие агенты.
Правило: если работа требует больше одной передачи между параллельными единицами, используйте субагентов. Для одного fan-out-and-gather субагенты проще. Если выход Агента A является входом Агента B, который становится входом Агента C, стоимость координации отдельных агентов оправдана, потому что каждая передача производит проверенный, закоммиченный артефакт, который не потеряется, если агент упадет или достигнет лимита контекста.
Конкретный пример. Нужно:
- Найти все API-эндпоинты, возвращающие пользовательские данные
- Добавить rate limiting к каждому
- Написать тесты для новых rate limits
- Обновить документацию API
Шаги 1 и 2 тесно связаны. Результаты поиска (шаг 1) непосредственно питают модификацию (шаг 2). Субагент обрабатывает поиск; родитель применяет изменения. Это паттерн субагента.
Шаги 3 и 4 независимы друг от друга, но зависят от шага 2. Тестам нужен реальный код эндпоинта. Документации нужна финальная форма API. Это отдельные задачи для отдельных агентов, каждая со своими критериями приемки, каждая верифицируемая самостоятельно.
