Receta · Intermedio · 15 min
Revisa cada pull request con Claude Code en GitHub Actions
Configura anthropics/claude-code-action@v1 para que revise tus PR solo, responda a @claude en comentarios y no dispare el gasto. Workflows listos.
Probado con Claude Code 2.1.316 · revisado
El problema
Revisar a mano cada pull request cuesta tiempo, y en equipos pequeños los PR se aprueban sin que nadie los lea a fondo. Quieres que Claude Code deje comentarios en el PR en cuanto se abre y poder preguntarle con @claude sin salir de GitHub. Y no quieres que se coma tus minutos de Actions ni tu saldo de API en cada cambio de un README.
La solución
Dos workflows con la acción oficial anthropics/claude-code-action (etiqueta @v1; la última publicada el 31-oct-2026 es v1.0.266): uno revisa cada PR automáticamente y otro responde cuando alguien escribe @claude. Necesitas ser administrador del repositorio.
Probado: sintaxis YAML y configuración (cada input del paso existe en el action.yml actual de la acción). No probado: la ejecución en GitHub; depende de tu repositorio, tu app instalada y tu secreto.
1. Instala la app y el secreto (vía rápida)
Instala la GitHub CLI e inicia sesión. Luego, dentro de tu repositorio:
gh auth login
claude
En Claude Code escribe /install-github-app y sigue los pasos. Instala la Claude GitHub App, guarda tu credencial como secreto del repositorio (ANTHROPIC_API_KEY si usas clave de API, CLAUDE_CODE_OAUTH_TOKEN si usas tu suscripción) y abre un pull request con los workflows. Solo funciona con repositorios de github.com.
2. O hazlo a mano
- Instala la Claude GitHub App en el repositorio.
- Crea el secreto en Settings → Secrets and variables → Actions → New repository secret:
ANTHROPIC_API_KEY: una clave de la Claude Console.- o
CLAUDE_CODE_OAUTH_TOKEN: un token de tu suscripción (Pro, Max, Ultra, Team o Enterprise). Genéralo en tu PC:
claude setup-token
- Copia los dos workflows de los pasos 3 y 4 en
.github/workflows/.
Si usas el token OAuth, en ambos archivos cambia la línea anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} por claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}.
3. Revisión automática de cada PR
Guarda esto como .github/workflows/claude-code-review.yml. Usa el plugin oficial code-review (el mismo que instala la vía rápida) y añade control de coste: ignora cambios solo de documentación, salta los borradores, cancela la revisión anterior si llega un commit nuevo y limita turnos y minutos.
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
paths-ignore:
- "**/*.md"
- "docs/**"
concurrency:
group: claude-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
plugin_marketplaces: "https://github.com/anthropics/claude-plugins-official.git"
plugins: "code-review@claude-plugins-official"
prompt: "/code-review:code-review --comment ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
claude_args: |
--max-turns 20
--allowedTools "mcp__github_inline_comment__create_inline_comment"
Qué hace cada pieza:
--comment: publica la revisión en el PR (comentarios en línea o un resumen). Sin él, solo la verás en el log.--allowedTools "mcp__github_inline_comment__create_inline_comment": obligatorio; la acción solo arranca el servidor que escribe comentarios en línea si--allowedToolslo nombra.permissions: solo lectura másid-token: write, que la acción necesita para autenticarse como la Claude GitHub App. Los comentarios los publica la app, no elGITHUB_TOKENdel workflow.paths-ignoreyif: ...draft == false: el runner ni siquiera arranca en PR de solo documentación o en borradores.--max-turns 20ytimeout-minutes: 15: techo de trabajo por ejecución.
4. Respuestas a @claude en comentarios
Guarda esto como .github/workflows/claude.yml:
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
concurrency:
group: claude-${{ github.event.issue.number || github.event.pull_request.number }}
cancel-in-progress: false
jobs:
claude:
if: contains(github.event.comment.body, '@claude')
runs-on: ubuntu-latest
timeout-minutes: 20
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: "--max-turns 10"
Este workflow sí pide escritura (contents, pull-requests, issues) porque Claude puede hacer commits y abrir PR cuando se lo pides. Si solo quieres la revisión automática, no instales este archivo. actions: read le deja leer los resultados del CI del PR.
5. Sube los archivos
git add .github/workflows/claude-code-review.yml .github/workflows/claude.yml
git commit -m "ci: revisión de PR con Claude Code"
git push
Los workflows de pull_request se ejecutan con el archivo de la rama del PR; los de comentarios, con el de la rama por defecto. Fusiona primero en main para que @claude funcione en todo el repositorio.
Compruébalo
Antes de subir, valida la sintaxis en tu PC (si tienes Python con PyYAML):
python3 -c "import yaml,glob; [yaml.safe_load(open(f)) for f in glob.glob('.github/workflows/claude*.yml')]; print('YAML OK')"
Salida esperada: YAML OK.
En GitHub:
- Abre un PR que toque código (no solo
.md). En la pestaña Actions aparece la ejecución Claude Code Review. - Al terminar (unos minutos), en el PR verás comentarios en línea sobre cada problema que encontró, o un único comentario de resumen si no encontró ninguno. El autor es la Claude GitHub App.
- Escribe en un comentario del PR:
@claude ¿qué riesgos tiene este cambio?. Se lanza Claude Code en Actions y aparece una respuesta en el mismo PR que se va actualizando mientras trabaja. - Haz otro push al PR: la revisión anterior en curso se cancela y empieza una nueva.
Por qué funciona
La acción decide su modo según la configuración: sin prompt funciona en modo interactivo (espera la frase @claude y contesta en un comentario); con prompt funciona en modo automatización (se ejecuta con cada evento). Antes de empezar comprueba que quien dispara la ejecución tenga permiso de escritura en el repositorio y que no sea un bot, así nadie ajeno gasta tu saldo y se evitan bucles. Todo lo que pones en claude_args son argumentos normales de la CLI de Claude Code. Fuentes: Claude Code GitHub Actions, README de la acción y la lista completa de inputs.
Errores típicos
- No responde a
@claude→ la app no está instalada, falta el secreto o quien comenta no tiene permiso de escritura → instala la app, revisa Settings → Secrets y comenta con una cuenta con acceso de escritura. Escribe@claudecomo palabra completa (no/claudeni@claude-bot). - La revisión aparece solo en el log y no en el PR → falta
--commenten elprompto la línea--allowedTools→ copia ambos tal cual del paso 3. - Los PR desde un fork no se revisan en un repositorio público → GitHub no entrega los secretos a ejecuciones de forks → es lo esperado; la revisión funciona con ramas del mismo repositorio.
- Los PR de Dependabot u otros bots fallan → la acción rechaza actores bot → añade su nombre en el input
allowed_botssi de verdad quieres revisarlos. - El CI no se ejecuta con los commits de Claude → pasaste
github_token: ${{ secrets.GITHUB_TOKEN }}y GitHub no dispara workflows con ese token → quita esa línea para que use la Claude GitHub App. - La ejecución termina sin acabar la revisión →
--max-turnsdemasiado bajo para el tamaño del PR → súbelo poco a poco (por ejemplo a 30). - Error de autenticación → clave o token inválido → pruébalo primero en local con
claude.
Preguntas frecuentes
¿Cuánto cuesta?
Pagas minutos de GitHub Actions y tokens de la API según el tamaño del PR. Si usas CLAUDE_CODE_OAUTH_TOKEN, el consumo va contra tu suscripción de Claude en lugar de la facturación de la API.
¿Clave de API o token OAuth?
Para un repositorio personal, el token de claude setup-token es cómodo. Para una organización con el secreto compartido, la documentación recomienda una clave de API, porque el token va ligado a la suscripción de quien lo generó.
¿Puede Claude fusionar mis PR?
No con estos workflows: la revisión solo tiene permisos de lectura y comenta a través de la app. El de @claude puede hacer commits si se lo pides; revisa siempre sus cambios antes de fusionar.
¿Cómo le digo qué revisar?
Pon tus normas (estilo, criterios de revisión, reglas del proyecto) en un CLAUDE.md en la raíz del repositorio; Claude lo lee en cada ejecución. Mantenlo corto: cuenta como tokens cada vez.
¿Y si no quiero mantener un workflow?
Anthropic ofrece Code Review, que revisa cada PR sin archivo de workflow.