Subagents работают в рамках одной сессии. Чтобы запустить множество независимых сессий параллельно и отслеживать их из одного места, см. background agents. Для отдельных сессий, которые передают сообщения друг другу, см. cross-session messaging. Для скоординированной команды сессий, которые Claude порождает и контролирует, см. agent teams.
- Сохранять контекст, отделяя исследование и реализацию от основного разговора
- Применять ограничения, ограничивая доступ subagent к определённым инструментам
- Переиспользовать конфигурации в проектах с помощью subagents уровня пользователя
- Специализировать поведение с помощью сфокусированных системных приглашений для конкретных областей
- Контролировать затраты, маршрутизируя задачи на более быстрые и дешёвые модели, такие как Haiku
description ваших subagents и переместите детали в системное приглашение каждого subagent, которое загружается только при запуске этого subagent.
Встроенные subagents
Claude Code включает встроенные subagents, которые Claude автоматически использует при необходимости. Каждый наследует разрешения родительского разговора; большинство работают с ограниченным набором инструментов. Explore и Plan запускаются без ваших файлов CLAUDE.md и снимка статуса git, чтобы исследование было быстрым и экономичным. Другие встроенные и пользовательские субагенты загружают и то и другое, если только вы не установитеomitClaudeMd в определении пользовательского субагента, чтобы запускать его без файлов CLAUDE.md пользователя, проекта и локального. Полный разбор того, что попадает в субагент, см. в разделе что загружается при запуске.
- Explore
- Plan
- General-purpose
- Other
Быстрый агент, доступный только для чтения, оптимизированный для поиска и анализа кодовых баз.
- Model: модель основного диалога. Когда основной диалог работает на Fable, модель Explore зависит от способа подключения:
- С подпиской Claude, учётной записью Anthropic Console или LLM-шлюзом, доступным через
ANTHROPIC_BASE_URL, Explore работает на модели Opus, в которую разрешается псевдонимopus. - На Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry, Claude Platform on AWS или шлюзе Claude apps Explore остаётся на модели основного диалога.
- С подпиской Claude, учётной записью Anthropic Console или LLM-шлюзом, доступным через
- Tools: инструменты только для чтения; Write и Edit запрещены
- Purpose: обнаружение файлов, поиск кода, исследование кодовой базы
Explore переопределяет встроенный и сохраняет собственное поле model, поэтому определите его с model: haiku, чтобы запускать исследование на модели с более низкой стоимостью. Чтобы принудительно назначить одну модель каждому субагенту, включая Explore, см. Запуск каждого субагента на одной модели.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для удаления всех встроенных типов и предоставления только ваших собственных.
subagent_type, завершается ошибкой subagent_type is required, когда сессия не имеет general-purpose subagent для отката.
Помимо этих встроенных subagents, вы можете создавать свои собственные с пользовательскими приглашениями, ограничениями инструментов, режимами разрешений, hooks и skills. В следующих разделах показано, как начать работу и настроить subagents.
Быстрый старт: создание вашего первого субагента
Субагенты — это файлы Markdown с YAML frontmatter. Чтобы создать субагента, попросите Claude написать его для вас или напишите файл самостоятельно. Это пошаговое руководство создаёт субагента уровня пользователя, который проверяет код и предлагает улучшения.1
Попросите Claude создать субагента
В Claude Code опишите субагента, которого вы хотите создать, и где его сохранить:Claude создаёт файл с
name, description, списком tools, model и системным промптом.2
Проверьте файл
Откройте Поскольку файл находится в
~/.claude/agents/code-improver.md и убедитесь, что frontmatter соответствует тому, что вы запросили. Результат выглядит так:~/.claude/agents/, субагент доступен в каждом проекте на вашей машине. Чтобы ограничить его одним проектом, переместите его в каталог .claude/agents/ этого проекта. Выберите область действия субагента сравнивает эти два варианта.3
Попробуйте
Попросите Claude делегировать задачу новому субагенту:Claude делегирует задачу вашему новому субагенту, который сканирует кодовую базу и возвращает предложения по улучшению. В транскрипте делегирование отображается как строка вызова инструмента, показывающая имя субагента, за которым следует краткое описание задачи, например
code-improver(Suggest code improvements).Если Claude не может найти нового субагента, перезапустите Claude Code и попробуйте снова. Это происходит только когда ~/.claude/agents/ не существовал до начала сессии, потому что работающая сессия не обнаруживает вновь созданный каталог agents.Запуск
/agents выводит напоминание попросить Claude или отредактировать .claude/agents/ и ~/.claude/agents/ напрямую.
На Claude Code v2.1.197 и более ранних версиях /agents открывает интерактивный мастер с вкладкой Running, которая отображает активных субагентов, и вкладкой Library для их создания, редактирования и удаления. Настройка subagents
Местоположение файла subagent определяет, кому он доступен, а его frontmatter определяет, что он может делать. В этом разделе рассматривается, где находятся файлы subagent и каждое поле, которое они поддерживают.Выберите область subagent
Сохраняйте файлы subagent в разных местах в зависимости от области. Когда несколько subagents имеют одно и то же имя, Claude Code использует тот, который находится в местоположении с более высоким приоритетом.
Project subagents (
.claude/agents/) идеальны для subagents, специфичных для кодовой базы. Проверьте их в систему контроля версий, чтобы ваша команда могла использовать и улучшать их совместно.
Project subagents обнаруживаются путём прохода вверх от текущей рабочей директории, поэтому каждый .claude/agents/ между ней и корнем репозитория сканируется. Когда более одной из этих вложенных директорий определяет одно и то же name, Claude Code использует определение, ближайшее к рабочей директории.
Когда вы добавляете директорию с помощью --add-dir или /add-dir, Claude Code также загружает её папку .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 сообщает о файлах в одном каталоге с одинаковыми именами и предлагает переименовать или удалить все, кроме одного.
Директории 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, содержащему тот же объект, для определений, слишком больших для передачи в командной строке. Например, claude -p --agents ./agents.json "Review my changes" читает определения из этого файла. В интерактивной сессии Claude Code отказывает в пути к файлу. Форма файла требует Claude Code v2.1.281 или позже.
Каждый ключ верхнего уровня в JSON — это имя агента, и его значение — это определение этого агента. Не начинайте имя с -. Определение принимает эти поля:
prompt: системное приглашение агента, эквивалентное телу markdown в файловых subagents.promptможет быть пустым. Если вы выбираете агента с пустымpromptи без поляmemoryв качестве агента сессии с помощью--agent, системное приглашение сессии остаётся неизменным. Пустойpromptтребует Claude Code v2.1.281 или позже.- Поля Frontmatter:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,autoCompactWindow,skills,initialPrompt,memory,effort,background,omitClaudeMdиisolation. - Игнорируемые поля:
colorиexperimentalне принимаются здесь и игнорируются, а не отклоняются.
Invalid --agents configuration.
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.
По соображениям безопасности субагенты плагинов не поддерживают поля frontmatter
hooks, mcpServers и permissionMode. Эти поля игнорируются при загрузке агентов из плагина. Если они вам нужны, скопируйте файл агента в .claude/agents/ или ~/.claude/agents/. Вы также можете добавить правила в permissions.allow в settings.json или settings.local.json, но эти правила применяются ко всей сессии, а не только к субагенту плагина.Если вы автор плагина, вместо этого поставляйте хуки в файле hooks/hooks.json плагина, а MCP-серверы — в его .mcp.json. Они применяются всякий раз, когда плагин включён, а не только внутри субагента.Напишите файлы subagent
Файлы subagent используют YAML frontmatter для конфигурации, за которым следует системное приглашение в Markdown:Claude Code наблюдает за
~/.claude/agents/ и .claude/agents/. Когда вы добавляете или редактируете файл subagent на диск, или просите Claude написать его для вас, Claude Code обнаруживает изменение в течение нескольких секунд и следующее делегирование использует обновленное определение без необходимости перезагрузки.Три случая по-прежнему требуют перезагрузки:- Наблюдатель охватывает только директории, которые существовали при запуске сессии, поэтому после создания первого файла агента области в новой директории
agents, перезагрузитесь для его загрузки. - Claude Code не наблюдает
.claude/agents/внутри директорий, добавленных с помощью--add-dirили/add-dir, поэтому после добавления или редактирования subagent там, перезагрузитесь для загрузки изменения. - Сессии, запущенные с
--disable-slash-commands, вообще не наблюдают эти директории.
.claude/agents/code-reviewer.md
--append-subagent-system-prompt для добавления вашего текста в конец системного приглашения каждого subagent, включая вложенные subagents, кроме forked subagent, который переиспользует приглашение разговора. Требует Claude Code v2.1.205 или позже. Если ваш текст слишком длинный для передачи в командной строке, сохраните его в файл и передайте путь с помощью --append-subagent-system-prompt-file вместо этого. Флаг файла требует Claude Code v2.1.261 или позже.
Subagent начинает работу в текущей рабочей директории основного разговора. В пределах subagent команды cd не сохраняются между вызовами инструментов Bash или PowerShell и не влияют на рабочую директорию основного разговора. Чтобы дать subagent изолированную копию репозитория вместо этого, установите isolation: worktree.
Субагент с isolation: worktree выполняет свои команды Bash и PowerShell внутри своего worktree. Команда, рабочий каталог которой вместо этого указывает на вашу основную рабочую копию, например потому что каталог worktree был удалён во время работы субагента, завершается с ошибкой.
Эта проверка рабочего каталога охватывает весь репозиторий, содержащий каталог, из которого вы запустили Claude Code. Если ваша сессия сама работает в связанном worktree, проверка также охватывает основную рабочую копию, с которой связан этот worktree.
Для команд Bash Claude Code также проверяет саму команду двумя способами:
- Он блокирует команду, которая перенаправляет git в основную копию.
- Он отказывает в команде, когда он не может проверить из текста команды, что любой git, который команда запускает, остаётся внутри worktree, например когда имя команды вычисляется во время выполнения.
isolation: worktree; см. How Claude Code enforces isolation.
Справочник Frontmatter
Настройте subagent с помощью YAML frontmatter между маркерами--- в верхней части его файла, и напишите его системное приглашение как Markdown после закрывающего ---. Требуются только name и description.
Многословные имена полей используют camelCase, такие как maxTurns и disallowedTools, и должны точно совпадать с таблицей: Claude Code игнорирует поле, которое он не распознаёт, без сообщения об ошибке.
- Чтобы найти поле с опечаткой в subagent, который загрузился, выполните
claude --debugв оболочке и найдите в логе отладки~/.claude/debug/<session-id>.txtстрокуdoes not recognize or apply. Лог отладки называет до пяти полей верхнего уровня в файле subagent, которые Claude Code не распознаёт, с вероятным задуманным именем, когда есть похожее поддерживаемое поле. Требует Claude Code v2.1.296 или позже. - Чтобы узнать, почему файл subagent не загрузился, см. Subagent files Claude Code skips.
Напишите
cacheTtl внутри карты experimental, а не на верхнем уровне frontmatter.
Файлы subagent, которые Claude Code пропускает
Claude Code пропускает файл в директории project, user или managedagents, или в одной под директорией, которую вы добавляете с помощью --add-dir, без сообщения об этом в сессии, когда frontmatter имеет любую из этих проблем:
- Нет
name: Claude Code рассматривает файл как документацию, хранящуюся рядом с вашими агентами. - Открывающий
---, который не является первой строкой файла: Claude Code читает файл как не имеющий frontmatter и рассматривает его как документацию. nameначинается с-, содержит:или длиннее 256 символов: Claude Code пропускает файл и записывает ошибку в лог отладки.name, но нетdescription: Claude Code пропускает файл и записывает причину в журнал отладки.- YAML, который не парсится: Claude Code не читает никакие поля из файла, пропускает его и записывает ошибку парсинга в журнал отладки.
--debug.
Plugin subagent, чей frontmatter не имеет name или не парсится, по-прежнему загружается под его именем файла.
Проверьте директорию agents перед сессией
Чтобы найти файлы в директории agents, чей frontmatter не парсится, запустите claude plugin validate против директории, например .claude/agents или ~/.claude/agents. Claude Code проверяет только директорию, которую вы называете, и не помечает файл, чей frontmatter парсится, но не имеет name. Требует Claude Code v2.1.233 или позже.
Выберите модель
Полеmodel контролирует, какую модель использует subagent:
- Model alias: используйте один из доступных псевдонимов:
sonnet,opus,haikuилиfable - Full model ID: используйте полный ID модели, такой как
claude-opus-5-5илиclaude-sonnet-5. Принимает те же значения, что и флаг--model - inherit: используйте ту же модель, что и основной разговор
model для этого конкретного вызова. В вызове инструмента Agent этот параметр принимает псевдоним модели: sonnet, opus, haiku или fable. Claude не может передать в этом вызове полный ID модели или inherit. Claude Code определяет модель субагента в следующем порядке:
- Параметр
modelдля конкретного вызова - Frontmatter
modelопределения subagent, гдеinheritвыбирает модель основного разговора - Переменная окружения
CLAUDE_CODE_SUBAGENT_MODEL, когда вы устанавливаете её на псевдоним модели или ID модели - Модель основного разговора
agent.spawn, Claude Code использует эту модель вместо параметра конкретного вызова.
В двух случаях семейный псевдоним, такой как opus, в параметре для конкретного вызова или frontmatter разрешается в модель основного разговора вместо версии, на которую указывает псевдоним:
- Модель основного разговора принадлежит этому семейству: subagent работает на точной модели основного разговора, включая любой суффикс
[1m], поэтому он получает то же extended context окно, что и основной разговор. - Claude Code не может определить семейство модели основного разговора, на поставщике, отличном от Anthropic API: это может произойти с application inference profile ARN на Amazon Bedrock, который Claude Code не разрешил в резервную модель. Этот случай охватывает только псевдоним
opusи не применяется, когда вы устанавливаетеANTHROPIC_DEFAULT_OPUS_MODEL, посколькуopusзатем разрешается в модель, которую вы установили.
CLAUDE_CODE_SUBAGENT_MODEL всегда разрешается в версию, на которую указывает псевдоним, даже когда он называет семейство основного разговора. Установка переменной на inherit — это то же самое, что оставить её неустановленной.
Установка CLAUDE_CODE_SUBAGENT_MODEL сама по себе не изменяет модель, на которой работают встроенные subagents Explore и Plan. Чтобы изменить её, см. Run every subagent on one model.
До версии 2.1.251 CLAUDE_CODE_SUBAGENT_MODEL был первым в этом порядке и переопределял как параметр для конкретного вызова, так и frontmatter, включая model: inherit.
Claude Code проверяет параметр для конкретного вызова, frontmatter и значения переменной окружения на соответствие списку разрешений availableModels вашей организации. Для заблокированного значения он подставляет другую модель:
- Когда заблокированное значение — это семейный псевдоним, такой как
opus, Claude Code запускает subagent на самой новой версии этого семейства, которое разрешает список разрешений, следуя тем же правилам подстановки и области поставщика, что и/model. До версии 2.1.222 Claude Code запускал subagent на унаследованной модели для заблокированного семейного псевдонима также. - Для любого другого заблокированного значения, на поставщиках, где эта подстановка не работает, или когда список разрешений не разрешает никакую версию семейства, Claude Code запускает subagent на унаследованной модели вместо этого. Если вы установили
CLAUDE_CODE_SUBAGENT_MODEL, Claude Code сначала пробует эту модель, под этими же правилами.
/tasks. Claude Code указывает модель в строке субагента и добавляет уровень effort, заданный для этого субагента, если он есть. Требуется Claude Code v2.1.242 или новее.
Параметр model конкретного вызова также применяется, когда субагент возобновляется или получает последующее сообщение, поэтому субагент остаётся на этой модели.
Начиная с версии 2.1.198, subagents также наследуют конфигурацию extended thinking основного разговора: если thinking включен в вашей сессии, он включен для subagent, и если он выключен, он остаётся выключенным. Нет параметра thinking для каждого subagent. До версии 2.1.198 subagents запускались с отключённым extended thinking независимо от параметра основного разговора.
Запустите каждый subagent на одной модели
CLAUDE_CODE_SUBAGENT_MODEL — это значение по умолчанию, поэтому определение subagent или модель, которую передаёт Claude, по-прежнему имеют приоритет над ним. Чтобы применить одну модель к каждому subagent, teammate и workflow agent, также установите CLAUDE_CODE_SUBAGENT_MODEL_FORCE на 1. Требует Claude Code v2.1.257 или позже.
- Если вы установили обе переменные, subagents работают на модели в
CLAUDE_CODE_SUBAGENT_MODEL. - Если вы задали только
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, субагенты работают на модели основного диалога, за исключением встроенного субагента Explore, который работает на модели, указанной для него в разделе «Встроенные субагенты».
env файла настроек:
/tasks пока работает subagent. Строка subagent показывает модель, на которой он работает.
Пока CLAUDE_CODE_SUBAGENT_MODEL_FORCE включена, Claude Code игнорирует поле model в определениях субагентов, а Claude не может передать модель при запуске субагента. Следующие субагенты по-прежнему работают на модели основного диалога:
- Fork
- Skill, который работает в subagent с
model: inherit
Выбор уровня effort
Чтобы запускать субагента с собственным уровнем effort, задайте полеeffort в его определении.
Когда вы просите Claude запустить субагента, не являющегося ответвлением, с определённым уровнем effort, Claude также может передать параметр effort для этого вызова. Параметр переопределяет поле effort и продолжает действовать, когда субагент возобновляется. Переменная окружения CLAUDE_CODE_EFFORT_LEVEL имеет приоритет над обоими. Параметр конкретного вызова требует Claude Code v2.1.292 или новее.
Если у субагента нет поля или параметра effort
На модели основного диалога субагент работает с уровнем, который вы выбрали в сессии, например с помощью /effort, или задали через --effort. На другой модели этот уровень не применяется. Чтобы выбрать уровень для субагента, задайте поле effort.
Контролируйте возможности subagent
Вы можете контролировать, что могут делать subagents, через доступ к инструментам, режимы разрешений и условные правила.Доступные инструменты
Subagents наследуют встроенные инструменты и MCP инструменты, доступные в основном разговоре, сужены двумя фильтрами: первый удаляет короткий список инструментов из каждого subagent, и второй уменьшает набор встроенных инструментов для subagents, которые работают в фоне, что является значением по умолчанию. На macOS, Linux и WSL subagent также может получить инструменты Glob и Grep, когда основной разговор их не имеет, как описано в разделе Glob tool behavior. Forks пропускают оба фильтра и получают точный пул инструментов основного разговора. Первый фильтр удаляет эти инструменты, даже когда они указаны в полеtools:
Agent, когда subagent находится на depth limit; в fork инструмент остаётся в списке, но возвращает ошибку вместо порожденияAskUserQuestionEndConversation, который может завершить только основной разговор; см. EndConversation tool behaviorEnterPlanModeExitPlanMode, если толькоpermissionModesubagent не являетсяplanScheduleWakeupWaitForMcpServersWorkflow
Agent и ExitPlanMode, которые следуют условиям первого фильтра везде, где работает subagent, фоновый subagent сохраняет каждый MCP инструмент, но только эти встроенные инструменты: Read, Grep, Glob, LSP, Bash, PowerShell, Edit, Write, NotebookEdit, WebFetch, WebSearch, TodoWrite, Skill, ToolSearch, EnterWorktree, ExitWorktree, Monitor, TaskStop, SendMessage и Artifact, плюс SubagentHandback для subagent, который сообщает через него. Claude Code удаляет каждый другой встроенный инструмент из фонового subagent, унаследованный или указанный в поле tools, поэтому одно и то же определение может разрешаться в разные инструменты на переднем плане и в фоне. Удаление сообщает об ошибке только в том случае, если после него список tools оказывается пустым.
До версии 2.1.280 фоновые subagents не могли использовать LSP.
ListAgents следует этим фильтрам как любой встроенный инструмент: передний subagent наследует его в сессиях, где включен кросс-сессионный обмен сообщениями, и фоновый subagent его не сохраняет.
Участники команд агентов дополнительно сохраняют инструменты задач и инструменты cron: TaskCreate, TaskGet, TaskList, TaskUpdate, CronCreate, CronDelete и CronList. В сессии без инструментов Task Claude Code не предоставляет инструменты задач и субагентам, даже если субагент работает на другой модели. Участник команды, работающий внутри процесса, так же следует вашей сессии. Чтобы узнать, есть ли инструменты задач у участника команды в отдельной панели, см. Доступность инструментов Task.
Ограничение инструментов, доступных субагенту
Чтобы ограничить инструменты, используйте полеtools как список разрешённых инструментов или поле disallowedTools как список запрещённых. Если заданы оба, сначала применяется disallowedTools, затем tools разрешается относительно оставшегося набора. Инструмент, указанный в обоих, удаляется.
В этом примере tools разрешает только Read, Grep, Glob и Bash. Субагент не может редактировать или записывать файлы и использовать инструменты MCP:
disallowedTools для наследования доступных инструментов, кроме Write и Edit. Subagent сохраняет Bash, MCP инструменты и остальное из своего пула:
tools не соответствует инструменту, например потому что каждая запись написана с ошибкой или называет инструмент, недоступный субагентам, Claude Code обычно отказывается запускать субагента, а инструмент Agent возвращает ошибку с перечнем нераспознанных записей; текст сообщения и способы исправить каждую запись см. в разделе Agent would be spawned with zero tools.
Поля tools и disallowedTools также принимают записи для целого MCP-сервера:
В этом примере удаляются все инструменты MCP-сервера
github, а инструменты других серверов и встроенные инструменты в наборе субагента сохраняются:
disallowedTools со спецификатором, такая как Bash(git push *), по-прежнему удаляет весь инструмент из subagent, а не только соответствующие команды. Чтобы сохранить Bash и заблокировать конкретные команды, добавьте Bash deny rule, такую как Bash(git push *), в permissions.deny в ваших настройках. Правило применяется к основному разговору и к subagents.
Имена MCP-серверов с двойным подчёркиванием
Если субагент не получает ни одного инструмента MCP-сервера, имя которого содержит__, например reports__v2, проверьте записи mcp__ субагента:
- В
tools: запишитеmcp__, затем полное имя сервера и__*, как вmcp__reports__v2__*. Без завершающего__*записьmcp__reports__v2не соответствует ни одному инструменту этого сервера. - В
disallowedTools: ищитеmcp__reportsилиmcp__reports__*— записи, которые исключают сервер с именемreports. С любой из этих записей субагент теряет и все инструментыreports__v2, потому что имена этих инструментов тоже начинаются сmcp__reports__. Чтобы исключить только инструменты сервераreports, перечислите их по одному, напримерmcp__reports__run_query.
Ограничьте, какие 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(agent_type) применяется только к агенту, работающему как основной поток с claude --agent. В определении subagent перечисление Agent в tools позволяет этому subagent порождать subagents своего собственного, пока depth limit позволяет это, но любой список типов внутри скобок игнорируется.
Область MCP servers для subagent
Используйте полеmcpServers для предоставления subagent доступа к MCP серверам, которые недоступны в основном разговоре. Встроенные серверы, определённые здесь, подключаются при запуске subagent, в соответствии с правилом доверия для папки файла агента, и отключаются при его завершении. Строковые ссылки используют соединение родительской сессии.
Поле
mcpServers применяется в обоих контекстах, где может работать файл агента:- Как subagent, порождённый через инструмент Agent или @-упоминание
- Как основная сессия, запущенная с
--agentили параметромagent
.mcp.json и файлов настроек, под тем же правилом доверия для папки файла агента. В /mcp удалённый (HTTP или SSE) сервер, который вы использовали раньше, может показать cached статус вместо этого; Claude Code подключает его, когда Claude впервые вызывает один из его инструментов..mcp.json, ключевые по имени сервера, и поддерживают типы stdio, http, sse и ws.
Чтобы исключить MCP сервер из основного разговора полностью и избежать того, чтобы описания его инструментов потребляли контекст там, определите его встроенным здесь, а не в .mcp.json. Subagent получает инструменты; родительский разговор — нет.
Ограничения MCP, действующие для основной сессии, распространяются и на серверы, объявленные во frontmatter субагента:
--strict-mcp-configи--bare- Корпоративная управляемая конфигурация MCP
- Политики
allowedMcpServersиdeniedMcpServers
--strict-mcp-config не фильтрует серверы, которые вы передаёте встроенно через --agents или параметр SDK agents, поскольку это явные входные данные вызывающей стороны.
Доверие, необходимое для встроенных MCP-серверов
Claude Code загружает встроенный MCP-сервер из файла агента в каталоге.claude/agents/ вашего проекта или в каталоге .claude/agents/ каталога, добавленного через --add-dir, только после того, как вы доверитесь папке, из которой получен файл агента. До версии 2.1.238 Claude Code загружал такие серверы без проверки доверия.
- Доверие, которое не считается: доверие родительской папки и автоматическое доверие, которое сессия
-pили SDK получает для hooks в файлах настроек - До тех пор: Claude Code пропускает каждый встроенный сервер в этом файле агента и записывает точный ключ
projects["<path>"].hasTrustDialogAcceptedдля~/.claude.jsonв журнал отладки - Директории
--add-dir: директория вне репозитория вашего доверенного рабочего пространства нуждается в собственной записи доверия, поскольку её файлы.claude/agents/не наследуют доверие вашего рабочего пространства
- Имя, которое ссылается на сервер, который вы уже настроили
- Встроенный сервер в файле агента из
~/.claude/agents/, в одном, который вы передаёте с помощью--agentsили опции SDKagents, или в одном, который управляемые настройки предоставляют
Режимы разрешений
УстановитеpermissionMode для выбора режима разрешений, в котором работает subagent. Используйте значения конфигурации режимов, поэтому режим Manual — это default. Если вы оставите его неустановленным, subagent наследует режим основного разговора permission mode.
Режим разрешений основного разговора решает, использует ли Claude Code значение, которое вы установили:
- Когда основной разговор находится в
bypassPermissions,acceptEditsили auto mode, subagent работает в этом же режиме и Claude Code игнорируетpermissionMode, который вы установили. Под auto mode классификатор оценивает вызовы инструментов subagent с правилами блокировки и разрешения основного разговора. Когда subagent завершается, классификатор также проверяет его работу и его финальный отчёт перед доставкой отчёта, как How auto mode handles subagents описывает. - Когда основной диалог находится в режиме
plan, субагент остаётся в режиме планирования независимо от заданногоpermissionMode, если только он не работает как участник команды агентов по правилам команд агентов. Если вы задалиdontAsk, субагент также не запрашивает у вас подтверждения: действие, для которого режим планирования запросил бы ваше одобрение, вместо этого отклоняется. - Когда основной диалог находится в режиме
defaultилиdontAsk, субагент работает в заданном вами режиме разрешений. В следующих случаях он вместо этого сохраняет режим разрешений основного диалога:- Вы задали
bypassPermissions. Исключение дляbypassPermissionsтребует Claude Code v2.1.267 или новее. - Вы задали
auto, а авторежим недоступен субагенту, например когда файл настроек задаётdisableAutoModeили модель субагента не поддерживает авторежим.
- Вы задали
permissionMode принимает эти значения и manual как псевдоним для default:
Предварительная загрузка skills в subagents
Используйте полеskills для инжекции содержимого skill в контекст subagent при запуске. Это даёт subagent знания в области без необходимости открывать и загружать skills во время выполнения.
Skill из списка tools или добавьте его в disallowedTools.
Нельзя предварительно загрузить скиллы, в которых задано disable-model-invocation: true, поскольку предварительная загрузка берёт скиллы из того же набора, который может вызывать Claude. Это относится и к встроенному скиллу /verify, который Claude не может запустить самостоятельно.
Если указанный skill отсутствует или отключен, например политикой вашей организации, Claude Code пропускает его и регистрирует предупреждение в журнал отладки.
Это противоположность запуску skill в subagent. С
skills в subagent, subagent контролирует системное приглашение и загружает содержимое skill. С context: fork в skill, содержимое skill инжектируется в агента, который вы указываете. В обоих случаях subagent начинает работу без истории вашего разговора.Включите постоянную память
Полеmemory даёт subagent постоянный каталог, который сохраняется между разговорами. Subagent использует этот каталог для накопления знаний со временем, таких как паттерны кодовой базы, идеи отладки и архитектурные решения.
Память subagent является частью auto memory: если вы отключите auto memory с помощью параметра
autoMemoryEnabled или CLAUDE_CODE_DISABLE_AUTO_MEMORY, поле memory не имеет эффекта и 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:
UPDATE: скрипт выходит с кодом 2, Claude Code блокирует команду, и subagent видит сообщение Blocked: Only SELECT queries are allowed.
См. Hook input для полной схемы входных данных и exit codes для того, как коды выхода влияют на поведение. На Windows напишите скрипты hook в PowerShell и добавьте 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. События инструментов, такие какPreToolUseиPostToolUse, срабатывают для вызовов инструментов subagent так же, как они срабатывают в основном разговоре, иSubagentStartиSubagentStopсрабатывают, когда subagent начинает или завершает работу
PreToolUse в settings.json также запускается перед каждым инструментом, который использует subagent.
Hooks в frontmatter subagent
Определите hooks непосредственно в файле markdown subagent. Эти hooks запускаются только во время активности этого конкретного subagent и очищаются при его завершении.Frontmatter hooks срабатывают, когда агент порождается как subagent через инструмент Agent или @-упоминание, и когда агент работает как основной агент сессии через
--agent или параметр agent. В случае основной сессии они запускаются вместе с любыми hooks, определёнными в settings.json.~/.claude/agents/ и определений, переданных через --agents, запускаются без этого шага. Если вы добавили с помощью --add-dir папку вне репозитория вашего доверенного рабочего пространства, доверьтесь этой папке отдельно: хуки из её .claude/agents/ не наследуют доверие рабочего пространства.
Пока вы не доверитесь папке, субагент всё равно работает, но Claude Code пропускает его хуки во frontmatter и записывает в лог отладки ошибку с объяснением, как довериться папке. Это правило строже, чем для хуков в файлах настроек: доверия родительской папке недостаточно, а сессия -p не считается доверенной. Сравнение двух правил см. в разделе What runs before you trust a folder.
Поддерживаются все hook events. Наиболее распространённые события для subagents:
Этот пример проверяет команды 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:
Работа с субагентами
Понимание автоматического делегирования
Claude автоматически делегирует задачи на основе описания задачи в вашем запросе, поляdescription в конфигурациях субагентов и текущего контекста. Чтобы поощрить проактивное делегирование, включите фразы вроде “use proactively” в поле описания вашего субагента.
Делайте описания краткими: Claude Code показывает предупреждение при запуске, когда суммарный объём описаний ваших субагентов превышает лимит в 15 000 токенов, и всё равно загружает каждого субагента.
Если субагент поставляется в плагине, вы можете измерить, насколько надёжно Claude делегирует ему работу на реалистичных промптах, вместо того чтобы проверять их по одному: claude plugin eval запускает каждый промпт с плагином и без него и оценивает результаты.
Явный вызов субагентов
Когда автоматического делегирования недостаточно, вы можете запросить субагента самостоятельно. Три паттерна идут по нарастающей — от разового предложения до поведения по умолчанию для всей сессии:- Естественный язык: назовите субагента в своём промпте; Claude решает, делегировать ли задачу
- @-упоминание: гарантирует, что субагент запустится для одной задачи
- На уровне сессии: вся сессия работает как этот субагент благодаря флагу
--agentили настройкеagent
@ и выберите субагента из списка автодополнения — так же, как вы упоминаете файлы. Это гарантирует запуск конкретного субагента, а не оставляет выбор за Claude:
my-plugin:code-reviewer или my-plugin:review:security, когда плагин раскладывает агентов по подпапкам. Именованные фоновые субагенты, работающие в данный момент в сессии, также отображаются в списке автодополнения, а рядом с именем показывается их статус.
Вы также можете ввести упоминание вручную, не используя список выбора: @agent-<name> для локальных субагентов или @agent-, за которым следует имя с областью действия, для субагентов плагинов, например @agent-my-plugin:code-reviewer. Пока вы вводите такую форму, список автодополнения показывает совпадающие файлы, а не агентов. Упоминание агента всё равно будет распознано при отправке.
Запустите всю сессию как субагента. Передайте --agent <name>, чтобы начать сессию, в которой сам основной поток перенимает ограничения инструментов и модель этого субагента:
--system-prompt. Файлы CLAUDE.md и память проекта всё равно загружаются через обычный поток сообщений, даже если в определении агента задано omitClaudeMd. Если вы запускаете сессию с -p как пользовательского агента, у которого есть собственный промпт, она также начинается без снимка статуса git.
Имя агента отображается как @<name> в заголовке при запуске, чтобы вы могли убедиться, что он активен.
Это работает со встроенными и пользовательскими субагентами, и выбор сохраняется при возобновлении сессии: Claude Code восстанавливает ограничения инструментов и модель агента вместе с диалогом. Если при возобновлении агент больше не существует, сессия продолжается со стандартными инструментами и показывает предупреждение с именем агента. О системном промпте в обоих случаях см. Флаги системного промпта в возобновлённых диалогах.
Для субагента, предоставляемого плагином, можно передать только имя агента, и Claude Code найдёт его:
agents/, включите подпапку в имя с областью действия, например claude --agent my-plugin:review:security.
Чтобы сделать это поведением по умолчанию для каждой сессии в проекте, задайте agent в .claude/settings.json:
Запуск субагентов на переднем плане или в фоне
Субагенты могут работать на переднем плане или в фоне:- Субагенты на переднем плане блокируют основной диалог до своего завершения. Запросы разрешений передаются вам по мере их появления.
- Фоновые субагенты работают параллельно, пока вы продолжаете работу. Когда фоновый субагент доходит до вызова инструмента, требующего разрешения, Claude Code показывает запрос в вашей основной сессии и называет субагента, который его запрашивает. Подтвердите, чтобы субагент продолжил работу, или нажмите Esc, чтобы отклонить этот единственный вызов инструмента, не останавливая субагента.
Какие субагенты работают в фоне
Если ничего не настроено, субагент, которого Claude порождает из основного диалога, запускается в фоне.claude -pи Agent SDK: Claude может дождаться субагента — по собственному решению или по вашей просьбе.- Интерактивная сессия в терминале, VS Code и сессии приложения для компьютера на вашей машине: чтобы Claude мог дождаться субагента, выключите режим fork, который включён по умолчанию.
context: fork Claude Code вместо этого следует правилам из раздела Запуск скиллов в субагенте, независимо от того, включён ли режим fork.
Как позволить Claude дождаться субагента
-
Выключите режим fork, задав
CLAUDE_CODE_FORK_SUBAGENTзначение0, например вsettings.json: -
Снова запустите
claudeиз оболочки или откройте новый диалог в VS Code. - Попросите Claude подождать, когда вам сначала нужен результат, например “run the reviewer subagent and wait for its report”.
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS в 1, Claude будет дожидаться завершения субагентов, прежде чем продолжить. Фоновые команды также отключаются, а Ctrl+B ничего не переводит в фон.
Инструменты, разрешения и результаты фоновых субагентов
Фоновые субагенты работают с меньшим набором встроенных инструментов, чем субагенты на переднем плане, за исключением форков диалога и возобновлённых субагентов переднего плана. Фоновые субагенты показывают каждый запрос разрешения в вашей основной сессии. Когда вы отвечаете на такой запрос вариантом, действие которого выходит за рамки одного вызова инструмента, например разрешением до конца сессии, Claude Code применяет ваш ответ ко всей сессии, включая основной диалог. Фоновый субагент может оставить фоновую команду Bash или PowerShell работающей после окончания своего хода. Когда эта команда завершается, Claude Code отправляет субагенту уведомление. Результаты фонового субагента поступают к Claude в виде уведомления о завершении в одном из последующих ходов. Claude дожидается этого уведомления, прежде чем сообщить результаты субагента, а если вы сначала спросите о ходе работы, он сообщит, что субагент ещё работает.Завершённые субагенты в панели и списке задач
Claude Code убирает строку фонового субагента из панели субагентов под полем ввода промпта одним из двух способов, в зависимости от того, как завершился субагент:- Когда субагент завершается успешно, Claude Code сразу удаляет его строку и, кроме режима чтения с экрана, показывает в нижней строке
/tasks to see subagentsв течение 30 секунд. В течение этих 30 секунд выполните/tasksи нажмитеEnterна субагенте, чтобы открыть его транскрипт. До v2.1.232 Claude Code сохранял строку в течение 30 секунд после завершения субагента, так же как для завершившегося с ошибкой, и не показывал подсказку в нижней строке. - Когда субагент завершается с ошибкой или вы его останавливаете, Claude Code сохраняет его строку в течение 30 секунд. Чтобы убрать строку раньше, выберите её и нажмите
x.
/tasks, помеченный как выполненный и отсортированный ниже выполняющихся задач, на те же 30 секунд, что и подсказка в нижней строке. Его подробное представление остаётся открытым, когда субагент завершается. Субагенты, завершившиеся с ошибкой или остановленные вами, исчезают из списка. До v2.1.208 завершённый субагент исчезал из списка сразу после завершения, а его подробное представление закрывалось.
Имена субагентов
Если вы начинаете сессию с включёнными командами агентов, Claude может дать субагенту имя, передав параметрname при вызове инструмента Agent. Он может сделать это по собственной инициативе, не спрашивая вас заранее. Имя делает субагента адресуемым: после его завершения Claude может отправить ему сообщение или возобновить его по имени.
В интерактивной сессии с включёнными командами агентов субагент, которого Claude порождает из основного диалога с name, вместо этого запускается как участник команды, кроме случаев, когда вызов является форком или передаёт isolation в самом вызове. Значение isolation во frontmatter субагента этому не препятствует, и участник команды тогда работает в рабочем каталоге основной сессии. См. Как Claude запускает команды агентов.
Ошибки API в субагентах
Когда что-то обрывает ответ субагента посреди потока, а частичный ответ содержит текст, но не содержит вызовов инструментов, Claude Code предлагает субагенту продолжить, а не завершает выполнение. Это происходит и в интерактивных сессиях. Выполнение завершается с ошибкой только после того, как эти продолжения исчерпаны. Субагент, выполнение которого завершается ошибкой API, например исчерпанием лимита использования или повторяющейся ошибкой сервера, сообщает Claude об этом сбое. Что именно получает Claude, зависит от того, где работал субагент:- Передний план: если ограничение частоты запросов, перегрузка или ошибка сервера обрывает субагента, который уже выдал текстовый вывод, инструмент Agent возвращает этот частичный вывод с пометкой о том, что субагент был прерван и не завершил задачу. Субагент, который ничего не выдал или весь вывод которого состоял из вызовов инструментов, завершается с ошибкой
Agent terminated early due to an API error, за которой следуют подробности ошибки. - Фон: субагент помечается как завершившийся с ошибкой, а сообщение, которое Claude получает при его завершении, называет ошибку API и включает последний вывод субагента, так что частичная работа не теряется.
Сканирование вывода субагентов
Claude Code сканирует итоговый отчёт каждого субагента, прежде чем Claude его прочитает. Субагент мог прочитать файлы, веб-страницы или вывод команд, которые вы никогда не просматривали, и текст из этих источников может содержать инструкции, адресованные основному диалогу. Сканирование никогда ничего не удаляет и не перефразирует; оно вносит два вида изменений, которые вы можете заметить в отчёте:- Вставка обратной косой черты: сканирование вставляет обратную косую черту в текст, имитирующий собственный вывод Claude Code, например тег
<system-reminder>или строку, начинающуюся сHuman:илиAssistant:, чтобы такая имитация читалась как обычный текст, а не принималась по ошибке за часть диалога. - Строка-маркер: сканирование добавляет в начало строку, начинающуюся с
[harness: subagent output matched instruction-shaped pattern(s):, когда отчёт имитирует тег вроде<system-reminder>или упоминает настройки разрешений, такие какbypassPermissionsили--dangerously-skip-permissions. Упоминания настроек разрешений получают строку-маркер, но сам текст остаётся без изменений.
Распространённые паттерны
Изоляция операций с большим объёмом вывода
Одно из самых эффективных применений субагентов — изоляция операций, которые производят большой объём вывода. Запуск тестов, получение документации или обработка файлов логов может занимать значительную часть контекста. Если делегировать такие операции субагенту, подробный вывод остаётся в контексте субагента, а в ваш основной диалог возвращается только релевантная сводка.Параллельное исследование
Для независимых исследований порождайте несколько субагентов, работающих одновременно:Цепочки субагентов
Для многошаговых рабочих процессов попросите Claude использовать субагентов последовательно. Каждый субагент выполняет свою задачу и возвращает результаты Claude, который затем передаёт релевантный контекст следующему субагенту.Выбор между субагентами и основным диалогом
Используйте основной диалог, когда:- Задача требует частого обмена репликами или итеративного уточнения
- Несколько этапов, например планирование, реализация и тестирование, используют значительный общий контекст
- Вы вносите быстрое точечное изменение
- Важна задержка. Субагент, который не является форком, начинает с чистого листа, и ему может потребоваться время на сбор контекста
- Задача производит подробный вывод, который не нужен в основном контексте
- Вы хотите применить определённые ограничения инструментов или разрешений
- Работа самодостаточна и может вернуть сводку
/btw вместо субагента. У него нет доступа к инструментам, и ответ не добавляется в историю.
Разрешите субагентам порождать собственных субагентов
По умолчанию субагент может порождать собственных субагентов — до трёх уровней ниже основного диалога. На пределе глубины Claude Code не предоставляет инструментAgent ни одному субагенту, кроме форка, поэтому субагент на пределе выполняет делегированную работу сам и возвращает одну сводку. Форк на пределе сохраняет Agent в унаследованном списке инструментов, но этот инструмент возвращает ошибку вместо порождения субагента.
Вложенные субагенты подходят для делегированной задачи, которая сама разбивается на параллельные подзадачи, например для субагента-ревьюера, который отправляет верификатора на каждую находку. По умолчанию запускающий субагент дожидается отчёта каждого вложенного субагента:
- Интерактивная сессия в терминале: к вам возвращается только сводка субагента верхнего уровня, поскольку субагент, запускающий фоновых субагентов, дожидается их результатов, прежде чем завершиться.
claude -pи Agent SDK: запускающий субагент ждёт, пока включён режим fork. Если выключить режим fork, вложенные субагенты вместо этого запускаются в фоне. Запускающий субагент не ждёт фонового вложенного субагента, и тот отчитывается в ваш основной диалог, если завершается позже запускающего.
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH нужное число уровней субагентов ниже основного диалога. Например, эта запись в settings.json ограничивает вложенность двумя уровнями:
1, чтобы отключить вложенность.
Вложенный субагент настраивается так же, как субагент верхнего уровня, и разрешается из тех же областей действия. Чтобы запретить одному субагенту порождать других при включённой вложенности, например ревьюеру, который должен оставаться только для чтения, исключите Agent из его списка tools или добавьте его в disallowedTools.
В терминале Claude Code показывает вложенных субагентов в виде дерева в панели субагентов под полем ввода промпта и помечает каждую строку, у которой в панели ещё есть потомки, счётчиком (+N). Откройте строку, чтобы увидеть соседних субагентов и прямых потомков этого субагента вместе с путём обратно к main.
Лимит одновременных субагентов
Использование субагентов регулируют два лимита, у каждого из которых своя переменная: этот не позволяет Claude порождать новых субагентов, пока их работает слишком много, а лимит глубины ограничивает глубину вложенности субагентов. Ограничения на общее число субагентов, которых Claude может породить за сессию, нет. По умолчанию, когда в сессии работают 20 субагентов, попытка породить ещё одного с помощью инструмента Agent завершается ошибкойConcurrent subagent limit reached, и ошибка сообщает Claude, что повторять попытку не нужно. Порождение снова становится возможным, когда число работающих субагентов опускается ниже лимита. Чтобы изменить лимит, задайте в CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS любое положительное целое число. На сессии с активным ultracode это не распространяется: там лимит не применяется. Требуется Claude Code v2.1.217 или новее.
Лимит блокирует только субагентов, которых Claude порождает с помощью инструмента Agent, но другие запуски занимают те же слоты:
- Форк внутри сессии, который вы запускаете с помощью
/subtask, занимает слот, пока работает, и никогда не блокируется лимитом. - Возобновление субагента, который уже завершился, занимает новый слот без проверки лимита, поэтому возобновления могут вывести число работающих субагентов за пределы лимита.
Управление контекстом субагентов
Что загружается при запуске
Каждый субагент начинает работу с новым изолированным контекстным окном. Он не видит историю вашего диалога, уже вызванные вами скиллы или файлы, которые Claude уже прочитал. Claude составляет сообщение делегирования, кратко описывающее задачу, и субагент работает, отталкиваясь от него. Исключение — форк, который наследует родительский диалог, а не начинает с чистого листа. Начальный контекст субагента, не являющегося форком, содержит:- Системный промпт: собственный промпт агента плюс сведения об окружении, которые добавляет Claude Code, — а не системный промпт Claude Code. Пользовательские субагенты задают свой промпт в теле markdown или в поле
prompt. У встроенных агентов промпты заданы заранее. - Сообщение задачи: промпт делегирования, который Claude пишет, передавая работу.
- Файлы CLAUDE.md: все уровни иерархии CLAUDE.md, которые загружает основной диалог, включая
~/.claude/CLAUDE.md, правила проекта,CLAUDE.local.md, файлы управляемых политик и любые файлыAGENTS.md, загружаемые как инструкции проекта. Встроенные агенты Explore и Plan это пропускают. Субагент, в определении которого заданоomitClaudeMd, загружает только файлы управляемых политик, а если определение получено из управляемых настроек — вообще ничего. - Статус Git: снимок, который Claude Code считывает из вашего репозитория при запуске субагента. Для субагента в собственном worktree этого репозитория снимок показывает ветку, статус и последние коммиты этого worktree. Отсутствует вне Git-репозитория или если снимок отключён; см.
includeGitInstructions. Explore и Plan пропускают его в любом случае. - Предзагруженные скиллы: полное содержимое всех скиллов, перечисленных в поле
skillsагента. Встроенные агенты не предзагружают скиллы. - Список соседних агентов: системное напоминание со списком
mainи всех остальных именованных агентов в сессии; каждый из них — допустимое значениеtoдляSendMessage. Список появляется, только если инструменты субагента включаютSendMessageи хотя бы у одного другого агента есть имя — неважно, дал ли его Claude при порождении или агент работает как участник команды агентов. Это снимок на момент запуска субагента, поэтому агенты, получившие имя позже, в нём не отображаются.
omitClaudeMd: true в его frontmatter или в JSON --agents. Для Explore, Plan и субагентов с omitClaudeMd файл CLAUDE.md подкаталога и соответствующие правила с привязкой к путям всё равно загружаются, когда субагент работает с файлами в этом подкаталоге.
Когда основной диалог читает результаты таких субагентов, у него по-прежнему есть весь ваш CLAUDE.md, поэтому большинству правил не нужно доходить до самого субагента. Если же правило должно до него дойти, например “ignore the vendor/ directory,” повторите его в промпте, который вы даёте Claude при делегировании.
Изменить, какие субагенты получают статус git, нельзя. Его пропускают только Explore и Plan.
Часть состояния основного диалога никогда не доходит до субагента, не являющегося форком:
- Стиль вывода: субагент работает со своим собственным системным промптом, поэтому ваш стиль вывода не влияет на его ответы, кроме случая форка.
- Автоматическая память: автоматическая память основного диалога не загружается. Чтобы дать субагенту собственную постоянную память, используйте поле
memory. - Размер контекстного окна: размер контекстного окна субагента определяется его собственной моделью, а не родительской. При делегировании модели с меньшим окном этот субагент получает меньшее окно.
Возобновление субагентов
Каждый вызов субагента создаёт новый экземпляр, а не продолжает предыдущий. Чтобы продолжить работу существующего субагента, а не начинать заново, попросите Claude возобновить его. Возобновлённые субагенты сохраняют полную историю диалога, включая все предыдущие вызовы инструментов, результаты и рассуждения. Если субагент порождал собственных фоновых субагентов, эта история включает результаты, которые они доставили, пока он работал. До v2.1.304 субагент, которому Claude отправлял сообщение или которого возобновлял сразу после его завершения, мог забыть свою последнюю работу.- Когда субагент завершается, Claude получает его ID агента.
- Встроенные агенты Explore и Plan одноразовые и не возвращают ID агента, поэтому Claude не может их возобновить. Используйте
general-purposeили пользовательского субагента, когда нужно продолжить работу. - Когда субагент останавливается на своём лимите
maxTurns, Claude Code помечает возвращённый вывод как частичный, и Claude может возобновить субагента, чтобы тот продолжил работу.
SendMessage, указывая ID или имя агента в поле to. Для SendMessage не нужно включать команды агентов; это требуется только для структурированных сообщений протокола команды, таких как shutdown_request и plan_approval_response. Помимо субагентов и участников команды, в сессиях с включённым обменом сообщениями между сессиями Claude может использовать тот же инструмент, чтобы отправлять сообщения другим вашим сессиям Claude Code — на этом компьютере или за его пределами.
Чтобы возобновить субагента, попросите Claude продолжить предыдущую работу:
SendMessage, субагент возобновляется в фоне без нового вызова Agent. То же относится к субагенту, которого Claude остановил инструментом TaskStop, после того как остановленное выполнение завершилось. Возобновлённое выполнение сохраняет набор инструментов, с которым субагент работал изначально, и может продолжать читать кэш промптов, прогретый исходным выполнением.
Субагент, у которого есть инструмент SendMessage, тоже может отправить такое сообщение. В интерактивной сессии возобновлённый агент затем отчитывается субагенту, который его возобновил, а не в ваш основной диалог. Этот субагент дожидается результата, прежде чем завершить собственную работу. Когда субагент отправляет сообщение агенту, которому он подотчётен, например собственному запускающему агенту, Claude Code возобновляет этого агента без перенаправления его результатов.
Субагент, которого вы остановили сами — клавишей x в /tasks или запросом SDK stop_task, — автоматически не возобновляется. Если Claude отправит ему сообщение, оно будет отклонено, а Claude получит уведомление, что агент был отменён.
Пока строка этого субагента ещё есть в панели субагентов, введите текст в его транскрипт, чтобы возобновить его самостоятельно. После этого сообщение от Claude снова сможет автоматически его возобновить.
Возобновление запускает новое выполнение агента под тем же ID, поэтому субагент, который ранее завершился с ошибкой или успешно, снова отображается как работающий в списке задач и в событиях задач Agent SDK.
SendMessage проверяет, что имя по-прежнему указывает на того же агента, которого оно достигало ранее в диалоге. Если имя занял более новый агент, например повторно порождённый фоновый агент, который использовал то же имя, Claude Code отказывает в отправке, а не доставляет сообщение не тому агенту, и ошибка сообщает, к какому агенту теперь ведёт это имя, чтобы Claude мог сменить адресата. Чтобы обратиться к прежнему агенту, пока тот ещё работает, Claude использует ID агента, полученный при его порождении. Проверка действует в пределах текущего диалога и сбрасывается при /clear.
Субагент воспринимает сообщения от агента, который его запустил, как обычные указания по задаче, включая корректировки посреди выполнения, и действует по ним в рамках собственных настроек разрешений. Два ограничения действуют независимо от отправителя сообщения: никакое сообщение от какого-либо агента не считается вашим подтверждением для ожидающего запроса разрешения, и никакое сообщение агента не может изменить настройки разрешений, CLAUDE.md или конфигурацию субагента. Дать подтверждение могут только система разрешений или ваши собственные сообщения.
Вы также можете попросить у Claude ID агента, если хотите явно на него сослаться, или найти ID в файлах транскриптов в ~/.claude/projects/{project}/{sessionId}/subagents/. Каждый транскрипт хранится как agent-{agentId}.jsonl.
Транскрипты субагентов хранятся независимо от основного диалога:
- Сжатие контекста основного диалога: когда выполняется сжатие контекста основного диалога, транскрипты субагентов не затрагиваются. Они хранятся в отдельных файлах.
- Сохранение сессии: транскрипты субагентов сохраняются в пределах своей сессии. Вы можете возобновить субагента после перезапуска Claude Code, возобновив ту же сессию.
- Автоматическая очистка: Claude Code удаляет транскрипты субагентов по истечении срока хранения
cleanupPeriodDays, по умолчанию 30 дней, согласно правилам очистки по сроку хранения.
Отправка сообщения субагенту по имени после перезапуска
Для субагента, запущенного как участник команды, см. вместо этого ограничения команд агентов.
agent-{agentId}.meta.json в ~/.claude/projects/{project}/{sessionId}/subagents/.
После одного сообщения по ID имя субагента снова работает, если только это имя не занял более новый агент. До v2.1.299 ни одно имя не сохранялось после перезапуска, и отправка по имени отклонялась, даже когда ID агента ещё работал.
Автосжатие
Субагенты поддерживают автосжатие. Сжатие контекста срабатывает по мере заполнения собственного контекстного окна субагента, иCLAUDE_AUTOCOMPACT_PCT_OVERRIDE также применяется к субагентам. О том, когда переопределение вступает в силу, см. переменные окружения.
События сжатия контекста записываются в файлы транскриптов субагентов:
preTokens показывает, сколько токенов было использовано до сжатия контекста.
Задание окна автосжатия для одного субагента
Чтобы один субагент выполнял сжатие контекста раньше, чем обычно, задайте в его frontmatter полеautoCompactWindow — число токенов от 100000 до 1000000. Если вы задали CLAUDE_CODE_AUTO_COMPACT_WINDOW, субагент вместо этого использует окно из этой переменной, и поле не действует, если только Claude Code не игнорирует значение переменной. Требуется Claude Code v2.1.296 или новее.
Этот frontmatter задаёт autoCompactWindow равным 200 000 токенов для субагента, который читает длинные файлы логов:
200000, потому что во frontmatter Claude Code читает 200k как 200, а это значение вне допустимого диапазона. В таком случае субагент всё равно загружается и выполняет сжатие контекста так, будто поле отсутствует. Чтобы проверить, проигнорировал ли Claude Code ваше значение, выполните claude --debug в оболочке и найдите в логе отладки строку invalid autoCompactWindow.
Если значение находится в диапазоне, но изменений по-прежнему нет, проверьте следующие причины:
- Значение не ниже окна автосжатия, которое субагент иначе унаследовал бы: чтобы сжатие происходило раньше, задайте значение ниже этого окна.
- Вы запускаете всю сессию как этого субагента с
--agentили настройкойagent: в этом случае поле не действует. Чтобы задать окно для сессии, см. Задание окна автосжатия.
Разветвление текущего разговора
Когда представление агента отключено,
/subtask недоступен, а /fork вместо этого запускает разветвлённый субагент; в противном случае /fork копирует всю сессию в новую фоновую сессию./subtask, за которым следует задача, независимо от того, включён ли режим fork. Claude Code называет fork по первым словам задачи. В следующем примере диалог разветвляется для черновика тестовых случаев, пока вы продолжаете реализацию в основной сессии:
Наблюдение и управление работающими forks
Работающие forks появляются в панели ниже входа приглашения, с одной строкой для основной сессии и одной для каждого fork. Когда fork завершается успешно, Claude Code удаляет его строку. Claude Code сохраняет строку fork, который не удался или который вы остановили, на 30 секунд, то же самое, что и для любого другого фонового subagent. До v2.1.232 Claude Code также сохранял строку завершённого fork на 30 секунд. Используйте эти клавиши для взаимодействия с панелью:
Когда открыт транскрипт fork или субагента, последующие сообщения и скиллы отправляются этому агенту. В Claude Code v2.1.314 или новее
/btw отвечает на основе открытого транскрипта. Другие встроенные команды отправляются в ваш основной диалог, со следующими мерами предосторожности:
/compact,/clearи/rewindдействуют на основной диалог, поэтому Claude Code просит вас подтвердить запуск любой из них из этого представления./modelи/fastзадают модель и быстрый режим основного диалога, а не просматриваемого агента, поэтому из этого представления они не запускаются. Уведомление объясняет причину.
Ctrl+Enter или Ctrl+X Ctrl+S. Любая shell-команда или субагент, которых ожидает агент и которые можно перевести в фон, переводятся туда и продолжают работать. Если агент пишет ответ или ожидает работу, которую нельзя перевести в фон, он продолжает и прочитает ваше сообщение, когда она завершится. Требуется Claude Code v2.1.286 или новее.
Как forks отличаются от других subagents
Fork наследует всё, что основная сессия имеет в момент его порождения. Любой другой subagent начинает с нуля из своего определения.
Поскольку системный промпт и определения инструментов fork идентичны родительским, его первый запрос повторно использует кэш промптов родителя. Благодаря этому повторному использованию fork обходится дешевле, чем новый субагент, для задач, которым нужен тот же контекст.
Когда Claude порождает fork через инструмент Agent, он может передать
isolation: "worktree", чтобы редактирования файлов fork были написаны в отдельный git worktree вместо вашего checkout. Fork не может порождать дальнейшие forks.
Отключение режима fork
Режим fork позволяет Claude самостоятельно запускать fork. Чтобы Claude не запускал forks:- Остановить только forks: добавьте
"Agent(fork)"вpermissions.denyв ваших настройках. - Отключить режим fork: установите
CLAUDE_CODE_FORK_SUBAGENTв0, следуя шагам в разделе Разрешите Claude ждать субагента.
Примеры subagents
Эти примеры демонстрируют эффективные паттерны для создания subagents. Используйте их как отправные точки или генерируйте настроенную версию с Claude.Code reviewer
Subagent только для чтения, который проверяет код без его модификации. Этот пример показывает, как спроектировать сфокусированный subagent с ограниченным доступом к инструментам, который исключает Edit и Write, и подробным приглашением, которое точно указывает, что искать и как форматировать выход.Debugger
Subagent, который может как анализировать, так и исправлять проблемы. В отличие от code reviewer, этот включает Edit, потому что исправление ошибок требует модификации кода. Приглашение предоставляет чёткий рабочий процесс от диагностики к проверке.Data scientist
Специализированный subagent для работы анализа данных. Этот пример показывает, как создавать subagents для специализированных рабочих процессов вне типичных задач кодирования. Он явно устанавливаетmodel: sonnet для более способного анализа.
Database query validator
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 для полной схемы входных данных.
Системное приглашение говорит subagent отказывать запросам на запись, поэтому hook является подстраховкой: если subagent попытается выполнить запись в любом случае, Claude Code блокирует команду и subagent видит сообщение Blocked: Write operations not allowed. Use SELECT queries only..
Следующие шаги
Теперь, когда вы понимаете subagents, изучите эти связанные функции:- Распространяйте subagents с помощью plugins для совместного использования subagents в командах или проектах
- Запустите Claude Code программно с помощью Agent SDK для CI/CD и автоматизации
- Используйте MCP servers для предоставления subagents доступа к внешним инструментам и данным