Subagentes funcionam dentro de uma única sessão. Para executar muitas sessões independentes em paralelo e monitorá-las de um único lugar, consulte agentes em segundo plano. Para sessões separadas que passam mensagens uma para a outra, consulte mensagens entre sessões. Para uma equipe coordenada de sessões que Claude gera e supervisiona, consulte equipes de agentes.
- Preservar contexto mantendo exploração e implementação fora de sua conversa principal
- Aplicar restrições limitando quais ferramentas um subagente pode usar
- Reutilizar configurações entre projetos com subagentes no nível do usuário
- Especializar comportamento com prompts de sistema focados para domínios específicos
- Controlar custos roteando tarefas para modelos mais rápidos e baratos como Haiku
description de seus subagentes e mova detalhes para o prompt de sistema de cada subagente, que é carregado apenas quando esse subagente é executado.
Subagentes integrados
Claude Code inclui subagentes integrados que Claude usa automaticamente quando apropriado. Cada um herda as permissões da conversa pai; a maioria é executada com um conjunto de ferramentas restrito. Explore e Plan iniciam sem seus arquivos CLAUDE.md e sem o snapshot de status git para manter a pesquisa rápida e econômica. Outros subagentes integrados e subagentes personalizados carregam ambos, a menos que você definaomitClaudeMd na definição de um subagente personalizado para iniciá-lo sem os arquivos CLAUDE.md do usuário, do projeto e locais. Para o detalhamento completo do que chega a um subagente, consulte o que é carregado na inicialização.
- Explore
- Plan
- General-purpose
- Other
Um agente rápido e somente leitura otimizado para pesquisar e analisar bases de código.
- Model: o modelo da conversa principal. Quando a conversa principal executa Fable, Explore é executado no Opus ou permanece no Fable, dependendo de como você se conecta.
- Com uma assinatura Claude, uma conta do Anthropic Console ou um gateway de LLM acessado por meio de
ANTHROPIC_BASE_URL, Explore é executado no modelo Opus para o qual o aliasopusé resolvido. - No Amazon Bedrock, no Google Cloud’s Agent Platform, no Microsoft Foundry, na Claude Platform on AWS ou em um gateway de Claude apps, Explore permanece no Fable.
- Com uma assinatura Claude, uma conta do Anthropic Console ou um gateway de LLM acessado por meio de
- Tools: ferramentas somente leitura; Write e Edit são negados
- Purpose: descoberta de arquivos, pesquisa de código, exploração de base de código
Explore sobrescreve o integrado e mantém seu próprio campo model, portanto defina um com model: haiku para executar a exploração em um modelo de menor custo. Para forçar um único modelo em todos os subagentes, incluindo o Explore, consulte Execute cada subagente em um modelo.Claude delega para Explore quando precisa pesquisar ou entender uma base de código sem fazer alterações. Isso mantém os resultados da exploração fora do contexto da sua conversa principal.Ao invocar Explore, Claude especifica um nível de minuciosidade: quick para buscas direcionadas, medium para exploração equilibrada, ou very thorough para análise abrangente.- Para bloquear um tipo integrado específico, adicione-o a
permissions.denyconforme mostrado em Desabilitar subagentes específicos. - Para impedir que Claude delegue a qualquer subagente, negue a ferramenta
Agentem si compermissions.deny. - Para remover apenas os subagentes integrados
ExploreePlan, definaCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1. Claude lê e explora arquivos diretamente em vez de delegar para eles. Requer Claude Code v2.1.198 ou posterior. - Em modo não interativo e no Agent SDK, defina
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1para remover todos os tipos integrados e fornecer apenas os seus próprios.
subagent_type falha com subagent_type is required quando a sessão não tem nenhum subagente general-purpose para recorrer.
Além desses subagentes integrados, você pode criar os seus próprios com prompts personalizados, restrições de ferramentas, modos de permissão, hooks e skills. As seções a seguir mostram como começar e personalizar subagentes.
Quickstart: criar seu primeiro subagente
Subagentes são arquivos Markdown com frontmatter YAML. Para criar um, peça ao Claude para escrevê-lo para você, ou escreva o arquivo você mesmo. Este passo a passo cria um subagente no nível do usuário que revisa código e sugere melhorias.1
Peça ao Claude para criar o subagente
No Claude Code, descreva o subagente que você deseja e onde salvá-lo:Claude escreve o arquivo com um
name, uma description, uma lista de tools, um model e um system prompt.2
Revise o arquivo
Abra Como o arquivo está em
~/.claude/agents/code-improver.md e confirme que o frontmatter corresponde ao que você pediu. O resultado se parece com isto:~/.claude/agents/, o subagente está disponível em todos os projetos em sua máquina. Para limitá-lo a um projeto, mova-o para o diretório .claude/agents/ desse projeto. Escolha o escopo do subagente compara os dois.3
Teste-o
Peça ao Claude para delegar para o novo subagente:Claude delega para seu novo subagente, que verifica a base de código e retorna sugestões de melhoria. Na transcrição, a delegação aparece como uma linha de chamada de ferramenta mostrando o nome do subagente seguido por uma breve descrição de tarefa, como
code-improver(Suggest code improvements).Se Claude não conseguir encontrar o novo subagente, reinicie o Claude Code e tente novamente. Isso acontece apenas quando ~/.claude/agents/ não existia antes da sessão começar, porque uma sessão em execução não detecta um diretório agents recém-criado.Executar
/agents imprime um lembrete para pedir ao Claude ou editar .claude/agents/ e ~/.claude/agents/ diretamente.
No Claude Code v2.1.197 e anterior, /agents abre um assistente interativo com uma aba Running que lista subagentes ativos e uma aba Library para criá-los, editá-los e deletá-los. Configurar subagentes
O local do arquivo de um subagente determina para quem ele está disponível, e o seu frontmatter determina o que ele pode fazer. Esta seção aborda onde os arquivos de subagentes ficam e todos os campos que eles suportam.Escolher o escopo do subagente
Armazene os arquivos de subagentes em locais diferentes dependendo do escopo. Quando vários subagentes compartilham o mesmo nome, o Claude Code usa aquele do local de maior prioridade.
Subagentes de projeto (
.claude/agents/) são ideais para subagentes específicos de uma base de código. Faça commit deles no controle de versão para que sua equipe possa usá-los e aprimorá-los de forma colaborativa.
Os subagentes de projeto são descobertos subindo a partir do diretório de trabalho atual, de modo que cada .claude/agents/ entre ele e a raiz do repositório é verificado. Quando mais de um desses diretórios aninhados define o mesmo name, o Claude Code usa a definição mais próxima do diretório de trabalho.
Quando você adiciona um diretório com --add-dir ou /add-dir, o Claude Code também carrega a pasta .claude/agents/ dele, junto com os seus subagentes de projeto. Consulte Diretórios adicionais para saber quais outros tipos de configuração são carregados a partir de --add-dir. Para compartilhar subagentes entre projetos sem --add-dir, use ~/.claude/agents/ ou um plugin.
Subagentes de usuário (~/.claude/agents/) são subagentes pessoais disponíveis em todos os seus projetos.
O Claude Code verifica .claude/agents/ e ~/.claude/agents/ recursivamente, então você pode organizar as definições em subpastas como agents/review/ ou agents/research/. O caminho do subdiretório não afeta como um subagente é identificado ou invocado, porque a identidade vem apenas do campo name do frontmatter.
Mantenha os valores de name únicos em toda a árvore: se dois arquivos sob o mesmo diretório .claude/agents/, incluindo suas subpastas, declararem o mesmo nome, o Claude Code carrega apenas um deles, escolhido pela ordem de leitura do sistema de arquivos, e não por uma precedência documentada. Entre diretórios de projeto aninhados, a definição mais próxima do diretório de trabalho prevalece, conforme descrito acima. A verificação de configuração /doctor informa arquivos no mesmo diretório que compartilham um nome e propõe renomear ou remover todos, exceto um.
Os diretórios agents/ de plugins também são verificados recursivamente. Diferentemente dos escopos de projeto e de usuário, uma subpasta dentro do diretório agents/ de um plugin passa a fazer parte do identificador com escopo: um arquivo em agents/review/security.md no plugin my-plugin é registrado como my-plugin:review:security.
Subagentes definidos via CLI são passados como JSON ao iniciar o Claude Code. Eles existem apenas naquela sessão e não são salvos em disco, o que os torna úteis para testes rápidos ou scripts de automação. Você pode definir vários subagentes em uma única chamada --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents também aceita o caminho para um arquivo JSON contendo o mesmo objeto, para definições grandes demais para passar na linha de comando. Por exemplo, claude -p --agents ./agents.json "Review my changes" lê as definições desse arquivo. Em uma sessão interativa, o Claude Code recusa um caminho de arquivo. O formato de arquivo requer o Claude Code v2.1.281 ou posterior.
Cada chave de nível superior no JSON é o nome de um agente, e seu valor é a definição desse agente. Não comece um nome com -. Uma definição aceita estes campos:
prompt: o system prompt do agente, equivalente ao corpo em markdown nos subagentes baseados em arquivo.promptpode estar vazio. Se você selecionar um agente compromptvazio e sem campomemorycomo o agente da sessão com--agent, o system prompt da sessão permanece inalterado. Umpromptvazio requer o Claude Code v2.1.281 ou posterior.- Campos do frontmatter:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,autoCompactWindow,skills,initialPrompt,memory,effort,background,omitClaudeMdeisolation. - Campos ignorados:
coloreexperimentalnão são aceitos aqui e são ignorados em vez de rejeitados.
Invalid --agents configuration.
Subagentes gerenciados são implantados por administradores da organização. Coloque arquivos markdown em .claude/agents/ dentro do diretório de configurações gerenciadas, usando o mesmo formato de frontmatter dos subagentes de projeto e de usuário. As definições gerenciadas têm precedência sobre subagentes de projeto e de usuário com o mesmo nome.
Subagentes de plugin vêm de plugins que você instalou. Eles são carregados automaticamente junto com seus subagentes personalizados e aparecem no preenchimento automático de @-menção sob seu nome com escopo. Consulte a referência de componentes de plugin para detalhes sobre como criar subagentes de plugin.
Por motivos de segurança, subagentes de plugin não suportam os campos de frontmatter
hooks, mcpServers ou permissionMode. Esses campos são ignorados ao carregar agentes de um plugin. Se você precisar deles, copie o arquivo do agente para .claude/agents/ ou ~/.claude/agents/. Você também pode adicionar regras a permissions.allow em settings.json ou settings.local.json, mas essas regras se aplicam à sessão inteira, não apenas ao subagente do plugin.Se você é o autor do plugin, distribua os hooks no hooks/hooks.json do plugin e os servidores MCP no seu .mcp.json. Eles se aplicam sempre que o plugin está habilitado, e não apenas dentro do subagente.Escrever arquivos de subagentes
Os arquivos de subagentes usam frontmatter YAML para configuração, seguido pelo system prompt em Markdown:O Claude Code monitora
~/.claude/agents/ e .claude/agents/. Quando você adiciona ou edita um arquivo de subagente em disco, ou pede ao Claude para escrever um para você, o Claude Code detecta a alteração em poucos segundos e a próxima delegação usa a definição atualizada, sem necessidade de reiniciar.Três casos ainda exigem reinicialização:- O monitoramento cobre apenas diretórios que existiam quando a sessão começou, portanto, após criar o primeiro arquivo de agente de um escopo em um novo diretório
agents, reinicie para carregá-lo. - O Claude Code não monitora
.claude/agents/dentro de diretórios adicionados com--add-dirou/add-dir, portanto, após adicionar ou editar um subagente ali, reinicie para carregar a alteração. - Sessões iniciadas com
--disable-slash-commandsnão monitoram esses diretórios de forma alguma.
.claude/agents/code-reviewer.md
--append-subagent-system-prompt para acrescentar seu texto ao final do system prompt de cada subagente, incluindo subagentes aninhados, exceto um subagente bifurcado, que reutiliza o próprio prompt da conversa. Requer o Claude Code v2.1.205 ou posterior. Se o seu texto for longo demais para passar na linha de comando, salve-o em um arquivo e passe o caminho com --append-subagent-system-prompt-file. A flag de arquivo requer o Claude Code v2.1.261 ou posterior.
Um subagente começa no diretório de trabalho atual da conversa principal. Dentro de um subagente, comandos cd não persistem entre chamadas das ferramentas Bash ou PowerShell e não afetam o diretório de trabalho da conversa principal. Para dar ao subagente uma cópia isolada do repositório, defina isolation: worktree.
Um subagente com isolation: worktree executa seus comandos Bash e PowerShell dentro do seu worktree. Um comando cujo diretório de trabalho resolve para o seu checkout principal, por exemplo porque o diretório do worktree foi removido enquanto o subagente estava em execução, falha com um erro.
Essa verificação de diretório de trabalho abrange todo o repositório que contém o diretório a partir do qual você iniciou o Claude Code. Quando sua sessão é executada em um worktree vinculado próprio, a verificação também abrange o checkout principal ao qual esse worktree está vinculado.
Para comandos Bash, o Claude Code também verifica o próprio comando de duas maneiras:
- Ele bloqueia um comando que redireciona o git para o checkout principal.
- Ele recusa um comando quando não consegue verificar, a partir do texto do comando, que qualquer git executado pelo comando permanece dentro do worktree, por exemplo quando o nome do comando é calculado em tempo de execução.
isolation: worktree; consulte Como o Claude Code aplica o isolamento.
Referência do frontmatter
Configure um subagente com frontmatter YAML entre marcadores--- no topo do arquivo e escreva seu system prompt em Markdown após o --- de fechamento. Apenas name e description são obrigatórios.
Nomes de campos com várias palavras usam camelCase, como maxTurns e disallowedTools, e devem corresponder exatamente à tabela: o Claude Code ignora um campo que não reconhece sem relatar um erro.
- Para encontrar um campo com erro de digitação em um subagente que foi carregado, execute
claude --debugno seu shell e pesquisedoes not recognize or applyno log de depuração em~/.claude/debug/<session-id>.txt. O log de depuração nomeia até cinco campos de nível superior no arquivo do subagente que o Claude Code não reconhece, com o nome provavelmente pretendido quando um campo suportado é semelhante. Requer o Claude Code v2.1.296 ou posterior. - Para descobrir por que um arquivo de subagente não foi carregado, consulte Arquivos de subagentes que o Claude Code ignora.
Escreva
cacheTtl dentro do mapa experimental, não no nível superior do frontmatter.
Arquivos de subagentes que o Claude Code ignora
O Claude Code ignora um arquivo em um diretórioagents de projeto, de usuário ou gerenciado, ou em um sob um diretório que você adiciona com --add-dir, sem relatá-lo na sessão, quando o frontmatter tem algum destes problemas:
- Sem
name: o Claude Code trata o arquivo como documentação mantida ao lado dos seus agentes. - Um
---de abertura que não está na primeira linha do arquivo: o Claude Code lê o arquivo como se não tivesse frontmatter e o trata como documentação. - Um
nameque começa com-, contém:ou tem mais de 256 caracteres: o Claude Code ignora o arquivo e grava um erro no log de depuração. - Um
namemas semdescription: o Claude Code ignora o arquivo e grava o motivo no log de depuração. - YAML que não pode ser analisado: o Claude Code não lê nenhum campo do arquivo, ignora-o e grava o erro de análise no log de depuração.
--debug.
Um subagente de plugin cujo frontmatter não tem name ou não pode ser analisado ainda é carregado, sob o nome do seu arquivo.
Verificar um diretório agents antes de uma sessão
Para encontrar arquivos em um diretório agents cujo frontmatter não pode ser analisado, execute claude plugin validate no diretório, por exemplo .claude/agents ou ~/.claude/agents. O Claude Code verifica apenas o diretório que você nomeia e não sinaliza um arquivo cujo frontmatter é analisado, mas não tem name. Requer o Claude Code v2.1.233 ou posterior.
Escolher um modelo
Por padrão, um subagente que você define é executado no mesmo modelo da conversa que o inicia. Para escolher você mesmo o modelo dele, defina o campomodel na definição dele como um destes valores:
- Alias de modelo:
sonnet,opus,haikuoufable - ID de modelo completo: um valor que a flag
--modelaceita, comoclaude-opus-5-5ouclaude-sonnet-5 inherit: o modelo da conversa principal ou, no caso de um subagente aninhado, o modelo do subagente que o criou
- O parâmetro
modelpor invocação, que o Claude pode passar ao iniciar o subagente. Em uma chamada da ferramenta Agent, o parâmetro aceita um alias de modelo, e não um ID de modelo completo neminherit. - O campo
modelna definição do subagente, incluindoinherit - A variável de ambiente
CLAUDE_CODE_SUBAGENT_MODEL - O modelo da conversa principal ou, no caso de um subagente aninhado, o modelo do subagente que o criou
agent.spawn, o Claude Code usa esse modelo no lugar do parâmetro por invocação.
Definir CLAUDE_CODE_SUBAGENT_MODEL sozinha não altera o modelo em que os subagentes integrados Explore e Plan são executados. Para alterá-lo, consulte Executar todos os subagentes em um único modelo.
Em qual modelo um subagente aninhado é executado
Por padrão, um subagente aninhado que você define é executado no modelo do seu pai, o subagente que o criou. Para executar o subagente aninhado em outro modelo, defina o campomodel dele como esse modelo.
Por exemplo, suponha que sua conversa principal seja executada no Opus e inicie um subagente revisor no Haiku. Por padrão, estes subagentes são executados no Haiku, e não no Opus, quando o revisor os cria:
- Um subagente com
model: inheritou sem campomodel - Os subagentes integrados Explore, Plan e general-purpose
- Um fork
opusplan, ou no Sonnet se você o definir como haiku.
Verificar o modelo de um subagente
Para verificar em qual modelo um subagente está sendo executado, execute/tasks. O Claude Code nomeia o modelo na linha do subagente e adiciona o nível de esforço definido para esse subagente, se houver. Requer o Claude Code v2.1.242 ou posterior.
Executar todos os subagentes em um único modelo
Para aplicar um único modelo a todos os subagentes, colegas e agentes de workflow, definaCLAUDE_CODE_SUBAGENT_MODEL como esse modelo e CLAUDE_CODE_SUBAGENT_MODEL_FORCE como 1. Requer o Claude Code v2.1.257 ou posterior.
Por exemplo, para executar todos os subagentes no Haiku, defina ambas as variáveis no bloco env de um arquivo de configurações:
/tasks enquanto um subagente estiver em execução. A linha do subagente mostra o modelo em que ele é executado.
Enquanto CLAUDE_CODE_SUBAGENT_MODEL_FORCE estiver ativada, o Claude Code ignora o campo model nas definições de subagentes, e o Claude não pode passar um modelo ao iniciar um subagente. Os seguintes subagentes ainda são executados no modelo da conversa pai:
- Um fork
- Uma skill executada em um subagente com
model: inherit
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, os subagentes são executados no modelo da conversa principal, exceto que o subagente integrado Explore é executado no modelo listado para ele em Subagentes integrados.
Qual versão um alias de modelo seleciona
Por padrão, um subagente com um alias de modelo é executado na versão para a qual o alias aponta. Com um alias de família comoopus no campo model ou no parâmetro por invocação, o subagente é executado no modelo da conversa pai em dois casos:
- Mesma família: por exemplo, se sua conversa principal é executada em
claude-opus-4-7, um subagente commodel: opustambém é executado nessa versão. Para executar outra versão, defina um ID de modelo completo no campomodel. - Família desconhecida: o Claude Code não consegue identificar a família do modelo pai, como com um ARN do Amazon Bedrock que ele não consegue consultar. Este caso se aplica apenas ao alias
opusem um provedor diferente da API da Anthropic. Para escolher a versão do Opus, definaANTHROPIC_DEFAULT_OPUS_MODEL.
Quando uma allowlist bloqueia um modelo de subagente
Se a allowlistavailableModels da sua organização bloquear o modelo definido para um subagente, o subagente é executado no primeiro destes que se aplicar:
- Para um alias de família bloqueado, a versão permitida mais recente dessa família, em provedores que suportam essa substituição
- O modelo em
CLAUDE_CODE_SUBAGENT_MODEL, se você o definir, sob essas mesmas regras - O modelo da conversa principal ou, no caso de um subagente aninhado, o modelo do subagente que o criou
Pensamento estendido em subagentes
Os subagentes herdam a configuração de pensamento estendido da conversa principal. Não há configuração de pensamento por subagente.Escolher um nível de esforço
Para executar um subagente em seu próprio nível de esforço, defina o campoeffort na sua definição.
Quando você pede ao Claude para executar um subagente que não seja um fork em um nível de esforço específico, ele também pode passar um parâmetro effort para essa invocação. O parâmetro sobrescreve o campo effort e permanece em vigor quando o subagente é retomado. A variável de ambiente CLAUDE_CODE_EFFORT_LEVEL tem precedência sobre ambos. O parâmetro por invocação requer o Claude Code v2.1.292 ou posterior.
Quando um subagente não tem campo ou parâmetro effort
No modelo da conversa principal, o subagente é executado no nível que você escolhe na sessão, como com /effort, ou define com --effort. Em outro modelo, esse nível não se aplica. Para escolher o nível dele, defina o campo effort.
Controlar as capacidades dos subagentes
Você pode controlar o que os subagentes podem fazer por meio do acesso a ferramentas, dos modos de permissão e de regras condicionais.Ferramentas disponíveis
Os subagentes herdam as ferramentas integradas e as ferramentas MCP disponíveis na conversa principal, reduzidas por dois filtros. O primeiro remove uma pequena lista de ferramentas de todos os subagentes. O segundo reduz o conjunto de ferramentas integradas para subagentes executados em segundo plano, que é o padrão. No macOS, Linux e WSL, um subagente também pode receber as ferramentas Glob e Grep quando a conversa principal não as tem, conforme descrito em Comportamento da ferramenta Glob. Os forks ignoram ambos os filtros e recebem exatamente o conjunto de ferramentas da conversa pai. O primeiro filtro remove estas ferramentas, mesmo quando listadas no campotools:
Agent, quando o subagente está no limite de profundidade; em um fork, a ferramenta permanece listada, mas retorna um erro em vez de criar um subagenteAskUserQuestionEndConversation, que só pode encerrar a conversa principal; consulte Comportamento da ferramenta EndConversationEnterPlanModeExitPlanMode, a menos que opermissionModedo subagente sejaplanScheduleWakeupWaitForMcpServersWorkflow
Agent e ExitPlanMode, que seguem as condições do primeiro filtro onde quer que o subagente seja executado, um subagente em segundo plano mantém todas as ferramentas MCP, mas apenas estas ferramentas integradas: Read, Grep, Glob, LSP, Bash, PowerShell, Edit, Write, NotebookEdit, WebFetch, WebSearch, TodoWrite, Skill, ToolSearch, EnterWorktree, ExitWorktree, Monitor, TaskStop, SendMessage e Artifact, além de SubagentHandback para um subagente que faz seus relatos por meio dela. O Claude Code remove todas as outras ferramentas integradas de um subagente em segundo plano, sejam herdadas ou listadas no campo tools, de modo que a mesma definição pode resolver para ferramentas diferentes em primeiro plano e em segundo plano. A remoção não relata nenhum erro, a menos que deixe a lista tools resolvendo para nada.
Antes da v2.1.280, os subagentes em segundo plano não podiam usar LSP.
ListAgents segue esses filtros como qualquer ferramenta integrada: um subagente em primeiro plano a herda em sessões onde a troca de mensagens entre sessões está habilitada, e um subagente em segundo plano não a mantém.
Os colegas em equipes de agentes mantêm adicionalmente as ferramentas de tarefas e de cron: TaskCreate, TaskGet, TaskList, TaskUpdate, CronCreate, CronDelete e CronList. Em uma sessão sem as ferramentas Task, o Claude Code também não fornece as ferramentas de tarefas aos subagentes, mesmo quando o subagente executa um modelo diferente. Um colega em processo segue a sua sessão da mesma forma. Para descobrir se um colega em painel dividido tem as ferramentas de tarefas, consulte Disponibilidade da ferramenta Task.
Restringir quais ferramentas um subagente pode usar
Para restringir ferramentas, use o campotools como allowlist ou o campo disallowedTools como denylist. Se ambos estiverem definidos, disallowedTools é aplicado primeiro e, em seguida, tools é resolvido em relação ao conjunto restante. Uma ferramenta listada em ambos é removida.
Este exemplo usa tools para permitir apenas Read, Grep, Glob e Bash. O subagente não pode editar arquivos, escrever arquivos nem usar ferramentas MCP:
disallowedTools para herdar o conjunto de ferramentas do subagente, exceto Write e Edit. O subagente mantém Bash, as ferramentas MCP e o restante do seu conjunto:
tools resolve para uma ferramenta, por exemplo porque todas as entradas estão com erro de digitação ou nomeiam uma ferramenta que não está disponível para subagentes, o Claude Code geralmente se recusa a iniciar o subagente e a ferramenta Agent retorna um erro nomeando as entradas não resolvidas; consulte Agent would be spawned with zero tools para ver a mensagem e como corrigir cada entrada.
Os campos tools e disallowedTools também aceitam entradas para um servidor MCP inteiro:
Este exemplo remove todas as ferramentas do servidor MCP
github, mantendo as ferramentas de outros servidores e as ferramentas integradas no conjunto do subagente:
disallowedTools com especificador, como Bash(git push *), ainda remove a ferramenta inteira do subagente, e não apenas os comandos correspondentes. Para manter o Bash e bloquear comandos específicos, adicione uma regra de negação do Bash, como Bash(git push *), a permissions.deny nas suas configurações. A regra se aplica à conversa principal e aos subagentes.
Nomes de servidores MCP que contêm um sublinhado duplo
Se um subagente não recebe nenhuma das ferramentas de um servidor MCP cujo nome contém__, como reports__v2, verifique as entradas mcp__ do subagente:
- Em
tools: escrevamcp__seguido do nome completo do servidor e__*, como emmcp__reports__v2__*. Sem o__*final,mcp__reports__v2não corresponde a nenhuma das ferramentas desse servidor. - Em
disallowedTools: procuremcp__reportsoumcp__reports__*, as entradas que retêm um servidor chamadoreports. Com qualquer uma dessas entradas, o subagente também perde todas as ferramentas dereports__v2, porque esses nomes de ferramentas também começam commcp__reports__. Para reter apenas as ferramentas do servidorreports, liste-as uma a uma, comomcp__reports__run_query.
Restringir quais subagentes podem ser criados
Quando um agente é executado como thread principal comclaude --agent, ele pode criar subagentes usando a ferramenta Agent. Para restringir quais tipos de subagentes ele pode criar, use a sintaxe Agent(agent_type) no campo tools.
Na versão 2.1.63, a ferramenta Task foi renomeada para Agent. As referências
Task(...) existentes em configurações e definições de agentes ainda funcionam como aliases.worker e researcher podem ser criados. Se o agente tentar criar qualquer outro tipo, a requisição falha e o agente vê apenas os tipos permitidos no seu prompt. Para bloquear agentes específicos enquanto permite todos os outros, use permissions.deny.
Para permitir a criação de qualquer subagente sem restrições, use Agent sem parênteses:
Agent totalmente da lista tools, o agente não poderá criar nenhum subagente com a ferramenta Agent.
A sintaxe de allowlist Agent(agent_type) se aplica apenas a um agente executado como thread principal com claude --agent. Em uma definição de subagente, listar Agent em tools permite que esse subagente crie seus próprios subagentes enquanto o limite de profundidade permitir, mas qualquer lista de tipos dentro dos parênteses é ignorada.
Restringir servidores MCP a um subagente
Use o campomcpServers para dar a um subagente acesso a servidores MCP que não estão disponíveis na conversa principal. Os servidores inline definidos aqui são conectados quando o subagente é iniciado, sujeitos à regra de confiança para a pasta do arquivo do agente, e desconectados quando ele termina. As referências por string compartilham a conexão da sessão pai.
O campo
mcpServers se aplica em ambos os contextos em que um arquivo de agente pode ser executado:- Como subagente, criado por meio da ferramenta Agent ou de uma @-menção
- Como sessão principal, iniciada com
--agentou a configuraçãoagent
.mcp.json e dos arquivos de configurações, sob a mesma regra de confiança para a pasta do arquivo do agente. No /mcp, um servidor remoto (HTTP ou SSE) que você já usou pode mostrar o status cached; o Claude Code o conecta quando o Claude chama uma de suas ferramentas pela primeira vez..mcp.json, indexadas pelo nome do servidor, e suportam os tipos stdio, http, sse e ws.
Para manter um servidor MCP totalmente fora da conversa principal e evitar que as descrições de suas ferramentas consumam contexto ali, defina-o inline aqui em vez de no .mcp.json. O subagente recebe as ferramentas; a conversa pai não.
As restrições de MCP que se aplicam à sessão principal também abrangem os servidores declarados no frontmatter do subagente:
--strict-mcp-confige--bare- Configuração de MCP gerenciada corporativa
- Políticas
allowedMcpServersedeniedMcpServers
--strict-mcp-config não filtra servidores que você passa inline via --agents ou a opção agents do SDK, pois essas são entradas explícitas de quem faz a chamada.
Confiança exigida para servidores MCP inline
O Claude Code carrega um servidor MCP inline de um arquivo de agente no diretório.claude/agents/ do seu projeto, ou no .claude/agents/ de um diretório --add-dir, somente depois que você confia na pasta de onde o arquivo do agente veio. Antes da v2.1.238, o Claude Code carregava esses servidores sem verificar a confiança.
- Confiança que não conta: a confiança de uma pasta pai e a confiança automática que uma sessão
-pou do SDK recebe para hooks em arquivos de configurações - Até então: o Claude Code ignora todos os servidores inline nesse arquivo de agente e grava a chave exata
projects["<path>"].hasTrustDialogAcceptedpara~/.claude.jsonno log de depuração - Diretórios
--add-dir: um diretório fora do repositório do seu workspace confiável precisa de sua própria entrada de confiança, pois seus arquivos.claude/agents/não herdam a confiança do seu workspace
- Um nome que referencia um servidor que você já configurou
- Um servidor inline em um arquivo de agente de
~/.claude/agents/, em um que você passa com--agentsou a opçãoagentsdo SDK, ou em um que as configurações gerenciadas fornecem
Modos de permissão
DefinapermissionMode para escolher o modo de permissão em que um subagente é executado. Use os valores de configuração dos modos; assim, o modo Manual é default. Se você deixá-lo sem definição, o subagente herda o modo de permissão da conversa principal.
O modo de permissão da conversa principal decide se o Claude Code usa o valor que você definiu:
-
Quando a conversa principal está em
bypassPermissions,acceptEditsou no modo auto, o subagente é executado nesse mesmo modo e o Claude Code ignora opermissionModeque você definiu. No modo auto, o classificador avalia as chamadas de ferramenta do subagente com as regras de bloqueio e de permissão da conversa principal. Quando o subagente termina, o classificador também revisa seu trabalho e seu relatório final antes que o relatório seja entregue, conforme descrito em Como o modo auto lida com subagentes. Se um subagente pedir permissão enquanto a conversa principal estiver embypassPermissions, verifique se a chamada de ferramenta dele é uma das ações que nenhum modo aprova automaticamente. -
Quando a conversa principal está no modo
plan, o subagente permanece no modo de planejamento independentemente dopermissionModeque você definir, a menos que seja executado como colega de uma equipe de agentes sob as regras de equipes de agentes. Se você definirdontAsk, o subagente também não solicita sua confirmação: uma ação que o modo de planejamento pediria para você aprovar é negada. -
Quando a conversa principal está no modo
defaultoudontAsk, o subagente é executado no modo de permissão que você definiu. Em vez disso, ele mantém o modo de permissão da conversa principal nestes casos:- Você define
bypassPermissions. A exceção debypassPermissionsrequer o Claude Code v2.1.267 ou posterior. - Você define
autoe o modo auto não está disponível para o subagente, como quando um arquivo de configurações definedisableAutoModeou o modelo do subagente não suporta o modo auto.
- Você define
permissionMode aceita estes valores, e manual como alias para default:
Pré-carregar skills em subagentes
Use o camposkills para injetar o conteúdo de skills no contexto de um subagente na inicialização. Isso dá ao subagente conhecimento de domínio sem exigir que ele descubra e carregue skills durante a execução.
Skill da lista tools ou adicione-a a disallowedTools.
Você não pode pré-carregar skills que definem disable-model-invocation: true, pois o pré-carregamento usa o mesmo conjunto de skills que o Claude pode invocar. Isso inclui a skill integrada /verify, que o Claude não pode executar por conta própria.
Se uma skill listada estiver ausente ou desabilitada, por exemplo pela política da sua organização, o Claude Code a ignora e registra um aviso no log de depuração.
Isto é o inverso de executar uma skill em um subagente. Com
skills em um subagente, o subagente controla o system prompt e carrega o conteúdo da skill. Com context: fork em uma skill, o conteúdo da skill é injetado no agente que você especificar. Em ambos os casos, o subagente começa sem o histórico da sua conversa.Habilitar memória persistente
O campomemory dá ao subagente um diretório persistente que sobrevive entre conversas. O subagente usa esse diretório para acumular conhecimento ao longo do tempo, como padrões da base de código, insights de depuração e decisões arquiteturais.
A memória do subagente faz parte da memória automática: se você desativar a memória automática, com a configuração
autoMemoryEnabled ou CLAUDE_CODE_DISABLE_AUTO_MEMORY, o campo memory não tem efeito e o subagente é iniciado sem as instruções de memória ou o acesso às ferramentas de memória descritos abaixo.
Quando a memória está habilitada:
- O system prompt do subagente inclui instruções para ler e gravar no diretório de memória.
- O system prompt do subagente também inclui as primeiras 200 linhas ou 25KB de
MEMORY.mdno diretório de memória, o que ocorrer primeiro, com instruções para organizar oMEMORY.mdse ele exceder esse limite. - As ferramentas Read, Write e Edit são habilitadas automaticamente para que o subagente possa gerenciar seus arquivos de memória.
Dicas de memória persistente
-
projecté o escopo padrão recomendado. Ele torna o conhecimento do subagente compartilhável via controle de versão. - Peça ao subagente para consultar sua memória antes de começar o trabalho: “Revise este PR e verifique sua memória em busca de padrões que você já viu antes.”
- Peça ao subagente para atualizar sua memória após concluir uma tarefa: “Agora que você terminou, salve o que aprendeu na sua memória.” Com o tempo, isso cria uma base de conhecimento que torna o subagente mais eficaz.
-
Inclua instruções de memória diretamente no arquivo markdown do subagente para que ele mantenha proativamente sua própria base de conhecimento:
Regras condicionais com hooks
Para um controle mais dinâmico sobre o uso de ferramentas, use hooksPreToolUse para validar operações antes que sejam executadas. Isso é útil quando você precisa permitir algumas operações de uma ferramenta enquanto bloqueia outras.
Este exemplo cria um subagente que permite apenas consultas de banco de dados somente leitura. O hook PreToolUse executa o script especificado em command antes de cada comando Bash ser executado:
UPDATE: o script sai com código 2, o Claude Code bloqueia o comando e o subagente vê a mensagem Blocked: Only SELECT queries are allowed.
Consulte Entrada do hook para o esquema de entrada completo e códigos de saída para saber como os códigos de saída afetam o comportamento. No Windows, escreva scripts de hook em PowerShell e adicione shell: powershell à entrada do hook, conforme mostrado em executar hooks no PowerShell.
Desabilitar subagentes específicos
Você pode impedir que o Claude use subagentes específicos adicionando-os ao arraydeny nas suas configurações. Use o formato Agent(subagent-name), em que subagent-name corresponde ao campo name do subagente.
--disallowedTools:
Definir hooks para subagentes
Os subagentes podem definir hooks que são executados durante o ciclo de vida do subagente. Há duas maneiras de configurar hooks:- No frontmatter do subagente: defina hooks que são executados apenas enquanto esse subagente está ativo
- Em
settings.json: defina hooks de toda a sessão que também disparam dentro dos subagentes. Eventos de ferramentas comoPreToolUseePostToolUsedisparam para as chamadas de ferramenta do subagente da mesma forma que na conversa principal, eSubagentStarteSubagentStopdisparam quando um subagente começa ou termina
PreToolUse em settings.json também é executado antes de cada ferramenta que um subagente usa.
Hooks no frontmatter do subagente
Defina hooks diretamente no arquivo markdown do subagente. Esses hooks são executados apenas enquanto aquele subagente específico está ativo e são removidos quando ele termina.Os hooks do frontmatter disparam quando o agente é criado como subagente por meio da ferramenta Agent ou de uma @-menção, e quando o agente é executado como sessão principal via
--agent ou a configuração agent. No caso da sessão principal, eles são executados junto com quaisquer hooks definidos em settings.json.~/.claude/agents/ e de definições que você passa com --agents são executados sem essa etapa. Se você adicionou uma pasta com --add-dir de fora do repositório do seu workspace confiável, confie nessa pasta separadamente: os hooks do seu .claude/agents/ não herdam a concessão do workspace.
Até que você confie na pasta, o subagente ainda é executado, mas o Claude Code ignora seus hooks de frontmatter e registra no log de depuração um erro explicando como confiar na pasta. Esta é uma regra mais rigorosa do que a dos hooks em arquivos de configurações: confiar em uma pasta pai não é suficiente, e uma sessão -p não conta como confiável. O que é executado antes de você confiar em uma pasta compara as duas.
Todos os eventos de hook são suportados. Os eventos mais comuns para subagentes são:
Este exemplo valida comandos Bash com o hook
PreToolUse e executa um linter após edições de arquivos com PostToolUse:
Stop no frontmatter são convertidos automaticamente em eventos SubagentStop.
Hooks de nível de projeto para eventos de subagentes
Configure hooks emsettings.json que respondem a eventos do ciclo de vida de subagentes na sessão principal.
Ambos os eventos suportam matchers para direcionar tipos de agentes específicos pelo nome. O valor do matcher é o
name do frontmatter do agente para subagentes de nível de projeto e de nível de usuário, ou o identificador com escopo de plugin, como my-plugin:db-agent, para subagentes de plugin. Um nome com escopo contém dois-pontos, então é avaliado como uma expressão regular não ancorada; ancore-o com ^ e $, como em ^my-plugin:db-agent$, para corresponder apenas a esse agente.
Este exemplo executa um script de configuração apenas quando o subagente db-agent é iniciado, e um script de limpeza quando qualquer subagente para:
Trabalhar com subagentes
Entender delegação automática
Claude delega tarefas automaticamente com base na descrição da tarefa em sua solicitação, no campodescription nas configurações de subagentes e no contexto atual. Para incentivar delegação proativa, inclua frases como “use proativamente” no campo de descrição do seu subagente.
Mantenha as descrições breves: Claude Code mostra um aviso de inicialização quando as descrições combinadas de seus subagentes ultrapassam o limite de 15.000 tokens, e ainda carrega todos os subagentes.
Se o subagente é fornecido em um plugin, você pode medir o quão confiável Claude delega a ele em prompts realistas em vez de verificar um de cada vez: claude plugin eval executa cada prompt com e sem o plugin e pontua os resultados.
Invocar subagentes explicitamente
Quando a delegação automática não é suficiente, você pode solicitar um subagente você mesmo. Três padrões escalam de uma sugestão única para um padrão em toda a sessão:- Linguagem natural: nomeie o subagente em seu prompt; Claude decide se deve delegar
- @-mention: garante que o subagente seja executado para uma tarefa
- Em toda a sessão: toda a sessão é executada como esse subagente via flag
--agentou configuraçãoagent
@ e escolha o subagente na lista de sugestões, da mesma forma que você @-menciona arquivos. Isso garante que esse subagente específico seja executado em vez de deixar a escolha para Claude:
my-plugin:code-reviewer ou my-plugin:review:security quando o plugin organiza agentes em subpastas. Subagentes em segundo plano nomeados atualmente em execução na sessão também aparecem na lista de sugestões, mostrando seu status ao lado do nome.
Você também pode digitar a menção manualmente sem usar o seletor: @agent-<name> para subagentes locais, ou @agent- seguido pelo nome com escopo para subagentes de plugin, por exemplo @agent-my-plugin:code-reviewer. Enquanto você digita este formulário, a lista de sugestões mostra correspondências de arquivo em vez de agentes. A menção do agente ainda é resolvida quando você envia.
Execute toda a sessão como um subagente. Passe --agent <name> para iniciar uma sessão onde o thread principal em si assume as restrições de ferramentas e o modelo desse subagente:
--system-prompt faz. Os arquivos CLAUDE.md e a memória do projeto ainda são carregados através do fluxo de mensagens normal, mesmo quando a definição do agente define omitClaudeMd. Se você executar a sessão com -p como um agente personalizado que tem seu próprio prompt, ela também inicia sem o snapshot de status do git.
O nome do agente aparece como @<name> no cabeçalho de inicialização para que você possa confirmar que está ativo.
Isso funciona com subagentes integrados e personalizados, e a escolha persiste quando você retoma a sessão: Claude Code restaura as restrições de ferramentas e o modelo do agente junto com a conversa. Se o agente não existir mais quando você retomar, a sessão continua com as ferramentas padrão e mostra um aviso nomeando o agente. Para o system prompt em ambos os casos, consulte Flags de system prompt em conversas retomadas.
Para um subagente fornecido por plugin, você pode passar apenas o nome do agente e Claude Code o encontra:
agents/, inclua a subpasta no nome com escopo, por exemplo claude --agent my-plugin:review:security.
Para torná-lo o padrão para cada sessão em um projeto, defina agent em .claude/settings.json:
Executar subagentes em primeiro plano ou segundo plano
Subagentes podem ser executados em primeiro plano ou segundo plano:- Subagentes em primeiro plano bloqueiam a conversa principal até a conclusão. Prompts de permissão são passados para você conforme surgem.
- Subagentes em segundo plano são executados simultaneamente enquanto você continua trabalhando. Quando um subagente em segundo plano atinge uma chamada de ferramenta que precisa de permissão, Claude Code exibe o prompt em sua sessão principal e nomeia o subagente que está pedindo. Aprove para deixar o subagente continuar, ou pressione Esc para negar essa chamada de ferramenta sem parar o subagente.
Quais subagentes são executados em segundo plano
Sem nada configurado, um subagente que Claude gera a partir da sua conversa principal inicia em segundo plano.claude -pe o Agent SDK: Claude pode aguardar, por seu próprio julgamento ou quando você pede.- Sessão interativa no terminal, VS Code e sessões do aplicativo desktop na sua máquina: para deixar Claude aguardar um subagente, desative o modo fork, que está ativado por padrão.
context: fork, Claude Code segue as regras em Executar skills em um subagente, independentemente de o modo fork estar ativado.
Deixar Claude aguardar um subagente
-
Desative o modo fork definindo
CLAUDE_CODE_FORK_SUBAGENTcomo0, por exemplo emsettings.json: -
Execute
claudenovamente a partir do seu shell, ou abra uma nova conversa no VS Code. - Peça a Claude para aguardar quando você precisar de um resultado primeiro, por exemplo “execute o subagente revisor e aguarde o relatório dele”.
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS como 1 em vez de desativar o modo fork, Claude aguarda os subagentes terminarem antes de continuar. Os comandos em segundo plano também ficam desativados, e Ctrl+B não move nada para o segundo plano.
Ferramentas, permissões e resultados de subagentes em segundo plano
Subagentes em segundo plano são executados com um conjunto de ferramentas integradas menor do que subagentes em primeiro plano, exceto para forks de conversa e subagentes em primeiro plano retomados. Subagentes em segundo plano exibem cada prompt de permissão em sua sessão principal. Quando você responde um desses prompts com uma escolha que dura além dessa chamada de ferramenta, como uma concessão que dura o resto da sessão, Claude Code aplica sua resposta a toda a sessão, incluindo sua conversa principal. Um subagente em segundo plano pode deixar um comando Bash ou PowerShell em segundo plano em execução após o final de seu turno. Quando esse comando termina, Claude Code envia ao subagente uma notificação. Os resultados de um subagente em segundo plano chegam a Claude como uma notificação de conclusão em um turno posterior. Claude aguarda essa notificação antes de relatar os resultados do subagente, e se você perguntar sobre o progresso primeiro, ele relata que o subagente ainda está em execução.Subagentes concluídos no painel e na lista de tarefas
Claude Code limpa a linha de um subagente em segundo plano do painel de subagentes abaixo da entrada de prompt de uma de duas maneiras, dependendo de como o subagente terminou:- Quando um subagente termina com sucesso, Claude Code remove sua linha imediatamente e, exceto no modo leitor de tela, mostra
/tasks to see subagentsno rodapé por 30 segundos. Durante esses 30 segundos, execute/taskse pressioneEnterno subagente para abrir sua transcrição. Antes da v2.1.232, Claude Code mantinha a linha por 30 segundos após o subagente terminar, o mesmo que um com falha, e não mostrava dica de rodapé. - Quando um subagente falha ou você o para, Claude Code mantém sua linha por 30 segundos. Para limpar a linha mais cedo, selecione-a e pressione
x.
/tasks, marcado como concluído e classificado abaixo do trabalho em execução, pelos mesmos 30 segundos que a dica de rodapé. Sua visualização de detalhes permanece aberta quando o subagente termina. Subagentes que falham ou que você para saem da lista. Antes da v2.1.208, um subagente concluído saía da lista no momento em que terminava e sua visualização de detalhes fechava.
Nomes de subagentes
Se você iniciar uma sessão com equipes de agentes habilitadas, Claude pode dar um nome a um subagente passando um parâmetroname na chamada da ferramenta Agent. Ele pode fazer isso por conta própria, sem pedir a você primeiro. O nome torna o subagente endereçável: Claude pode mensagear ou retomá-lo pelo nome após terminar.
Em uma sessão interativa com equipes de agentes habilitadas, um subagente que Claude gera da conversa principal com um name é lançado como um colega, a menos que a chamada seja um fork ou passe isolation na chamada em si. Um valor isolation no frontmatter do subagente não o impede, e o colega então é executado no diretório de trabalho da sessão principal. Consulte Como Claude inicia equipes de agentes.
Erros de API em subagentes
Quando algo interrompe a resposta de um subagente no meio do fluxo, e a resposta parcial contém texto mas nenhuma chamada de ferramenta, Claude Code solicita ao subagente que continue em vez de encerrar a execução. Isso também acontece em sessões interativas. A execução termina no erro apenas uma vez que essas continuações são usadas. Um subagente cuja execução termina em um erro de API, como um limite de uso ou um erro de servidor repetido, relata essa falha de volta a Claude. O que Claude recebe depende de onde o subagente foi executado:- Primeiro plano: se um rate limit, sobrecarga ou erro de servidor interromper um subagente que já produziu saída de texto, a ferramenta Agent retorna essa saída parcial com uma nota de que o subagente foi interrompido e não completou sua tarefa. Um subagente que não produziu nada, ou cuja única saída foram chamadas de ferramenta, falha com
Agent terminated early due to an API error, seguido pelo detalhe do erro. - Segundo plano: o subagente é marcado como com falha, e a mensagem que Claude recebe quando termina nomeia o erro de API e inclui a última saída do subagente, para que o trabalho parcial não seja perdido.
Verificação de saída de subagente
Claude Code verifica o relatório final de cada subagente antes de Claude lê-lo. Um subagente pode ter lido arquivos, páginas da web ou saída de comando que você nunca revisou, e texto dessas fontes pode carregar instruções destinadas à conversa principal. A verificação nunca remove ou reformula nada; ela faz dois tipos de mudança que você pode notar em um relatório:- Inserção de barra invertida: a verificação insere uma barra invertida em texto que imita a própria saída do Claude Code, como uma tag
<system-reminder>ou uma linha começando comHuman:ouAssistant:, para que a imitação seja lida como texto comum em vez de ser confundida com parte da conversa. - Linha de marcador: a verificação prepara uma linha começando com
[harness: subagent output matched instruction-shaped pattern(s):quando o relatório imita uma tag como<system-reminder>ou menciona configurações de permissão comobypassPermissionsou--dangerously-skip-permissions. Menções de configuração de permissão recebem a linha de marcador, mas o texto em si permanece como escrito.
Padrões comuns
Isolar operações de alto volume
Um dos usos mais eficazes para subagentes é isolar operações que produzem grandes quantidades de saída. Executar testes, buscar documentação ou processar arquivos de log pode consumir contexto significativo. Ao delegar isso a um subagente, a saída detalhada permanece no contexto do subagente enquanto apenas o resumo relevante retorna à sua conversa principal.Executar pesquisa paralela
Para investigações independentes, gere vários subagentes para trabalhar simultaneamente:Encadear subagentes
Para fluxos de trabalho de várias etapas, peça a Claude para usar subagentes em sequência. Cada subagente completa sua tarefa e retorna resultados a Claude, que então passa contexto relevante para o próximo subagente.Escolher entre subagentes e conversa principal
Use a conversa principal quando:- A tarefa precisa de frequente ida e volta ou refinamento iterativo
- Múltiplas fases compartilham contexto significativo, como planejamento, implementação e testes
- Você está fazendo uma mudança rápida e direcionada
- A latência importa. Um subagente que não é um fork começa do zero e pode precisar de tempo para reunir contexto
- A tarefa produz saída detalhada que você não precisa em seu contexto principal
- Você quer impor restrições de ferramentas ou permissões específicas
- O trabalho é autossuficiente e pode retornar um resumo
/btw em vez de um subagente. Ele não tem acesso a ferramentas, e a resposta não é adicionada ao histórico.
Deixar subagentes gerar seus próprios subagentes
Por padrão, um subagente pode gerar subagentes de seu próprio, até três camadas abaixo da conversa principal. No limite de profundidade, Claude Code retém a ferramentaAgent de cada subagente, exceto um fork, para que um subagente no limite faça seu trabalho delegado em si e retorne um resumo. Um fork no limite mantém Agent em sua lista de ferramentas herdada, mas a ferramenta retorna um erro em vez de gerar.
Subagentes aninhados são adequados para uma tarefa delegada que em si se divide em subtarefas paralelas, como um subagente revisor que despacha um verificador por descoberta. Por padrão, o subagente que gera aguarda o relatório de cada subagente aninhado:
- Sessão interativa no terminal: apenas o resumo do subagente de nível superior retorna para você, porque um subagente que lança subagentes em segundo plano aguarda seus resultados antes de terminar.
claude -pe o Agent SDK: o subagente que gera aguarda enquanto o modo fork está ativado. Se você desativar o modo fork, os subagentes aninhados iniciam em segundo plano em vez disso. O subagente que gera não aguarda um subagente aninhado em segundo plano, que relata à sua conversa principal se durar mais que o subagente que o gerou.
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH para o número de camadas de subagente que você quer abaixo de sua conversa principal. Por exemplo, esta entrada em settings.json limita o aninhamento a duas camadas:
1 para desativar o aninhamento.
Defina um subagente aninhado nos mesmos escopos que um de nível superior. Por padrão, um subagente aninhado que você define é executado no modelo do subagente que o gera. Para manter um subagente de gerar enquanto o aninhamento está ativado, como um revisor que deve permanecer somente leitura, omita Agent de sua lista tools ou adicione-o a disallowedTools.
No terminal, Claude Code mostra subagentes aninhados como uma árvore no painel de subagentes abaixo da entrada de prompt e marca cada linha que ainda tem descendentes no painel com uma contagem (+N) deles. Abra uma linha para ver os irmãos e filhos diretos desse subagente com um caminho de volta para main.
Limite de subagente concorrente
Dois limites controlam o uso de subagentes, cada um com sua própria variável: este impede que Claude gere mais subagentes enquanto muitos estão em execução, e o limite de profundidade limita o quão profundamente os subagentes se aninham. Não há limite no número total de subagentes que Claude pode gerar ao longo de uma sessão. Por padrão, quando 20 subagentes estão em execução em uma sessão, gerar outro com a ferramenta Agent falha comConcurrent subagent limit reached, e o erro diz a Claude para não tentar novamente. A geração é bem-sucedida novamente quando a contagem em execução cai abaixo do limite. Para alterar o limite, defina CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS para qualquer número inteiro positivo. Sessões com ultracode ativo estão isentas: o limite não é imposto lá. Requer Claude Code v2.1.217 ou posterior.
O limite bloqueia apenas subagentes que Claude gera com a ferramenta Agent, mas outras execuções ocupam os mesmos slots:
- Um fork em sessão que você inicia com
/subtaskocupa um slot enquanto é executado e nunca é bloqueado pelo limite. - Retomar um subagente que já terminou ocupa um slot novo sem verificar o limite, para que retomadas possam empurrar a contagem em execução além dele.
Gerenciar contexto de subagente
O que é carregado na inicialização
Cada subagente começa com uma janela de contexto fresca e isolada. Ele não vê seu histórico de conversa, as skills que você já invocou ou os arquivos que Claude já leu. Claude compõe uma mensagem de delegação que resume a tarefa, e o subagente trabalha a partir daí. A exceção é um fork, que herda a conversa pai em vez de começar do zero. O contexto inicial de um subagente não-fork contém:- System prompt: o próprio prompt do agente mais detalhes de ambiente que Claude Code acrescenta, não o system prompt do Claude Code. Subagentes personalizados definem o seu no corpo markdown ou campo
prompt. Agentes integrados têm prompts predefinidos. - Mensagem de tarefa: o prompt de delegação que Claude escreve quando passa o trabalho.
- Arquivos CLAUDE.md: cada nível da hierarquia CLAUDE.md que a conversa principal carrega, incluindo
~/.claude/CLAUDE.md, regras do projeto,CLAUDE.local.md, arquivos de política gerenciada e qualquer arquivoAGENTS.mdcarregado como instruções do projeto. Os agentes Explore e Plan integrados pulam isso. Um subagente cuja definição defineomitClaudeMdcarrega apenas os arquivos de política gerenciada, ou nenhum quando a definição vem de configurações gerenciadas. - Status Git: um snapshot que Claude Code lê do seu repositório quando o subagente é iniciado. Para um subagente em seu próprio worktree desse repositório, o snapshot mostra o branch, o status e os commits recentes do worktree. Ausente fora de um repositório Git ou sempre que o snapshot estiver desativado; consulte
includeGitInstructions. Explore e Plan o pulam de qualquer forma. - Skills pré-carregadas: conteúdo completo de qualquer skill nomeada no campo
skillsdo agente. Agentes integrados não pré-carregam skills. - Roster de irmãos: um lembrete do sistema listando
maine cada outro agente nomeado na sessão, cada um um valortoválido paraSendMessage. O roster aparece apenas quando as ferramentas do subagente incluemSendMessagee pelo menos um outro agente tem um nome, seja Claude o nomeou ao gerá-lo ou ele é executado como um colega de equipe de agentes. É um snapshot tirado quando o subagente começa, então agentes nomeados depois não aparecem.
omitClaudeMd: true em seu frontmatter ou --agents JSON. Para Explore, Plan e subagentes com omitClaudeMd, o CLAUDE.md de um subdiretório e as regras com escopo de caminho correspondentes ainda são carregados quando o subagente trabalha com arquivos nesse local.
A conversa principal ainda tem seu CLAUDE.md completo quando lê os resultados desses subagentes, então a maioria das regras não precisa alcançar o subagente em si. Se uma regra deve, como “ignore o diretório vendor/,” reafirme-a no prompt que você dá a Claude ao delegar.
Você não pode alterar quais subagentes recebem status git. Apenas Explore e Plan pulam.
Algum estado da conversa principal nunca alcança um subagente não-fork:
- Estilo de saída: um subagente executa seu próprio system prompt, então seu estilo de saída não molda suas respostas, exceto em um fork.
- Memória automática: a memória automática da conversa principal não é carregada. Para dar a um subagente memória persistente de seu próprio, use o campo
memory. - Tamanho da janela de contexto: a janela de contexto de um subagente é dimensionada por seu próprio modelo, não pelo pai. Delegar a um modelo com uma janela menor dá a esse subagente a janela menor.
Retomar subagentes
Cada invocação de subagente cria uma nova instância em vez de continuar uma anterior. Para continuar o trabalho de um subagente existente em vez de começar do zero, peça a Claude para retomá-lo. Subagentes retomados retêm seu histórico de conversa completo, incluindo todas as chamadas de ferramenta anteriores, resultados e raciocínio. Se o subagente gerou subagentes em segundo plano de seu próprio, esse histórico inclui os resultados que entregaram enquanto era executado. Antes da v2.1.304, um subagente que Claude mensageava ou retomava logo após ele terminar podia esquecer seu trabalho mais recente.- Quando um subagente é concluído, Claude recebe seu ID de agente.
- Os agentes Explore e Plan integrados são de uma única execução e não retornam um ID de agente, então Claude não pode retomá-los. Use
general-purposeou um subagente personalizado quando você precisa continuar o trabalho. - Quando um subagente para em seu limite
maxTurns, Claude Code marca a saída retornada como parcial, e Claude pode retomar o subagente para continuar seu trabalho.
SendMessage com o ID ou nome do agente como o campo to para retomá-lo. SendMessage não requer que equipes de agentes estejam habilitadas; apenas mensagens de protocolo de equipe estruturadas como shutdown_request e plan_approval_response fazem. Além de subagentes e colegas, em sessões onde mensagens entre sessões estão habilitadas, Claude pode usar a mesma ferramenta para mensagear suas outras sessões do Claude Code, nesta máquina ou além dela.
Para retomar um subagente, peça a Claude para continuar o trabalho anterior:
SendMessage, o subagente retoma em segundo plano sem uma nova invocação Agent. O mesmo se aplica a um subagente que Claude parou com a ferramenta TaskStop, uma vez que sua execução parada tenha saído. A execução retomada mantém o conjunto de ferramentas de onde o subagente foi executado primeiro e pode continuar lendo o cache de prompt que a execução original aqueceu.
Um subagente que tem a ferramenta SendMessage pode enviar essa mensagem também. Em uma sessão interativa, o agente retomado então relata de volta ao subagente que o retomou, não à sua conversa principal. Esse subagente aguarda o resultado antes de terminar seu próprio trabalho. Quando um subagente mensageia um agente ao qual relata, como seu próprio iniciador, Claude Code retoma esse agente sem redirecionar seus resultados.
Um subagente que você parou você mesmo, com x em /tasks ou uma requisição SDK stop_task, não retoma automaticamente. Se Claude enviar uma mensagem a ele, a mensagem é recusada e Claude é informado de que o agente foi cancelado.
Enquanto a linha desse subagente ainda está no painel de subagentes, digite em sua transcrição para retomá-lo você mesmo. Depois disso, uma mensagem de Claude pode retomá-lo automaticamente novamente.
Retomar inicia uma nova execução do agente sob o mesmo ID, então um subagente que já havia falhado ou sido concluído mostra como em execução novamente na lista de tarefas e nos eventos de tarefa do Agent SDK.
SendMessage verifica que um nome ainda se refere ao mesmo agente que alcançou anteriormente na conversa. Se um agente mais novo assumiu o nome, como um agente em segundo plano re-gerado que o reutilizou, Claude Code recusa o envio em vez de entregá-lo ao agente errado, e o erro relata qual agente o nome agora alcança para que Claude possa redirecionar. Para alcançar o agente anterior enquanto ainda está em execução, Claude o endereça pelo ID do agente que recebeu quando gerou esse agente. A verificação é restrita à conversa atual e é redefinida em /clear.
Um subagente trata mensagens do agente que o lançou como direção de tarefa normal, incluindo correções de curso no meio da tarefa, e age sobre elas dentro de suas próprias configurações de permissão. Dois limites se mantêm independentemente de quem enviou a mensagem: nenhuma mensagem de qualquer agente conta como sua aprovação para um prompt de permissão pendente, e nenhuma mensagem de agente pode alterar as configurações de permissão, CLAUDE.md ou configuração de um subagente. Apenas o sistema de permissão ou suas próprias mensagens podem conceder aprovação.
Você também pode pedir a Claude o ID do agente se quiser referenciá-lo explicitamente, ou encontrar IDs nos arquivos de transcrição em ~/.claude/projects/{project}/{sessionId}/subagents/. Cada transcrição é armazenada como agent-{agentId}.jsonl.
Transcrições de subagentes persistem independentemente da conversa principal:
- Compactação da conversa principal: quando a conversa principal é compactada, as transcrições de subagentes não são afetadas. Elas são armazenadas em arquivos separados.
- Persistência de sessão: as transcrições de subagentes persistem dentro de sua sessão. Você pode retomar um subagente após reiniciar Claude Code retomando a mesma sessão.
- Limpeza automática: Claude Code deleta transcrições de subagentes após o período de retenção
cleanupPeriodDays, 30 dias por padrão, seguindo as regras de varredura de retenção.
Mensagear um subagente pelo nome após uma reinicialização
Para um subagente que foi lançado como um colega, consulte as limitações de equipes de agentes em vez disso.
agent-{agentId}.meta.json em ~/.claude/projects/{project}/{sessionId}/subagents/.
Após uma mensagem por ID, o nome do subagente volta a funcionar, a menos que um agente mais novo tenha assumido esse nome. Antes da v2.1.299, nenhum nome sobrevivia a uma reinicialização, e um envio por nome era recusado mesmo quando o ID do agente ainda funcionava.
Compactação automática
Subagentes suportam compactação automática. A compactação é acionada à medida que a própria janela de contexto do subagente se enche, eCLAUDE_AUTOCOMPACT_PCT_OVERRIDE se aplica a subagentes também. Consulte variáveis de ambiente para quando a substituição entra em vigor.
Eventos de compactação são registrados em arquivos de transcrição de subagentes:
preTokens mostra quantos tokens foram usados antes da compactação ocorrer.
Definir a janela de compactação automática para um subagente
Para fazer um subagente compactar mais cedo do que faria de outra forma, definaautoCompactWindow em seu frontmatter como uma contagem de tokens de 100000 a 1000000. Se você definir CLAUDE_CODE_AUTO_COMPACT_WINDOW, o subagente usa a janela dessa variável em vez disso e o campo não tem efeito, a menos que Claude Code ignore o valor da variável. Requer Claude Code v2.1.296 ou posterior.
Este frontmatter define autoCompactWindow como 200.000 tokens para um subagente que lê arquivos de log longos:
200000, porque no frontmatter Claude Code lê 200k como 200, que está fora do intervalo permitido. O subagente ainda é carregado e compacta como se o campo estivesse ausente. Para verificar se Claude Code ignorou seu valor, execute claude --debug em seu shell e procure invalid autoCompactWindow no log de depuração.
Se o valor estiver dentro do intervalo e você ainda não vir nenhuma mudança, verifique estas causas:
- O valor não está abaixo da janela de compactação automática que o subagente herdaria de outra forma: para compactar mais cedo, defina um valor abaixo dessa janela.
- Você executa toda a sessão como este subagente com
--agentou a configuraçãoagent: o campo não tem efeito nesse caso. Para definir a janela da sessão, consulte Definir a janela de compactação automática.
Bifurcar a conversa atual
Quando a visualização de agente está desativada,
/subtask não está disponível e /fork inicia o subagente bifurcado; caso contrário, /fork copia toda a sessão para uma nova sessão em background.- Entrada: uma bifurcação vê o mesmo system prompt, ferramentas, modelo e histórico de mensagens que sua conversa pai
- Saída: as próprias chamadas de ferramenta da bifurcação ficam fora de sua conversa pai e apenas seu resultado final volta
/subtask seguido de uma tarefa, independentemente de o modo de bifurcação estar ativado. Claude Code nomeia a bifurcação a partir das primeiras palavras da tarefa. O exemplo a seguir bifurca a conversa para rascunhar casos de teste enquanto você continua com a implementação na sessão principal:
Observar e orientar bifurcações em execução
Bifurcações em execução aparecem em um painel abaixo da entrada de prompt, com uma linha para a sessão principal e uma para cada bifurcação. Quando uma bifurcação termina com sucesso, Claude Code remove sua linha. Claude Code mantém a linha de uma bifurcação que falhou ou que você parou por 30 segundos, o mesmo que para qualquer outro subagente em background. Antes da v2.1.232, Claude Code também mantinha a linha de uma bifurcação terminada por 30 segundos. Use estas teclas para interagir com o painel:
Com a transcrição de uma bifurcação ou subagente aberta, mensagens de acompanhamento e skills vão para esse agente. No Claude Code v2.1.314 ou posterior,
/btw responde a partir da transcrição aberta. Outros comandos integrados vão para sua conversa principal, com estas salvaguardas:
/compact,/cleare/rewindatuam na conversa principal, então Claude Code pede que você confirme antes de executar um deles a partir desta visualização./modele/fastdefinem o modelo e o modo rápido da conversa principal, não os do agente visualizado, então não são executados a partir desta visualização. Um aviso informa o motivo.
Ctrl+Enter ou Ctrl+X Ctrl+S. Qualquer comando de shell ou subagente que o agente está aguardando e que possa ser movido para o background é movido para lá e continua em execução. Quando o agente está escrevendo uma resposta, ou aguardando um trabalho que não pode ser movido para o background, ele continua e lê sua mensagem assim que isso terminar. Requer Claude Code v2.1.286 ou posterior.
Como bifurcações diferem de outros subagentes
Porque o system prompt de uma bifurcação e as definições de ferramentas são idênticos aos do pai, sua primeira requisição reutiliza o cache de prompt do pai. Por causa dessa reutilização, uma bifurcação custa menos do que um subagente fresco para tarefas que precisam do mesmo contexto.
Quando Claude gera uma bifurcação através da ferramenta Agent, ele pode passar
isolation: "worktree" para que as edições de arquivo da bifurcação sejam escritas em um git worktree separado em vez de seu checkout. Uma bifurcação não pode gerar bifurcações adicionais.
Desativar o modo de bifurcação
O modo de bifurcação permite que Claude inicie uma bifurcação por conta própria. Para impedir que Claude inicie bifurcações:- Impedir apenas as bifurcações: adicione
"Agent(fork)"apermissions.denynas suas configurações. - Desativar o modo de bifurcação: defina
CLAUDE_CODE_FORK_SUBAGENTcomo0, seguindo as etapas em Permitir que Claude aguarde um subagente.
Subagentes de exemplo
Estes exemplos demonstram padrões eficazes para construir subagentes. Use-os como pontos de partida, ou gere uma versão personalizada com Claude.Revisor de código
Um subagente somente leitura que revisa código sem modificá-lo. Este exemplo mostra como projetar um subagente focado com acesso limitado a ferramentas que exclui Edit e Write, e um prompt detalhado que especifica exatamente o que procurar e como formatar a saída.Debugger
Um subagente que pode analisar e corrigir problemas. Diferentemente do revisor de código, este inclui Edit porque corrigir bugs requer modificar código. O prompt fornece um fluxo de trabalho claro de diagnóstico para verificação.Cientista de dados
Um subagente específico de domínio para trabalho de análise de dados. Este exemplo mostra como criar subagentes para fluxos de trabalho especializados fora de tarefas de codificação típicas. Ele explicitamente definemodel: sonnet para análise mais capaz.
Validador de consulta de banco de dados
Um subagente que permite acesso Bash mas valida comandos para permitir apenas consultas SQL somente leitura. Este exemplo mostra como usar hooksPreToolUse para validação condicional quando você precisa de controle mais fino do que o campo tools fornece.
command em sua configuração de hook:
shell: powershell à entrada de hook. Veja executando hooks em PowerShell.
O hook recebe JSON via stdin com o comando Bash em tool_input.command. Código de saída 2 bloqueia a operação e alimenta a mensagem de erro de volta para Claude. Veja Hooks para detalhes sobre códigos de saída e Hook input para o schema de entrada completo.
O prompt do sistema diz ao subagente para recusar solicitações de escrita, então o hook é um backstop: se o subagente tentar uma escrita mesmo assim, Claude Code bloqueia o comando e o subagente vê a mensagem Blocked: Write operations not allowed. Use SELECT queries only..
Próximos passos
Agora que você entende subagentes, explore estes recursos relacionados:- Distribuir subagentes com plugins para compartilhar subagentes entre equipes ou projetos
- Executar Claude Code programaticamente com o Agent SDK para CI/CD e automação
- Usar MCP servers para dar aos subagentes acesso a ferramentas e dados externos