Pular para o conteúdo principal
Subagentes são instâncias de agente separadas que seu agente principal pode gerar para lidar com subtarefas focadas. Use subagentes para isolar contexto, executar múltiplas análises em paralelo e aplicar instruções especializadas sem adicionar ao prompt do agente principal. Este guia explica como definir e usar subagentes no SDK usando o parâmetro agents.

Visão geral

Você pode criar subagentes de três maneiras:
  • Programaticamente: use o parâmetro agents em suas opções query(). Veja as referências TypeScript e Python
  • Baseado em sistema de arquivos: defina agentes como arquivos markdown em diretórios .claude/agents/. Veja definindo subagentes como arquivos
  • Propósito geral integrado: Claude pode invocar o subagente integrado general-purpose a qualquer momento via a ferramenta Agent sem você definir nada
Este guia se concentra na abordagem programática, que é recomendada para aplicações SDK. Quando você define subagentes, Claude determina se deve invocá-los com base no campo description de cada subagente. Escreva descrições claras que expliquem quando usar o subagente, e Claude delegará automaticamente tarefas apropriadas. Você também pode solicitar explicitamente um subagente pelo nome em seu prompt, por exemplo “Use o agente code-reviewer para…”.

Benefícios de usar subagentes

Isolamento de contexto

Cada subagente é executado em sua própria conversa nova. Chamadas de ferramentas intermediárias e resultados permanecem dentro do subagente; apenas sua mensagem final retorna ao pai. Veja O que subagentes herdam para saber exatamente o que está no contexto do subagente. Exemplo: um subagente research-assistant pode explorar dezenas de arquivos sem que nenhum desse conteúdo se acumule na conversa principal. O pai recebe um resumo conciso, não cada arquivo que o subagente leu.

Paralelização

Múltiplos subagentes podem ser executados simultaneamente, portanto subtarefas independentes terminam no tempo do mais lento em vez da soma de todos eles. Exemplo: durante uma revisão de código, você pode executar os subagentes style-checker, security-scanner e test-coverage simultaneamente em vez de sequencialmente.

Instruções e conhecimento especializados

Cada subagente pode ter prompts de sistema personalizados com expertise específica, melhores práticas e restrições. Exemplo: um subagente database-migration pode ter conhecimento detalhado sobre melhores práticas SQL, estratégias de reversão e verificações de integridade de dados que seriam ruído desnecessário nas instruções do agente principal.

Restrições de ferramentas

Subagentes podem ser limitados a ferramentas específicas, reduzindo o risco de ações não intencionais. Exemplo: um subagente doc-reviewer pode ter acesso apenas às ferramentas Read e Grep, garantindo que possa analisar mas nunca modifique acidentalmente seus arquivos de documentação.

Criar subagentes

Defina subagentes diretamente em seu código usando o parâmetro agents. Claude invoca subagentes através da ferramenta Agent, portanto inclua Agent em allowedTools para aprovar automaticamente invocações de subagentes sem um prompt de permissão. A maioria dos exemplos nesta página imprime apenas o resultado final. Para confirmar que Claude delegou a um subagente em vez de responder diretamente, veja Detectar invocação de subagente. Este exemplo cria dois subagentes: um revisor de código com acesso somente leitura e um executor de testes que pode executar comandos.

Configuração de AgentDefinition

No SDK Python, nomes de campo com múltiplas palavras como disallowedTools e mcpServers mantêm sua ortografia camelCase para corresponder ao formato de transmissão em vez de seguir a convenção snake_case do Python. Veja a referência AgentDefinition para detalhes. Dois comportamentos de subagente mudaram no Claude Code v2.1.198:
  • Subagentes são executados em fundo por padrão. Uma chamada de ferramenta Agent que omite a entrada run_in_background inicia um subagente em fundo, e Claude define run_in_background: false quando precisa do resultado antes de continuar. Antes da v2.1.198, omitir run_in_background executava o subagente sincronamente. Defina o campo background como true para forçar execução em fundo para um agente específico independentemente do que Claude solicita.
  • Um subagente herda a configuração de pensamento estendido da sessão principal. Em versões anteriores, o pensamento estendido é desabilitado dentro de subagentes independentemente da configuração da sessão principal.
A partir do Claude Code v2.1.172, subagentes podem gerar seus próprios subagentes. Um subagente cinco níveis abaixo do agente principal não pode gerar mais subagentes, independentemente de ser executado em primeiro plano ou em fundo. Para evitar que um subagente gere outros, omita Agent de seu array tools ou adicione-o a disallowedTools. Veja subagentes aninhados para as regras de profundidade completas.

