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 que se comunicam entre si, 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
Subagentes integrados
Claude Code inclui subagentes integrados que Claude usa automaticamente quando apropriado. Cada um herda as permissões da conversa pai com restrições de ferramentas adicionais. Explore e Plan pulam seus arquivos CLAUDE.md e o status git da sessão pai para manter a pesquisa rápida e econômica. Todos os outros subagentes integrados e subagentes personalizados carregam ambos. 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: herda da conversa principal, limitado a Opus na Claude API, portanto Explore nunca é executado em um modelo mais caro do que aquele que você já escolheu para a sessão
- 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 substitui o integrado e mantém seu próprio campo model, portanto defina um com model: haiku para manter a exploração em um modelo de menor custo.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.
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. A partir da v2.1.198, o comando/agents não abre mais o assistente de criação interativo; executá-lo imprime um lembrete para pedir ao Claude ou editar .claude/agents/ diretamente. Os arquivos de subagente, campos de frontmatter e os locais .claude/agents/ e ~/.claude/agents/ permanecem inalterados; apenas o assistente de terminal foi removido.
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 prompt de sistema.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.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.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
A localização do arquivo de um subagente determina quem tem acesso a ele, e seu frontmatter determina o que ele pode fazer. Esta seção aborda onde os arquivos de subagente residem e cada campo que eles suportam.Escolher o escopo do subagente
Armazene arquivos de subagente em locais diferentes dependendo do escopo. Quando múltiplos subagentes compartilham o mesmo nome, Claude Code usa o que está no local de prioridade mais alta.
Subagentes de projeto (
.claude/agents/) são ideais para subagentes específicos de uma base de código. Verifique-os no controle de versão para que sua equipe possa usá-los e melhorá-los colaborativamente.
Subagentes de projeto são descobertos caminhando para cima a partir do diretório de trabalho atual, portanto cada .claude/agents/ entre lá e a raiz do repositório é verificado. A partir da v2.1.178, quando mais de um desses diretórios aninhados define o mesmo name, Claude Code usa a definição mais próxima do diretório de trabalho.
Diretórios adicionados com --add-dir também são verificados: uma pasta .claude/agents/ dentro de um diretório adicionado carrega junto com subagentes de projeto. Veja Diretórios adicionais para quais outros tipos de configuração carregam 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.
Claude Code verifica .claude/agents/ e ~/.claude/agents/ recursivamente, para que você possa organizar 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 valores de name únicos em toda a árvore: se dois arquivos sob o mesmo diretório .claude/agents/, incluindo suas subpastas, declaram o mesmo nome, Claude Code carrega apenas um deles, escolhido pela ordem de leitura do sistema de arquivos em vez de uma precedência documentada. Entre diretórios de projeto aninhados, a definição mais próxima do diretório de trabalho vence, conforme descrito acima. O verificador de configuração /doctor relata arquivos no mesmo diretório que compartilham um nome e propõe renomear ou remover todos exceto um. Antes da v2.1.205, /doctor abria uma tela de diagnósticos que listava duplicatas e mostrava qual definição estava ativa.
Diretórios agents/ de plugin também são verificados recursivamente. Diferentemente dos escopos de projeto e usuário, uma subpasta dentro do diretório agents/ de um plugin se torna parte do identificador com escopo: um arquivo em agents/review/security.md no plugin my-plugin se registra como my-plugin:review:security.
Subagentes definidos por CLI são passados como JSON ao iniciar Claude Code. Eles existem apenas para essa sessão e não são salvos em disco, tornando-os úteis para testes rápidos ou scripts de automação. Você pode definir múltiplos subagentes em uma única chamada --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents aceita JSON com os mesmos campos de frontmatter que subagentes baseados em arquivo: description, prompt, tools, disallowedTools, model, permissionMode, mcpServers, hooks, maxTurns, skills, initialPrompt, memory, effort, background, isolation e color. Use prompt para o prompt de sistema, equivalente ao corpo markdown em subagentes baseados em arquivo.
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 que subagentes de projeto e usuário. Definições gerenciadas têm precedência sobre subagentes de projeto e usuário com o mesmo nome.
Subagentes de plugin vêm de plugins que você instalou. Eles carregam junto com seus subagentes personalizados e aparecem na digitação de @-menção sob seu nome com escopo. Veja a referência de componentes de plugin para detalhes sobre como criar subagentes de plugin.
Por razões de segurança, subagentes de plugin não suportam os campos de frontmatter
hooks, mcpServers ou permissionMode. Estes 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 estas regras se aplicam a toda a sessão, não apenas ao subagente do plugin.tools e model, com o corpo da definição anexado ao prompt de sistema do colega de trabalho como instruções adicionais. Veja equipes de agentes para quais campos de frontmatter se aplicam nesse caminho.
Escrever arquivos de subagente
Arquivos de subagente usam frontmatter YAML para configuração, seguido pelo prompt de sistema em Markdown:Claude Code observa
~/.claude/agents/ e .claude/agents/. Quando você adiciona ou edita um arquivo de subagente no disco, ou pede a Claude para escrever um para você, Claude Code detecta a alteração em alguns segundos e a próxima delegação usa a definição atualizada, sem necessidade de reinicialização.Dois casos ainda precisam de uma reinicialização:- O observador 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. - Sessões iniciadas com
--disable-slash-commandsnão observam esses diretórios.
--append-subagent-system-prompt anexa o texto que você fornece ao final do prompt de sistema de cada subagente, incluindo subagentes aninhados. Requer Claude Code v2.1.205 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 de 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 em vez disso, defina isolation: worktree.
Um subagente com isolation: worktree executa seus comandos Bash e PowerShell dentro de seu worktree. Um comando cujo diretório de trabalho se resolve para seu checkout principal, por exemplo porque o diretório worktree foi removido enquanto o subagente estava em execução, falha com um erro. Antes da v2.1.203, tal comando poderia ser executado no checkout principal.
Campos de frontmatter suportados
Os seguintes campos podem ser usados no frontmatter YAML. Apenasname e description são obrigatórios.
Escolher um modelo
O campomodel controla qual modelo de IA o subagente usa:
- Alias de modelo: Use um dos aliases disponíveis:
sonnet,opus,haiku, oufable - ID de modelo completo: Use um ID de modelo completo como
claude-opus-4-8ouclaude-sonnet-5. Aceita os mesmos valores que o flag--model - inherit: Use o mesmo modelo que a conversa principal
- Omitido: Se não especificado, padrão é
inherit(usa o mesmo modelo que a conversa principal)
model para essa invocação específica. Claude Code resolve o modelo do subagente nesta ordem:
- A variável de ambiente
CLAUDE_CODE_SUBAGENT_MODEL, quando definida para um alias de modelo ou ID de modelo - O parâmetro
modelpor invocação - O frontmatter
modelda definição do subagente - O modelo da conversa principal
CLAUDE_CODE_SUBAGENT_MODEL para inherit é o mesmo que deixá-lo indefinido: a resolução continua com o parâmetro model por invocação, depois o frontmatter. Em versões anteriores, inherit forçava subagentes para o modelo da conversa principal e ignorava ambas essas fontes.
Claude Code verifica o valor da variável de ambiente, parâmetro por invocação e valores de frontmatter contra a lista de permissões availableModels da sua organização. Um valor que se resolve para um modelo excluído é ignorado e o subagente é executado no modelo herdado em vez disso.
A partir da v2.1.198, subagentes também herdam a configuração de pensamento estendido da conversa principal: se o pensamento está ativado em sua sessão, está ativado para o subagente, e se está desativado, permanece desativado. Não há configuração de pensamento por subagente. Antes da v2.1.198, subagentes eram executados com pensamento estendido desabilitado independentemente da configuração da conversa principal.
Controlar capacidades do subagente
Você pode controlar o que subagentes podem fazer através de acesso a ferramentas, modos de permissão e regras condicionais.Ferramentas disponíveis
Subagentes herdam as ferramentas internas e ferramentas MCP disponíveis na conversa principal por padrão. As seguintes ferramentas dependem da interface ou estado de sessão da conversa principal e não estão disponíveis para subagentes, mesmo quando listadas no campotools:
AskUserQuestionEnterPlanModeExitPlanMode, a menos que opermissionModedo subagente sejaplanScheduleWakeupWaitForMcpServers
tools como uma lista de permissões ou o campo disallowedTools como uma lista de negação. Este exemplo usa tools para permitir exclusivamente Read, Grep, Glob e Bash. O subagente não pode editar arquivos, escrever arquivos ou usar qualquer ferramenta MCP:
disallowedTools para herdar todas as ferramentas da conversa principal exceto Write e Edit. O subagente mantém Bash, ferramentas MCP e tudo mais:
disallowedTools é aplicado primeiro, depois tools é resolvido contra o pool restante. Uma ferramenta listada em ambos é removida.
Quando nada na lista tools se resolve para uma ferramenta, por exemplo porque cada entrada está com erro de digitação ou nomeia uma ferramenta que não está disponível para subagentes, Claude Code recusa iniciar o subagente e a ferramenta Agent retorna um erro nomeando as entradas não resolvidas. Antes da v2.1.208, esse subagente era iniciado sem ferramentas e poderia retornar um resultado vazio ou confuso.
Ambos os campos aceitam padrões de nível de servidor MCP além de nomes de ferramentas exatos: mcp__<server> ou mcp__<server>__* concede ou remove todas as ferramentas do servidor nomeado. Em disallowedTools, mcp__* também remove todas as ferramentas MCP de qualquer servidor. Este exemplo remove todas as ferramentas do servidor MCP github enquanto mantém ferramentas de outros servidores e todas as ferramentas integradas:
Restringir quais subagentes podem ser gerados
Quando um agente é executado como thread principal comclaude --agent, ele pode gerar subagentes usando a ferramenta Agent. Para restringir quais tipos de subagente ele pode gerar, use a sintaxe Agent(agent_type) no campo tools.
Na versão 2.1.63, a ferramenta Task foi renomeada para Agent. Referências existentes de
Task(...) em configurações e definições de agente ainda funcionam como aliases.worker e researcher podem ser gerados. Se o agente tentar gerar qualquer outro tipo, a solicitação falha e o agente vê apenas os tipos permitidos em seu prompt. Para bloquear agentes específicos enquanto permite todos os outros, use permissions.deny em vez disso.
Para permitir gerar qualquer subagente sem restrições, use Agent sem parênteses:
Agent for omitido da lista tools inteiramente, o agente não pode gerar nenhum subagente.
A sintaxe de lista de permissões 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 gere subagentes aninhados, mas qualquer lista de tipo dentro dos parênteses é ignorada.
Escopo de MCP servers para um subagente
Use o campomcpServers para dar a um subagente acesso a MCP servers que não estão disponíveis na conversa principal. Servidores inline definidos aqui são conectados quando o subagente inicia e desconectados quando termina. Referências de string compartilham a conexão da sessão pai.
O campo
mcpServers se aplica em ambos os contextos onde um arquivo de agente pode ser executado:- Como um subagente, gerado através da ferramenta Agent ou uma @-menção
- Como a sessão principal, iniciada com
--agentou a configuraçãoagent
.mcp.json e arquivos de configurações..mcp.json, com chave pelo nome do servidor, e suportam os tipos stdio, http, sse e ws.
Para manter um MCP server fora da conversa principal inteiramente e evitar que suas descrições de ferramentas consumam contexto lá, defina-o inline aqui em vez de em .mcp.json. O subagente obtém as ferramentas; a conversa pai não.
A partir da v2.1.153, as restrições de MCP que se aplicam à sessão principal também cobrem servidores declarados no frontmatter do subagente:
--strict-mcp-confige--bare- Configuração de MCP gerenciada pela empresa
- Políticas
allowedMcpServersedeniedMcpServers
--strict-mcp-config não filtra servidores que você passa inline via --agents ou a opção agents do SDK, já que esses são entrada explícita do chamador.
Modos de permissão
O campopermissionMode controla como o subagente lida com prompts de permissão. Subagentes herdam o contexto de permissão da conversa principal e podem sobrescrever o modo, exceto quando o modo pai tem precedência conforme descrito abaixo.
Se o pai usar
bypassPermissions ou acceptEdits, isso tem precedência e não pode ser sobrescrito. Se o pai usar auto mode, o subagente herda auto mode e qualquer permissionMode em seu frontmatter é ignorado: o classificador avalia as chamadas de ferramentas do subagente com as mesmas regras de bloqueio e permissão que a sessão pai.
Pré-carregar skills em subagentes
Use o camposkills para injetar conteúdo de skill 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-o a disallowedTools.
Você não pode pré-carregar skills que definem disable-model-invocation: true, já que pré-carregar extrai do mesmo conjunto de skills que Claude pode invocar. Se uma skill listada estiver faltando ou desabilitada, Claude Code a ignora e registra um aviso no log de debug.
Isto é o inverso de executar uma skill em um subagente. Com
skills em um subagente, o subagente controla o prompt de sistema e carrega conteúdo de skill. Com context: fork em uma skill, o conteúdo de skill é injetado no agente que você especificar. Ambos usam o mesmo sistema subjacente.Habilitar memória persistente
O campomemory dá ao subagente um diretório persistente que sobrevive entre conversas. O subagente usa este diretório para construir conhecimento ao longo do tempo, como padrões de base de código, insights de debugging e decisões arquiteturais.
Quando memória está habilitada:
- O prompt de sistema do subagente inclui instruções para ler e escrever no diretório de memória.
- O prompt de sistema do subagente também inclui as primeiras 200 linhas ou 25KB de
MEMORY.mdno diretório de memória, o que for menor, com instruções para curarMEMORY.mdse exceder esse limite. - Ferramentas Read, Write e Edit são automaticamente habilitadas para que o subagente possa gerenciar seus arquivos de memória.
-
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: “Review this PR, and check your memory for patterns you’ve seen before.”
- Peça ao subagente para atualizar sua memória após completar uma tarefa: “Now that you’re done, save what you learned to your memory.” Ao longo do tempo, isso constrói 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 controle mais dinâmico sobre uso de ferramentas, use hooksPreToolUse para validar operações antes de serem executadas. Isso é útil quando você precisa permitir algumas operações de uma ferramenta enquanto bloqueia outras.
Este exemplo cria um subagente que apenas permite consultas de banco de dados somente leitura. O hook PreToolUse executa o script especificado em command antes de cada comando Bash ser executado:
shell: powershell à entrada de hook conforme mostrado em executando hooks em PowerShell.
Desabilitar subagentes específicos
Você pode impedir que Claude use subagentes específicos adicionando-os ao arraydeny em suas configurações. Use o formato Agent(subagent-name) onde subagent-name corresponde ao campo name do subagente.
--disallowedTools:
Definir hooks para subagentes
Subagentes podem definir hooks que são executados durante o ciclo de vida do subagente. Existem duas formas de configurar hooks:- No frontmatter do subagente: defina hooks que são executados apenas enquanto esse subagente específico está ativo
- Em
settings.json: defina hooks que são executados na sessão principal quando subagentes iniciam ou param
Hooks no frontmatter do subagente
Defina hooks diretamente no arquivo markdown do subagente. Estes hooks são executados apenas enquanto esse subagente específico está ativo e são limpos quando termina.Hooks de frontmatter disparam quando o agente é gerado como um subagente através da ferramenta Agent ou uma @-menção, e quando o agente é executado como a sessão principal via
--agent ou a configuração agent. No caso de sessão principal, eles são executados junto com qualquer hook definido em settings.json.
Este exemplo valida comandos Bash com o hook
PreToolUse e executa um linter após edições de arquivo com PostToolUse:
Stop no frontmatter são automaticamente convertidos para eventos SubagentStop.
Hooks no nível do projeto para eventos de subagente
Configure hooks emsettings.json que respondem a eventos de ciclo de vida de subagente na sessão principal.
Ambos os eventos suportam matchers para direcionar tipos de agente específicos por nome. O valor do matcher é o
name do frontmatter do agente para subagentes no nível de projeto e 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, portanto é avaliado como uma expressão regular sem âncora; ancorá-lo 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 inicia, e um script de limpeza quando qualquer subagente para:
db-agent corresponde exatamente no Claude Code v2.1.195 ou posterior. Em versões anteriores, é avaliado como uma expressão regular sem âncora e também dispara para qualquer tipo de agente que o contenha, como prod-db-agent; ancorá-lo como ^db-agent$ nessas versões.
Veja Hooks para o formato de configuração de hook completo.
Trabalhar com subagentes
Entender delegação automática
Claude delega automaticamente tarefas baseado na descrição da tarefa em sua solicitação, no campodescription em configurações de subagente e no contexto atual. Para encorajar delegação proativa, inclua frases como “use proactively” no campo description do seu subagente.
Invocar subagentes explicitamente
Quando 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 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 usa o prompt de sistema, restrições de ferramentas e modelo do subagente via flag
--agentou configuraçãoagent
@ e escolha o subagente do typeahead, 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 background nomeados atualmente em execução na sessão também aparecem no typeahead, mostrando seu status ao lado do nome.
Você também pode digitar a menção manualmente sem usar o picker: @agent-<name> para subagentes locais, ou @agent- seguido pelo nome com escopo para subagentes de plugin, por exemplo @agent-my-plugin:code-reviewer.
Execute toda a sessão como um subagente. Passe --agent <name> para iniciar uma sessão onde a thread principal em si assume o prompt de sistema, restrições de ferramentas e modelo do subagente:
--system-prompt faz. Arquivos CLAUDE.md e memória de projeto ainda carregam através do fluxo de mensagem normal. 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.
Para um subagente fornecido por plugin, você pode passar apenas o nome do agente e Claude Code o encontrará:
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 foreground ou background
Subagentes podem ser executados em foreground ou background:- Subagentes em foreground bloqueiam a conversa principal até completar. Prompts de permissão são passados para você conforme surgem.
- Subagentes em background são executados concorrentemente enquanto você continua trabalhando. A partir da v2.1.186, quando um subagente em background atinge uma chamada de ferramenta que precisa de permissão, o prompt aparece 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. Antes da v2.1.186, subagentes em background auto-negavam qualquer chamada de ferramenta que teria solicitado.
- Peça a Claude para executar uma tarefa em background ou em foreground
- Pressione Ctrl+B para colocar uma tarefa em execução em background
/tasks, marcado como concluído e classificado abaixo do trabalho em execução, até que a sessão limpe sua lista de tarefas. Sua visualização de detalhes fica aberta quando o subagente termina. Subagentes que falham ou que você para deixam a lista. Antes da v2.1.208, um subagente concluído deixava a lista no momento em que terminava e sua visualização de detalhes fechava.
Para desabilitar toda a funcionalidade de tarefa em background, defina a variável de ambiente CLAUDE_CODE_DISABLE_BACKGROUND_TASKS para 1. Veja Variáveis de ambiente.
Quando CLAUDE_CODE_FORK_SUBAGENT está definido para 1, cada spawn de subagente é executado em background e o campo frontmatter background não tem efeito, porque o modo fork remove o parâmetro run_in_background da ferramenta Agent. CLAUDE_CODE_DISABLE_BACKGROUND_TASKS tem precedência sobre o modo fork e mantém spawns de subagente em foreground.
Erros de API em subagentes
A partir da v2.1.199, 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 para Claude em vez de retornar o texto de erro como se fossem os achados do subagente. O que Claude recebe depende de onde o subagente foi executado:- Foreground: se um limite de taxa, sobrecarga ou erro de servidor corta 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 cortado 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. Na v2.1.199, um limite de taxa, sobrecarga ou erro de servidor que cortou a forma de chamadas de ferramenta apenas retornou um resultado parcial vazio contendo apenas a nota de corte em vez disso. - Background: o subagente é marcado como falho, e a mensagem que Claude recebe quando termina nomeia o erro de API e inclui a última saída do subagente, então o trabalho parcial não é perdido.
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 podem consumir contexto significativo. Ao delegar esses para um subagente, a saída verbosa fica no contexto do subagente enquanto apenas o resumo relevante retorna para sua conversa principal.Executar pesquisa em paralelo
Para investigações independentes, gere múltiplos subagentes para trabalhar simultaneamente:Encadear subagentes
Para fluxos de trabalho multi-etapas, peça a Claude para usar subagentes em sequência. Cada subagente completa sua tarefa e retorna resultados para 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
- Latência importa. Subagentes começam do zero e podem precisar de tempo para reunir contexto
- A tarefa produz saída verbosa que você não precisa em seu contexto principal
- Você quer aplicar restrições de ferramentas específicas ou permissões
- O trabalho é auto-contido e pode retornar um resumo
/btw em vez de um subagente. Ele vê seu contexto completo mas não tem acesso a ferramentas, e a resposta é descartada em vez de adicionada ao histórico.
Gerar subagentes aninhados
A partir do Claude Code v2.1.172, um subagente pode gerar seus próprios subagentes. Use isso quando uma tarefa delegada em si se divide em subtarefas paralelas, como um subagente revisor que distribui um verificador por descoberta, para que a saída intermediária nunca alcance sua conversa principal. Apenas o resumo do subagente de nível superior retorna para você. Um subagente aninhado é configurado da mesma forma que um de nível superior e é resolvido dos mesmos escopos. O painel de subagente abaixo da entrada de prompt mostra a árvore completa: cada linha exibe uma contagem(+N) de descendentes, e a partir da v2.1.193, abrir uma linha mostra os irmãos desse subagente e filhos diretos com um caminho de volta para main.
A profundidade é contada como o número de níveis de subagente abaixo da conversa principal, independentemente de cada nível ser executado em foreground ou background. Um subagente na profundidade cinco não recebe a ferramenta Agent e não pode gerar mais. O limite é fixo e não configurável.
A partir do Claude Code v2.1.187, a profundidade de um subagente em background é fixada quando ele é primeiro gerado, e retomar isso mais tarde não muda essa profundidade. Por exemplo, se sua conversa principal gera subagente A, e A gera um subagente em background B na profundidade dois, B ainda está na profundidade dois quando você o retoma diretamente da conversa principal. Retomar um subagente de um contexto mais raso não permite que ele gere níveis adicionais que o limite de profundidade já impediu.
Para prevenir um subagente específico de gerar outros, omita Agent de sua lista tools ou adicione-o a disallowedTools.
Um fork ainda não pode gerar outro fork. Pode gerar outros tipos de subagente, e esses contam para o limite de profundidade.
Gerenciar contexto de subagente
O que carrega 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:- Prompt de sistema: o prompt próprio do agente mais detalhes de ambiente que Claude Code acrescenta, não o prompt de sistema completo 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.
- CLAUDE.md e memória: cada nível da hierarquia de memória que a conversa principal carrega, incluindo
~/.claude/CLAUDE.md, regras de projeto,CLAUDE.local.mde arquivos de política gerenciados. Os agentes integrados Explore e Plan pulam isso. - Status do Git: um snapshot tirado no início da sessão pai. Ausente quando o diretório de trabalho não é um repositório Git ou quando
includeGitInstructionséfalse. Explore e Plan pulam isso independentemente. - 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 de sistema listando
maine cada outro agente nomeado na sessão, cada um um valortoválido paraSendMessage. Requer Claude Code v2.1.206 ou posterior. 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.
vendor/”, reafirme-a no prompt que você dá a Claude ao delegar.
Retomar subagentes
Cada invocação de subagente cria uma nova instância com contexto fresco. 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 ferramentas anteriores, resultados e raciocínio. O subagente continua exatamente de onde parou em vez de começar do zero. Quando um subagente completa, Claude recebe seu ID de agente. Os agentes integrados Explore e Plan são de uma única execução e não retornam ID de agente, então eles não podem ser retomados; usegeneral-purpose ou um subagente personalizado quando você precisar continuar o trabalho.
Claude usa a ferramenta SendMessage com o ID do agente ou nome do agente como 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.
Para retomar um subagente, peça a Claude para continuar o trabalho anterior:
SendMessage auto-retoma em background sem exigir uma nova invocação de Agent. O mesmo se aplica a um subagente que Claude parou com a ferramenta TaskStop.
A partir da v2.1.191, um subagente que você parou você mesmo, com x em /tasks ou uma solicitação SDK stop_task, não auto-retoma. A chamada SendMessage retorna uma recusa dizendo a Claude que o agente foi cancelado. Digite na transcrição desse subagente no painel de subagente para retomá-lo você mesmo, o que limpa a parada para que chamadas SendMessage posteriores possam auto-retomá-lo novamente.
Retomar inicia uma nova execução do agente sob o mesmo ID, então um subagente que já tinha falhado ou completado mostra como em execução novamente na lista de tarefas e nos eventos de tarefa do Agent SDK. Antes da v2.1.205, ele continuava mostrando seu status anterior de falha ou conclusão enquanto a execução retomada estava funcionando.
A partir da v2.1.199, 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 background 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 do resultado de spawn. A verificação é escopo da conversa atual e é redefinida em /clear.
A partir da v2.1.198, 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 ainda 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 mudar 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 pelo 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 subagente persistem independentemente da conversa principal:
- Compactação da conversa principal: Quando a conversa principal se compacta, transcrições de subagente não são afetadas. Elas são armazenadas em arquivos separados.
- Persistência de sessão: Transcrições de subagente 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 baseado na configuração
cleanupPeriodDays, que padrão é 30 dias.
Auto-compactação
Subagentes suportam compactação automática usando a mesma lógica que a conversa principal. A compactação é acionada sob as mesmas condições, eCLAUDE_AUTOCOMPACT_PCT_OVERRIDE se aplica a subagentes também. Veja variáveis de ambiente para quando a sobrescrita entra em efeito.
Eventos de compactação são registrados em arquivos de transcrição de subagente:
preTokens mostra quantos tokens foram usados antes da compactação ocorrer.
Bifurcar a conversa atual
Subagentes bifurcados requerem Claude Code v2.1.117 ou posterior. A partir da v2.1.161, o comando
/fork está habilitado por padrão; em versões anteriores, requer definir a variável de ambiente CLAUDE_CODE_FORK_SUBAGENT para 1. Deixar Claude gerar bifurcações é experimental e pode mudar em versões futuras. Esta capacidade também pode ser habilitada em sessões interativas como parte de um lançamento em fases.CLAUDE_CODE_FORK_SUBAGENT para 1 para habilitá-lo explicitamente ou para 0 para desabilitá-lo. A variável é respeitada em modo interativo e via SDK ou claude -p.
Habilitar o modo de bifurcação muda Claude Code de duas formas:
- Claude pode gerar uma bifurcação solicitando explicitamente o tipo de subagente
fork. Gerações sem um tipo de subagente ainda usam o subagente general-purpose, e subagentes nomeados como Explore ainda geram como antes. - Cada geração de subagente é executada em background, seja uma bifurcação ou um subagente nomeado. Defina
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSpara1para manter gerações síncronas.
/fork seguido de uma diretiva, com ou sem a variável definida. Claude Code nomeia a bifurcação a partir das primeiras palavras da diretiva. 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. 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, mas comandos integrados ainda são executados em sua conversa principal. A partir da v2.1.199, digitar
/model ou /fast nessa visualização mostra um aviso de que isso muda o modelo da conversa principal ou modo rápido, não do agente visualizado, em vez de executá-lo silenciosamente.
Como bifurcações diferem de subagentes nomeados
Uma bifurcação herda tudo que a sessão principal tem no momento em que é gerada. Um subagente nomeado começa a partir de sua própria definição.
Porque o prompt de sistema de uma bifurcação e as definições de ferramentas são idênticas ao pai, sua primeira solicitação reutiliza o prompt cache do pai. Isso torna bifurcação mais barata do que gerar 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.
Limitações
DefinirCLAUDE_CODE_FORK_SUBAGENT=1 habilita fork mode em sessões interativas, modo não-interativo e o Agent SDK; definir para 0 desabilita fork mode em todos os lugares, incluindo qualquer lançamento no servidor. Uma bifurcação não pode gerar bifurcações adicionais.
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.
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