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

Обзор

Вы можете создавать подагентов тремя способами:
  • Программно: используйте параметр agents в параметрах query(). См. справочники TypeScript и Python
  • На основе файловой системы: определяйте агентов как файлы markdown в директориях .claude/agents/. См. определение подагентов как файлов
  • Встроенный универсальный: Claude может вызывать встроенного подагента general-purpose в любое время через инструмент Agent без необходимости что-либо определять
Это руководство сосредоточено на программном подходе, который рекомендуется для приложений SDK. Когда вы определяете подагентов, Claude определяет, следует ли их вызывать, на основе поля description каждого подагента. Напишите четкие описания, которые объясняют, когда следует использовать подагента, и Claude автоматически делегирует соответствующие задачи. Вы также можете явно запросить подагента по имени в своем промпте, например “Используйте агента code-reviewer для…”.

Преимущества использования подагентов

Изоляция контекста

Каждый подагент работает в своей собственной свежей беседе. Промежуточные вызовы инструментов и результаты остаются внутри подагента; только его финальное сообщение возвращается к родительскому агенту. См. Что наследуют подагенты для точного понимания того, что находится в контексте подагента. Пример: подагент research-assistant может исследовать десятки файлов без накопления этого содержимого в основной беседе. Родительский агент получает краткое резюме, а не каждый файл, который прочитал подагент.

Параллелизация

Несколько подагентов могут работать одновременно, поэтому независимые подзадачи завершаются за время самого медленного из них, а не за сумму всех времён. Пример: во время проверки кода вы можете одновременно запустить подагентов style-checker, security-scanner и test-coverage вместо последовательного запуска.

Специализированные инструкции и знания

Каждый подагент может иметь адаптированные системные промпты со специфической экспертизой, лучшими практиками и ограничениями. Пример: подагент database-migration может иметь подробные знания о лучших практиках SQL, стратегиях отката и проверках целостности данных, которые были бы ненужным шумом в инструкциях основного агента.

Ограничения инструментов

Подагенты могут быть ограничены определенными инструментами, снижая риск непредвиденных действий. Пример: подагент doc-reviewer может иметь доступ только к инструментам Read и Grep, обеспечивая анализ, но никогда случайно не модифицируя файлы документации.

Создание подагентов

Определяйте подагентов непосредственно в коде, используя параметр agents. Claude вызывает подагентов через инструмент Agent, поэтому включите Agent в allowedTools для автоматического одобрения вызовов подагентов без запроса разрешения. Большинство примеров на этой странице выводят только окончательный результат. Чтобы подтвердить, что Claude делегировал работу подагенту, а не ответил напрямую, см. раздел Обнаружение вызова подагента. Этот пример создает двух подагентов: рецензента кода с доступом только для чтения и средство запуска тестов, которое может выполнять команды.

Конфигурация AgentDefinition

В Python SDK многословные имена полей, такие как disallowedTools и mcpServers, сохраняют написание camelCase для соответствия формату передачи, а не следуют соглашению Python snake_case. Подробности см. в справочнике AgentDefinition. Два поведения подагентов изменились в Claude Code v2.1.198:
  • Подагенты работают в фоновом режиме по умолчанию. Вызов инструмента Agent, который опускает входной параметр run_in_background, запускает фоновый подагент, и Claude устанавливает run_in_background: false, когда ему нужен результат перед продолжением. До версии v2.1.198 опускание run_in_background запускало подагента синхронно. Установите поле background в true, чтобы принудительно включить фоновое выполнение для конкретного агента независимо от того, что запрашивает Claude.
  • Подагент наследует конфигурацию расширенного мышления основной сессии. В более ранних версиях расширенное мышление отключено внутри подагентов независимо от параметра основной сессии.
Начиная с Claude Code v2.1.172, подагенты могут создавать своих собственных подагентов. Подагент на пять уровней ниже основного агента не может создавать дополнительных подагентов, независимо от того, работает ли он в переднем плане или в фоновом режиме. Чтобы предотвратить создание подагентом других подагентов, опустите Agent из его массива tools или добавьте его в disallowedTools. Полные правила глубины см. в разделе вложенные подагенты.

Определение на основе файловой системы (альтернатива)

