MÓDULO 2.3 · Trilha 2 · Criando na prática

🧠 O corpo é o cérebro

O frontmatter configura o agente, mas o corpo do .md é quem decide como ele pensa, como ele age e o que entrega. Um corpo bem escrito transforma uma ferramenta genérica num especialista confiável.

7
Tópicos
~35
Minutos
Médio
Nível
Prática
Tipo

Todo subagente bem construído sobe a mesma escada: começa com um papel claro, avança pelos passos numerados e chega até um formato de saída que qualquer orquestrador consegue ler. O que separa um agente fraco de um especialista confiável está nessa progressão.

PAPEL you are a senior… CONTEXTO when invoked… PASSOS 1. analise · 2. cheque… SAÍDA + NÃO-FAZER formato estruturado Escada do corpo do subagente — cada degrau amplifica o próximo
1

🎭 Papel: "you are a senior…"

A primeira linha do corpo define a identidade do agente. Não é vaidade — é sinalização de domínio. O modelo calibra vocabulário, profundidade e tom com base nessa declaração. Uma frase de papel bem escrita vale mais que dez parágrafos de instrução vaga.

Anatomia de um papel efetivo

Um papel completo tem três partes: nível (senior / staff / principal), domínio (security engineer / code reviewer / technical writer) e contexto operacional (working in a production codebase / reviewing PRs / writing for developers).

Nível
senior · staff · principal · lead
Domínio
security engineer · reviewer · writer
Contexto
em produção · revisando PR · escrevendo docs

Papel efetivo

  • "You are a senior security engineer reviewing production Python code for OWASP vulnerabilities."
  • "You are a staff technical writer creating developer documentation for a REST API."
  • Inclui domínio específico + contexto de uso

Papel fraco

  • "You are a helpful assistant." — genérico demais, zero sinalização de domínio
  • "You are an expert." — sem especificar em quê
  • Omitir o papel completamente

Dica: teste seu papel perguntando "que vocabulário um [seu papel] usaria?" — se a resposta mudar entre "helpful assistant" e "senior security engineer", o papel está fazendo trabalho real.

2

🔢 Passos numerados: "when invoked: 1…"

Depois do papel vêm os passos de execução — a sequência exata que o agente deve seguir toda vez que for acionado. Passos numerados transformam comportamento emergente (imprevisível) em comportamento reproduzível.

1
Leia o input inteiro antes de agir
Primeiro passo quase universal. Evita que o agente responda à primeira frase e ignore o contexto que vem depois.
2
Classifique / identifique o tipo do item
Segundo passo típico em reviewers e classificadores. Define a rota de processamento antes de executar.
3
Execute a análise principal
O trabalho de domínio de fato. Seja específico: "check for SQL injection, XSS, insecure deserialization" é melhor que "look for bugs".
4
Formate e entregue a saída
Último passo: aplica o formato de saída definido. Mantém consistência mesmo que o orquestrador mude.

Por que numerar?

O modelo tende a seguir listas numeradas com mais fidelidade do que parágrafos de instrução. A numeração cria um contrato explícito de execução — pular um passo se torna visível para quem revisa o output.

3

📄 Formato de saída

O orquestrador vai ler o que o subagente retornar. Se o formato variar, o orquestrador precisa de lógica extra para parsear. Um formato de saída declarado no corpo do agente elimina essa variação e torna a integração trivial.

Seção ## Output Format no corpo

Declare o formato explicitamente em uma seção separada do corpo. Use Markdown para estrutura e code fences para mostrar o esquema exato esperado.

## Output Format
Respond with a Markdown document containing:
- **Summary**: 1-2 sentences
- **Findings**: numbered list, each with severity (HIGH/MED/LOW)
- **Recommendation**: one actionable fix per finding
Do not include any other sections.

✓ Formato estruturado

  • Seção dedicada ## Output Format
  • Campos nomeados com tipos (string, número, lista)
  • Esquema JSON quando o orquestrador vai parsear automaticamente

✗ Formato livre

  • Sem declaração de formato — output varia a cada invocação
  • "Responda em prosa" para integrações automatizadas
  • Campos opcionais sem valor padrão declarado

Dica: quando o subagente vai retornar dados para outro agente processar, prefira JSON a Markdown — é mais fácil de parsear programaticamente. Use Markdown quando a saída é para leitura humana direta.

4

🚫 O que NÃO fazer

Declarar restrições explícitas é tão importante quanto declarar o que fazer. O modelo sabe mais do que você quer que ele use — a seção de não-fazer delimita o escopo e evita que o agente "ajude demais" fora do seu papel.

Seção ## Constraints

Use uma seção ## Constraints ou ## Do not para listar comportamentos proibidos. Cada restrição deve ser acionável — não vaga.

## Constraints
- Do not fix code — only report findings
- Do not comment on style — focus on security only
- Do not escalate to the user — return results to orchestrator
- Do not hallucinate CVE numbers — say "unverified" if unsure

⚠️ Restrições vazias não funcionam

