🌐 Website Oficial e Catálogo de Skills: jpolvora.github.io/cursor-reviewer
O Cursor Reviewer é um revisor de Pull Requests automatizado e portável para Azure DevOps e GitHub. Ele utiliza o Cursor SDK (@cursor/sdk) em modo agêntico para realizar análises profundas diretamente no diff do repositório, guiado pelo harness do projeto (regras do .cursor/rules/, AGENTS.md e instruções de code-review).
O revisor atua exclusivamente em modo de leitura (review-only), publicando threads acionáveis nas linhas afetadas da PR. Ele não altera arquivos no repositório. A decisão final de aplicar a correção sugerida ou encerrar a thread é sempre do desenvolvedor.
Important
Modo Somente Leitura: O agente opera dentro de um ambiente seguro e controlado. Ele está tecnicamente impedido de realizar commits, push, formatar código ou executar scripts modificadores no repositório.
Para detalhes arquiteturais e teóricos profundos, consulte a pasta docs/:
- Fluxo de Análise e Decisão: Guia completo de ciclo de vida, do carregamento de contexto ao gate final.
- Perguntas Frequentes (FAQ): Dúvidas comuns de configuração, comportamento do bot e regras.
- Cálculo de Score e Severidade: Rubrica detalhada do score (0–10) e severidades (
critical,warning,suggestion). - Modelo de Execução em Duas Fases: Detalhes sobre a arquitetura de triagem e investigação profunda em um único agente.
- 🔌 Integração Multiprovedor (Azure DevOps & GitHub): Suporte nativo a ambas as plataformas. O provedor correto é inferido automaticamente pelas variáveis de CI ou pode ser forçado pelas flags CLI (
--adoou--gh). - 🧠 Memória Intra-PR e Agrupamento de Ocorrências (Anti Whack-a-mole): O agente retém os padrões de erros passados da PR em seu contexto para caçar ativamente falhas recorrentes. Ao encontrar o mesmo erro espalhado pelo diff, ele agrupa as ocorrências (
relatedOccurrences), sendo desdobradas pela pipeline em múltiplas threads sincronizadas publicadas de uma única vez. - 🗂️ Seleção e Autodetecção de Stacks Tecnológicas: Permite executar a revisão focando nas extensões de arquivos e com recomendações de boas práticas específicas da stack selecionada (via
--stackou envCURSOR_REVIEWER_STACK). Caso nenhuma stack seja configurada, o runner tenta autodetectar a tecnologia analisando os arquivos da raiz do projeto (ex.: presença deartisan,next.config.js,tsconfig.jsonou arquivos.sln/.csproj), caindo paraABP/Angularcomo fallback. O log indica explicitamente de onde a definição da stack foi carregada. - 📝 Sugestões Interativas:
- No GitHub, as correções sugeridas utilizam o formato nativo
```suggestion, permitindo que o desenvolvedor aplique a correção na PR com um único clique. - No Azure DevOps, que não suporta o recurso de sugestão interativa, as cercas são normalizadas automaticamente para blocos de código neutros (
```csharp,```ts, etc.), garantindo uma formatação limpa.
- No GitHub, as correções sugeridas utilizam o formato nativo
- ⚖️ Garantia de Convergência (Orçamento de Rodadas): Utiliza um contador de rodadas persistido em um comentário de estado (
<!-- reviewer-round-state -->). Se as rodadas excederem o limite (default: 5) e continuarem ocorrendo issues abertas, o bot entra em escalonamento: publica apenas issues de severidadecritical(segurança/quebra de negócio) e adiciona um aviso solicitando revisão humana. - 🔍 Mapeamento Automático de Regras: Lê e filtra arquivos de regras locais
.cursor/rules/*.mdcassociados aos arquivos alterados no diff antes do início da análise pelo agente. - 📊 Relatórios e Visibilidade na Build:
- Azure DevOps: Emite logging commands (
##vso[task.logissue]) e anexa um resumo markdown rico na tela de build (##vso[task.uploadsummary]). - GitHub: Anexa um resumo markdown completo da revisão diretamente na página do workflow via
GITHUB_STEP_SUMMARY.
- Azure DevOps: Emite logging commands (
- 📦 Execução Remota via cURL: Permite rodar o reviewer remotamente baixando apenas o script
run.shda branchrelease, dispensando o clone completo do repositório ou a presença de dependências de desenvolvimento. - 🤖 Skills agênticas do runner (
.agents/skills/): Skills versionadas neste repositório para uso no Cursor/IDE ao desenvolver ou operar ocursor-reviewer:code-review-self— Executa o pipeline de review (duas fases, gate, rodadas) pelo próprio agente do IDE, sem@cursor/sdk; útil para dry-run local e validação do comportamento do runner.megabrain— Revisão com threads persistentes ([Thread #1],[Thread #2], …); em rodadas seguintes avalia se cada thread foiRESOLVEDou permaneceUNRESOLVED.solve-pr— Automatiza o ciclo de correção: busca threads do bot no GitHub, aplica fixes, commit/push e aguarda nova rodada do reviewer.
Crie um arquivo .env na raiz do projeto com as chaves necessárias (veja .env.example):
cp .env.example .env| Variável | Tipo / Padrão | Descrição |
|---|---|---|
CURSOR_API_KEY |
Obrigatório | Chave de API do painel do Cursor (Integrations / Service Account). |
AZURE_DEVOPS_EXT_PAT |
Opcional | PAT do ADO com permissão de escrita em Code e leitura em Work Items. |
GITHUB_TOKEN ou GH_TOKEN |
Opcional | Token de acesso para APIs do GitHub (REST/GraphQL). |
CURSOR_REVIEWER_MODEL |
composer-2.5 |
Modelo LLM utilizado pelo agente (ex: composer-2.5-fast, claude-4.6-sonnet-medium-thinking). |
CURSOR_REVIEWER_TARGET_BRANCH |
refs/heads/master |
Branch de comparação para gerar o diff git. |
CURSOR_REVIEWER_BOT_TAG |
[Cursor Reviewer] |
Tag de identificação do bot nos comentários da PR. |
CURSOR_REVIEWER_MAX_ROUNDS |
10 |
Limite de iterações de correções antes do handoff humano (0 desativa). |
SCORE_MIN |
5 |
Score mínimo (inclusive) para publicar issue como thread na PR. Issues com score >= SCORE_MIN entram como threads acionáveis. Opcional — omitir mantém o comportamento histórico (limiar 5). |
CURSOR_REVIEWER_TIMEOUT_MS |
600000 (10 min) |
Tempo limite de execução da sessão do agente. |
CURSOR_REVIEWER_REPO_ROOT |
— | Raiz do repositório alvo a revisar (default: detectado dinamicamente). |
CURSOR_REVIEWER_REVIEW_SELF |
false |
Se true, permite que o reviewer revise os próprios arquivos (apenas para desenvolvimento). |
CURSOR_REVIEWER_STACK |
ABP/Angular |
Stack de desenvolvimento ativa (ABP/Angular, PHP/Laravel, Next.js/React, TypeScript, Custom). |
CURSOR_REVIEWER_CUSTOM_PROMPT |
— | Caminho do arquivo ou string de prompt quando a stack é Custom (requerido para stack Custom). |
CURSOR_REVIEWER_INCLUDE_PATTERNS |
— | Lista separada por vírgulas de padrões glob de inclusão (ex.: **/*.py,**/*.go). Sobrescreve o default da stack. |
Para rodar localmente ou customizar a execução em scripts:
npm run review -- [argumentos]--dry-run: Simula toda a execução, gerando o JSON de reviews no console e renderizando previews estruturados das threads, sem publicar nada na PR real.--include-uncommitted: Inclui alterações não commitadas (staged/unstaged/untracked) no escopo do diff vs HEAD.--seed-test: Roda a suite de validação local de detecção baseada no arquivoSEED-ISSUES.md.--source-branch <REF>: Sobrescreve localmente a branch de origem.--target-branch <REF>: Sobrescreve a branch de destino do diff (ex:refs/heads/develop).--repo-root <CAMINHO>: Define o diretório do repositório Git alvo (deve conter uma pasta.gitválida).--adoou--gh: Força a plataforma do provedor (Azure DevOps ou GitHub).--org <NOME>,--project <NOME>,--repo <NOME>,--pr-id <ID>: Passa o contexto do repositório e ID da Pull Request explicitamente para execução local.--stack <NOME>ou--stack=<NOME>: Define a stack tecnológica ativa para o review (ABP/Angular,PHP/Laravel,Next.js/React,TypeScript,Custom).--custom-prompt <VAL>: Caminho do arquivo ou string de prompt quando a stack éCustom(requerido para--stack=Custom).--include-patterns <VAL>: Lista separada por vírgulas de padrões glob de inclusão (ex.:**/*.py,**/*.go). Sobrescreve o padrão de arquivos a incluir no diff.--score-min <N>ou--score-min=<N>: Score mínimo (inclusive) para publicar issue como thread (default:6). Equivalente à variávelSCORE_MIN. Opcional — pipelines e scripts existentes que não passam este parâmetro continuam com limiar 6.
Compatibilidade:
SCORE_MINe--score-minsão opt-in. Sem configurá-los, o gate permanece 6–10 (mesmo comportamento de versões anteriores). Não é necessário alterar pipelines ADO/GitHub já em produção.
[PR Aberta/Atualizada]
│
▼
[Preparar Workspace Git] ──► Filtra tipos de arquivos de acordo com a stack (ou --include-patterns)
│
▼
[Coletar Contexto do Provedor] ──► Work Items linkados + Threads de bot existentes
│
▼
[Agente Cursor (2 Fases)]
├─ Fase 1: Triagem ──► Identifica linhas alteradas e elabora hipóteses de falhas
└─ Fase 2: Investigação ──► Prova/refuta hipóteses usando tools (read, grep, rules locales)
│
▼
[Gate de Validação] ──► Filtra reviews inválidos ou com score < SCORE_MIN (default: 6)
│
▼
[Publicação na PR]
├─ Azure DevOps: Normaliza cercas e publica threads + Estado da Rodada
└─ GitHub: Mantém ```suggestion e anexa resumo no GITHUB_STEP_SUMMARY
│
▼
[Fim da Execução] ──► Exit 0 (sucesso/issues encontradas) ou Exit 1 (falhas de sistema)
O Cursor Reviewer permite focar a análise em arquivos elegíveis específicos e injetar recomendações de boas práticas direcionadas para cada ecossistema tecnológico.
Você pode definir a stack de três formas (em ordem de prioridade):
- Parâmetro CLI:
--stack=<nome-da-stack>(ex.:--stack=PHP/Laravel). - Variável de Ambiente:
CURSOR_REVIEWER_STACK=<nome-da-stack>. - Autodetecção Automática: Caso não seja especificada nenhuma das opções anteriores.
Se você precisa rodar o revisor em um projeto cuja tecnologia/stack não está pré-definida nas opções padrão, ou se deseja ter total controle das diretrizes de revisão da stack, você pode utilizar a stack Custom.
Quando a stack Custom é selecionada, o Cursor Reviewer:
- Requer que você informe um prompt customizado via
--custom-prompt(ou pela variávelCURSOR_REVIEWER_CUSTOM_PROMPT). - Adota, por padrão, a inclusão de todos os arquivos (
**/*) no diff de revisão, a menos que seja definido o parâmetro--include-patterns(ou a variávelCURSOR_REVIEWER_INCLUDE_PATTERNS).
-
Exemplo 1: Passando o caminho de um arquivo de prompt customizado (recomendado para CI):
npm run review -- --dry-run --stack=Custom --custom-prompt=./my-pipeline-prompt.md
-
Exemplo 2: Passando o prompt diretamente como string:
npm run review -- --dry-run --stack=Custom --custom-prompt="Evite o uso de variáveis globais e garanta tipagem estrita de retorno em todas as funções públicas." -
Exemplo 3: Limitando os arquivos analisados pela stack customizada (por exemplo, Python e Go):
npm run review -- --dry-run --stack=Custom --custom-prompt=./custom-rules.md --include-patterns="**/*.py,**/*.go" -
Exemplo 4: Utilizando variáveis de ambiente (comum em arquivos de Pipeline/GitHub Actions):
export CURSOR_REVIEWER_STACK="Custom" export CURSOR_REVIEWER_CUSTOM_PROMPT="./config/reviewer-prompt.md" export CURSOR_REVIEWER_INCLUDE_PATTERNS="**/*.rs,**/*.toml" npm run review -- --dry-run
Quando ativada, a estratégia de autodetecção analisa a raiz do repositório (repoRoot) e infere a tecnologia baseada nas seguintes regras:
- PHP/Laravel: Identificado se houver o arquivo
artisanoucomposer.jsonna raiz. - Next.js/React: Identificado por arquivos como
next.config.js/.mjs/.tsou pelo pacotenextnas dependências dopackage.json. - ABP/Angular: Identificado por arquivos
angular.json, diretórioangular/ou pelo pacote@angular/core. - C#/.NET (ABP/Angular): Identificado por soluções
.slnou arquivos.csprojna raiz. - TypeScript: Identificado por
tsconfig.jsonou pelos pacotestypescript/tsx.
Tip
Ordem de Precedência na Detecção: Arquivos de solução C# .sln e .csproj são checados antes de tsconfig.json genéricos. Isso garante que backends ABP/.NET Core que possuam um tsconfig na raiz para fins de tooling não sejam erroneamente detectados como TypeScript puro.
- Fallback Padrão: Se nenhuma tecnologia for autodetectada ou especificada, o runner adota a stack
ABP/Angular(mantendo 100% de compatibilidade com o comportamento original). - Tratamento de Macros ADO: Caso a variável de ambiente
CURSOR_REVIEWER_STACKcontiver uma macro não expandida do Azure DevOps (como$(CURSOR_REVIEWER_STACK)), ela será resolvida automaticamente para a stack padrão. - Seed Tests: Ao rodar a suíte local com a flag
--seed-test, o runner força a execução na stackABP/Angularpara garantir a detecção correta das fixtures C#/.NET.
A arquitetura é modular e extensível. Para adicionar suporte a uma nova stack tecnológica:
- Registrar no Config: Abra
src/config.tse adicione a nova definição ao dicionárioSTACKS, mapeando o nome amigável, os padrões de arquivos do diff (includePatterns) e o nome do arquivo de prompt (ex.:meu-framework.md). - Mapear o Alias: No mesmo arquivo, atualize a função
getStackConfigcom as chaves e aliases de normalização da sua stack. - Criar o Prompt: Crie o arquivo markdown correspondente em
skills/stacks/meu-framework.mddetalhando as instruções específicas e preocupações comuns de revisão de código para aquela tecnologia.
As skills em .agents/skills/ deste repositório são locais ao runner. Invocáveis no Cursor com /code-review-self, /megabrain, /solve-pr ou /spec-to-pr quando anexadas à conversa:
| Skill | Quando usar |
|---|---|
code-review-self |
Revisar diff/PR localmente pelo agente do IDE, espelhando src/index.ts em modo somente-leitura |
megabrain |
Revisão iterativa com threads numeradas; follow-up após commits de correção |
solve-pr |
Implementar correções das threads abertas do bot e republicar na PR |
spec-to-pr |
Fluxo agêntico completo Spec → Plan → Implement → Verify → Review → Ship PR |
Tip
Para obter mais informações sobre outras diretrizes e skills genéricas reutilizáveis (como code-review ou fix-pr), consulte o repositório centralizado workflow-skills.
Utilize o template pronto do projeto: azure-pipelines-cursor-code-review.yml.
- Copie o arquivo para a raiz do seu repositório Git alvo.
- Certifique-se de criar um Variable Group (ex:
vg-cursor-reviewer) no Azure DevOps contendo a variável secretaCURSOR_API_KEY. - Garanta que o Build Service da sua pipeline tenha permissão de Contribute to pull requests nas configurações do repositório.
- Habilite a opção Allow scripts to access the OAuth token nas configurações de execução do job da pipeline.
- Configure uma branch policy de Build Validation apontando para esta pipeline.
Para o GitHub Actions, você pode rodar a ferramenta diretamente baixando o script de execução remota, alimentado com as variáveis e permissões do repositório:
name: Cursor Code Review
on:
pull_request:
branches: [ main, develop ]
jobs:
review:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- name: Checkout Code
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22.13.x
- name: Run Reviewer Agent
env:
CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- --gh --pr-id ${{ github.event.pull_request.number }}O script run.sh permite executar o Cursor Reviewer em qualquer repositório sem a necessidade de clonar o projeto do runner manualmente ou instalar dependências de desenvolvimento locais de forma permanente.
O script realiza as seguintes etapas de forma silenciosa:
- Clona a branch
release(contendo exclusivamente os artefatos compilados em JS do runner) em um diretório temporário local (.tmp-cursor-reviewer). - Instala apenas as dependências de produção necessárias de runtime (
npm ci --omit=dev). - Executa o agente direcionando o escopo de análise para a pasta atual e repassa todos os argumentos CLI.
- Remove o diretório temporário automaticamente ao concluir ou interromper o processo.
Você pode invocar o runner passando opções CLI usando o operador -- após a chamada do bash:
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- [OPÇÕES]Important
A variável de ambiente CURSOR_API_KEY deve estar exposta no terminal de execução para que o agente consiga autenticar no Cursor SDK.
Todos os argumentos passados após -- são repassados ao indexador do Cursor Reviewer. A lista completa de opções suportadas inclui:
| Parâmetro | Descrição |
|---|---|
--dry-run |
Executa o review simulado sem publicar threads ou comentários na PR (útil para testes locais). |
--verbose |
Exibe logs detalhados de depuração sobre o diff git, tokens e carregamento de regras. |
--gh / --ado |
Força a plataforma de destino como GitHub ou Azure DevOps, respectivamente (autodetectado em ambientes CI). |
--pr-id <ID> |
ID da Pull Request a ser revisada (obrigatório para publicação de threads). |
--stack <nome> |
Define a stack tecnológica para focar a revisão com prompts especializados. Opções: typescript, nextjs/react, php/laravel, abp/angular ou custom. |
--custom-prompt <caminho> |
String de prompt ou caminho para arquivo markdown (obrigatório se --stack custom for selecionado). |
--target-branch <branch> |
Branch de comparação para gerar o diff (Padrão: refs/heads/master). |
--include-patterns <csv> |
Lista de padrões glob de inclusão de arquivos separados por vírgula (ex: **/*.ts,**/*.cs). |
--include-uncommitted |
Inclui arquivos modificados não commitados na análise (staged/unstaged). |
--bot-tag <tag> |
Tag identificadora de comentários feita pelo bot (Padrão: [Cursor Reviewer]). |
--model <id> |
ID do modelo LLM do Cursor a utilizar (Padrão: composer-2.5). |
Analisa o diff local contra a branch master usando boas práticas de TypeScript sem publicar nada:
export CURSOR_API_KEY="sua_chave_aqui"
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- --dry-run --stack typescriptexport CURSOR_API_KEY="sua_chave_aqui"
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- --dry-run --target-branch refs/heads/develop --include-uncommittedPara executar remotamente na pipeline do GitHub Actions enviando os dados da PR:
- name: Run Reviewer Agent
env:
CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- --gh --pr-id ${{ github.event.pull_request.number }}Executa remotamente especificando a organização e projeto:
- script: |
curl -fsSL https://raw.githubusercontent.com/jpolvora/cursor-reviewer/main/run.sh | bash -s -- --ado --org "MinhaOrg" --project "MeuProjeto" --repo "MeuRepo" --pr-id $(System.PullRequest.PullRequestId)
env:
CURSOR_API_KEY: $(CURSOR_API_KEY)
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: 'Executar Cursor Reviewer via cURL'- Node.js instalado (versão 22.13+).
- Chave
CURSOR_API_KEYpreenchida no arquivo.env.
| Comando | Descrição |
|---|---|
npm install |
Instala todas as dependências locais. |
npm run review:local |
Roda uma simulação (--dry-run) contra o diff da branch local. |
npm test |
Executa validações de tipo (tsc --noEmit) e a suite de testes unitários. |
npm run test:seed |
Roda o teste E2E: instala fixtures temporárias de defeito, executa a análise com agente em modo dry-run/seed e valida se todos os cenários de SEED-ISSUES.md foram detectados pelo agente. |
npm run build |
Compila o projeto TypeScript para JavaScript na pasta dist/. |
src/index.ts: Orquestrador principal do fluxo de revisão.src/config.ts: Tratamento de argumentos da CLI e resolução de parâmetros de ambiente.src/provider/: Abstrações e integrações de APIs de plataformas (github.tseazuredevops.ts).src/agent/: Código de conexão com o Cursor SDK, geração do prompt e tokens.src/ado/: Regras de validação do gate, de rodadas, formatação de threads e helpers do ADO.skills/: Contratos de prompts estáticos do agente (SYSTEM_PROMPT.mdeCODE_REVIEW.md) e subpastaskills/stacks/contendo os prompts complementares com as recomendações de cada stack..agents/skills/: Skills agênticas do ecossistema do runner (code-review-self,megabrain,solve-pr,spec-to-pre scripts auxiliares).demo-project/: Projeto de demonstração contendo erros intencionais para fins de testes locais.