⚙️

Fluxo de Code Review
com IA

Como usar o Claude para revisar código — qualquer stack

Qualquer stack  ·  Contratos  ·  Edge Cases  ·  Regras de Negócio  ·  Claude Code CLI

Pressione para navegar  ·  F para tela cheia

Por que automatizar o review?

O que se perde no review manual

  • Focava no como o código foi escrito — perdia o o que ele deveria fazer
  • Edge cases sutis passavam: e se o dado vier nulo? e se a chamada falhar?
  • Regras de negócio alteradas sem intenção — regressões silenciosas
  • Contratos quebrados com outros serviços ou libs que o código depende
  • Review sem contexto: sem saber o porquê da mudança, fica difícil avaliar o risco

É difícil revisar bem sem saber o que a mudança pretende fazer — e sem uma segunda leitura técnica.

O que faz sentido automatizar

Uma leitura que cobrisse sempre:

  • Quebras de contrato com serviços e dependências
  • Edge cases não tratados na lógica alterada
  • Regras de negócio impactadas indiretamente
  • Dados sensíveis expostos sem querer

E que funcionasse independente da linguagem — nossa stack é variada.

Como o fluxo funciona

Um comando no terminal — cinco etapas automáticas — e o review está na tela:

entrada branch
name
passo 1 git fetch
origin
passo 2 git diff
main...branch
passo 3 agente
Claude
saída review
formatado

O que acontece automaticamente

  • Fetch garante que a branch remota está atualizada
  • Diff compara branch com origin/develop — só o que mudou
  • Agente recebe o diff + system prompt especializado
  • Output segue formato fixo: severidade, arquivo:linha, sugestão

Como usar

bash
$ claude /review feature/minha-branch

Só isso. O resto é automático.

O Agente Especializado

O system prompt define o foco — agnóstico de linguagem, centrado no comportamento:

System Prompt — Revisor de Comportamento e Contratos Você é um engenheiro sênior com foco em corretude de comportamento e quebras de contrato. Use a descrição do PR como contexto principal para entender a intenção da mudança antes de analisar o diff. FOCO em cada review: • Quebras de contrato com serviços, libs ou interfaces que o código depende • Edge cases não tratados na lógica alterada (nulos, falhas, estados inesperados) • Regras de negócio impactadas indiretamente • Dados sensíveis expostos ou mal tratados • Comportamento alterado silenciosamente em relação ao que a descrição descreve

Por que a descrição do PR importa

O agente — assim como um reviewer humano — não sabe o porquê da mudança só olhando o diff. Uma boa descrição de PR muda o nível do review:

  • Sem descrição → review foca em estilo e sintaxe
  • Com contexto → review foca no risco e na intenção
  • "Corrige cálculo de frete" → agente sabe o que checar
  • "Adiciona suporte a multi-tenant" → analisa isolamento
Funciona com qualquer stack — o foco é no comportamento, não na sintaxe.

O Slash Command /review

Tudo fica num arquivo .claude/commands/review.md — o Claude Code carrega automaticamente

Você é um engenheiro sênior com foco em corretude de comportamento e
quebras de contrato. Revise o diff como um tech lead que prioriza risco
acima de estilo.

Use a descrição do PR como contexto principal — ela define a intenção
da mudança e direciona onde concentrar a análise.

Sua tarefa:
1. Execute: git fetch origin
2. Execute: git diff origin/develop...origin/$ARGUMENTS
3. Leia a descrição do PR se disponível, depois analise o diff

Foque em:
- Quebras de contrato com serviços, libs ou interfaces dependentes
- Edge cases não tratados: nulos, falhas, estados inesperados, concorrência
- Regras de negócio impactadas indiretamente pela mudança
- Comportamento alterado silenciosamente em relação ao que foi descrito
- Dados sensíveis expostos ou mal tratados

Formato de saída para cada item encontrado:
### [EMOJI] [SEVERIDADE] [Categoria]
**Arquivo:** NomeDoArquivo:linha
**Problema:** descrição objetiva do risco
**Sugestão:** orientação ou trecho de código

Severidades: 🔴 CRÍTICO | 🟡 MÉDIO | 🟢 BAIXO
Categorias: Contrato | Edge Case | Regra de Negócio | Dados/Segurança | Comportamento

