$ sudo teach IT

Изоляция контекста, ради которой существуют подагенты, иногда оборачивается против вас. Вы час обсуждали архитектуру, разобрали три варианта, отвергли два, договорились о третьем. Теперь нужно параллельно набросать тесты. Обычный подагент стартует с чистым контекстом — и вам придётся пересказывать ему весь этот час, а половину нюансов вы всё равно упустите.

Для таких случаев есть форк: подагент, наследующий вашу беседу целиком. Он видит ту же историю, тот же системный промпт, те же инструменты и ту же модель. При этом его собственные действия наружу не выходят — назад приходит только результат. Плюс форк открывает параллельность: от одной точки можно запустить несколько веток и сравнить, к чему они приведут. После этого урока вы будете понимать, когда нужен форк, а когда обычный подагент, и как не сжечь лимиты параллельными запусками.

Что уже умеем / что добавим

Вы умеете делегировать задачи встроенным подагентам, писать собственных, ограничивать им инструменты и подключать скиллы. Вы знаете главное свойство подагента — чистый стартовый контекст.

Теперь мы разберём единственное исключение из этого правила. Добавим команду /subtask, поймём разницу между форком и обычным подагентом, научимся запускать несколько подагентов параллельно и разберёмся с лимитами: сколько их может работать одновременно и как глубоко они могут вкладываться друг в друга.

Что вы узнаете в рамках статьи

  • Что такое форк беседы и чем он отличается от обычного подагента
  • Как запустить форк командой /subtask и что он наследует
  • Чем /subtask отличается от /fork
  • Как запускать несколько подагентов параллельно и зачем
  • Какие есть лимиты параллельности и вложенности и как их менять

Ключевые термины

  • Форк (fork) — подагент, наследующий всю беседу родителя: историю, системный промпт, инструменты и модель.
  • /subtask — команда, запускающая форк с заданной задачей; требует версии 2.1.212 или новее.
  • Fork mode — режим, в котором Claude может сам запрашивать форк; в интерактивных сессиях включён по умолчанию.
  • Предел параллельности — максимум одновременно работающих подагентов в сессии; по умолчанию 20.
  • Глубина вложенности — сколько уровней подагентов может порождаться от главной беседы; по умолчанию три.

Форк: подагент, который всё знает

Форк — исключение из правила о чистом контексте. Он наследует беседу целиком: тот же системный промпт, ту же историю сообщений, те же инструменты и ту же модель.

Ключевое свойство сохраняется: собственные вызовы инструментов форка в вашу беседу не попадают, назад возвращается только финальный результат. То есть вы отдаёте контекст внутрь, но не получаете шум обратно.

Запускается форк командой /subtask с описанием задачи:

/subtask набросай юнит-тесты для изменений в парсере

Claude Code сам придумает форку имя по первым словам задачи. Форк появляется в панели под строкой ввода и работает в фоне — вы продолжаете работать в главной беседе. Когда он закончит, результат придёт сообщением в вашу беседу.

Отличие от /fork стоит запомнить сразу, потому что имена похожи. /subtask создаёт форк-подагента внутри текущей сессии. /fork копирует всю беседу в новую фоновую сессию со своей строкой в agent view — две полностью независимые беседы. Исторически это одна и та же команда: на версиях с 2.1.161 по 2.1.211 форк-подагент запускался как раз через /fork, а нынешнее поведение появилось позже.

Claude может запросить форк и сам — это управляется fork mode, который в интерактивных сессиях включён по умолчанию. Но /subtask работает независимо от него.

Когда форк, а когда обычный подагент

Правило простое: считайте, сколько контекста нужно передать.

Берите обычный подагент, когда задача самодостаточна и формулируется в пару предложений. Прогнать тесты, найти вызовы функции, разобрать логи — тут чистый контекст только на пользу: меньше лишнего, дешевле, быстрее.

Берите форк, когда объяснять придётся дольше, чем делать. После долгого обсуждения архитектуры, при отладке, где важна вся цепочка гипотез, при работе над задачей с накопленными за час договорённостями — форк избавляет от пересказа.

Обычный подагент подойдёт:
Используй подагента, чтобы найти все использования устаревшего
метода formatDate и вернуть список файлов

Нужен форк:
/subtask реализуй второй из обсуждённых вариантов кэширования
и проверь, не ломает ли он тесты

