Onde colocar uma checagem de decisão num agente de IA (e onde ela só atrapalha)

Aprovação em agentes de IA funciona quando a checagem fica só onde o erro sai caro, é irreversível ou difícil de detectar. O padrão é simples: o agente gera, a decisão filtra ou aprova, em três pontos clássicos (antes de enviar, antes de gravar e antes de escalar). No Claude Code isso vira hook PreToolUse com allow, deny ou ask. No Claude Agent SDK vira regra e canUseTool. No OpenAI Agents SDK vira needsApproval e guardrails. O resto fica automatizado, porque a Anthropic mostrou que usuários aprovam 93% dos prompts de permissão e a checagem em excesso vira fadiga
Fala aí, beleza? Se o teu agente quebra, quase sempre é no mesmo lugar: na hora em que ele decide sozinho algo que não devia 🙂
Deixar o modelo improvisar a decisão final é pedir pra ver o agente mandando email errado, apagando o que não devia ou acionando gente à toa
O padrão que resolve isso é bem direto: o agente gera, a decisão filtra ou aprova
Porém tem um porém (haha): checagem em todo lugar também quebra o agente, só que de outro jeito
Então este post tem duas metades: onde a checagem paga a conta e onde ela só gera atrito
Bora ver na prática?
O que você precisa entender antes de desenhar os pontos de decisão:
Antes de sair colocando aprovação em agentes de IA, vale separar duas coisas que muita gente mistura
A Anthropic diferencia workflow de agente (o resumo do Simon Willison sobre o guia Building Effective Agents é ótimo pra isso):
- Workflow: LLMs e ferramentas orquestrados por um caminho predefinido em código
- Agente: o próprio LLM dirige o processo e decide quais ferramentas usar
E por que isso importa?
Porque no workflow a decisão pode morar no código, num if que você controla
Já no agente o caminho é decidido pelo modelo, então a checagem precisa ficar na fronteira das ações, no momento em que ele tenta fazer alguma coisa
O segundo conceito é o human-in-the-loop: o agente propõe uma ação e uma pessoa aprova, edita ou rejeita antes que ela aconteça
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 48min
Nada irreversível acontece sem esse aval
É como ter um estagiário muito rápido que prepara tudo, mas só aperta o botão de enviar depois que você dá o ok 😀
Por fim: tenha um fluxo de agente já desenhado, nem que seja no papel, com a lista das ações que ele executa
Sem essa lista não tem como decidir onde a checagem entra
Como encaixar uma decisão no fluxo do agente, passo a passo:
- Mapeie as ações e classifique cada uma por risco, reversibilidade e sensibilidade
A regra de ouro: a autoridade humana fica onde o erro sai caro, é irreversível, tem peso jurídico, envolve segurança ou é difícil de detectar
Ler um arquivo é reversível e barato, apagar uma tabela não é
O erro comum deste passo: classificar pelo "parece perigoso" em vez de perguntar "dá pra desfazer?". Muita ação que assusta é reversível e muita ação boba não é
- Marque os três pontos clássicos de checagem
– Antes de enviar: tudo que chega ao usuário ou a terceiros (resposta, email, mensagem) – Antes de gravar: escrita, deleção ou alteração de dados – Antes de escalar: acionar outra pessoa, outro sistema ou um gasto
O erro comum deste passo: esquecer o "escalar". O agente que abre ticket, chama outra API ou dispara uma cobrança está tomando uma decisão tão séria quanto apagar dado
- Escolha o tipo de decisão para cada ponto
Não é tudo aprovação humana, se liga nas opções:
– Regra fixa em código: quando dá pra escrever a condição (bloquear deleção em massa, por exemplo) – Avaliador automático (evaluator-optimizer): uma chamada de LLM gera, outra avalia e devolve feedback em loop. Funciona melhor quando há critério claro de avaliação – Guardrail em paralelo: um modelo processa a consulta enquanto outro filtra em busca de conteúdo inadequado – Aprovação humana: pro caro, irreversível e sensível
O erro comum deste passo: usar avaliador LLM sem critério claro. Aí tu tem dois modelos improvisando em vez de um xD
E quando o avaliador reprova, o agente tenta de novo ou para? Isso é assunto de failure recovery em agentes, e vale desenhar junto
- Implemente no Claude Code com hook PreToolUse
Os hooks do Claude Code são configurados no settings.json, nos níveis de usuário, projeto ou local
O hook PreToolUse roda antes da chamada da ferramenta e tem dois jeitos de decidir
O primeiro é sair com exit code 2: isso bloqueia a chamada e devolve o stderr ao Claude, então ele sabe o motivo
#!/bin/bash
# hook PreToolUse: barra uma ação sensível antes de gravar
# ACAO_SENSIVEL é só um marcador: troque pela sua regra de detecção
if [ "$ACAO_SENSIVEL" = "sim" ]; then
echo "Ação bloqueada: deleção em massa precisa de revisão humana" >&2
exit 2
fi
exit 0
Exit 0 deixa seguir normalmente
O segundo jeito é devolver um JSON com permissionDecision dentro de hookSpecificOutput:
{
"hookSpecificOutput": {
"permissionDecision": "ask"
}
}
Os valores possíveis:
– deny: impede a chamada e mostra o motivo ao Claude – ask: pede confirmação ao usuário na interface – allow: pula o sistema de permissão

