Dejando que un LLM revise nuestros pull requests (para que tú no tengas que hacerlo)

created: viernes, ago. 8, 2025

Nos encanta la automatización. La usamos para potenciar nuestra infraestructura, para escalar cargas de trabajo hasta cero y —cada vez más— para reducir la atención humana necesaria para entregar código de alta calidad. Un lugar que aún parecía terco y manual eran las revisiones de pull requests. Entre Cursor como nuestro IDE, ChatGPT/Codex para prototipos y gemini-cli para revisiones rápidas, nuestros flujos locales eran veloces—pero la CI todavía esperaba por un humano.

Así que hicimos una pregunta sencilla: ¿podríamos dejar que un modelo de lenguaje grande lea el diff, detecte problemas y comente directamente en el PR?

Resulta que: sí. Solo tomó unas pocas líneas de pegamento en GitHub Actions para obtener revisiones estructuradas y útiles en cada pull request.


The goal

No queríamos reemplazar humanos. Queríamos un primer filtro que:

Si un cambio está bien, queremos que el bot simplemente lo diga y se haga a un lado.


The tools in our stack


The workflow, end to end

Aquí está la Action completa que estamos ejecutando. Colócala en .github/workflows/gemini-pr.yml:

name: gemini-pr
on:
  workflow_dispatch:
  pull_request:
jobs:
  build:
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: 'true'
        fetch-depth: 0
    - uses: actions-rust-lang/setup-rust-toolchain@v1
      with:
        components: rustfmt, clippy
        cache: false
    - uses: actions/setup-node@v4
      with:
        node-version: 20
    - name: install gemini
      run: |
        npm install -g @google/gemini-cli
    - name: gemini
      run: |
        echo "merging into ${{ github.base_ref }}"
        git diff origin/${{ github.base_ref }} > pr.diff
        echo $PROMPT | gemini > review.md
        cat review.md >> $GITHUB_STEP_SUMMARY
        gh pr comment ${{ github.event.pull_request.number }} --body-file review.md
      env:
        GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        PROMPT: >
          please review the changes of @pr.diff (this pull request) and suggest improvements or provide insights into potential issues. 
          do not document or comment on existing changes, if everything looks good, just say so.
          can you categorise the changes and improvesments into low, medium and high priority?
          Whenever you find an issue, please always provide an file and line number as reference information. if multiple files are affected, please provide a list of files and line numbers.
          provide the output in markdown format and do not include any other text.

What each part does


The prompt that makes it useful

Los outputs del LLM son tan buenos como las instrucciones. El nuestro mantiene las cosas prácticas:

Iteramos un poco para llegar a esto. Los ajustes más impactantes fueron: insistir en referencias de archivo/línea y prohibir prosa adicional.


What the review looks like

Comentario de Github Action mostrando varios errores

En un PR típico, vemos secciones como:

Si todo está bien, recibimos una línea: “Looks good.” Perfecto—eso es exactamente lo que queremos.


Gotchas and practical notes


Why this matters (beyond convenience)

Las revisiones automatizadas hacen que los humanos sean más selectivos con su atención. Pasamos menos tiempo en “renombrar esta variable” y más en arquitectura, flujos de datos y límites de seguridad. Eso significa:

También es sorprendentemente bueno para la consistencia. Un LLM no olvidará el patrón acordado de manejo de errores entre servicios o nuestra estructura preferida de logs; aplica esos controles uniformemente en cada PR.


Variations you might try

Este patrón funciona con casi cualquier modelo o CLI. Algunas extensiones fáciles:


Results so far

Nada de esto reemplaza la aprobación humana para un merge. Es un filtro ligero que se paga a sí mismo desde el primer día.