Вы также можете определять подагентов как файлы markdown в директориях .claude/agents/. Подробности об этом подходе см. в документации подагентов Claude Code. Программно определенные агенты имеют приоритет над агентами на основе файловой системы с тем же именем.
Даже без определения пользовательских подагентов, Claude может создавать встроенного подагента general-purpose. Это полезно для делегирования задач исследования или исследования без создания специализированных агентов. Включите Agent в allowedTools, чтобы эти вызовы автоматически одобрялись без запроса разрешения.

Что наследуют подагенты

Окно контекста подагента начинается свежим (без истории родительской беседы), но не пусто. Единственный канал от родителя к подагенту — это строка промпта инструмента Agent, поэтому включайте любые пути файлов, сообщения об ошибках или решения, которые нужны подагенту, непосредственно в этот промпт. Подагент, у которого есть инструмент SendMessage, начинает с списка других именованных агентов, работающих в сеансе, поэтому он знает, каким именам он может отправлять сообщения. Claude Code автоматически добавляет список в первый ход подагента. Ветвление не получает список, потому что оно наследует родительскую беседу вместо этого. Список требует Claude Code v2.1.206 или более поздней версии.
Родитель получает финальное сообщение подагента дословно как результат инструмента Agent, но может суммировать его в своем собственном ответе. Чтобы сохранить выходные данные подагента дословно в ответе, обращенном к пользователю, включите инструкцию об этом в промпт или опцию systemPrompt, которую вы передаете основному вызову query().
Ошибка API, которая завершает работу подагента раньше времени, такая как ограничение скорости, никогда не доставляется как его результат. Если ограничение скорости, перегрузка или ошибка сервера прерывает подагента на переднем плане, который уже произвел текстовый выход, инструмент Agent возвращает этот частичный выход с примечанием о том, что подагент не завершил работу. Подагент, который не произвел ничего или чей единственный выход был вызовами инструментов без текста, завершается с сообщением об ошибке Agent terminated early due to an API error, за которым следует деталь ошибки. См. API errors in subagents для поведения на переднем плане и в фоновом режиме. Эта обработка частичного выхода требует Claude Code v2.1.199 или более поздней версии. В v2.1.199 ограничение скорости, перегрузка или ошибка сервера оставляли форму, содержащую только вызовы инструментов, с пустым частичным результатом, содержащим только примечание об отсечении.

Вызов подагентов

Автоматический вызов

Claude автоматически решает, когда вызывать подагентов, на основе задачи и поля description каждого подагента. Например, если вы определяете подагента performance-optimizer с описанием “Performance optimization specialist for query tuning”, Claude вызовет его, когда ваш промпт упоминает оптимизацию запросов. Напишите четкие, конкретные описания, чтобы Claude мог сопоставить задачи с правильным подагентом.

Явный вызов

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

Динамическая конфигурация агента

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

Обнаружение вызова подагента

Claude вызывает подагентов через инструмент Agent. Чтобы обнаружить, когда вызывается подагент, проверьте блоки tool_use, где name — это "Agent". Сообщения из контекста подагента включают поле parent_tool_use_id.
Имя инструмента было переименовано с "Task" на "Agent" в Claude Code v2.1.63. Текущие выпуски SDK выдают "Agent" в блоках tool_use, но все еще используют "Task" в списке инструментов system:init и в result.permission_denials[].tool_name. Проверка обоих значений в block.name обеспечивает совместимость между версиями SDK.
Структура сообщения отличается между SDK. В Python блоки содержимого доступны непосредственно через message.content. В TypeScript SDKAssistantMessage оборачивает сообщение Claude API, поэтому содержимое доступно через message.message.content. Этот пример проходит через потоковые сообщения, логируя, когда вызывается подагент и когда последующие сообщения исходят из контекста выполнения этого подагента.

Возобновление подагентов

Вы можете возобновить подагента, чтобы продолжить с того места, где он остановился, а не начинать заново. Возобновленный подагент сохраняет полную историю беседы, включая все предыдущие вызовы инструментов, результаты и рассуждения. Когда подагент завершается, результат инструмента Agent включает текстовый блок, содержащий agentId: <id>. Встроенные агенты Explore и Plan работают в один проход и не возвращают agentId, поэтому используйте пользовательского агента или general-purpose, когда вам нужно возобновить. Чтобы программно возобновить подагента:
  1. Захватите ID сессии: извлеките session_id из сообщений во время первого запроса
  2. Извлеките ID агента: разберите agentId из текста результата инструмента Agent
  3. Возобновите сессию: передайте resume: sessionId в параметрах второго запроса и включите ID агента в ваш промпт