Во втором случае «второй из обсуждённых вариантов» существует только в вашей переписке. Обычный подагент этого не поймёт.

Параллельный запуск

Несколько подагентов могут работать одновременно. Это меняет подход к задачам, которые распадаются на независимые части.

Просто попросите об этом в одном сообщении:

Параллельно запусти трёх подагентов:
первый проверяет покрытие тестами модуля auth,
второй ищет неиспользуемые зависимости в package.json,
третий собирает список TODO старше полугода по git blame.
Верни три отдельных отчёта.

Три задачи не связаны между собой, поэтому выполняются одновременно, и вы ждёте не сумму времён, а время самой долгой.

Форки тоже параллелятся, и это даёт полезный приём: запустить из одной точки несколько подходов к одной задаче и сравнить результаты. Каждый форк стартует с одинаковым контекстом, но идёт своим путём.

Учтите главное ограничение: параллельные запуски умножают расход. Десять агентов сжигают лимиты примерно вдесятеро быстрее одного. Параллельность оправдана, когда задачи действительно независимы, а не когда хочется побыстрее.

Лимиты, о которых стоит знать

Одновременно работающих подагентов по умолчанию 20. При попытке запустить сверх лимита приходит ошибка Concurrent subagent limit reached, и Claude не повторяет попытку. Как только кто-то завершится, слот освободится. Значение меняется переменной окружения:

export CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS=5

Форк, запущенный через /subtask, занимает слот, пока работает, но самим лимитом не блокируется. Общее число подагентов за сессию не ограничено — ограничены только одновременные.

Глубина вложенности по умолчанию три уровня ниже главной беседы. То есть подагент может породить подагента, тот — ещё одного, а дальше инструмент Agent у них просто не появится. Настраивается так:

{
  "env": {
    "CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH": "2"
  }
}

Значение 1 отключает вложенность полностью. Вложенные подагенты отображаются деревом в панели под строкой ввода со счётчиком потомков вида (+N).

Наблюдать за фоновой работой удобно через команду /tasks — она показывает всё, что выполняется в фоне текущей сессии, включая уже завершившихся подагентов.

Частые ошибки

  • Путать /subtask и /fork. Первая создаёт форк-подагента внутри сессии, вторая копирует беседу в отдельную фоновую сессию. Проверьте версию: до 2.1.212 форк-подагент запускался через /fork.
  • Форкать ради простой задачи. Форк тащит с собой всю историю беседы. Если задача формулируется в одно предложение, обычный подагент дешевле и быстрее.
  • Параллелить зависимые задачи. Если второй агент должен опираться на результат первого, параллельный запуск даст неверный результат: он стартует, не дождавшись данных.
  • Забывать про умножение расхода. Десять параллельных агентов расходуют лимиты вдесятеро быстрее. Оценивайте выигрыш во времени против цены.

Наиболее частые вопросы

  • Видит ли форк мою переписку? — Да, целиком: историю, системный промпт, инструменты и модель. Это его главное отличие от обычного подагента.
  • Попадут ли действия форка в мою беседу? — Нет. Его вызовы инструментов остаются в его контексте, назад приходит только финальный результат.
  • Сколько подагентов можно запустить одновременно? — По умолчанию 20; значение меняется переменной CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS.
  • Может ли подагент запустить своего подагента? — Да, по умолчанию до трёх уровней вглубь. Настраивается через CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH.
  • Как посмотреть, что сейчас выполняется в фоне? — Командой /tasks: она перечисляет фоновые задачи текущей сессии, включая завершившихся подагентов.

Итоги

Прекрасно — вы освоили ту часть механики подагентов, которая на первый взгляд выглядит противоречиво. Оказалось, что изоляция контекста не догма: когда пересказ дороже самой работы, форк передаёт всю беседу целиком, при этом не пуская шум обратно. Вы научились запускать его через /subtask, отличать от /fork, распараллеливать независимые задачи и знаете, где проходят границы: 20 одновременных агентов, три уровня вложенности.

Отдельно ценно понимание цены параллельности — это тот момент, где легко увлечься и сжечь дневной лимит за полчаса. В следующем уроке мы разберём фоновые агенты и git worktree: как сделать так, чтобы несколько агентов, работающих одновременно, не наступали друг другу на файлы.

На следующий урок