$ARGUMENTS — variável que recebe o nome da branch após o comando. Ex: /review feature/pagamentos$ARGUMENTS = "feature/pagamentos"

Localização: o arquivo fica na raiz do repositório em .claude/commands/review.md e fica versionado com o projeto.

Output do review

Exemplo de output após claude /review feature/calculo-frete — PR com descrição clara da intenção:

## Review: feature/calculo-frete
Arquivos alterados: 4  |  Linhas: +89 / -34  |  Itens encontrados: 3
🔴 CRÍTICO [Regra de Negócio]
**Arquivo:** FreightCalculator.java:67
**Problema:** A nova lógica de desconto é aplicada a pedidos já confirmados — a descrição do PR indica que deveria valer apenas para novos pedidos.
**Sugestão:**
return baseFreight * discountRate;
return order.isPending() ? baseFreight * discountRate : baseFreight;
🟡 MÉDIO [Edge Case]
**Arquivo:** FreightCalculator.java:91
**Problema:** Divisão pelo peso do pedido sem verificar se é zero — pedidos sem itens físicos lançam ArithmeticException em runtime.
**Sugestão:** Adicionar guard if (weight == 0) return 0; antes do cálculo.
🟢 BAIXO [Contrato]
**Arquivo:** FreightService.java:23
**Problema:** Retorno alterado de BigDecimal para double — clientes que dependem da interface podem quebrar silenciosamente.
**Sugestão:** Manter BigDecimal para preservar precisão e compatibilidade com os consumidores atuais.

Na prática — como usar

Antes de abrir qualquer PR, rode isso no terminal:

bash — ~/projects/servico
~/projects/servico $ claude /review feature/calculo-frete
⚙ Executando slash command: review
⟳ git fetch origin — atualizando refs remotas...
⟳ git diff origin/develop...origin/feature/calculo-frete
4 arquivos · +89 linhas · -34 linhas
◆ Analisando diff com base na descrição do PR...
🔴 CRÍTICO [Regra de Negócio] FreightCalculator.java:67
Desconto aplicado a pedidos já confirmados — contradiz a descrição do PR
🟡 MÉDIO [Edge Case] FreightCalculator.java:91
Divisão por zero possível — pedidos sem itens físicos
🟢 BAIXO [Contrato] FreightService.java:23
Tipo de retorno alterado — pode quebrar consumidores existentes
✓ Review concluído — 3 itens (1 crítico, 1 médio, 1 baixo)
~/projects/servico $

Tempo total: ~15 segundos do comando ao output completo, incluindo fetch e análise do diff.

O que fazer com isso: corrija o crítico antes de abrir o PR. Os demais avalie — alguns vão pro PR, outros pro backlog.

Prompt para instalar — cole no Claude Code na raiz do seu projeto
Clone o repositório https://github.com/willianszwy/apresentacao-code-review em um diretório temporário e copie o arquivo .claude/commands/review.md para a raiz deste projeto. Crie o diretório .claude/commands/ se não existir. Confirme o caminho do arquivo instalado.

Como montar — passo a passo

Leva menos de 10 minutos. Só precisa do Claude Code CLI instalado.

1
Instalar o Claude Code CLI npm install -g @anthropic-ai/claude-code — requer Node 18+
Pré-req
2
Criar o diretório de commands mkdir -p .claude/commands na raiz do seu repositório
30 seg
3
Criar o arquivo review.md Cole o conteúdo do Slide 5 em .claude/commands/review.md
2 min
4
Ajustar o system prompt para sua stack Adapte linguagens, frameworks e padrões para o seu projeto
5 min
5
Testar com uma branch real claude /review feature/sua-branch — ver o output
Pronto

Dicas de ajuste do prompt

  • Adicione regras específicas do seu projeto (ex: "sempre checar autenticação JWT")
  • Mencione patterns que o time usa (ex: "usamos Repository pattern + Service layer")
  • Liste o que não é relevante (ex: "ignore comentários em português")
  • Adicione checklist de compliance se necessário

Dica: commite o .claude/commands/review.md no repo — assim quem quiser usar já encontra lá, sem precisar pedir pra mim.

Outras perguntas úteis no review

📊 Diagrama do fluxo

pergunta Gere um diagrama Mermaid do fluxo desse código — entradas, decisões e saídas possíveis.
resposta