Definição baseada em sistema de arquivos (alternativa)

Você também pode definir subagentes como arquivos markdown em diretórios .claude/agents/. Veja a documentação de subagentes Claude Code para detalhes sobre essa abordagem. Agentes definidos programaticamente têm precedência sobre agentes baseados em sistema de arquivos com o mesmo nome.
Mesmo sem definir subagentes personalizados, Claude pode gerar o subagente integrado general-purpose. Isso é útil para delegar tarefas de pesquisa ou exploração sem criar agentes especializados. Inclua Agent em allowedTools para que essas invocações sejam aprovadas automaticamente sem um prompt de permissão.

O que subagentes herdam

A janela de contexto de um subagente começa nova, sem conversa pai, mas não está vazia. O único conteúdo que você passa do pai para o subagente é a string de prompt da ferramenta Agent, então inclua quaisquer caminhos de arquivo, mensagens de erro ou decisões que o subagente precise diretamente nesse prompt. Um subagente que possui a ferramenta SendMessage começa com uma lista dos outros agentes nomeados em execução na sessão, para que saiba quais nomes pode enviar mensagens. Claude Code adiciona a lista ao primeiro turno do subagente automaticamente. Um fork não recebe a lista porque herda a conversa do pai. A lista requer Claude Code v2.1.206 ou posterior.
O pai recebe a mensagem final do subagente verbatim como o resultado da ferramenta Agent, mas pode resumi-la em sua própria resposta. Para preservar a saída do subagente verbatim na resposta voltada para o usuário, inclua uma instrução para fazer isso no prompt ou opção systemPrompt que você passa para a chamada principal query().
Um erro de API que encerra o subagente antecipadamente, como um limite de taxa, nunca é entregue como seu resultado. Se um limite de taxa, sobrecarga ou erro de servidor cortar um subagente em primeiro plano que já produziu saída de texto, a ferramenta Agent retorna essa saída parcial com uma nota de que o subagente não terminou. Um subagente que não produziu nada, ou cuja única saída foram chamadas de ferramentas sem texto, falha com uma mensagem de erro, Agent terminated early due to an API error, seguida pelo detalhe do erro. Veja API errors in subagents para o comportamento em primeiro plano e em segundo plano. Este tratamento de saída parcial requer Claude Code v2.1.199 ou posterior. Na v2.1.199, um limite de taxa, sobrecarga ou erro de servidor deixou a forma apenas de chamadas de ferramentas com um resultado parcial vazio contendo apenas a nota de corte.

Invocando subagentes

Invocação automática

Claude decide automaticamente quando invocar subagentes com base na tarefa e na description de cada subagente. Por exemplo, se você definir um subagente performance-optimizer com a descrição “Performance optimization specialist for query tuning”, Claude o invocará quando seu prompt mencionar otimizar consultas. Escreva descrições claras e específicas para que Claude possa corresponder tarefas ao subagente certo.

Invocação explícita

Para garantir que Claude use um subagente específico, mencione-o pelo nome em seu prompt:
Isso ignora a correspondência automática e invoca diretamente o subagente nomeado.

Configuração dinâmica de agente

Você pode criar definições de agente dinamicamente com base em condições de tempo de execução. Este exemplo cria um revisor de segurança com diferentes níveis de rigor, usando um modelo mais poderoso para revisões rigorosas.

Detectar invocação de subagente

Claude invoca subagentes através da ferramenta Agent. Para detectar quando um subagente é invocado, verifique blocos tool_use onde name é "Agent". Mensagens de dentro do contexto de um subagente incluem um campo parent_tool_use_id.
O nome da ferramenta foi renomeado de "Task" para "Agent" no Claude Code v2.1.63. Lançamentos atuais do SDK emitem "Agent" em blocos tool_use mas ainda usam "Task" na lista de ferramentas system:init e em result.permission_denials[].tool_name. Verificar ambos os valores em block.name garante compatibilidade entre versões do SDK.
A estrutura de mensagem difere entre SDKs. Em Python, blocos de conteúdo são acessados diretamente via message.content. Em TypeScript, SDKAssistantMessage envolve a mensagem da API Claude, então o conteúdo é acessado via message.message.content. Este exemplo itera através de mensagens transmitidas, registrando quando um subagente é invocado e quando mensagens subsequentes originam-se de dentro do contexto de execução desse subagente.

Retomando subagentes

