Что такое субагенты в Claude Code

У нас есть такое понятие, как субагенты. Что это такое? Давайте разбираться.

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

Всё работает вроде бы нормально. Мы написали здесь какой-то промт, который будет обрабатывать основной агент. Но дело в том, что промт в файле claude.md может очень сильно разрасться в размерах. А мы знаем, что чем больше информации приходит на вход нашего агента, тем хуже он отвечает, тем более он расфокусирован и не может понять, что ему конкретно нужно сделать.

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

Сейчас важно понимать, что это отдельный промт. И очень важно понимать, что у субагента используется изолированный контекст. Если вы запустили какую-то задачу, она выполнялась, и потом запускается субагент внутри этого выполнения, то субагент не будет видеть то, что до этого выполнил основной агент. У него изолированный контекст. Он будет видеть только тот контекст, который вы ему предоставите.

Это может быть и хорошо, и плохо одновременно. Хорошо — субагент держит фокус и не отвлекается на детали. Плохо — он теряет контекст, который был до этого.

Ограничения и рекомендации по использованию

Исходя из изолированности контекста, у нас возникает ряд ограничений использования субагентов. Я бы не рекомендовал использовать субагенты, которые будут вызываться по ходу выполнения какого-то основного промта. Причина — потеря контекста.

Например, у вас есть проект с frontend-частью, и вы для неё создаёте frontend-субагента. С одной стороны, вроде бы всё хорошо. Но Claude Code не всегда будет определять, где находится frontend, а где backend. Он не всегда будет вызывать нужного субагента, потому что не понимает контекст. Этот frontend-субагент будет вызываться по ходу выполнения какой-то задачи, что не есть хорошо.

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

Более хороший пример — субагенты, которые специализируются на узких задачах:

  • Субагент, который проверяет безопасность вашего проекта
  • Субагент, который парсит какой-то сайт
  • Субагент, который пишет продающие тексты

Для таких задач вы создаёте промт с конкретными инструкциями и вызываете субагента вручную. Например, пишете: "Проверь с помощью такого-то субагента проект на безопасность", и он начинает проверять.

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