sim

não

sucesso

falha

Recebe pedido

Estoque?

Reserva item

Retorna 422

Chama API pagamento

Confirma pedido

Libera reserva

🔗 Fontes de dados da API

pergunta Liste cada parâmetro enviado nessa chamada de API e indique a origem: usuário, banco, config ou outra API. Aponte os que chegam sem validação.
resposta
Parâmetro Origem Validado?
orderIdPath param✓ sim
customerIdJWT token✓ sim
discountCodeRequest body✗ não
storeIdapplication.yml✓ sim

⚠️ Tratamento de erros HTTP

pergunta O que acontece se a API retornar 429, 500 ou timeout? O erro é tratado, propagado ou silenciado?
resposta
429 não tratado — exception propaga sem retry ⚠️
500 catch genérico, loga e retorna null ⚠️
timeout sem timeout configurado
Único caso tratado: 404 → lança
ResourceNotFoundException corretamente.

Nova abordagem em teste — dois agentes especializados

O mesmo diff — analisado em paralelo por dois especialistas com focos completamente distintos:

entrada 1 git diff
main…branch
entrada 2 gh pr view
--json body
agente 1 code-reviewer
agente 2 logic-reviewer
saída 2 relatórios
+ veredicto

code-reviewer

Técnico genérico — qualquer stack, qualquer linguagem

  • Correctness: bugs silenciosos, race conditions, lógica invertida
  • Segurança: OWASP Top 10, credentials hardcoded, inputs sem sanitização
  • Performance: O(n²) em hot paths, memory leaks, chamadas bloqueantes
  • Testes: asserções tautológicas, mocks que divergem do comportamento real

logic-reviewer

Lógica de negócio e integridade do PR

  • PR vs. código real: intenção declarada vs. implementação efetiva
  • Cavalo de troia: código não relacionado embutido na mudança
  • Edge cases: nulls, listas vazias, valores limite, concorrência
  • Quebra de contrato: tipo de retorno, campos removidos, enums alterados

Os agentes em detalhe

Cada agente vive em .claude/agents/ — frontmatter define nome, model e tools disponíveis:

.claude/agents/code-reviewer.md
---
name: code-reviewer
description: Revisor técnico genérico multi-stack.
  Analisa diffs focando em correctness, segurança,
  performance e qualidade de testes.
  Não avalia lógica de negócio.
tools: Glob, Grep, LS, Read, WebFetch, WebSearch
model: sonnet
color: red
---

Você é um revisor técnico sênior generalista.
Detecte automaticamente a linguagem e o stack.

Analisa:
- Correctness: bugs silenciosos, race conditions,
  lógica invertida, estado mutável compartilhado
- Segurança: OWASP Top 10, credenciais hardcoded,
  inputs externos não sanitizados
- Performance: O(n²) em hot paths, memory leaks,
  chamadas bloqueantes, recursos não liberados
- Testes: asserções tautológicas, mocks que divergem
  do comportamento real da dependência

NÃO avalia: lógica de negócio, formatação, naming.

Severidades: CRITICO | MEDIO | BAIXO
.claude/agents/logic-reviewer.md
---
name: logic-reviewer
description: Revisor de lógica de negócio e contratos.
  Valida comportamento implementado vs. intenção do PR,
  detecta edge cases, quebra de contrato e código
  não relacionado embutido na mudança.
model: claude-sonnet-4-6
---

Você analisa lógica de negócio, contratos e
integridade do PR. Não avalie qualidade técnica.

Foca em:
- PR vs. conteúdo real: divergência entre intenção
  declarada e implementação efetiva
- Cavalo de troia: mudanças não relacionadas ao
  objetivo do PR embutidas silenciosamente
- Edge cases: nulls, listas vazias, valores limite,
  concorrência de estado, datas passado/futuro
- Quebra de contrato: tipo de retorno, campos
  removidos, enums ou status alterados
- Regras de negócio: invariantes violadas,
  autorização ausente, fluxos de estado inválidos

NÃO avalia: performance, idiomas, estilo de código.
Ponto chave: os dois system prompts são complementares e sem sobreposição — um nunca teria achado o que o outro encontra. Isso reduz ruído e torna cada relatório mais preciso.

O comando /review-dual