Você pode retomar um subagente para continuar de onde parou em vez de começar do zero. Um subagente retomado retém seu histórico de conversa completo, incluindo todas as chamadas de ferramentas anteriores, resultados e raciocínio. Quando um subagente é concluído, o resultado da ferramenta Agent inclui um bloco de texto contendo agentId: <id>. Os agentes integrados Explore e Plan são de uma única execução e não retornam um agentId, então use um agente personalizado ou general-purpose quando você precisar retomar. Para retomar um subagente programaticamente:
  1. Capture o ID da sessão: extraia session_id de mensagens durante a primeira query
  2. Extraia o ID do agente: analise agentId do texto do resultado da ferramenta Agent
  3. Retome a sessão: passe resume: sessionId nas opções da segunda query e inclua o ID do agente em seu prompt
Você deve retomar a mesma sessão para acessar a transcrição do subagente. Cada chamada query() inicia uma nova sessão por padrão, então passe resume: sessionId para continuar na mesma sessão.Ao usar um agente personalizado, passe a mesma definição de agente no parâmetro agents para ambas as queries.
O exemplo abaixo define um agente personalizado endpoint-finder. A primeira query o executa e captura o ID da sessão e ID do agente do resultado da ferramenta Agent, então a segunda query retoma a sessão para fazer uma pergunta de acompanhamento que requer contexto da primeira análise.
Transcrições de subagentes persistem independentemente da conversa principal:
  • Compactação de conversa principal: quando a conversa principal se compacta, transcrições de subagentes não são afetadas. Elas são armazenadas em arquivos separados.
  • Persistência de sessão: 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: transcrições são limpas com base na configuração cleanupPeriodDays, que tem como padrão 30 dias.

Restrições de ferramentas

Subagentes podem ter acesso restrito a ferramentas via o campo tools:
  • Omita o campo: agente herda todas as ferramentas disponíveis (padrão)
  • Especifique ferramentas: agente pode usar apenas ferramentas listadas
Este exemplo cria um agente de análise somente leitura que pode examinar código mas não pode modificar arquivos ou executar comandos.

Combinações comuns de ferramentas

Escalar com fluxos de trabalho dinâmicos

Subagentes funcionam bem para algumas tarefas delegadas por turno. Para execuções que coordenam dezenas a centenas de agentes, use a ferramenta Workflow, que move a orquestração para um script que o runtime executa fora do contexto da conversa. Veja fluxos de trabalho dinâmicos para como fluxos de trabalho diferem da delegação de subagentes turno a turno. A ferramenta Workflow está disponível no TypeScript Agent SDK v0.3.149 e posterior. Inclua Workflow em allowedTools para aprovar automaticamente execuções de fluxo de trabalho. Os esquemas de entrada e saída da ferramenta estão listados na referência TypeScript.

Troubleshooting

Claude não delegando para subagentes

Se Claude completa tarefas diretamente em vez de delegar para seu subagente:
  • Verifique se as invocações de Agent são aprovadas: inclua Agent em allowedTools para aprovar automaticamente chamadas de subagentes. Sem isso, as invocações de Agent caem no seu callback canUseTool ou, no modo dontAsk, são negadas
  • Use prompting explícito: mencione o subagente pelo nome em seu prompt, por exemplo “Use o agente code-reviewer para…”
  • Escreva uma descrição clara: explique exatamente quando usar o subagente para que Claude possa corresponder tarefas apropriadamente

Agentes baseados em sistema de arquivos não carregando

Claude Code monitora ~/.claude/agents/ e .claude/agents/ e detecta um arquivo de agente novo ou editado em alguns segundos, sem necessidade de reinicialização. Se uma definição nunca aparecer, trabalhe através dessas causas:
  • Novo diretório agents: o monitor cobre apenas diretórios que existiam quando a sessão começou, então o primeiro arquivo em um novo diretório precisa de uma reinicialização de sessão. Esta é a causa mais comum.
  • Frontmatter inválido ou um name duplicado: verifique o YAML do arquivo e se um agente existente já usa o name.
  • --disable-slash-commands: sessões iniciadas com essa flag não monitoram esses diretórios e sempre precisam de uma reinicialização para carregar novos arquivos.
  • Um agente programático com o mesmo nome: agents passados para query() substituem um agente do sistema de arquivos com o mesmo nome.
Para o formato do arquivo, veja como escrever arquivos de subagente.

Falhas de prompt longo no Windows

No Windows, subagentes com prompts muito longos podem falhar devido ao limite de comprimento de linha de comando de 8191 caracteres. Mantenha prompts concisos ou use agentes baseados em sistema de arquivos para instruções complexas.