⌘J
En esta página 6

Engineering / PR review con Claude Code

PR review con Claude Code

Cómo montamos un pre-review AI en los PRs a costo ~0, usando la GitHub Action de Claude Code con auth de suscripción.

Montamos una capa de pre-review AI en cada PR (antes del review humano) para recortar 30–50% de nuestro tiempo de review (ver el “review sandwich”). La clave: correrla a costo marginal ~0 con la GitHub Action de Claude Code y auth de suscripción, no con el producto managed pago.

Las tres formas (jul-2026)

anthropics/claude-code-action@v1. Corre en tus runners, contra tu plan. Con auth de suscripción sale a costo marginal ~0. La que usamos.

Costo: el detalle que define todo

La Action tiene dos modos de auth, y la diferencia es plata:

Suscripción (lo que usamos)
$0 marginal

Secret CLAUDE_CODE_OAUTH_TOKEN → consume tu plan Max/Team. Oficialmente soportado.

API key (metered)
metered

Secret ANTHROPIC_API_KEY → tokens facturados aparte. Más caro.

Si seteas los dos secrets, gana ANTHROPIC_API_KEY (paga). Setea solo el OAuth token.

Caveat: los reviews cuentan contra los límites de tu plan (Max: ventana de 5h

  • tope de 7 días). No es plata, pero puede comerse tu quota interactiva, por eso lo gateamos (abajo).

Setup

El token no alcanza solo: la Action necesita el Claude GitHub App instalado en el repo. Sin él, el run falla con 401 — Claude Code is not installed on this repository. Es el gotcha #1.

1

/install-github-app (hace casi todo)

En Claude Code corre /install-github-app: instala el App en el repo, setea el secret y deja el workflow. Es el camino recomendado.
2

(manual) token + secret

Si lo haces a mano: claude setup-tokengh secret set CLAUDE_CODE_OAUTH_TOKEN -R org/repo, y instalas el App desde github.com/apps/claude.
3

El workflow

.github/workflows/claude-review.yml con un prompt explícito (el genérico postea vacío) y --max-turns holgado.
.github/workflows/claude-review.yml
name: Claude Code Review
on:
pull_request:
  types: [opened, ready_for_review, reopened]   # NO synchronize (quota)
permissions:
contents: read
pull-requests: write
jobs:
review:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v4
    - uses: anthropics/claude-code-action@v1
      with:
        claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
        prompt: |
          Revisá este PR como pre-review. Dejá feedback accionable: comentarios
          inline + un resumen. Enfocate en correctness, aislamiento de tenants,
          seguridad/PII, y que no debilite tests. En español. No aprobás ni
          mergeás.
        claude_args: "--max-turns 20"

Lección aprendida: el prompt /code-review + --max-turns 5 corría verde pero posteaba vacío (“No buffered inline comments”). Un prompt explícito + turns holgados es lo que hace que deje feedback real. En pruebas, cazó bugs reales (fallo silencioso, error-handling faltante), no relleno.

Gatearlo (para no quemar quota)

  • Trigger opened, ready_for_review, reopened, nunca synchronize (cada push = un run). Un draft que pasa a ready sí se re-revisa; un push suelto no.
  • Re-review a demanda: comentas @claude revisa los últimos cambios (ver Automatización).

Advisory, no bloqueante

El review no es un required status check. Pasa con solo correr (no por hallazgos), y sin synchronize dejaba el check pending en cada push. El gate real es approvals=1 (un humano aprueba) + CI-tests cuando exista. El review informa esa decisión, no la reemplaza.

Preguntas frecuentes

¿El review de agente aprueba o mergea el PR?

No. El agente comenta y resalta riesgo, pero el merge queda siempre humano — Claude Code está bloqueado estructuralmente de auto-aprobar sus propios PRs.
Gana ANTHROPIC_API_KEY (metered, paga). Configura solo CLAUDE_CODE_OAUTH_TOKEN para quedarte en costo ~0.
Sí. Los reviews cuentan contra los límites de tu plan (Max: ventana de 5h + tope de 7 días). No es plata, pero puede comerse tu quota — por eso lo gateamos al trigger opened y a PRs de agente o grandes.