agents.
Visão geral
Você pode criar subagentes de três maneiras:- Programaticamente: use o parâmetro
agentsem suas opçõesquery()(TypeScript, 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-purposea qualquer momento via a ferramenta Agent sem você definir nada
description de cada subagente. Escreva descrições claras que expliquem quando o subagente deve ser usado, 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 subagenteresearch-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, acelerando dramaticamente fluxos de trabalho complexos. Exemplo: durante uma revisão de código, você pode executar os subagentesstyle-checker, security-scanner e test-coverage simultaneamente, reduzindo o tempo de revisão de minutos para segundos.
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 subagentedatabase-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 subagentedoc-reviewer pode ter acesso apenas às ferramentas Read e Grep, garantindo que possa analisar mas nunca modifique acidentalmente seus arquivos de documentação.
Criando subagentes
Definição programática (recomendada)
Defina subagentes diretamente em seu código usando o parâmetroagents. Este exemplo cria dois subagentes: um revisor de código com acesso somente leitura e um executor de testes que pode executar comandos. 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.
Configuração de AgentDefinition
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
description | string | Sim | Descrição em linguagem natural de quando usar este agente |
prompt | string | Sim | O prompt do sistema do agente definindo seu papel e comportamento |
tools | string[] | Não | Array de nomes de ferramentas permitidas. Se omitido, herda todas as ferramentas |
disallowedTools | string[] | Não | Array de nomes de ferramentas a remover do conjunto de ferramentas do agente |
model | string | Não | Substituição de modelo para este agente. Aceita um alias como 'sonnet', 'opus', 'haiku', 'inherit', ou um ID de modelo completo. Padrão é o modelo principal se omitido |
skills | string[] | Não | Lista de nomes de skills para pré-carregar no contexto do agente na inicialização. Skills não listadas permanecem invocáveis através da ferramenta Skill |
memory | 'user' | 'project' | 'local' | Não | Fonte de memória para este agente |
mcpServers | (string | object)[] | Não | Servidores MCP disponíveis para este agente, por nome ou configuração inline |
maxTurns | number | Não | Número máximo de turnos agentic antes do agente parar |
background | boolean | Não | Executar este agente como uma tarefa de fundo não-bloqueante quando invocado |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number | Não | Nível de esforço de raciocínio para este agente |
permissionMode | PermissionMode | Não | Modo de permissão para execução de ferramentas dentro deste agente |
AgentDefinition para detalhes.
Subagentes não podem gerar seus próprios subagentes. Não inclua
Agent no array tools de um subagente.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 canal 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.| O subagente recebe | O subagente não recebe |
|---|---|
Seu próprio prompt do sistema (AgentDefinition.prompt) e o prompt da ferramenta Agent | O histórico de conversa do pai ou resultados de ferramentas |
CLAUDE.md do projeto (carregado via settingSources) | Conteúdo de skill pré-carregado, a menos que listado em AgentDefinition.skills |
Definições de ferramentas (herdadas do pai, ou o subconjunto em tools) | O prompt do sistema do pai |
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().Invocando subagentes
Invocação automática
Claude decide automaticamente quando invocar subagentes com base na tarefa e nadescription 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: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.Detectando invocação de subagente
Subagentes são invocados via a ferramenta Agent. Para detectar quando um subagente é invocado, verifique blocostool_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.Retomando subagentes
Subagentes podem ser retomados para continuar de onde pararam. Subagentes retomados retêm seu histórico de conversa completo, incluindo todas as chamadas de ferramentas anteriores, resultados e raciocínio. O subagente continua exatamente de onde parou em vez de começar do zero. Quando um subagente é concluído, Claude recebe seu ID de agente no resultado da ferramenta Agent. Para retomar um subagente programaticamente:- Capture o ID da sessão: Extraia
session_idde mensagens durante a primeira query - Extraia o ID do agente: Analise
agentIddo conteúdo da mensagem - Retome a sessão: Passe
resume: sessionIdnas 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.Se você estiver usando um agente personalizado (não um integrado), você também precisa passar a mesma definição de agente no parâmetro agents para ambas as queries.- 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(padrão: 30 dias).
Restrições de ferramentas
Subagentes podem ter acesso restrito a ferramentas via o campotools:
- Omita o campo: agente herda todas as ferramentas disponíveis (padrão)
- Especifique ferramentas: agente pode usar apenas ferramentas listadas
Combinações comuns de ferramentas
| Caso de uso | Ferramentas | Descrição |
|---|---|---|
| Análise somente leitura | Read, Grep, Glob | Pode examinar código mas não modificar ou executar |
| Execução de testes | Bash, Read, Grep | Pode executar comandos e analisar saída |
| Modificação de código | Read, Edit, Write, Grep, Glob | Acesso completo de leitura/escrita sem execução de comandos |
| Acesso completo | Todas as ferramentas | Herda todas as ferramentas do pai (omita o campo tools) |
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 ferramentaWorkflow, 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
AgentemallowedToolspara aprovar automaticamente chamadas de subagentes. Sem isso, as invocações de Agent caem no seu callbackcanUseToolou, no mododontAsk, 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 o subagente deve ser usado para que Claude possa corresponder tarefas apropriadamente
Agentes baseados em sistema de arquivos não carregando
Agentes definidos em.claude/agents/ são carregados apenas na inicialização. Se você criar um novo arquivo de agente enquanto Claude Code está em execução, reinicie a sessão para carregá-lo.
Windows: falhas de prompt longo
No Windows, subagentes com prompts muito longos podem falhar devido a limites de comprimento de linha de comando (8191 caracteres). Mantenha prompts concisos ou use agentes baseados em sistema de arquivos para instruções complexas.Documentação relacionada
- Subagentes Claude Code: documentação abrangente de subagentes incluindo definições baseadas em sistema de arquivos
- Fluxos de trabalho dinâmicos: orquestre muitos subagentes a partir de um script para trabalhos muito grandes para uma conversa
- Visão geral do SDK: começando com o Claude Agent SDK