In diesem Tutorial lernst du, wie du Code Reviews mit der Cursor-CLI in GitHub Actions einrichtest. Der Workflow analysiert Pull Requests, erkennt Probleme und postet Feedback als Kommentare.
Für die meisten Nutzer empfehlen wir stattdessen den Bugbot. Bugbot bietet verwaltete, automatisierte Code Reviews ohne Setup. Dieser CLI-Ansatz ist hilfreich, um die Möglichkeiten zu erkunden und für fortgeschrittene Anpassungen.
Automatisiertes Code-Review in Aktion mit Inline-Kommentaren in einem Pull Request

Authentifizierung konfigurieren

Richte deinen API-Schlüssel und deine Repository-Secrets ein, um die Cursor-CLI in GitHub Actions zu authentifizieren.

Agent-Berechtigungen einrichten

Erstell eine Konfigurationsdatei, um zu steuern, welche Aktionen der Agent ausführen darf. Das verhindert unbeabsichtigte Aktionen wie das Pushen von Code oder das Erstellen von Pull Requests. Erstell .cursor/cli.json im Root deines Repos:
{
  "permissions": {
    "deny": [
      "Shell(git push)",
      "Shell(gh pr create)",
      "Write(**)"
    ]
  }
}
Diese Konfiguration erlaubt dem Agenten, Dateien zu lesen und die GitHub-CLI für Kommentare zu verwenden, verhindert aber, dass er Änderungen an deinem Repository vornimmt. Sieh dir die Berechtigungsreferenz für weitere Konfigurationsoptionen an.

GitHub-Actions-Workflow erstellen

Lass uns den Workflow jetzt Schritt für Schritt aufbauen.

Workflow-Trigger einrichten

Erstelle .github/workflows/cursor-code-review.yml und konfiguriere ihn so, dass er bei Pull Requests läuft:
name: Cursor Code Review

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  code-review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    
    steps:

Repository auschecken

Füge den Checkout-Schritt hinzu, um auf den Pull-Request-Code zuzugreifen:
- name: Checkout repository
  uses: actions/checkout@v4
  with:
    fetch-depth: 0
    ref: ${{ github.event.pull_request.head.sha }}

Cursor CLI installieren

Füge den Installationsschritt für die CLI hinzu:
- name: Install Cursor CLI
  run: |
    curl https://cursor.com/install -fsS | bash
    echo "$HOME/.cursor/bin" >> $GITHUB_PATH

Review-Agent konfigurieren

Bevor wir den vollständigen Review-Schritt implementieren, lass uns die Anatomie unseres Review-Prompts verstehen. Dieser Abschnitt beschreibt, wie sich der Agent verhalten soll: Ziel: Wir wollen, dass der Agent den aktuellen PR-Diff prüft und nur eindeutige, schwerwiegende Probleme markiert, dann sehr kurze Inline-Kommentare (1–2 Sätze) ausschließlich auf geänderten Zeilen hinterlässt, mit einer kurzen Zusammenfassung am Ende. So bleibt das Signal-Rausch-Verhältnis ausgewogen. Format: Wir möchten Kommentare, die kurz und auf den Punkt sind. Wir verwenden Emojis, um das Scannen zu erleichtern, und wir wollen am Ende eine High-Level-Zusammenfassung des gesamten Reviews. Abgabe: Wenn der Review abgeschlossen ist, soll der Agent einen kurzen Kommentar basierend auf den Befunden einfügen. Der Agent soll einen Review einreichen, der Inline-Kommentare plus eine prägnante Zusammenfassung enthält. Randfälle: Wir müssen Folgendes handhaben:
  • Vorhandene Kommentare werden aufgelöst: Der Agent soll sie als erledigt markieren, wenn sie adressiert wurden
  • Duplikate vermeiden: Der Agent soll das Kommentieren überspringen, wenn ähnliches Feedback bereits auf oder nahe derselben Zeile existiert
Finaler Prompt: Der vollständige Prompt kombiniert all diese Verhaltensanforderungen, um fokussiertes, umsetzbares Feedback zu erzeugen Jetzt implementieren wir den Schritt für den Review-Agent:
- name: Perform code review
  env:
    CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
    GH_TOKEN: ${{ github.token }}
  run: |
    cursor-agent --force --model "$MODEL" --output-format=text --print "You are operating in a GitHub Actions runner performing automated code review. The gh CLI is available and authenticated via GH_TOKEN. You may comment on pull requests.
    
    Context:
    - Repo: ${{ github.repository }}
    - PR Number: ${{ github.event.pull_request.number }}
    - PR Head SHA: ${{ github.event.pull_request.head.sha }}
    - PR Base SHA: ${{ github.event.pull_request.base.sha }}
    
    Objectives:
    1) Re-check existing review comments and reply resolved when addressed
    2) Review the current PR diff and flag only clear, high-severity issues
    3) Leave very short inline comments (1-2 sentences) on changed lines only and a brief summary at the end
    
    Procedure:
    - Get existing comments: gh pr view --json comments
    - Get diff: gh pr diff
    - If a previously reported issue appears fixed by nearby changes, reply: ✅ This issue appears to be resolved by the recent changes
    - Avoid duplicates: skip if similar feedback already exists on or near the same lines
    
    Commenting rules:
    - Max 10 inline comments total; prioritize the most critical issues
    - One issue per comment; place on the exact changed line
    - Natural tone, specific and actionable; do not mention automated or high-confidence
    - Use emojis: 🚨 Critical 🔒 Security ⚡ Performance ⚠️ Logic ✅ Resolved ✨ Improvement
    
    Submission:
    - Submit one review containing inline comments plus a concise summary
    - Use only: gh pr review --comment
    - Do not use: gh pr review --approve or --request-changes"
.
├── .cursor/
│   └── cli.json
├── .github/
│   └── workflows/
│       └── cursor-code-review.yml

Teste deinen Reviewer

Erstell einen Test-Pull-Request, um zu prüfen, dass der Workflow funktioniert und der Agent Review-Kommentare mit Emoji-Feedback postet.
Pull Request mit automatisierten Review-Kommentaren, Emojis und Inline-Feedback zu bestimmten Zeilen

Nächste Schritte

Du hast jetzt ein funktionierendes automatisiertes Code-Review-System. Überleg dir diese Verbesserungen:
  • Richte zusätzliche Workflows zum Beheben von CI-Fehlern ein
  • Konfiguriere unterschiedliche Review-Level für verschiedene Branches
  • Integriere das System in den bestehenden Code-Review-Prozess deines Teams
  • Passe das Verhalten des Agents für unterschiedliche Dateitypen oder Verzeichnisse an