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

🔑 Ferramentas e permissões

Um subagente bem configurado faz apenas o que precisa — nem mais, nem menos. Aprender a limitar ferramentas é a diferença entre um agente confiável e um que você hesita em rodar em produção.

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

Pense em um cofre com várias camadas de segurança. O que o agente consegue fazer é determinado pelas ferramentas que você lista no campo tools — não pelo texto do prompt. O prompt diz "o que fazer"; as ferramentas dizem "com o que". Misturar os dois é o erro mais comum ao criar subagentes.

Subagente tenta Write() TOOLS LAYER campo tools: [...] ✓ Read ✓ Grep ✗ Write (bloqueado) ✗ Bash (bloqueado) PROMPT LAYER campo description: "Leia arquivos .ts e reporte problemas" (orienta comportamento) (nao concede acesso) Execucao so le, nunca escreve Camada de permissao (tools) = o que e estruturalmente possivel Camada de prompt (description) = como o agente se comporta dentro do possivel

Conteudo detalhado

1

🎯 Dar só o necessário

O princípio do mínimo privilégio é simples: um agente que não precisa escrever não deve ter permissão de escrever. Parece óbvio, mas é violado o tempo todo. O custo de ser generoso demais nas ferramentas não aparece no primeiro uso — aparece quando o agente toma uma decisão inesperada em produção.

Principio do minimo privilegio aplicado a subagentes

Cada ferramenta que voce adiciona ao campo tools expande o raio de acao do agente. Expanda apenas quando o agente precisar da ferramenta para cumprir o objetivo especifico. Quando em duvida, comece sem — voce pode adicionar depois; desfazer dano em producao e muito mais caro.

Rascunho — sem restricao

Voce inclui tudo: Read, Write, Bash, WebSearch. O agente funciona mas nao e auditavel.

Refino — so o que usa

Voce observa quais ferramentas o agente realmente chamou. Remove o restante.

Producao — minimo validado

Apenas as ferramentas necessarias. O comportamento e previsivel e o risco, contido.

O que e: restricao estrutural que determina o que o agente consegue fazer, independente do que o prompt diz.
Por que importa: dano acidental e impossivel quando a ferramenta destrutiva simplesmente nao existe no contexto do agente.
Conceitos-chave: minimo privilegio · campo tools · expanda so quando necessario · auditabilidade.
2

📖 Agentes read-only: Read, Grep, Glob

A maior parte dos agentes de analise, revisao e pesquisa nao precisa escrever nada. O trio Read, Grep e Glob cobre praticamente todo caso de uso de leitura — inspecionar arquivos, buscar padroes, listar estrutura. Com apenas essas tres voce cria um agente que pode aprender tudo sobre o repositorio sem mudar um byte.

✓ O que o trio cobre

  • Read — ler qualquer arquivo do projeto, incluindo configs e segredos (cuidado ao reportar)
  • Grep — buscar padrao em texto, ideal para achar funcoes, TODOs, imports
  • Glob — listar arquivos por padrao, mapear estrutura de pastas
  • Combinados: mapeamento completo + busca semantica + leitura de contexto

✗ O que eles nao fazem

  • Criar ou modificar arquivos (Write)
  • Executar comandos do sistema (Bash)
  • Fazer requests HTTP (WebFetch, WebSearch)
  • Interagir com MCP servers externos

Dica: Glob + Read em sequencia

Um padrao muito util: use Glob para descobrir quais arquivos existem, depois Read para ler apenas os relevantes. Isso e muito mais eficiente do que pedir para o agente "ler tudo" — ele vai priorizar pelo padrao que voce definiu no Glob.

O que e: conjunto minimo de ferramentas para agentes que apenas observam e relatam — sem capacidade de alterar estado.
Por que importa: agentes read-only sao seguros para rodar sem supervisao — o pior que podem fazer e entregar um relatorio errado.
Conceitos-chave: Read · Grep · Glob · estado imutavel · revisao segura.
3

⚖️ Allowed x disallowed — a lista concreta

O arquivo .md de um subagente tem um campo tools que recebe uma lista. Tudo que esta na lista e permitido — tudo fora dela e bloqueado automaticamente, sem nenhuma configuracao adicional. Nao existe "negar explicitamente": voce inclui o que pode, o resto nao existe para o agente.

Ferramenta Categoria Risco se incluida sem necessidade Incluir quando...
Read Leitura Baixo (pode ler segredos) Precisa inspecionar conteudo de arquivos
Grep Busca Baixo Precisa buscar padroes no codebase
Glob Listagem Baixo Precisa mapear estrutura de arquivos
Write Escrita Medio (modifica arquivos) Agente precisa gerar ou editar artefatos
Edit Escrita Medio (patch em arquivos) Agente precisa fazer edicoes precisas
Bash Execucao Alto (roda qualquer comando) Agente precisa rodar scripts/testes
WebFetch Rede Alto (acesso externo) Agente precisa buscar dados externos
O que e: lista branca (allowlist) de ferramentas — inclui o permitido, o resto e automaticamente bloqueado.
Por que importa: modelo mental de "negar por padrao" e mais seguro que tentar listar o que e proibido.
Conceitos-chave: allowlist · deny-by-default · tools field · niveis de risco por ferramenta.
4