"Do not do anything harmful" não é uma restrição acionável — o modelo já tem guardrails para isso. Restrições úteis são específicas ao domínio do agente: "do not suggest architectural changes" (para um code reviewer), "do not translate content" (para um qa-checker).

🎯
Específico
Evitar "não faça coisas ruins"
🔒
Limite de escopo
Define onde o agente para
📡
Escalada
Especifique se deve ou não escalar
🔕
Silêncio
Quando não retornar nada
5

⚡ Um agente, uma tarefa

O maior erro de corpo de agente não é o que está lá — é o que está a mais. Agentes que fazem múltiplas coisas não fazem nenhuma delas bem. O teste é simples: se você conseguir colocar um "e também" no papel do agente, ele precisa ser dividido.

O teste do "e também"

✗ Agente faz-tudo
You are a senior engineer.
Review the code for bugs,
and also suggest improvements,
and also update the docs,
and also check security.
✓ Agentes especializados
bug-finder: review for correctness
security-reviewer: OWASP checks
doc-writer: update docs
refactor-advisor: suggest improvements

Dica prática: quando um agente demora muito, produz outputs grandes e difíceis de parsear, ou fica "confuso" entre modos de operação — é sinal de que ele está tentando fazer coisas demais. Divida no ponto do "e também".

🔬
Especialização
Um papel → uma responsabilidade
🧩
Composição
Orquestrador combina especialistas
🔄
Testabilidade
Agente único = ponto de falha isolado
6

🔧 O corpo invoca skills

Um subagente pode usar skills registradas no sistema — ele as invoca pelo nome, com um comando no corpo. Isso permite que o agente delegue partes do trabalho para skills especializadas sem precisar reimplementar comportamentos que já existem.

Como declarar no corpo

## When invoked
1. Read the target file(s) fully.
2. Use the `impeccable` skill to check prose quality.
3. Apply findings to the output.
4. Return a diff-style summary.

A instrução de uso da skill vai nos passos numerados — não no papel. O papel define quem o agente é; os passos definem o que ele usa.

✓ Delegação correta

  • Skill invocada em passo específico e numerado
  • Resultado da skill integrado ao output final
  • Skill faz uma coisa; agente orquestra o fluxo

✗ Problemas comuns

  • Invocar skill sem usar o resultado (desperdício de tokens)
  • Chamar skill que faz exatamente o que o agente já faz
  • Invocar múltiplas skills sem critério de ordem
🎓
Skill
Comportamento reutilizável
📋
Invocação
Por nome, nos passos
🔗
Composição
Agente + skills = sistema
♻️
Reuso
Skill serve N agentes
7

🔁 Iterar com feedback

Um corpo de agente não nasce pronto. A primeira versão funciona 70% do tempo — os outros 30% revelam o que está faltando ou o que está errado. Iterar com feedback real é o que separa um agente "funciona às vezes" de um agente "confiável em produção".

1
Rascunho inicial
Papel + passos básicos + formato. Não precisa ser perfeito — precisa ser testável.
2
Rode com 3-5 inputs reais
Escolha casos representativos do uso real — não inputs fáceis. O agente precisa performar nos casos difíceis.
3
Identifique o padrão de falha
Onde o output diverge do esperado? Formato errado, scope creep, passo pulado? Cada falha mapeia para uma correção no corpo.
4
Corrija no corpo, re-teste
Uma correção por vez. Se você mudar três coisas juntas, não sabe qual delas resolveu. Versionamento simples: v1, v2, v3.

Regra prática: se você precisou explicar ao orquestrador "o agente retornou X mas você deve ignorar a parte Y", isso é um sinal de que a correção deveria estar no corpo do agente, não na lógica do orquestrador.

📎

Exemplo real: security-reviewer.md

Abaixo está um corpo completo de subagente de revisão de segurança. Cada seção demonstra um dos conceitos deste módulo aplicado em conjunto.

~/.claude/agents/security-reviewer.md
--- name: security-reviewer description: Reviews code for security vulnerabilities. Invoke when a file or diff needs OWASP/CVE analysis before merge. model: claude-sonnet-4-5 tools: - Read - Bash --- You are a senior security engineer specializing in application security for Python and TypeScript production codebases. Your sole responsibility is identifying security vulnerabilities — not fixing code, not commenting on style. ## When invoked 1. Read every file or diff provided in full before making any assessment. 2. Identify the language and framework in use (Django, FastAPI, Next.js, etc.). 3. Check systematically for the following vulnerability classes: - Injection (SQL, command, LDAP) - Authentication and session management flaws - Sensitive data exposure (secrets in code, logging PII) - Insecure deserialization - Known vulnerable dependency versions (check package.json / requirements.txt) 4. For each finding, assign a severity: HIGH / MEDIUM / LOW. 5. Format and return your report as specified below. ## Output Format Return a Markdown document with exactly these sections: **Summary**: 1-2 sentences on overall security posture. **Findings**: numbered list. Each entry: - Severity: HIGH / MEDIUM / LOW - Location: filename:line - Description: what the vulnerability is - Evidence: the relevant code snippet (max 3 lines) **Verdict**: PASS (no HIGH/MEDIUM), REVIEW (has MEDIUM), or BLOCK (has HIGH) ## Constraints - Do not suggest code fixes — report only - Do not comment on code quality, style, or architecture - Do not escalate directly to the user — return results to orchestrator - If a CVE number is uncertain, write "potential CVE — unverified" instead of a CVE ID - Do not analyze files outside the provided scope

