Imagine o frontmatter como a ficha técnica de um colaborador: nome, ferramentas disponíveis, modelo cognitivo, memória, e o padrão de comportamento geral. O Claude Code lê apenas o frontmatter para decidir se deve chamar este agente — o corpo inteiro só é carregado quando o agente é de fato invocado. Cada campo que você omite vira um valor default; cada campo que você preenche vira uma decisão deliberada.
↑ Anatomia de um arquivo .md: frontmatter (YAML) + corpo (Markdown). O Claude Code lê o frontmatter para decidir; o corpo é o comportamento.
Conteúdo detalhado
🏷️ name — a identidade do agente
O campo name define o identificador único do seu
subagente. É por esse nome que o maestro o chama — e é o nome que aparece na status line quando o agente está rodando.
Pense nele como o apelido profissional do colaborador.
📐 Regras de formato
- •Letras minúsculas e hífens — nunca espaços, underscores ou maiúsculas.
- •Deve ser único dentro do projeto ou da pasta global
~/.claude/agents/. - •Deve ser descritivo do papel, não da tecnologia — prefira
code-revieweratypescript-checker. - •Máximo prático: 30–40 caracteres — aparece na UI e precisa ser legível.
# BOM — papel claro, minúsculas, hífens
name: code-reviewer
name: doc-writer
name: sql-optimizer
name: security-auditor
# RUIM — espaço, maiúscula, underscore
name: Code Reviewer # espaço + maiúscula
name: code_reviewer # underscore
name: TypescriptChecker # camelCase
identificador único do agente — minúsculas e hífens, sem espaços.
um nome errado faz o Claude Code ignorar o arquivo ou falhar silenciosamente ao carregar o agente.
kebab-case · unicidade por escopo · legibilidade na UI · papel > tecnologia.
🎯 description — o gatilho de invocação
A description é o campo mais estratégico do
frontmatter. É o texto que o maestro lê para decidir se deve ou não chamar este agente. Pense nela como a
placa de entrada do consultório: "cardiologista — dores no peito, check-up cardíaco".
Sem a placa certa, o maestro passa pela porta e não sabe o que tem ali dentro.
Como o maestro usa a description
Você faz um pedido
"Revise o código que acabei de escrever e aponte bugs."
O maestro lê os name + description de todos os agentes
Não lê o corpo — só o cabeçalho. É rápido e barato em tokens.
Faz o match semântico
Se a description do code-reviewer diz "revisa diff em busca de bugs", o pedido bate. O agente é chamado.
Só então carrega o corpo inteiro
O custo de tokens do corpo só existe quando o agente é invocado — não no "processo de seleção".
💡 Dica: inclua "quando usar" explicitamente
A description mais eficaz nomeia o gatilho: "Use após qualquer mudança de código" ou "Use quando o usuário pedir otimização de query SQL". Essa instrução direta elimina ambiguidade no match do maestro.
o texto que o maestro lê para decidir se chama este agente — o gatilho de invocação.
uma description vaga faz o agente nunca ser chamado; uma description específica garante invocação no momento certo.
match semântico · "quando usar" explícito · custo de seleção zero · progressive disclosure.
🔧 tools — permissões declaradas
O campo tools é a lista branca de ferramentas
que o subagente pode usar. Se você não declarar nada, ele herda todas as ferramentas do maestro — o que pode ser
demais. Restringir ferramentas é uma decisão de segurança e foco: um revisor
que só lê não pode acidentalmente escrever arquivos.
✓ Princípio do mínimo privilégio
- ✓
code-reviewer: apenasRead, Grep, Glob - ✓
doc-writer:Read, Write(sem acesso a Bash) - ✓
sql-runner: apenasBash(para psql) - ✓Declare só o que a tarefa realmente exige
✗ Armadilhas comuns
- ✗Deixar sem
tools(herda tudo do maestro) - ✗Dar
Basha um agente que só lê arquivos - ✗Dar
Writea um revisor (pode sobrescrever código) - ✗Listar ferramentas que o agente nunca usa (ruído)
📊 Ferramentas nativas mais usadas
Readlê arquivos do projeto
Writecria / edita arquivos
Editedita trechos específicos
Bashexecuta comandos shell
Grepbusca em arquivos
Globlista arquivos por padrão
WebFetchbusca na web
Agentlança subagentes aninhados
Taskcria tarefas longas
lista branca de ferramentas que o subagente pode usar durante a execução.
restringe o que pode dar errado; um revisor sem Write não pode apagar código por engano.
mínimo privilégio · lista branca · ferramentas nativas · herança do maestro (quando omitido).
🧠 model — qual Claude roda a tarefa
O campo model define qual modelo de linguagem executará o agente.
Esta é a decisão de custo e qualidade: tarefas simples e repetitivas vão
para modelos rápidos e baratos; análises profundas vão para Opus. O tema de modelos por tarefa
é a Trilha 3 inteira — aqui aprendemos a sintaxe do campo.
model: haiku # rápido, barato — triagem, classificação
model: sonnet # equilibrado — maioria dos casos
model: opus # profundo e caro — análises complexas
# IDs completos (mais estáveis em produção)
model: claude-haiku-4-5
model: claude-sonnet-4-5
model: claude-opus-4-5
# omitido: herda o modelo do maestro (padrão seguro)
💡 Regra prática de inicio
Comece sempre com model: sonnet. Se o agente faz triagens simples, mude para haiku. Se faz raciocínio complexo (arquitetura, auditoria), mude para opus. A T3 te dará o critério exato para cada caso.
campo que define qual modelo Claude executa este agente — controla custo e profundidade.
sem este campo, todos os agentes rodam no modelo mais caro por padrão — gasto desnecessário.
haiku/sonnet/opus · IDs completos vs. aliases · herança do maestro · custo × qualidade.
🎨 color e 🧠 memory — identidade e persistência
Dois campos que completam a configuração básica: color define a
cor de destaque visual do agente na UI, e
memory define quais arquivos de memória ele acessa — controlando o que
ele "sabe" antes mesmo de a tarefa começar.
🎨 color
Cor hexadecimal ou nome de cor que aparece na status line do terminal ao lado do nome do agente.
color: "#34d399" # verde
color: "#60a5fa" # azul
color: "red" # nome CSS
Opcional — apenas visual. Se omitido, o Claude Code usa uma cor default.
🧠 memory
Controla quais arquivos CLAUDE.md o agente carrega no contexto ao iniciar. Quatro valores possíveis:
project— CLAUDE.md do projetouser— ~/.claude/CLAUDE.md globallocal— CLAUDE.local.md (privado)none— sem memória pré-carregada
📊 Quando usar memory: none
Agentes de triagem ou análise imparcial se beneficiam de memory: none — eles não devem ser influenciados pelas preferências de projeto. Já um agente de documentação precisa de memory: project para conhecer as convenções do repositório.
color = identidade visual; memory = arquivos CLAUDE.md que o agente carrega ao iniciar.
memory errado faz o agente ignorar convenções do projeto ou carregar contexto irrelevante e caro.
color (visual) · memory: project/user/local/none · contexto pré-carregado · agente imparcial vs. contextualizado.
🚫 disallowed-tools — o bloqueio explícito
Enquanto tools é uma lista branca (só o que está lá pode ser usado),
disallowed-tools é uma lista negra explícita:
"o agente pode usar tudo, exceto estes". Use quando você quer herdar a maioria das ferramentas do maestro mas
bloquear especificamente uma ou duas perigosas.
---
name: code-analyzer
description: Analisa a base de código. Nunca modifica arquivos.
model: sonnet
disallowed-tools:
- Write # não pode criar / sobrescrever
- Edit # não pode editar trechos
- Bash # não pode rodar comandos
---
⚖️ tools vs. disallowed-tools — quando usar cada um
Use tools quando…
- • O agente precisa de um conjunto pequeno e bem definido de ferramentas
- • Quer declarar explicitamente o que o agente pode fazer
- • O agente é novo e você quer controle total
Use disallowed-tools quando…
- • O agente precisa de muitas ferramentas mas quer bloquear poucas
- • Quer herdar expansões futuras de ferramentas automaticamente
- • Só precisa remover ferramentas destrutivas de um agente genérico
lista negra de ferramentas — o agente pode usar tudo exceto o que está aqui listado.
alternativa a tools quando a lista de permissões seria enorme — bloquear é mais conciso que listar tudo.
lista negra · herança com exceção · blocklist vs. allowlist · segurança seletiva.
🔌 Campos avançados — MCP e outros
Além dos campos básicos, o frontmatter suporta configurações avançadas para integrar servidores MCP (Model Context Protocol) — que expandem as ferramentas disponíveis com APIs externas, bancos de dados, serviços e muito mais. Estes campos são opcionais e geralmente aparecem em agentes de produção.
---
name: db-analyst
description: Analisa dados no PostgreSQL. Use quando pedir
insights de banco ou queries de análise.
model: sonnet
tools: mcp__postgres # ferramenta via MCP
mcp_servers: # servidores MCP disponíveis
- postgres # nome definido em .claude/mcp.json
---
✓ O que MCP expande
- ✓Consultas diretas a bancos de dados
- ✓Integração com APIs de terceiros (Slack, GitHub, Jira)
- ✓Ferramentas customizadas da sua empresa
- ✓Sistemas de arquivos remotos e S3
📌 Pré-requisito
O servidor MCP precisa estar configurado em .claude/mcp.json antes de referenciar no frontmatter.
// .claude/mcp.json
{
"postgres": {
"command": "mcp-postgres",
"args": ["postgresql://…"]
}
}
campos avançados que conectam o agente a servidores MCP — expandindo para além das ferramentas nativas.
MCP é a ponte para integrar subagentes com sistemas reais de produção (bancos, APIs, serviços).
MCP · mcp_servers · ferramentas externas · .claude/mcp.json · integração de produção.
Exemplo real: frontmatter completo comentado
Um security-auditor.md de produção usando todos os campos que vimos —
com comentários explicando cada decisão de design. Este é o ponto de referência que você pode copiar e adaptar.
---
name: security-auditor # kebab-case, papel claro
description: | # bloco multiline para descrições longas
Audita o código em busca de vulnerabilidades de segurança:
SQL injection, XSS, dependências desatualizadas, segredos
expostos e falhas de autenticação.
Use quando o usuário pedir revisão de segurança, antes
de qualquer PR para produção, ou após mudanças em auth.
# ↑ "quando usar" explícito = gatilho preciso
tools: Read, Grep, Glob # só leitura — auditor nunca modifica
model: claude-opus-4-5 # análise crítica → modelo mais capaz
color: "#f87171" # vermelho = segurança (visual na UI)
memory: project # carrega CLAUDE.md do projeto
# → conhece as convenções de segurança do repo
disallowed-tools: # bloqueio explícito de ferramentas destrutivas
- Write # não pode alterar arquivos
- Edit # não pode editar trechos
- Bash # não pode executar scripts
---
# Corpo do agente (cérebro) — carregado só quando invocado
You are a senior application security engineer.
Your role is to audit code for vulnerabilities — never to fix them.
When invoked:
1. Run Grep to find patterns: SQL queries, eval(), innerHTML, passwords, tokens.
2. Read each flagged file in full context.
3. Classify each finding by severity: CRITICAL / HIGH / MEDIUM / LOW.
Output format:
- One table: Severity | File | Line | Issue | Recommendation
- Summary paragraph with the 3 most critical risks
- Do NOT rewrite code — only report.
🔒 tools + disallowed
Usa tools para allowlist e disallowed-tools redundantemente para clareza — uma abordagem defense-in-depth.
🧠 model: opus
Auditoria de segurança é crítica — aqui vale o modelo mais caro. Agentes de triagem simples ficariam em haiku.
📝 description multiline
O pipe | no YAML permite múltiplas linhas. Use para descriptions longas com gatilhos explícitos.
Prompts prontos (copie e cole)
Três prompts para usar no Claude Code agora: criar um agente via /agents,
inspecionar um agente existente, e gerar um frontmatter sob medida para um papel específico.
Crie um subagente chamado "doc-writer" que escreve
documentação técnica em Markdown. Ele deve usar apenas
Read e Write, rodar em sonnet, e ter memória do projeto.
Escreva o frontmatter completo e um corpo de 5 linhas.
Leia o frontmatter de todos os arquivos .md em
.claude/agents/ e me diga: quais modelos estão sendo
usados, quais ferramentas cada agente tem, e se algum
agente tem description vaga que pode atrapalhar o match.
Quero um agente que otimize queries SQL pesadas.
Escreva o frontmatter completo incluindo: name kebab-case,
description com o gatilho "quando usar", tools mínimas,
model adequado ao tipo de análise, e color de destaque.
Depois explique cada campo escolhido e por quê.
Tela simulada: /agents e o frontmatter carregado
É assim que o Claude Code exibe seus agentes após carregar os arquivos .md. A UI mostra o
nome, a description resumida,
as ferramentas e o modelo de cada agente.
O campo color aparece como a bolinha colorida ao lado do nome.
↑ Recriação ilustrativa do painel /agents. O color aparece como bolinha; a description é truncada mas suficiente para o match semântico.
Exercício
Escreva o frontmatter completo para um subagente chamado
test-writer — um agente que lê código-fonte e escreve testes unitários
em vitest/jest. Use todos os campos obrigatórios e ao menos um campo avançado.
Como fazer
- Decida o
name: deve ser kebab-case, descritivo do papel. - Escreva a
description: inclua "quando usar" e as situações de trigger. - Liste os
toolsmínimos: o que um escritor de testes realmente precisa? - Escolha o
model: escrita de testes é simples ou complexo? Justifique. - Adicione
colorememorycom uma justificativa cada.
✅ Critério de verificação — como saber que acertou
- →
nameestá em kebab-case, sem espaços nem maiúsculas. - →
descriptioncontém ao menos uma frase do tipo "Use quando…" ou "Use após…". - →
toolsincluiReadeWrite, e você justificou por que esses dois. - →
modelescolhido com justificativa de custo × qualidade. - →O frontmatter abre e fecha com
---e é YAML válido (sem mistura de tabs e espaços).
Exemplo resolvido
---
name: test-writer
description: |
Lê código-fonte e escreve testes unitários em vitest/jest.
Use quando pedir "escreva testes para este arquivo" ou
após implementar uma nova função ou classe.
tools: Read, Write, Glob # lê fonte, escreve teste, lista arquivos
model: sonnet # escrever testes exige raciocínio médio
color: "#4ade80" # verde = "passou nos testes"
memory: project # precisa conhecer o framework do projeto
---
✅ Resumo do módulo
name — kebab-case, único, descritivo do papel. É o identificador na UI e no match do maestro.description — o gatilho: o maestro lê só isso para decidir se chama o agente. Inclua "Use quando…".tools — lista branca de permissões. Mínimo necessário; agente de leitura não precisa de Write.model — haiku/sonnet/opus conforme a complexidade da tarefa. Omitir herda o modelo do maestro.color + memory — identidade visual e contexto pré-carregado (project/user/local/none).disallowed-tools — lista negra quando você quer herdar tudo mas bloquear poucas ferramentas específicas.mcp_servers conecta o agente a bancos, APIs e serviços via Model Context Protocol.Próximo módulo:
2.2 — A descrição é o gatilho. Como escrever descriptions que o maestro reconhece e aciona com precisão.