agents.
Обзор
Вы можете создавать подагентов тремя способами:- Программно: используйте параметр
agentsв параметрахquery()(TypeScript, Python) - На основе файловой системы: определяйте агентов как файлы markdown в директориях
.claude/agents/(см. определение подагентов как файлов) - Встроенный универсальный: Claude может вызывать встроенного подагента
general-purposeв любое время через инструмент Agent без необходимости что-либо определять
description каждого подагента. Напишите четкие описания, которые объясняют, когда следует использовать подагента, и Claude автоматически делегирует соответствующие задачи. Вы также можете явно запросить подагента по имени в своем промпте (например, “Используйте агента code-reviewer для…”).
Преимущества использования подагентов
Изоляция контекста
Каждый подагент работает в своей собственной свежей беседе. Промежуточные вызовы инструментов и результаты остаются внутри подагента; только его финальное сообщение возвращается к родительскому агенту. См. Что наследуют подагенты для точного понимания того, что находится в контексте подагента. Пример: подагентresearch-assistant может исследовать десятки файлов без накопления этого содержимого в основной беседе. Родительский агент получает краткое резюме, а не каждый файл, который прочитал подагент.
Параллелизация
Несколько подагентов могут работать одновременно, что значительно ускоряет сложные рабочие процессы. Пример: во время проверки кода вы можете одновременно запустить подагентовstyle-checker, security-scanner и test-coverage, сократив время проверки с минут до секунд.
Специализированные инструкции и знания
Каждый подагент может иметь адаптированные системные промпты со специфической экспертизой, лучшими практиками и ограничениями. Пример: подагентdatabase-migration может иметь подробные знания о лучших практиках SQL, стратегиях отката и проверках целостности данных, которые были бы ненужным шумом в инструкциях основного агента.
Ограничения инструментов
Подагенты могут быть ограничены определенными инструментами, снижая риск непредвиденных действий. Пример: подагентdoc-reviewer может иметь доступ только к инструментам Read и Grep, обеспечивая анализ, но никогда случайно не модифицируя файлы документации.
Создание подагентов
Программное определение (рекомендуется)
Определяйте подагентов непосредственно в коде, используя параметрagents. Этот пример создает двух подагентов: рецензента кода с доступом только для чтения и средство запуска тестов, которое может выполнять команды. Claude вызывает подагентов через инструмент Agent, поэтому включите Agent в allowedTools для автоматического одобрения вызовов подагентов без запроса разрешения.
Конфигурация AgentDefinition
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
description | string | Да | Описание на естественном языке того, когда использовать этого агента |
prompt | string | Да | Системный промпт агента, определяющий его роль и поведение |
tools | string[] | Нет | Массив разрешенных имен инструментов. Если опущено, наследует все инструменты |
disallowedTools | string[] | Нет | Массив имен инструментов для удаления из набора инструментов агента |
model | string | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как 'sonnet', 'opus', 'haiku', 'inherit', или полный ID модели. По умолчанию используется основная модель, если опущено |
skills | string[] | Нет | Список имен skills для предварительной загрузки в контекст агента при запуске. Неперечисленные skills остаются вызываемыми через инструмент Skill |
memory | 'user' | 'project' | 'local' | Нет | Источник памяти для этого агента |
mcpServers | (string | object)[] | Нет | MCP серверы, доступные этому агенту, по имени или встроенной конфигурации |
maxTurns | number | Нет | Максимальное количество ходов агента перед остановкой |
background | boolean | Нет | Запустить этого агента как неблокирующую фоновую задачу при вызове |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number | Нет | Уровень усилий рассуждения для этого агента |
permissionMode | PermissionMode | Нет | Режим разрешений для выполнения инструментов в этом агенте |
AgentDefinition.
Подагенты не могут создавать своих собственных подагентов. Не включайте
Agent в массив tools подагента.Определение на основе файловой системы (альтернатива)
Вы также можете определять подагентов как файлы markdown в директориях.claude/agents/. Подробности об этом подходе см. в документации подагентов Claude Code. Программно определенные агенты имеют приоритет над агентами на основе файловой системы с тем же именем.
Даже без определения пользовательских подагентов, Claude может создавать встроенного подагента
general-purpose. Это полезно для делегирования задач исследования или исследования без создания специализированных агентов. Включите Agent в allowedTools, чтобы эти вызовы автоматически одобрялись без запроса разрешения.Что наследуют подагенты
Окно контекста подагента начинается свежим (без истории родительской беседы), но не пусто. Единственный канал от родителя к подагенту — это строка промпта инструмента Agent, поэтому включайте любые пути файлов, сообщения об ошибках или решения, которые нужны подагенту, непосредственно в этот промпт.| Подагент получает | Подагент не получает |
|---|---|
Его собственный системный промпт (AgentDefinition.prompt) и промпт инструмента Agent | История беседы родителя или результаты инструментов |
Проект CLAUDE.md (загруженный через settingSources) | Предварительно загруженное содержимое skills, если не указано в AgentDefinition.skills |
Определения инструментов (унаследованные от родителя или подмножество в tools) | Системный промпт родителя |
Родитель получает финальное сообщение подагента дословно как результат инструмента Agent, но может суммировать его в своем собственном ответе. Чтобы сохранить выходные данные подагента дословно в ответе, обращенном к пользователю, включите инструкцию об этом в промпт или опцию
systemPrompt, которую вы передаете основному вызову query().Вызов подагентов
Автоматический вызов
Claude автоматически решает, когда вызывать подагентов, на основе задачи и поляdescription каждого подагента. Например, если вы определяете подагента performance-optimizer с описанием “Performance optimization specialist for query tuning”, 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.Возобновление подагентов
Подагенты можно возобновить, чтобы продолжить с того места, где они остановились. Возобновленные подагенты сохраняют полную историю беседы, включая все предыдущие вызовы инструментов, результаты и рассуждения. Подагент продолжает работу ровно с того места, где он остановился, а не начинает заново. Когда подагент завершается, Claude получает его ID агента в результате инструмента Agent. Чтобы программно возобновить подагента:- Захватите ID сессии: извлеките
session_idиз сообщений во время первого запроса - Извлеките ID агента: разберите
agentIdиз содержимого сообщения - Возобновите сессию: передайте
resume: sessionIdв параметрах второго запроса и включите ID агента в ваш промпт
Вы должны возобновить ту же сессию, чтобы получить доступ к стенограмме подагента. Каждый вызов
query() по умолчанию начинает новую сессию, поэтому передайте resume: sessionId, чтобы продолжить в той же сессии.Если вы используете пользовательского агента (не встроенного), вам также нужно передать то же определение агента в параметр agents для обоих запросов.- Компактирование основной беседы: когда основная беседа компактируется, стенограммы подагентов не затрагиваются. Они хранятся в отдельных файлах.
- Сохранение сессии: стенограммы подагентов сохраняются в пределах их сессии. Вы можете возобновить подагента после перезагрузки Claude Code, возобновив ту же сессию.
- Автоматическая очистка: стенограммы очищаются на основе параметра
cleanupPeriodDays(по умолчанию: 30 дней).
Ограничения инструментов
Подагенты могут иметь ограниченный доступ к инструментам через полеtools:
- Опустить поле: агент наследует все доступные инструменты (по умолчанию)
- Указать инструменты: агент может использовать только перечисленные инструменты
Распространенные комбинации инструментов
| Вариант использования | Инструменты | Описание |
|---|---|---|
| Анализ только для чтения | Read, Grep, Glob | Может изучать код, но не может изменять или выполнять |
| Выполнение тестов | Bash, Read, Grep | Может запускать команды и анализировать выходные данные |
| Модификация кода | Read, Edit, Write, Grep, Glob | Полный доступ на чтение/запись без выполнения команд |
| Полный доступ | Все инструменты | Наследует все инструменты от родителя (опустите поле 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/agents/, загружаются только при запуске. Если вы создаете новый файл агента во время работы Claude Code, перезагрузите сессию, чтобы загрузить его.
Windows: сбои при длинных промптах
В Windows подагенты с очень длинными промптами могут не работать из-за ограничений длины командной строки (8191 символов). Держите промпты краткими или используйте агентов на основе файловой системы для сложных инструкций.Связанная документация
- Подагенты Claude Code: полная документация подагентов, включая определения на основе файловой системы
- Динамические рабочие процессы: оркестрируйте множество подагентов из скрипта для работ, слишком больших для одной беседы
- Обзор SDK: начало работы с Claude Agent SDK