VPS Hostinger para seu sistema
10% OFF extraVPS com SSD NVMe e backups semanais. O cupom MATHEUSHORADECODAR é aplicado automaticamente pelo link.
Ver planos com 10% OFF →Se o hook não devolver nada, vale o fluxo de permissão normal
O erro comum deste passo: usar allow no atacado pra "parar de encher o saco". Ele pula a permissão, então só use pra ação que tu já classificou como rotineira e reversível. Confira os demais campos do JSON na doc antes de colocar em produção
- Implemente no Claude Agent SDK entendendo a ordem de avaliação
No SDK, as permissões são avaliadas nesta ordem:
hook PreToolUse, regras deny, regras allow, regras ask, modo de permissão, callback canUseTool e, depois da execução, hook PostToolUse
Os modos de permissão disponíveis são default, acceptEdits, bypassPermissions, plan, dontAsk e auto (no auto, um classificador avalia as ações, e mais abaixo te conto o que ele aprova e o que ele bloqueia)
E o canUseTool? Ele é a aprovação em runtime: só é chamado quando a avaliação termina num prompt, e pausa a execução até a sua aplicação responder
Ferramenta já aprovada por allowedTools, por regra allow ou pelo modo de permissão nem passa por ele
O erro comum deste passo: colocar a lógica crítica só no canUseTool e depois liberar a ferramenta numa regra allow. Ela nunca chega no callback, e tua checagem vira enfeite. Tome cuidado!
- Implemente no OpenAI Agents SDK com needsApproval e guardrails
No OpenAI Agents SDK, a ferramenta sensível recebe needsApproval: true
Quando o agente chama essa ferramenta, ela não executa: o SDK registra uma interrupção e devolve o controle à aplicação até alguém aprovar ou rejeitar
Junto disso tem três camadas de guardrail:
– Input guardrails: validam o que chega ao modelo – Output guardrails: validam o que chega ao usuário – Tool guardrails: envolvem as chamadas de função pra validar ou bloquear antes e depois da execução
O erro comum deste passo: marcar needsApproval: true em toda ferramenta. O run pausa a cada passo e o agente vira um formulário com etapas haha
Qual mecanismo usar em cada ponto do fluxo?
| Ponto do fluxo | Tipo de checagem indicado | Claude Code | Claude Agent SDK | OpenAI Agents SDK |
|---|---|---|---|---|
| Antes de enviar | Avaliador com critério claro ou guardrail; humano se for sensível | Hook PreToolUse com ask |
Regra ask + canUseTool |
Output guardrail ou needsApproval: true |
| Antes de gravar | Regra fixa pro destrutivo, humano pro irreversível | Hook PreToolUse com deny ou exit code 2 |
Hook PreToolUse ou regra deny | Tool guardrail ou needsApproval: true |
| Antes de escalar | Aprovação humana | Hook PreToolUse com ask |
canUseTool pausando a execução |
needsApproval: true (run pausado) |
| Ação rotineira | Sem checagem manual: regra ou classificador | allow no hook ou auto mode |
Regra allow, allowedTools ou modo auto |
Ferramenta sem needsApproval |
O custo de decidir em excesso (e como calibrar):
Aqui é onde muita gente se ferra
Segundo a Anthropic, usuários aprovam 93% dos prompts de permissão do Claude Code
O problema é a fadiga de aprovação: as pessoas deixam de prestar atenção no que aprovam
Ou seja, a checagem existe, mas ninguém está checando nada 😛
A saída da própria Anthropic foi o auto mode: um classificador aprova as ações rotineiras e bloqueia as sensíveis (grandes deleções, scripts suspeitos, possível exfiltração de dados), em vez de pedir aprovação manual a cada passo
E desde 14 de agosto de 2026 o auto mode é o modo de permissão padrão em sessões novas do Claude Code nos planos Pro, Max e Team
Pra calibrar o teu agente:
- Corte aprovações em ações reversíveis
Se dá pra desfazer em um passo, não precisa parar o fluxo
O erro comum deste passo: manter o ask "por garantia". Garantia que todo mundo aprova sem ler não garante nada
- Automatize o rotineiro com regra ou classificador
Regra fixa quando a condição é escrevível, classificador quando não é

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.O erro comum deste passo: jogar tudo pro classificador e esquecer as regras deny explícitas pro que tu já sabe que é proibido
- Mantenha o humano só no caro e irreversível
Enviar pra cliente, apagar dado, gastar dinheiro, acionar gente
O erro comum deste passo: colocar o humano como aprovador de tudo e depois reclamar que o agente é lento. Agente lento por excesso de aprovação é problema de arquitetura, não de modelo
Na prática: tirar do modelo a escolha que ele improvisaria
Vou te contar um caso meu que mostra esse padrão por outro ângulo
No vídeo abaixo eu mostro um agente no n8n que escolhe o melhor modelo pra cada pergunta
E a decisão "qual modelo usar" é exatamente o tipo de coisa que o LLM adora improvisar
Quando testei o agente seletor sem uma instrução explícita dizendo que a única função dele era escolher o modelo, às vezes ele simplesmente passava direto, sem selecionar modelo nenhum
Aí eu reforcei no prompt frases como "você sempre deve selecionar o modelo" e "esta é sua única função"
A escolha virou uma decisão isolada e obrigatória, antes de qualquer outra coisa
Outra coisa que fiz: tirei a lista de modelos de dentro do prompt e coloquei numa planilha no Google Sheets, com 11 modelos cadastrados manualmente
Assim fica muiiito mais fácil adicionar modelo novo depois, e o agente escolhe dentro desse conjunto em vez de inventar
Se liga nisso: limitar o espaço de decisão também é uma forma de checagem
Não tem aprovação humana ali, mas o modelo não tem como escolher algo fora da lista
Também separei as responsabilidades:
- Um agente só decide qual modelo usar, e a saída dele deve ser apenas o nome do modelo
- Um segundo agente resolve o problema com o modelo escolhido e, se precisar, usa tools como Wikipedia ou clima
Num teste perguntando "quem foi o terceiro papa", o seletor buscou na planilha, fez as chamadas à LLM, escolheu um modelo e registrou a escolha num log antes de passar pro segundo agente
Mas nem tudo foi lindo, né? Num teste sobre quantidade de pessoas na China, o agente devolveu um nome de modelo sem bater na etapa do Google Sheets, e numa tentativa anterior nem chegou a selecionar nada
Ou seja: mesmo com a decisão isolada, vale ter um ponto que confere se ela aconteceu de verdade
E uma dica de bastidor: depois de adicionar um nó novo ao fluxo, às vezes precisei salvar e recarregar o workflow porque o agente não reconhecia a mudança na hora
Se for reproduzir, use tuas próprias tools (a minha de clima usa uma API própria) pra testar de verdade essa lógica de escolher modelo dentro de um agente
Próximo passo: audite um agente seu com esta régua
Recapitulando a regra:
- Checagem proporcional ao risco e à reversibilidade
- Pontos clássicos: antes de enviar, antes de gravar e antes de escalar
- O resto automatizado com regra ou classificador, porque aprovação demais vira fadiga
Agora faça o teste: pega um agente que tu já tem rodando e lista todas as ações que ele executa
Do lado de cada uma, marca: deny, ask, aprovação humana ou roda livre
Se a coluna "roda livre" ficou vazia, tem checagem demais, e se a coluna deny ficou vazia, provavelmente tem de menos…
Até o próximo post! 🙂
Perguntas frequentes
Qual a diferença entre aprovação humana e guardrail automático em agentes de IA?
Na aprovação humana, o agente propõe a ação e uma pessoa aprova, edita ou rejeita antes da execução, nada irreversível acontece sem esse aval. Já o guardrail automático pode rodar em paralelo, com um modelo processando a consulta enquanto outro filtra conteúdo inadequado, sem esperar um humano. Use aprovação pro caro e irreversível, e guardrail pro que tem critério claro de checagem.
Por que pedir aprovação em todas as ações de um agente de IA pode ser pior do que não pedir?
Porque gera fadiga de aprovação: segundo a Anthropic, usuários aprovam 93% dos prompts de permissão do Claude Code, e esse volume faz as pessoas pararem de prestar atenção no que estão aprovando. Checagem em todo lugar não aumenta a segurança, só desgasta quem aprova. Por isso o checkpoint precisa ser proporcional ao risco e à reversibilidade da ação, não aplicado igual pra tudo.
O que é o auto mode do Claude Code e ele substitui a aprovação manual?
O auto mode usa um classificador que aprova ações rotineiras e bloqueia as sensíveis, como grandes deleções, scripts suspeitos ou possível exfiltração de dados, em vez de pedir aprovação manual a cada passo. Ele não elimina a checagem, só muda quem decide o rotineiro.
Quando usar needsApproval no OpenAI Agents SDK em vez de um hook no Claude Code?
needsApproval: true é do OpenAI Agents SDK: a ferramenta marcada assim não executa quando o agente a chama, o SDK registra uma interrupção e devolve o controle à aplicação até alguém aprovar ou rejeitar. Já o hook PreToolUse com permissionDecision (allow, deny ou ask) é mecanismo do Claude Code. São implementações de produtos diferentes pro mesmo padrão de human-in-the-loop, não dá pra misturar o detalhe de um no outro.
Pra que serve o callback canUseTool no Claude Agent SDK?
canUseTool é a aprovação em runtime: ele só é chamado quando a avaliação de permissão termina num prompt, e pausa a execução até a sua aplicação responder. Ferramenta já aprovada por allowedTools, por regra allow ou pelo modo de permissão nem passa por ele. Por isso a lógica crítica não pode ficar só nele, se uma regra allow liberar antes, o canUseTool nunca é chamado.
Dá pra misturar regra fixa em código com aprovação humana no mesmo agente de IA?
Dá, e é o esperado: a Anthropic diferencia workflow, onde a decisão mora num caminho predefinido em código, de agente, onde o próprio LLM decide o caminho. Na prática, as ações baratas e reversíveis podem ir por regra fixa (allow ou deny), enquanto as caras, irreversíveis ou sensíveis ficam com aprovação humana (ask). A ordem de avaliação no Claude Agent SDK já prevê essa mistura: hook PreToolUse, regras deny, allow, ask, modo de permissão e só depois o canUseTool.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 30min
Blog | Mais populares
Agentes no Origin: o que eles conseguem fazer nas suas pull requests?
Veja o que os agentes no Origin fazem dentro da pull request: respondem dúvidas, editam código, atualizam a PR e dão push sem sair da página.
Verificação adversarial: vale usar um segundo agente para derrubar o achado do primeiro?
Verificação adversarial funciona quando errar é caro e há teste real. No estudo citado, 79% dos achados morreram antes do reporte. Saiba quando vale usar.
Vale a pena orquestrar vários agentes de IA ou um agente só resolve?
Orquestração de agentes de IA vale a pena? Veja quando compensa multiplicar o custo em tokens, quando um agente só resolve e como decidir sem gastar à toa.