🔌 MCP permitidos — acesso a mundo externo

Ferramentas MCP (Model Context Protocol) dao ao agente acesso a sistemas externos: bancos de dados, APIs, navegadores, serviços. Sao mais poderosas — e mais arriscadas — que as ferramentas nativas. A decisao de incluir um MCP num subagente deve ser intencional e especifica: o agente precisa deste servidor MCP para completar sua funcao?

Como MCP servers sao herdados

Por padrao, subagentes herdam os MCP servers do contexto pai. Isso significa que se voce tem um servidor de banco de dados configurado globalmente, o agente filho tambem pode acessa-lo — a menos que voce restrinja explicitamente com mcpServers: [] (lista vazia = nenhum MCP) ou liste apenas os permitidos.

  • Heranca padrao: todos os MCP do contexto pai ficam disponiveis
  • Restricao total: mcpServers: [] — sem acesso a nenhum MCP
  • Lista especifica: somente os servidores listados ficam disponiveis

✓ MCPs geralmente seguros para subagentes

  • MCP de leitura de banco de dados (somente SELECT)
  • MCP de busca (Brave, tavily) com rate limit
  • MCP de acesso a documentacao interna (read-only)
  • MCP de GitHub para leitura de PRs e issues

✗ MCPs que precisam de revisao cuidadosa

  • MCP que pode enviar e-mails ou mensagens
  • MCP com acesso de escrita a banco de dados
  • MCP de execucao de deploys ou infra
  • MCP de pagamentos ou faturamento
O que e: MCP servers estendem o alcance do agente para sistemas externos — heranca automatica do contexto pai.
Por que importa: um agente de analise de codigo nao precisa — e nao deveria ter — acesso a um MCP de deploys.
Conceitos-chave: heranca de MCP · mcpServers: [] · restricao explicita · principio de isolamento.
5

🛡️ Permissao real supera prompt "nao faca"

Uma das armadilhas mais comuns: colocar no prompt instrucoes como "nunca delete arquivos" ou "nao execute comandos do sistema" enquanto o campo tools ainda inclui Bash. O prompt e orientacao; o campo tools e lei. Instrucoes em texto natural podem ser mal-interpretadas, ignoradas sob pressao ou contornadas — a lista de ferramentas nao.

Nao confie so no prompt para seguranca

O agente recebe o prompt como contexto de alto nivel, mas o LLM e um sistema probabilistico. Em cenarios de alta pressao, instrucoes ambíguas ou cadeias longas, ele pode:

  • Raciocinar que "a excecao se aplica a este caso especifico"
  • Interpretar uma instrucao vaga de maneira inesperada
  • Ser manipulado por prompt injection no conteudo que ele processa

Remova a ferramenta. Nao instrua o agente a nao usa-la.

Regra pratica: tools como contrato, prompt como estilo

Use o campo tools para definir o que o agente pode fazer (contrato imutavel). Use o prompt / description para definir como ele deve fazer (tom, formato, criterios). Misturar os dois — usar o prompt para proibir o que o tools permite — e uma falsa seguranca.

O que e: a restricao estrutural (tools) e absoluta; instrucoes no prompt sao probabilisticas e contornáveis.
Por que importa: seguranca real nao depende do LLM seguir instrucoes — depende de o LLM nao ter a ferramenta necessaria para o dano.
Conceitos-chave: tools como contrato · prompt como estilo · falsa seguranca · prompt injection.
6

👁️ "Se pode ler, assuma que vai"

Quando voce inclui Read no campo tools, o agente pode ler qualquer arquivo acessivel no projeto — inclusive .env, chaves SSH, tokens em configs. Isso e esperado e util, mas exige que voce saiba o que o agente pode fazer e que os relatorios que ele gera nao vazem dados sensiveis.

code-reviewer — execucao ILUSTRATIVO
Read(".env")
# agente pode ler — tools inclui Read
lendo 12 variaveis de ambiente...
analise concluida
RELATORIO — code-reviewer
Encontrei 3 variaveis sem prefixo de escopo. Detalhes enviados
ao orquestrador. [valores ocultados por seguranca]
Bom: agente leu, analisou, ocultou valores no relatorio
Ruim: agente leu e reproduziu os valores no relatorio

Instrua o agente a nao reproduzir dados sensiveis

Para agentes com acesso a Read em projetos reais, inclua no prompt: "Nunca reproduza valores de variaveis de ambiente, chaves, tokens ou senhas nos relatorios. Mencione apenas que existem e se estao configuradas corretamente." Aqui o prompt SIM e o lugar certo — voce nao esta proibindo uma ferramenta, esta orientando o comportamento dentro do que e permitido.