Вы должны возобновить ту же сессию, чтобы получить доступ к стенограмме подагента. Каждый вызов query() по умолчанию начинает новую сессию, поэтому передайте resume: sessionId, чтобы продолжить в той же сессии.При использовании пользовательского агента передайте то же определение агента в параметр agents для обоих запросов.
Пример ниже определяет пользовательского агента endpoint-finder. Первый запрос запускает его и захватывает ID сессии и ID агента из результата инструмента Agent, затем второй запрос возобновляет сессию, чтобы задать вопрос для уточнения, требующий контекста из первого анализа.
Стенограммы подагентов сохраняются независимо от основной беседы:
  • Компактирование основной беседы: когда основная беседа компактируется, стенограммы подагентов не затрагиваются. Они хранятся в отдельных файлах.
  • Сохранение сессии: стенограммы подагентов сохраняются в пределах их сессии. Вы можете возобновить подагента после перезагрузки Claude Code, возобновив ту же сессию.
  • Автоматическая очистка: стенограммы очищаются на основе параметра cleanupPeriodDays, который по умолчанию составляет 30 дней.

Ограничения инструментов

Подагенты могут иметь ограниченный доступ к инструментам через поле tools:
  • Опустить поле: агент наследует все доступные инструменты (по умолчанию)
  • Указать инструменты: агент может использовать только перечисленные инструменты
Этот пример создает агента анализа только для чтения, который может изучать код, но не может изменять файлы или запускать команды.

Распространенные комбинации инструментов

Масштабирование с помощью динамических рабочих процессов

Подагенты хорошо работают для нескольких делегированных задач за ход. Для запусков, которые координируют десятки или сотни агентов, используйте инструмент Workflow, который перемещает оркестровку в скрипт, который среда выполнения выполняет вне контекста беседы. Подробнее о том, чем рабочие процессы отличаются от делегирования подагентов по ходам, см. в динамических рабочих процессах. Инструмент Workflow доступен в TypeScript Agent SDK v0.3.149 и позже. Включите Workflow в allowedTools для автоматического одобрения запусков рабочих процессов. Схемы входных и выходных данных инструмента указаны в справочнике TypeScript.

Troubleshooting

Claude не делегирует подагентам

Если Claude выполняет задачи напрямую вместо делегирования вашему подагенту:
  • Проверьте, что вызовы Agent одобрены: включите Agent в allowedTools для автоматического одобрения вызовов подагента. Без этого вызовы Agent переходят к вашему обратному вызову canUseTool или в режиме dontAsk отклоняются
  • Используйте явное указание: упомяните подагента по имени в своем промпте, например “Use the code-reviewer agent to…”
  • Напишите четкое описание: объясните ровно, когда следует использовать подагента, чтобы Claude мог правильно сопоставить задачи

Агенты на основе файловой системы не загружаются

Claude Code отслеживает ~/.claude/agents/ и .claude/agents/ и подхватывает новый или отредактированный файл агента в течение нескольких секунд без необходимости перезагрузки. Если определение никогда не появляется, проработайте эти причины:
  • Новая директория agents: наблюдатель охватывает только директории, которые существовали при запуске сессии, поэтому первый файл в новой директории требует перезагрузки сессии. Это наиболее частая причина.
  • Неверный frontmatter или дублирующееся имя name: проверьте YAML файла и то, использует ли существующий агент уже это имя name.
  • --disable-slash-commands: сессии, запущенные с этим флагом, не отслеживают эти директории и всегда требуют перезагрузки для загрузки новых файлов.
  • Программный агент с тем же именем: agents, переданные в query(), переопределяют агента файловой системы с тем же именем.
Для формата файла см. как писать файлы подагентов.

Сбои при длинных промптах в Windows

В Windows подагенты с очень длинными промптами могут не работать из-за ограничения длины командной строки в 8191 символов. Держите промпты краткими или используйте агентов на основе файловой системы для сложных инструкций.