From workflow-kit
Skill para revisão automatizada de Pull Requests/Merge Requests (GitHub ou GitLab). Use sempre que o usuário pedir para revisar um PR/MR, analisar mudanças de código, fazer code review, ou avaliar um pull/merge request. Também se aplica quando o usuário mencionar "revisar PR", "code review", "review PR", "analisa esse PR", "olha esse pull request", ou fornecer um link de PR/MR. Inclui análise de padrões da codebase, validação de uso de libs via context7, e geração de comentários prontos para postar (somente o subconjunto aprovado pelo usuário).
How this skill is triggered — by the user, by Claude, or both
Slash command
/workflow-kit:pr-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Skill para conduzir revisões de Pull/Merge Requests de forma estruturada, analisando apenas o diff do PR/MR contra os padrões e convenções existentes na codebase.
Skill para conduzir revisões de Pull/Merge Requests de forma estruturada, analisando apenas o diff do PR/MR contra os padrões e convenções existentes na codebase.
O usuário fornecerá:
https://github.com/org/repo/pull/123https://git.lab.example.com/group/repo/-/merge_requests/123owner/project, repo e pr_number/mr_iid.glab, conforme a plataforma detectada, para obter os dados do PR/MR em paralelo:
pull_request_read):
get — detalhes gerais (título, autor, branch base/head, estado)get_diff — diff completoget_files — lista de arquivos alteradosglab):
glab api projects/:id/merge_requests/:iid — detalhes + diff_refsglab api projects/:id/merge_requests/:iid/changes (ou glab mr diff) — diff/arquivosgit fetch origin <head_ref> && git checkout <head_ref>
Isso garante que a codebase local reflita exatamente o estado do PR. Nunca analise apenas o diff remoto — sempre leia os arquivos reais da branch para ter contexto completo (código antes e depois das mudanças, imports, dependências entre arquivos).Antes de julgar as mudanças, entenda como o projeto já funciona. Leia os arquivos reais da branch (use Read, Glob, Grep) — nunca baseie findings apenas no diff. Identifique:
Isso serve como baseline para avaliar se as mudanças do PR estão alinhadas ou divergem dos padrões estabelecidos. Documente os padrões encontrados brevemente antes de prosseguir.
Para entender padrões, leia os arquivos existentes mais similares aos que foram alterados no PR. Leia os arquivos completos na branch do PR (não apenas o diff) para entender o contexto completo — isso evita findings baseados em suposições incorretas.
Para cada lib adicionada ou que teve seu uso modificado no PR:
resolve-library-id + query-docs) para buscar a documentação atualizada da lib.IMPORTANTE: Faça a validação via context7 ANTES de formular findings. Se um finding depende do comportamento de uma lib (ex: decorators, validators, ORM features), confirme via documentação primeiro. Nunca afirme que algo é bug baseado apenas em suposição sobre como a lib funciona.
Não chame context7 para libs que não foram tocadas no PR — foco apenas no que mudou.
Antes de produzir a revisão, inspecione as mudanças em arquivos de teste e na config de teste/CI no diff. O risco aqui é o PR ter ficado verde "movendo a trave" — alterando o teste em vez de corrigir o código. Procure por:
toEqual → toBeDefined, exato → parcial);skip / only / xit / it.todo / early return adicionados a um teste que antes rodava;coverageThreshold reduzido, testPathIgnorePatterns/exclude adicionado, match pattern estreitado, suite desabilitada no CI.Para cada mudança de teste, classifique:
feature-driven/test-was-wrong): mapeia para uma mudança de comportamento descrita no PR. Não é finding.escape-hatch): não há mudança de comportamento que justifique. Levante como finding [Bug] e pergunte ao autor o que o teste deveria proteger e por que foi enfraquecido.Não trate refator legítimo de teste (renomear, deduplicar, mover de camada mantendo a força) como escape-hatch. O gatilho é perda de força de detecção sem contrato que justifique.
Use exatamente esta estrutura:
Branch: <head> → <base>
Autor: | Arquivos: | + / -
O que o PR faz, em 2-3 frases objetivas. Inclua o contexto de negócio se identificável.
Liste o que o PR faz bem (se houver). Pode ser: boa cobertura de testes, separação de responsabilidades, uso correto de padrões existentes, etc. Se não houver nada de destaque, omita esta seção — não invente elogios.
Para cada achado, use este formato:
caminho/do/arquivo.ts (L{linha_inicio}-L{linha_fim})[Bug] | [Melhoria] | [Nit]// código sugerido, se aplicável
| Severidade | Item | Descrição |
|---|---|---|
| Bug / Melhoria / Nit | Título curto | Descrição em 1 linha |
[Bug], e os [Melhoria] são opcionais.[Bug], mas há [Melhoria] que deveriam ser tratados.[Bug] que precisam ser resolvidos antes do merge.Simule um code review real, gerando comentários prontos para copiar/colar ou postar via GitHub MCP ou glab, conforme a plataforma detectada.
Importante: a revisão completa da etapa 4 é para o USUÁRIO ler no chat. Os comentários desta etapa são rascunhos. O que vai para o PR/MR é decidido só na Ação Final (subconjunto aprovado).
A forma principal de postagem é o comentário inline no arquivo/linha do diff. Tudo o mais é secundário.
| Prioridade | Destino | Quando usar |
|---|---|---|
| 1 (principal) | Inline no arquivo:linha do diff | Sempre que o finding tiver linha no diff do PR/MR |
| 2 (fallback) | Note geral no PR/MR | Só se a API recusar posição (arquivo fora do diff, seed, config não alterado, etc.) — e no corpo indique arquivo:função/linha |
| 3 (opt-in) | Review Summary (comentário geral de resumo) | Só se o usuário pedir explicitamente |
Regras:
suggestion no inline quando a correção for uma mudança concreta de código.Para cada finding, gere o comentário formatado com prefixos textuais (sem emoji), pensado para ir inline:
`<caminho/do/arquivo>` (L<linha_inicio>-L<linha_fim>)
[Bug|Melhoria|Nit] **<título curto>**
<comentário detalhado, direto, sem emoji, explicando o problema e a sugestão>
\```suggestion
<código sugerido que o autor pode aceitar com um clique>
\```
suggestion nativo — aceitável com "Apply suggestion"; poste via pending review + inline comments.; poste via discussionscomposition`.Gere só como rascunho opcional se o usuário pedir summary. Não é o canal principal e não se posta por default.
Exemplo (sempre textual; nunca emoji):
## Review Summary
Este PR implementa o endpoint de webhook para eventos de pagamento, integrando com o serviço de notificações.
**Pontos positivos:** Boa separação entre controller e service, testes cobrindo os cenários principais.
**Findings:**
- [Bug] `src/webhook/webhook.service.ts` L45-52 — Race condition no processamento de eventos duplicados
- [Melhoria] `src/webhook/webhook.controller.ts` L12 — Validação do payload poderia usar class-validator (padrão do projeto)
- [Nit] `src/webhook/dto/event.dto.ts` L8 — Typo no nome da propriedade
**Veredicto:** Request Changes
A revisão completa (etapa 4) é para o USUÁRIO ler no chat — ela NÃO é a lista de postagem. O que vai para o PR/MR é decidido em um fluxo separado. Nunca poste sem preview + aprovação explícita.
Apresente os findings NUMERADOS (F1, F2, F3...) e pergunte quais devem ser postados.
Indique o destino planejado de cada um (inline path:line por padrão; note geral só se não der inline).
Lista de postagem = somente os itens que o usuário aprovou explicitamente, na última forma acordada durante a conversa (severidade, texto e teto de valores podem ter mudado).
Destino default = inline. Review Summary e note geral só entram se o usuário pedir ou se inline for tecnicamente impossível (e aí avise no preview).
Formato dos comentários postados (obrigatório):
[Bug], [Melhoria], [Nit].Preview obrigatório antes de postar (bloqueante):
Mostre o payload completo do que será enviado, não só a lista de títulos:
[inline] arquivo:linha; use [note geral] só com motivo), texto final do comentário, e se inclui suggestion.Formato sugerido do preview (uma seção por item):
PREVIEW DE POSTAGEM (nada foi enviado ainda)
1. [inline] path/file.ts:42
[Bug] Título
<corpo completo do comentário>
2. [note geral] (motivo: arquivo fora do diff)
...
Confirmar postagem destes N itens? (sim / editar / cancelar)
Poste somente após o usuário responder de forma explícita (ex: "sim", "pode postar", "confirma").
"ok", "beleza" ou silêncio não contam se ainda não houve preview com o payload.
Se o usuário editar qualquer texto no preview, regenere o preview e peça confirmação de novo.
Após postar: liste o que foi criado com os IDs das notes/comments (e se cada um foi inline ou geral), para permitir edição ou deleção rápida se algo saiu errado.
Se a ferramenta de postagem não estiver disponível, apresente os comentários formatados para o usuário copiar e colar manualmente — ainda assim priorizando o formato inline e respeitando a lista aprovada (não despeje todos os findings) e o preview.
Detecte pela URL do PR/MR (github.com vs domínio GitLab, ex: git.lab.*):
glab CLI:
glab api projects/:id/merge_requests/:iid (pegue diff_refs).POST .../discussions com position (position_type: text,
base_sha/head_sha/start_sha do diff_refs, old_path, new_path, new_line).glab api --input exige -H "Content-Type: application/json" (senão HTTP 415).POST .../notes) indicando arquivo/função no corpo — e declare o motivo no preview.[Bug], [Melhoria], [Nit], Aprovado, etc.).glab/API) sem mostrar o preview do payload e obter aprovação explícita do usuário.Estas regras existem para evitar findings incorretos que minam a credibilidade da revisão:
schema.prisma — não referencie.@Entity() decorators.datasource no schema.prisma ou o driver no package.json antes de afirmar algo sobre o banco.[Bug].[Bug] deve ser reproduzível — descreva o cenário exato que causa o bug (input → comportamento esperado vs real). Se não consegue descrever o cenário, rebaixe para [Melhoria].npx claudepluginhub lucasaguiar11/agent-skills --plugin workflow-kitCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.