O que e: acesso de leitura implica acesso a todo o conteudo livel — incluindo dados sensiveis no repo.
Por que importa: relatorios gerados por agentes podem vazar dados se o agente reproduzir o que leu sem filtro.
Conceitos-chave: acesso implicito · dados sensiveis · separacao leitura / relatorio · instrucao de ocultacao.
7

🔬 Granularidade — Bash e o caso especial

Bash e a ferramenta mais poderosa e a que exige maior cuidado. Com Bash, o agente pode rodar qualquer comando do sistema — instalar pacotes, deletar arquivos, fazer requests com curl, iniciar processos. Quando Bash e necessario, a granularidade vem da descricao precisa no prompt sobre quais comandos sao esperados, combinada com allowedTools no settings.json do projeto para restringir quais binarios podem ser chamados.

code-reviewer.md — exemplo de subagente read-only exemplo .md
---
name: code-reviewer
description: |
  Revisor de codigo que analisa qualidade, padroes e problemas potenciais.
  Leia arquivos .ts, .js e .py no caminho indicado. Reporte: (1) problemas
  criticos, (2) sugestoes de melhoria, (3) pontos positivos. Nao altere
  nenhum arquivo. Nao execute comandos. Entregue um relatorio estruturado.
tools:
  - Read
  - Grep
  - Glob
# Sem Write, sem Edit, sem Bash, sem WebFetch
# Nenhum MCP server necessario para este agente
---

Prompts prontos

Prompt 1 — criar agente read-only

"Crie um subagente chamado doc-auditor que seja completamente read-only. Ele deve ler arquivos Markdown no diretorio /docs, verificar se cada um tem frontmatter com 'title', 'date' e 'author', e gerar um relatorio de compliance. Liste as ferramentas necessarias e explique por que nao precisa de Write ou Bash."

Prompt 2 — auditar permissoes de um agente existente

"Leia o arquivo .claude/agents/meu-agente.md e avalie se as ferramentas listadas em tools sao todas necessarias para a tarefa descrita em description. Para cada ferramenta, diga: necessaria, desnecessaria, ou depende. Sugira uma versao enxuta da lista de tools."

Prompt 3 — comparar granularidade Read vs Bash

"Quero um agente que verifique se o arquivo package.json tem a dependencia X. Explique como fazer isso com apenas Read (sem Bash) e quando seria necessario adicionar Bash. Qual e o risco de cada abordagem?"

O que e: Bash e a ferramenta de maximo poder — qualquer comando do sistema — exige o maior nivel de deliberacao antes de incluir.
Por que importa: muitas tarefas que parecem precisar de Bash sao resolvidas com Read + Grep — verifique antes de adicionar.
Conceitos-chave: Bash como ferramenta de ultimo recurso · allowedTools · granularidade via prompt · alternativas read-only.
🎯

Exercicio

Crie o arquivo .claude/agents/log-analyzer.md para um agente que analisa arquivos de log (.log, .txt) em busca de erros criticos e gera um relatorio com: quantidade de erros por nivel (ERROR, WARN, FATAL), os 5 erros mais frequentes, e uma linha de recomendacao. O agente nao pode modificar nenhum arquivo.

Passos

  1. 1Defina o campo tools — liste APENAS as ferramentas necessarias para leitura e busca em arquivos de texto.
  2. 2Escreva o campo description com instrucoes claras de como relatar os resultados (sem reproduzir linhas completas de log).
  3. 3Verifique: o agente precisa de Bash? Precisa de Write? Se nao, remova.
  4. 4Teste invocando: "use o agente log-analyzer para inspecionar os arquivos em /tmp/logs"

Criterio de verificacao — como saber que acertou

O agente esta correto se atender a todos os criterios abaixo:

  • Minimo necessario: tools contem apenas Read, Grep e Glob — sem Write, Edit, Bash ou ferramentas de rede.
  • Description precisa: o campo description especifica os tres itens do relatorio (contagem, top-5, recomendacao).
  • Sem falsa seguranca: nao ha instrucao no prompt proibindo Write — Write simplesmente nao esta em tools.
  • Dados sensiveis: description orienta a nao reproduzir linhas completas de stack trace com dados de usuario.
  • Testavel: ao invocar o agente, ele completa sem solicitar permissoes extras e sem tentar editar arquivos.

Proximo modulo:

2.5 — Projeto x Global. Quando colocar o agente em .claude/agents/ do projeto versus na pasta global do usuario.

Resumo do modulo

Minimo privilegio — inclua so as ferramentas que o agente realmente usa para cumprir sua funcao.
Read-only por padrao — Read + Grep + Glob cobrem a maioria dos casos de analise sem risco de dano.
Allowlist, nao denylist — o campo tools so inclui o permitido; o resto e automaticamente bloqueado.
MCP com intencao — herdados por padrao, mas voce pode — e deve — restringir para agentes especializados.
Ferramenta supera prompt — nunca use prompt para proibir o que o tools permite; remova a ferramenta.
Dados sensiveis — Read implica acesso a .env e segredos; oriente o agente a nao reproduzir valores nos relatorios.
Bash e ultimo recurso — verifique se Read/Grep resolvem antes de adicionar Bash.