Por que este corpo funciona

  • Papel específico: seniority + domínio + escopo (Python/TS, produção)
  • Passos checklist: 5 passos que cobrem todo o fluxo sem ambiguidade
  • Formato declarado: 3 seções nomeadas com estrutura exata
  • Restrições acionáveis: 5 proibições específicas ao domínio de segurança

Conteúdo detalhado

PROMPT 1 Transformar checklist em corpo de agente
Leia esta checklist de revisão de PR: [cole a checklist aqui] Transforme-a em um corpo de subagente completo para um arquivo .md: - Papel (senior + domínio extraído da checklist) - Passos numerados (mapeados dos itens da checklist) - Formato de saída (estruturado, parseável) - Constraints (o que o agente NÃO deve fazer além da checklist)

Use quando você já tem um processo documentado e quer transformá-lo num agente.

PROMPT 2 Auditar corpo existente
Leia o corpo deste subagente: [cole o .md aqui] Avalie: 1. O papel é específico o suficiente? (nível + domínio + contexto operacional) 2. Os passos cobrem o fluxo completo sem gaps? 3. O formato de saída está declarado e é parseável? 4. As constraints são específicas ao domínio ou genéricas demais? Retorne uma lista de melhorias com exemplos concretos.

Use para revisar agentes que "quase funcionam" e identificar o que falta.

PROMPT 3 Dividir agente faz-tudo
Este agente faz muitas coisas: [cole o corpo do agente aqui] Aplique o teste do "e também": 1. Liste cada responsabilidade separada que o agente tem 2. Proponha a divisão em N agentes especializados (nome + papel de cada um) 3. Para o agente mais importante, escreva o corpo completo Critério: cada agente deve ter exatamente uma responsabilidade.

Use quando um agente faz tudo mas não faz nada bem.

🖥️

Tela simulada: invocando o security-reviewer

O orquestrador invocou o security-reviewer num arquivo de autenticação. Veja como o corpo estruturado produz uma saída consistente e parseável.

claude — subagente: security-reviewer recriação ilustrativa
# Invocando security-reviewer em auth/login.py
→ Lendo arquivo completo (312 linhas)...
→ Framework detectado: FastAPI + SQLAlchemy
→ Verificando classes de vulnerabilidade...
## Summary
Two HIGH-severity findings in auth/login.py. SQL injection via raw query and hardcoded secret key. Immediate action required before merge.
## Findings
1. Severity: HIGH
Location: auth/login.py:87
Description: Raw SQL string interpolation — SQL injection
query = f"SELECT * FROM users WHERE email = '{email}'"
2. Severity: MEDIUM
Location: auth/login.py:12
Description: Hardcoded SECRET_KEY in source file
SECRET_KEY = "dev-secret-do-not-use"
## Verdict
BLOCK — 1 HIGH finding requires resolution before merge.
🏋️

Exercício: dividir um agente faz-tudo

Aplique o que você aprendeu neste módulo.

O agente problemático

You are a helpful senior engineer. When invoked: 1. Review the code for bugs AND style issues AND security problems. 2. Suggest architectural improvements if you see any. 3. Update the changelog. 4. If there are tests missing, write them. 5. Check documentation is up to date. 6. Respond in a friendly, conversational tone with all your thoughts.

Sua tarefa

  1. 1 Liste todas as responsabilidades separadas deste agente (aplique o teste do "e também")
  2. 2 Proponha 3 agentes especializados (nome + papel de uma linha cada)
  3. 3 Escreva o corpo completo de um dos agentes: papel + passos numerados + formato de saída + constraints

Critério de conclusão

  • Você identificou ≥4 responsabilidades separadas no agente original
  • Cada agente proposto passa no teste do "e também" — zero sobreposição de responsabilidade
  • O corpo que você escreveu tem papel específico (nível + domínio + contexto)
  • Os passos numerados cobrem o fluxo completo sem "e também"
  • O formato de saída está declarado e seria parseável por outro agente
  • As constraints são específicas ao domínio — não genéricas

📌 O que você aprendeu

Papel: nível + domínio + contexto operacional — não "helpful assistant"
Passos numerados: transformam comportamento emergente em reproduzível
Formato de saída: declarado explicitamente, parseável pelo orquestrador
Constraints: específicas ao domínio, acionáveis, não genéricas
Teste do "e também": um agente, uma responsabilidade
Skills: invocadas nos passos, não no papel
Iteração: rascunho → 3-5 inputs reais → padrão de falha → correção
Próximo módulo
2.4 → Ferramentas e permissões
O corpo define o que o agente faz — mas as ferramentas definem o que ele pode fazer. No próximo módulo você aprende a declarar e restringir o acesso a ferramentas com precisão cirúrgica.
2.2 A descrição é o gatilho 2.4 Ferramentas e permissões