.claude/commands/review-dual.md
## Passo 1 — Obter o diff

$ARGUMENTS pode ser: branch, PR #, link do PR ou
vazio (usa HEAD~1..HEAD)

Execute em paralelo:
- gh pr view $ARGUMENTS --json title,body,...
- git fetch origin; git diff origin/main...$ARGUMENTS

Antes de acionar os agentes, mostre:
  Arquivos alterados: N
  Linhas: +N / -N
  Descrição do PR: [obtida / não disponível]

## Passo 2 — Acionar os dois agentes em paralelo

Dispare simultaneamente com diff + descrição do PR:

**Agente 1 — code-reviewer**
Analise focando em problemas técnicos: correctness,
segurança, performance e qualidade de testes.
Ignore lógica de negócio.

**Agente 2 — logic-reviewer**
Analise focando em lógica de negócio, edge cases,
quebra de contrato e código não relacionado
embutido na mudança (cavalo de troia).

## Passo 3 — Apresentar os resultados

1. Relatório do code-reviewer (completo)
2. Relatório do logic-reviewer (completo)
3. Tabela consolidada de severidade:

| Severidade  | code-reviewer | logic-reviewer | Total |
|-------------|:---:|:---:|:---:|
| 🔴 Crítico  |  N  |  N  |  N  |
| 🟡 Médio    |  N  |  N  |  N  |
| 🟢 Baixo    |  N  |  N  |  N  |

4. Veredicto: PODE FAZER MERGE ou NÃO FAZER MERGE
   (não fazer merge se houver qualquer 🔴 crítico)
bash — ~/projects/servico
$ claude /review-dual feature/frete-v2
⚙ Coletando diff e descrição do PR...
Arquivos: 4 · +91 linhas · -37 linhas
Descrição do PR: obtida via gh cli
◆ [code-reviewer] analisando em paralelo...
◆ [logic-reviewer] analisando em paralelo...
═══ CODE-REVIEWER ═══════════════════
🔴 CRÍTICO [Segurança] AuthService.java:112
Input não sanitizado usado em query SQL
🟡 MÉDIO [Performance] OrderRepo.java:78
O(n²) — loop com chamada ao repositório
═══ LOGIC-REVIEWER ══════════════════
🔴 CRÍTICO [Cavalo de Troia] config/security.js:8
PR declara "frete" mas remove guard de autenticação
🟢 BAIXO [Contrato] FreightService.java:23
Tipo de retorno alterado — pode quebrar consumidores
⛔ NÃO FAZER MERGE — 2 críticos encontrados
$
code-reviewer encontrou
SQL injection + N+1 — invisíveis para revisão de negócio
logic-reviewer encontrou
Guard removido sem menção + quebra de contrato — invisíveis para revisor técnico

Como instalar — abordagem com 2 agentes

Três arquivos para criar. Você pode fazer manualmente ou usar o prompt abaixo para deixar o Claude configurar tudo:

1
Criar .claude/agents/code-reviewer.md Agente técnico genérico — correctness, segurança, performance, testes
2
Criar .claude/agents/logic-reviewer.md Agente de negócio — contratos, edge cases, cavalo de troia
3
Criar .claude/commands/review-dual.md O slash command que dispara os dois em paralelo
4
Testar com uma branch ou PR claude /review-dual feature/minha-branch ou claude /review-dual 42
Pronto

Os arquivos completos estão neste repo em .claude/ — é só copiar para o seu projeto.

Ou cole este prompt no Claude Code — ele instala tudo:
Prompt de instalação — raiz do projeto Clone o repositório https://github.com/willianszwy/apresentacao-code-review em um diretório temporário e instale neste projeto: - .claude/agents/code-reviewer.md - .claude/agents/logic-reviewer.md - .claude/commands/review-dual.md Crie os diretórios .claude/agents/ e .claude/commands/ se não existirem. Não sobrescreva arquivos existentes sem perguntar. Confirme os caminhos de cada arquivo instalado.

O Claude Code clona, copia e cria os diretórios automaticamente — sem precisar fazer nada manualmente.

Conclusão

Uma abordagem que vale experimentar.

Simples de instalar e adaptar para qualquer projeto.

ponto de partida review.md já está no repo
ferramenta Claude Code CLI claude.ai/code

Perguntas?