Subagents работают в рамках одной сессии. Чтобы запустить множество независимых сессий параллельно и отслеживать их из одного места, см. background agents. Для сессий, которые взаимодействуют друг с другом, см. agent teams.
- Сохранять контекст, отделяя исследование и реализацию от основного разговора
- Применять ограничения, ограничивая доступ subagent к определённым инструментам
- Переиспользовать конфигурации в проектах с помощью subagents уровня пользователя
- Специализировать поведение с помощью сфокусированных системных приглашений для конкретных областей
- Контролировать затраты, маршрутизируя задачи на более быстрые и дешёвые модели, такие как Haiku
Встроенные subagents
Claude Code включает встроенные subagents, которые Claude автоматически использует при необходимости. Каждый наследует разрешения родительского разговора с дополнительными ограничениями на инструменты. Explore и Plan пропускают ваши файлы CLAUDE.md и статус git родительской сессии, чтобы исследование было быстрым и экономичным. Все остальные встроенные и пользовательские subagents загружают оба. Для полного разбора того, что достигает subagent, см. что загружается при запуске.- Explore
- Plan
- General-purpose
- Other
Быстрый агент, доступный только для чтения, оптимизированный для поиска и анализа кодовых баз.
- Model: наследуется из основного разговора, ограничен Opus на Claude API, поэтому Explore никогда не работает на более дорогой модели, чем та, которую вы уже выбрали для сессии
- Tools: инструменты только для чтения; Write и Edit запрещены
- Purpose: обнаружение файлов, поиск кода, исследование кодовой базы
Explore переопределяет встроенный и сохраняет собственное поле model, поэтому определите его с model: haiku, чтобы сохранить исследование на модели с более низкой стоимостью.Claude делегирует Explore, когда ему нужно искать или понимать кодовую базу без внесения изменений. Это сохраняет результаты исследования вне контекста основного разговора.При вызове Explore Claude указывает уровень тщательности: quick для целевых поисков, medium для сбалансированного исследования или very thorough для комплексного анализа.- Чтобы заблокировать определённый встроенный тип, добавьте его в
permissions.deny, как показано в Отключение определённых subagents. - Чтобы предотвратить делегирование Claude к любому subagent, запретите сам инструмент
Agentс помощьюpermissions.deny. - Чтобы удалить только встроенные subagents
ExploreиPlan, установитеCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1. Claude читает и исследует файлы напрямую вместо делегирования им. Требуется Claude Code версии 2.1.198 или позже. - В неинтерактивном режиме и Agent SDK установите
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1для удаления всех встроенных типов и предоставления только ваших собственных.
Quickstart: создание вашего первого subagent
Subagents определяются в файлах Markdown с YAML frontmatter. Чтобы создать один, попросите Claude написать его для вас или напишите файл самостоятельно. Начиная с версии v2.1.198, команда/agents больше не открывает интерактивный мастер создания; её запуск выводит напоминание попросить Claude или отредактировать .claude/agents/ напрямую. Файлы subagent, поля frontmatter и местоположения .claude/agents/ и ~/.claude/agents/ остаются неизменными; удалён только терминальный мастер.
Это пошаговое руководство создаёт subagent уровня пользователя, который проверяет код и предлагает улучшения.
1
Попросите Claude создать subagent
В Claude Code опишите subagent, который вы хотите создать, и где его сохранить:Claude создаёт файл с
name, description, списком tools, model и системным приглашением.2
Проверьте файл
Откройте Поскольку файл находится в
~/.claude/agents/code-improver.md и убедитесь, что frontmatter соответствует тому, что вы запросили. Результат выглядит так:~/.claude/agents/, subagent доступен в каждом проекте на вашей машине. Чтобы ограничить его одним проектом, переместите его в каталог .claude/agents/ этого проекта. Выберите область действия subagent сравнивает эти два варианта.3
Попробуйте
Попросите Claude делегировать новому subagent:Claude делегирует вашему новому subagent, который сканирует кодовую базу и возвращает предложения по улучшению.Если Claude не может найти новый subagent, перезагрузите Claude Code и попробуйте снова. Это происходит только когда
~/.claude/agents/ не существовал до начала сеанса, потому что работающий сеанс не обнаруживает вновь созданный каталог agents.На Claude Code v2.1.197 и более ранних версиях
/agents открывает интерактивный мастер с вкладкой Running, которая отображает активные subagents, и вкладкой Library для их создания, редактирования и удаления. Настройка subagents
Местоположение файла subagent определяет, кому он доступен, а его frontmatter определяет, что он может делать. В этом разделе рассматривается, где находятся файлы subagent и каждое поле, которое они поддерживают.Выберите область subagent
Сохраняйте файлы subagent в разных местах в зависимости от области. Когда несколько subagents имеют одно и то же имя, Claude Code использует тот, который находится в местоположении с более высоким приоритетом.
Project subagents (
.claude/agents/) идеальны для subagents, специфичных для кодовой базы. Проверьте их в систему контроля версий, чтобы ваша команда могла использовать и улучшать их совместно.
Project subagents обнаруживаются путём прохода вверх от текущей рабочей директории, поэтому каждый .claude/agents/ между ней и корнем репозитория сканируется. Начиная с версии 2.1.178, когда более одной из этих вложенных директорий определяет одно и то же name, Claude Code использует определение, ближайшее к рабочей директории.
Директории, добавленные с помощью --add-dir, также сканируются: папка .claude/agents/ внутри добавленной директории загружается вместе с project subagents. См. Additional directories для того, какие другие типы конфигурации загружаются из --add-dir. Чтобы поделиться subagents в проектах без --add-dir, используйте ~/.claude/agents/ или plugin.
User subagents (~/.claude/agents/) — это личные subagents, доступные во всех ваших проектах.
Claude Code сканирует .claude/agents/ и ~/.claude/agents/ рекурсивно, поэтому вы можете организовать определения в подпапки, такие как agents/review/ или agents/research/. Путь подпапки не влияет на то, как идентифицируется или вызывается subagent, потому что идентичность происходит только из поля name frontmatter.
Сохраняйте значения name уникальными по всему дереву: если два файла под одной директорией .claude/agents/, включая её подпапки, объявляют одно и то же имя, Claude Code загружает только один из них, выбранный по порядку чтения файловой системы, а не по документированному приоритету. Во вложенных директориях проекта определение, ближайшее к рабочей директории, побеждает, как описано выше. Проверка настройки /doctor сообщает о файлах в одной директории, которые имеют одно и то же имя, и предлагает переименовать или удалить все, кроме одного. До версии 2.1.205 /doctor открывал экран диагностики, который перечислял дубликаты и показывал, какое определение было активно.
Директории agents/ plugin также сканируются рекурсивно. В отличие от областей проекта и пользователя, подпапка внутри директории agents/ plugin становится частью scoped identifier: файл в agents/review/security.md в plugin my-plugin регистрируется как my-plugin:review:security.
CLI-определённые subagents передаются как JSON при запуске Claude Code. Они существуют только для этой сессии и не сохраняются на диск, что делает их полезными для быстрого тестирования или скриптов автоматизации. Вы можете определить несколько subagents в одном вызове --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents принимает JSON с теми же полями frontmatter, что и файловые subagents: description, prompt, tools, disallowedTools, model, permissionMode, mcpServers, hooks, maxTurns, skills, initialPrompt, memory, effort, background, isolation и color. Используйте prompt для системного приглашения, эквивалентного телу markdown в файловых subagents.
Managed subagents развёртываются администраторами организации. Поместите файлы markdown в .claude/agents/ внутри директории managed settings, используя тот же формат frontmatter, что и project и user subagents. Managed определения имеют приоритет над project и user subagents с тем же именем.
Plugin subagents поступают из plugins, которые вы установили. Они загружаются вместе с вашими пользовательскими subagents и появляются в typeahead @-упоминания под их scoped name. См. справку по компонентам plugin для деталей создания plugin subagents.
По соображениям безопасности plugin subagents не поддерживают поля frontmatter
hooks, mcpServers или permissionMode. Эти поля игнорируются при загрузке агентов из plugin. Если они вам нужны, скопируйте файл агента в .claude/agents/ или ~/.claude/agents/. Вы также можете добавить правила в permissions.allow в settings.json или settings.local.json, но эти правила применяются ко всей сессии, а не только к plugin subagent.tools и model, с телом определения добавленным в качестве дополнительных инструкций к системному приглашению товарища. См. agent teams для того, какие поля frontmatter применяются на этом пути.
Напишите файлы subagent
Файлы subagent используют YAML frontmatter для конфигурации, за которым следует системное приглашение в Markdown:Claude Code наблюдает за
~/.claude/agents/ и .claude/agents/. Когда вы добавляете или редактируете файл subagent на диск, или просите Claude написать его для вас, Claude Code обнаруживает изменение в течение нескольких секунд и следующее делегирование использует обновленное определение без необходимости перезагрузки.Два случая по-прежнему требуют перезагрузки:- Наблюдатель охватывает только директории, которые существовали при запуске сессии, поэтому после создания первого файла агента области в новой директории
agents, перезагрузитесь для его загрузки. - Сессии, запущенные с
--disable-slash-commands, вообще не наблюдают эти директории.
--append-subagent-system-prompt добавляет текст, который вы предоставляете, в конец системного приглашения каждого subagent, включая вложенные subagents. Требует Claude Code v2.1.205 или позже.
Subagent начинает работу в текущей рабочей директории основного разговора. В пределах subagent команды cd не сохраняются между вызовами инструментов Bash или PowerShell и не влияют на рабочую директорию основного разговора. Чтобы дать subagent изолированную копию репозитория вместо этого, установите isolation: worktree.
Subagent с isolation: worktree запускает свои команды Bash и PowerShell внутри своего worktree. Команда, рабочая директория которой разрешается в вашу основную копию вместо этого, например потому что директория worktree была удалена во время работы subagent, завершается с ошибкой. До версии 2.1.203 такая команда могла запуститься в основной копии.
Поддерживаемые поля frontmatter
Следующие поля могут использоваться в YAML frontmatter. Требуются толькоname и description.
Выберите модель
Полеmodel контролирует, какую AI модель использует subagent:
- Model alias: Используйте один из доступных псевдонимов:
sonnet,opus,haikuилиfable - Full model ID: Используйте полный ID модели, такой как
claude-opus-4-8илиclaude-sonnet-5. Принимает те же значения, что и флаг--model - inherit: Используйте ту же модель, что и основной разговор
- Omitted: Если не указано, по умолчанию
inheritи использует ту же модель, что и основной разговор
model для этого конкретного вызова. Claude Code разрешает модель subagent в этом порядке:
- Переменная окружения
CLAUDE_CODE_SUBAGENT_MODEL, если установлена на псевдоним модели или ID модели - Параметр
modelдля конкретного вызова - Frontmatter
modelопределения subagent - Модель основного разговора
CLAUDE_CODE_SUBAGENT_MODEL на inherit — это то же самое, что оставить его неустановленным: разрешение продолжается с параметром model для конкретного вызова, затем frontmatter. В более ранних версиях inherit заставлял subagents использовать модель основного разговора и игнорировал оба этих источника.
Переменная окружения, параметр для конкретного вызова и значения frontmatter проверяются на соответствие списку разрешений availableModels вашей организации. Значение, которое разрешается в исключённую модель, не используется, и subagent вместо этого работает на унаследованной модели.
Начиная с версии 2.1.198, subagents также наследуют конфигурацию extended thinking основного разговора: если thinking включен в вашей сессии, он включен для subagent, и если он выключен, он остаётся выключенным. Нет параметра thinking для каждого subagent. До версии 2.1.198 subagents запускались с отключённым extended thinking независимо от параметра основного разговора.
Контролируйте возможности subagent
Вы можете контролировать, что могут делать subagents, через доступ к инструментам, режимы разрешений и условные правила.Доступные инструменты
Subagents наследуют внутренние инструменты и MCP инструменты, доступные в основном разговоре по умолчанию. Следующие инструменты зависят от пользовательского интерфейса основного разговора или состояния сессии и недоступны для subagents, даже если они указаны в полеtools:
AskUserQuestionEnterPlanModeExitPlanMode, если толькоpermissionModesubagent не являетсяplanScheduleWakeupWaitForMcpServers
tools (список разрешений) или поле disallowedTools (список запретов). Этот пример использует tools для исключительного разрешения Read, Grep, Glob и Bash. Subagent не может редактировать файлы, писать файлы или использовать какие-либо MCP инструменты:
disallowedTools для наследования каждого инструмента из основного разговора, кроме Write и Edit. Subagent сохраняет Bash, MCP инструменты и всё остальное:
disallowedTools применяется первым, затем tools разрешается против оставшегося пула. Инструмент, указанный в обоих, удаляется.
Когда ничего в списке tools не разрешается в инструмент, например потому что каждая запись неправильно написана или называет инструмент, который недоступен для subagents, Claude Code отказывается запускать subagent и инструмент Agent возвращает ошибку, называющую неразрешённые записи. До версии 2.1.208 этот subagent запускался без инструментов и мог вернуть пустой или запутанный результат.
Оба поля принимают паттерны уровня MCP сервера в дополнение к точным названиям инструментов: mcp__<server> или mcp__<server>__* предоставляет или удаляет каждый инструмент из названного сервера. В disallowedTools, mcp__* также удаляет каждый MCP инструмент из любого сервера. Этот пример удаляет каждый инструмент из MCP сервера github, сохраняя инструменты из других серверов и каждый встроенный инструмент:
Ограничьте, какие subagents могут быть порождены
Когда агент работает как основной поток сclaude --agent, он может порождать subagents, используя инструмент Agent. Чтобы ограничить, какие типы subagent он может порождать, используйте синтаксис Agent(agent_type) в поле tools.
В версии 2.1.63 инструмент Task был переименован в Agent. Существующие ссылки
Task(...) в настройках и определениях агентов по-прежнему работают как псевдонимы.worker и researcher могут быть порождены. Если агент попытается порождать любой другой тип, запрос не удастся и агент увидит только разрешённые типы в своём приглашении. Чтобы заблокировать конкретные агенты, разрешив все остальные, используйте permissions.deny вместо этого.
Чтобы разрешить порождение любого subagent без ограничений, используйте Agent без скобок:
Agent полностью опущен из списка tools, агент не может порождать никакие subagents.
Синтаксис списка разрешений Agent(agent_type) применяется только к агенту, работающему как основной поток с claude --agent. В определении subagent перечисление Agent в tools позволяет этому subagent порождать вложенные subagents, но любой список типов внутри скобок игнорируется.
Область MCP servers для subagent
Используйте полеmcpServers для предоставления subagent доступа к MCP серверам, которые недоступны в основном разговоре. Встроенные серверы, определённые здесь, подключаются при запуске subagent и отключаются при его завершении. Строковые ссылки используют соединение родительской сессии.
Поле
mcpServers применяется в обоих контекстах, где может работать файл агента:- Как subagent, порождённый через инструмент Agent или @-упоминание
- Как основная сессия, запущенная с
--agentили параметромagent
.mcp.json и файлов настроек..mcp.json, ключевые по имени сервера, и поддерживают типы stdio, http, sse и ws.
Чтобы исключить MCP сервер из основного разговора полностью и избежать того, чтобы описания его инструментов потребляли контекст там, определите его встроенным здесь, а не в .mcp.json. Subagent получает инструменты; родительский разговор — нет.
Начиная с версии 2.1.153, ограничения MCP, которые применяются к основной сессии, также охватывают серверы, объявленные в frontmatter subagent:
--strict-mcp-configи--bare- Enterprise управляемая конфигурация MCP
allowedMcpServersиdeniedMcpServersполитики
--strict-mcp-config не фильтрует серверы, которые вы передаёте встроенным образом через --agents или опцию SDK agents, поскольку это явный ввод вызывающей стороны.
Режимы разрешений
ПолеpermissionMode контролирует, как subagent обрабатывает запросы разрешений. Subagents наследуют контекст разрешений из основного разговора и могут переопределить режим, кроме случаев, когда режим родителя имеет приоритет, как описано ниже.
Если родитель использует
bypassPermissions или acceptEdits, это имеет приоритет и не может быть переопределено. Если родитель использует auto mode, subagent наследует auto mode и любой permissionMode в его frontmatter игнорируется: классификатор оценивает вызовы инструментов subagent с теми же правилами блокировки и разрешения, что и родительская сессия.
Предварительная загрузка skills в subagents
Используйте полеskills для инжекции содержимого skill в контекст subagent при запуске. Это даёт subagent знания в области без необходимости открывать и загружать skills во время выполнения.
Skill из списка tools или добавьте его в disallowedTools.
Вы не можете предварительно загружать skills, которые устанавливают disable-model-invocation: true, поскольку предварительная загрузка берёт из того же набора skills, который Claude может вызывать. Если указанный skill отсутствует или отключен, Claude Code пропускает его и регистрирует предупреждение в журнал отладки.
Это противоположность запуску skill в subagent. С
skills в subagent, subagent контролирует системное приглашение и загружает содержимое skill. С context: fork в skill, содержимое skill инжектируется в агента, который вы указываете. Оба используют одну и ту же базовую систему.Включите постоянную память
Полеmemory даёт subagent постоянный каталог, который сохраняется между разговорами. Subagent использует этот каталог для накопления знаний со временем, таких как паттерны кодовой базы, идеи отладки и архитектурные решения.
Когда память включена:
- Системное приглашение subagent включает инструкции для чтения и записи в каталог памяти.
- Системное приглашение subagent также включает первые 200 строк или 25KB
MEMORY.mdв каталоге памяти, в зависимости от того, что меньше, с инструкциями по курированиюMEMORY.md, если она превышает этот лимит. - Инструменты Read, Write и Edit автоматически включаются, чтобы subagent мог управлять своими файлами памяти.
-
project— рекомендуемая область по умолчанию. Это делает знания subagent доступными для совместного использования через систему контроля версий. - Попросите subagent проверить его память перед началом работы: “Review this PR, and check your memory for patterns you’ve seen before.”
- Попросите subagent обновить его память после завершения задачи: “Now that you’re done, save what you learned to your memory.” Со временем это создаёт базу знаний, которая делает subagent более эффективным.
-
Включите инструкции по памяти непосредственно в файл markdown subagent, чтобы он активно поддерживал свою собственную базу знаний:
Условные правила с hooks
Для более динамического контроля использования инструментов используйтеPreToolUse hooks для проверки операций перед их выполнением. Это полезно, когда вам нужно разрешить некоторые операции инструмента, блокируя другие.
Этот пример создаёт subagent, который разрешает только запросы к базе данных только для чтения. Hook PreToolUse запускает скрипт, указанный в command, перед каждым выполнением команды Bash:
shell: powershell к записи hook, как показано в запуске hooks в PowerShell.
Отключите конкретные subagents
Вы можете предотвратить использование Claude конкретных subagents, добавив их в массивdeny в ваших settings. Используйте формат Agent(subagent-name), где subagent-name соответствует полю name subagent.
--disallowedTools:
Определите hooks для subagents
Subagents могут определять hooks, которые запускаются во время жизненного цикла subagent. Есть два способа настройки hooks:- В frontmatter subagent: Определите hooks, которые запускаются только во время активности этого subagent
- В
settings.json: Определите hooks, которые запускаются в основной сессии при запуске или остановке subagents
Hooks в frontmatter subagent
Определите hooks непосредственно в файле markdown subagent. Эти hooks запускаются только во время активности этого конкретного subagent и очищаются при его завершении.Frontmatter hooks срабатывают, когда агент порождается как subagent через инструмент Agent или @-упоминание, и когда агент работает как основной агент сессии через
--agent или параметр agent. В случае основной сессии они запускаются вместе с любыми hooks, определёнными в settings.json.
Этот пример проверяет команды Bash с помощью hook
PreToolUse и запускает linter после редактирования файлов с помощью PostToolUse:
Stop в frontmatter автоматически преобразуются в события SubagentStop.
Hooks уровня проекта для событий subagent
Настройте hooks вsettings.json, которые реагируют на события жизненного цикла subagent в основной сессии.
Оба события поддерживают matchers для нацеливания на конкретные типы агентов по имени. Значение matcher — это поле frontmatter
name для project-level и user-level subagents, или scoped identifier, такой как my-plugin:db-agent для plugin subagents. Scoped name содержит двоеточие, поэтому он оценивается как unanchored regular expression; закрепите его с помощью ^ и $, как в ^my-plugin:db-agent$, чтобы соответствовать только этому агенту.
Этот пример запускает скрипт установки только при запуске subagent db-agent и скрипт очистки при остановке любого subagent:
db-agent, точно совпадает на Claude Code v2.1.195 или позже. На более ранних версиях он оценивается как unanchored regular expression и также срабатывает для любого типа агента, который его содержит, такого как prod-db-agent; закрепите его как ^db-agent$ на этих версиях.
См. Hooks для полного формата конфигурации hook.
Работа с subagents
Поймите автоматическое делегирование
Claude автоматически делегирует задачи на основе описания задачи в вашем запросе, поляdescription в конфигурациях subagent и текущего контекста. Чтобы поощрить активное делегирование, включите фразы вроде “use proactively” в поле description вашего subagent.
Явно вызывайте subagents
Когда автоматического делегирования недостаточно, вы можете запросить subagent самостоятельно. Три паттерна переходят от одноразового предложения к сессионному по умолчанию:- Естественный язык: назовите subagent в вашем приглашении; Claude решает, делегировать ли
- @-упоминание: гарантирует, что subagent запустится для одной задачи
- Сессионный уровень: вся сессия использует системное приглашение, ограничения инструментов и модель этого subagent через флаг
--agentили параметрagent
@ и выберите subagent из автодополнения, так же как вы упоминаете файлы. Это гарантирует, что запустится конкретный subagent, а не оставляет выбор Claude:
my-plugin:code-reviewer или my-plugin:review:security, когда plugin организует агентов в подпапки. Именованные фоновые subagents, в настоящее время работающие в сессии, также появляются в автодополнении, показывая их статус рядом с именем.
Вы также можете ввести упоминание вручную без использования средства выбора: @agent-<name> для локальных subagents или @agent- с последующим именем с областью видимости для plugin subagents, например @agent-my-plugin:code-reviewer.
Запустите всю сессию как subagent. Передайте --agent <name> для запуска сессии, где основной поток сам принимает системное приглашение, ограничения инструментов и модель этого subagent:
--system-prompt это делает. Файлы CLAUDE.md и память проекта по-прежнему загружаются через обычный поток сообщений. Имя агента появляется как @<name> в заголовке запуска, чтобы вы могли подтвердить, что он активен.
Это работает с встроенными и пользовательскими subagents, и выбор сохраняется при возобновлении сессии.
Для plugin-предоставленного subagent вы можете передать просто имя агента и Claude Code найдёт его:
agents/, включите подпапку в имя с областью видимости, например claude --agent my-plugin:review:security.
Чтобы сделать это по умолчанию для каждой сессии в проекте, установите agent в .claude/settings.json:
Запустите subagents в переднем плане или фоне
Subagents могут работать в переднем плане или фоне:- Foreground subagents блокируют основной разговор до завершения. Запросы разрешений передаются вам по мере их возникновения.
- Background subagents работают параллельно, пока вы продолжаете работать. Начиная с v2.1.186, когда фоновый subagent достигает вызова инструмента, требующего разрешения, приглашение появляется в вашей основной сессии и называет subagent, который спрашивает. Одобрите, чтобы позволить subagent продолжить, или нажмите Esc, чтобы отклонить этот вызов инструмента без остановки subagent. До v2.1.186 фоновые subagents автоматически отклоняли любой вызов инструмента, который иначе потребовал бы приглашения.
- Попросите Claude запустить задачу в фоне или в переднем плане
- Нажмите Ctrl+B для фонового выполнения работающей задачи
/tasks, отмечен как выполненный и отсортирован ниже работающих задач, пока сессия не очистит список задач. Его представление деталей остаётся открытым, когда subagent завершается. Subagents, которые не удаются или которые вы остановили, покидают список. До v2.1.208 завершённый subagent покидал список в момент завершения и его представление деталей закрывалось.
Чтобы отключить всю функциональность фоновых задач, установите переменную окружения CLAUDE_CODE_DISABLE_BACKGROUND_TASKS на 1. См. Environment variables.
Когда CLAUDE_CODE_FORK_SUBAGENT установлена на 1, каждый spawn subagent работает в фоне и поле frontmatter background не имеет эффекта, потому что режим fork удаляет параметр run_in_background из инструмента Agent. CLAUDE_CODE_DISABLE_BACKGROUND_TASKS имеет приоритет над режимом fork и сохраняет spawns subagent в переднем плане.
Ошибки API в subagents
Начиная с v2.1.199, subagent, чей запуск заканчивается ошибкой API, такой как лимит использования или повторяющаяся ошибка сервера, сообщает об этом отказе Claude вместо возврата текста ошибки, как если бы это были результаты subagent. То, что получает Claude, зависит от того, где работал subagent:- Foreground: если лимит скорости, перегрузка или ошибка сервера прерывает subagent, который уже произвёл выходные данные, инструмент Agent возвращает эти частичные выходные данные с примечанием, что subagent был прерван и не завершил свою задачу. Subagent, который не произвёл ничего, или чьим единственным выходом были вызовы инструментов, завершается с ошибкой
Agent terminated early due to an API error, за которой следует деталь ошибки. В v2.1.199 лимит скорости, перегрузка или ошибка сервера, которые прервали форму, содержащую только вызовы инструментов, возвращали пустой частичный результат, содержащий только примечание об отключении вместо этого. - Background: subagent помечается как неудачный, и сообщение, которое Claude получает при завершении, называет ошибку API и включает последний выход subagent, поэтому частичная работа не теряется.
Распространённые паттерны
Изолируйте высокообъёмные операции
Одно из наиболее эффективных применений subagents — изоляция операций, которые производят большой объём выходных данных. Запуск тестов, получение документации или обработка файлов журналов может потребить значительный контекст. Делегируя эти операции subagent, подробный выход остаётся в контексте subagent, пока только релевантное резюме возвращается в основной разговор.Запустите параллельное исследование
Для независимых исследований порождайте несколько subagents для одновременной работы:Цепочка subagents
Для многошаговых рабочих процессов попросите Claude использовать subagents последовательно. Каждый subagent завершает свою задачу и возвращает результаты Claude, который затем передаёт релевантный контекст следующему subagent.Выберите между subagents и основным разговором
Используйте основной разговор когда:- Задача требует частого взаимодействия или итеративного уточнения
- Несколько фаз имеют значительный общий контекст, такие как планирование, реализация и тестирование
- Вы вносите быстрое, целевое изменение
- Задержка имеет значение. Subagents начинают с нуля и могут потребовать время для сбора контекста
- Задача производит подробный выход, который вам не нужен в основном контексте
- Вы хотите применить конкретные ограничения инструментов или разрешений
- Работа самодостаточна и может вернуть резюме
/btw вместо subagent. Он видит ваш полный контекст, но не имеет доступа к инструментам, и ответ отбрасывается, а не добавляется в историю.
Порождайте вложенные subagents
Начиная с Claude Code v2.1.172, subagent может порождать собственные subagents. Используйте это, когда делегированная задача сама разбивается на параллельные подзадачи, например subagent-рецензент, который отправляет верификатор для каждого обнаружения, так что промежуточный выход никогда не достигает основного разговора. Только резюме subagent верхнего уровня возвращается вам. Вложенный subagent конфигурируется так же, как subagent верхнего уровня и разрешается из тех же областей видимости. Панель subagent ниже ввода приглашения показывает полное дерево: каждая строка отображает счётчик(+N) потомков, и начиная с v2.1.193, открытие строки показывает прямых потомков этого subagent с путём обратно к main.
Глубина считается количеством уровней subagent ниже основного разговора, независимо от того, работает ли каждый уровень в переднем плане или фоне. Subagent на глубине пять не получает инструмент Agent и не может порождать дальше. Лимит фиксирован и не конфигурируется.
Начиная с Claude Code v2.1.187, глубина фонового subagent фиксируется при его первом порождении, и возобновление его позже не изменяет эту глубину. Например, если ваш основной разговор порождает subagent A, и A порождает фоновый subagent B на глубине два, B по-прежнему находится на глубине два при возобновлении его непосредственно из основного разговора. Возобновление subagent из более поверхностного контекста не позволяет ему порождать дополнительные уровни, которые лимит глубины уже предотвратил.
Чтобы предотвратить порождение других subagents конкретным subagent, опустите Agent из его списка tools или добавьте его в disallowedTools.
Fork по-прежнему не может порождать другой fork. Он может порождать другие типы subagent, и они считаются в сторону лимита глубины.
Управляйте контекстом subagent
Что загружается при запуске
Каждый subagent начинает со свежего, изолированного контекстного окна. Он не видит историю вашего разговора, навыки, которые вы уже вызвали, или файлы, которые Claude уже прочитал. Claude составляет сообщение делегирования, которое резюмирует задачу, и subagent работает на основе этого. Исключением является fork, который наследует родительский разговор вместо начала с нуля. Начальный контекст non-fork subagent содержит:- System prompt: собственное приглашение агента плюс детали окружения, которые добавляет Claude Code, а не полное системное приглашение Claude Code. Пользовательские subagents определяют свои в markdown body или поле
prompt. Встроенные агенты имеют предопределённые приглашения. - Task message: приглашение делегирования, которое Claude пишет при передаче работы.
- CLAUDE.md and memory: каждый уровень иерархии памяти, который загружает основной разговор, включая
~/.claude/CLAUDE.md, правила проекта,CLAUDE.local.mdи управляемые файлы политики. Встроенные агенты Explore и Plan пропускают это. - Git status: снимок, сделанный в начале родительской сессии. Отсутствует, когда рабочая директория не является Git репозиторием или когда
includeGitInstructionsимеет значениеfalse. Explore и Plan пропускают это независимо. - Preloaded skills: полное содержание любого навыка, названного в поле
skillsагента. Встроенные агенты не предзагружают навыки. - Sibling roster: системное напоминание, в котором перечислены
mainи каждый другой именованный агент в сессии, каждый является допустимым значениемtoдляSendMessage. Требует Claude Code v2.1.206 или позже. Реестр появляется только когда инструменты subagent включаютSendMessageи по крайней мере один другой агент имеет имя, независимо от того, назвал ли его Claude при порождении или он работает как товарищ agent team. Это снимок, сделанный при запуске subagent, поэтому агенты, названные позже, не появляются.
vendor/ directory,” переформулируйте его в приглашении, которое вы даёте Claude при делегировании.
Возобновите subagents
Каждый вызов subagent создаёт новый экземпляр со свежим контекстом. Чтобы продолжить работу существующего subagent вместо начала с нуля, попросите Claude возобновить его. Возобновлённые subagents сохраняют полную историю разговора, включая все предыдущие вызовы инструментов, результаты и рассуждения. Subagent продолжает ровно там, где он остановился, а не начинает с нуля. Когда subagent завершается, Claude получает его ID агента. Встроенные агенты Explore и Plan — это одноразовые и не возвращают ID агента, поэтому они не могут быть возобновлены; используйтеgeneral-purpose или пользовательский subagent, когда вам нужно продолжить работу.
Claude использует инструмент SendMessage с ID агента или именем агента в качестве поля to для возобновления его. SendMessage не требует включения agent teams; только структурированные сообщения протокола команды, такие как shutdown_request и plan_approval_response, это требуют.
Чтобы возобновить subagent, попросите Claude продолжить предыдущую работу:
SendMessage, автоматически возобновляется в фоне без новой инвокации Agent. То же самое применяется к subagent, который Claude остановил с помощью инструмента TaskStop.
Начиная с v2.1.191, subagent, который вы остановили сами, с помощью x в /tasks или запроса SDK stop_task, не автоматически возобновляется. Вызов SendMessage возвращает отказ, сообщающий Claude, что агент был отменён. Введите в транскрипт этого subagent в панели subagent, чтобы возобновить его самостоятельно, что очищает остановку, чтобы более поздние вызовы SendMessage могли автоматически возобновить его снова.
Возобновление начинает новый запуск агента под тем же ID, поэтому subagent, который уже завершился или был неудачным, показывается как работающий снова в списке задач и в событиях задач Agent SDK. До v2.1.205 он продолжал показывать свой более ранний статус неудачи или завершения, пока возобновленный запуск работал.
Начиная с v2.1.199, SendMessage проверяет, что имя по-прежнему ссылается на того же агента, которого оно достигло ранее в разговоре. Если более новый агент взял имя, например повторно порождённый фоновый агент, который его переиспользовал, Claude Code отказывает в отправке, а не доставляет его неправильному агенту, и ошибка сообщает, какого агента имя теперь достигает, чтобы Claude мог перенаправить. Чтобы достичь более раннего агента, пока он всё ещё работает, Claude обращается к нему по ID агента из результата spawn. Проверка ограничена текущим разговором и сбрасывается на /clear.
Начиная с v2.1.198, subagent рассматривает сообщения от агента, который его запустил, как нормальное направление задачи, включая коррекции курса во время выполнения, и действует в соответствии с ними в рамках своих собственных параметров разрешения. Два лимита по-прежнему действуют независимо от того, кто отправил сообщение: ни одно сообщение от любого агента не считается вашим одобрением для ожидающего запроса разрешения, и ни один агент не может изменить параметры разрешения subagent, CLAUDE.md или конфигурацию. Только система разрешений или ваши собственные сообщения могут предоставить одобрение.
Вы также можете попросить Claude ID агента, если хотите ссылаться на него явно, или найти ID в файлах транскрипта в ~/.claude/projects/{project}/{sessionId}/subagents/. Каждый транскрипт сохраняется как agent-{agentId}.jsonl.
Транскрипты subagent сохраняются независимо от основного разговора:
- Компактирование основного разговора: Когда основной разговор компактируется, транскрипты subagent не затрагиваются. Они сохраняются в отдельных файлах.
- Сохранение сессии: Транскрипты subagent сохраняются в пределах их сессии. Вы можете возобновить subagent после перезагрузки Claude Code, возобновив ту же сессию.
- Автоматическая очистка: Транскрипты очищаются на основе параметра
cleanupPeriodDays, который по умолчанию составляет 30 дней.
Auto-compaction
Subagents поддерживают автоматическое компактирование, используя ту же логику, что и основной разговор. Компактирование срабатывает при тех же условиях, иCLAUDE_AUTOCOMPACT_PCT_OVERRIDE применяется к subagents также. См. environment variables для того, когда переопределение вступает в силу.
События компактирования регистрируются в файлах транскрипта subagent:
preTokens показывает, сколько токенов было использовано перед компактированием.
Разветвление текущего разговора
Разветвленные subagents требуют Claude Code v2.1.117 или позже. Начиная с v2.1.161 команда
/fork включена по умолчанию; в более ранних версиях требуется установка переменной окружения CLAUDE_CODE_FORK_SUBAGENT на 1. Позволение Claude самому порождать разветвления является экспериментальным и может измениться в будущих выпусках. Эта возможность также может быть включена в интерактивных сессиях как часть поэтапного развертывания.CLAUDE_CODE_FORK_SUBAGENT на 1, чтобы явно включить его, или на 0, чтобы отключить его. Переменная учитывается в интерактивном режиме и через SDK или claude -p.
Включение режима fork изменяет Claude Code двумя способами:
- Claude может порождать fork, явно запрашивая тип subagent
fork. Порождения без типа subagent по-прежнему используют general-purpose subagent, и именованные subagents, такие как Explore, по-прежнему порождаются как раньше. - Каждый spawn subagent работает в фоне, будь то fork или именованный subagent. Установите
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSна1, чтобы сохранить spawns синхронными.
/fork за которым следует директива, с переменной или без неё. Claude Code называет fork из первых слов директивы. Следующий пример разветвляет разговор для черновика тестовых случаев, пока вы продолжаете с реализацией в основной сессии:
Наблюдение и управление работающими forks
Работающие forks появляются в панели ниже входа приглашения, с одной строкой для основной сессии и одной для каждого fork. Используйте эти клавиши для взаимодействия с панелью:
С открытым транскриптом fork или subagent, последующие сообщения и skills идут к этому агенту, но встроенные команды по-прежнему работают в вашем основном разговоре. Начиная с v2.1.199, ввод
/model или /fast в этом представлении показывает уведомление о том, что это изменяет модель основного разговора или режим быстрого выполнения, а не просмотренного агента, вместо того чтобы запускать его молча.
Как forks отличаются от именованных subagents
Fork наследует всё, что основная сессия имеет в момент его порождения. Именованный subagent начинает с собственного определения.
Поскольку системное приглашение fork и определения инструментов идентичны родителю, его первый запрос повторно использует кэш приглашений родителя prompt cache. Это делает forking дешевле, чем порождение свежего subagent для задач, которые нуждаются в том же контексте.
Когда Claude порождает fork через инструмент Agent, он может передать
isolation: "worktree", чтобы редактирования файлов fork были написаны в отдельный git worktree вместо вашего checkout.
Ограничения
УстановкаCLAUDE_CODE_FORK_SUBAGENT=1 включает режим fork в интерактивных сессиях, non-interactive mode и Agent SDK; установка на 0 отключает режим fork везде, включая любое развертывание на стороне сервера. Fork не может порождать дальнейшие forks.
Примеры subagents
Эти примеры демонстрируют эффективные паттерны для создания subagents. Используйте их как отправные точки или генерируйте настроенную версию с Claude.Проверяющий кода
Subagent только для чтения, который проверяет код без его модификации. Этот пример показывает, как спроектировать сфокусированный subagent с ограниченным доступом к инструментам, который исключает Edit и Write, и подробным приглашением, которое точно указывает, что искать и как форматировать выход.Отладчик
Subagent, который может как анализировать, так и исправлять проблемы. В отличие от проверяющего кода, этот включает Edit, потому что исправление ошибок требует модификации кода. Приглашение предоставляет чёткий рабочий процесс от диагностики к проверке.Специалист по данным
Специализированный subagent для работы анализа данных. Этот пример показывает, как создавать subagents для специализированных рабочих процессов вне типичных задач кодирования. Он явно устанавливаетmodel: sonnet для более способного анализа.
Валидатор запросов к базе данных
Subagent, который разрешает доступ Bash, но проверяет команды для разрешения только запросов SQL только для чтения. Этот пример показывает, как использоватьPreToolUse hooks для условной валидации, когда вам нужен более тонкий контроль, чем предоставляет поле tools.
command в конфигурации hook:
shell: powershell к записи hook. См. запуск hooks в PowerShell.
Hook получает JSON через stdin с командой Bash в tool_input.command. Код выхода 2 блокирует операцию и передаёт сообщение об ошибке обратно Claude. См. Hooks для деталей кодов выхода и Hook input для полной схемы входных данных.
Следующие шаги
Теперь, когда вы понимаете subagents, изучите эти связанные функции:- Распространяйте subagents с помощью plugins для совместного использования subagents в командах или проектах
- Запустите Claude Code программно с помощью Agent SDK для CI/CD и автоматизации
- Используйте MCP servers для предоставления subagents доступа к внешним инструментам и данным