Kennst du das? Du öffnest dein Sentry-Dashboard und siehst hunderte von Bugs. Viele davon sind simple Null-Pointer-Exceptions oder Range-Errors, die eigentlich leicht zu fixen wären. Aber wer hat schon die Zeit, sich durch jeden einzelnen Stacktrace zu arbeiten?
Ich habe mir gedacht: Das muss doch automatisierbar sein. Das Ergebnis ist ralph-sentry-fixer, ein AI-Agent, der automatisch Bugs aus Sentry analysiert, fixt und Pull Requests erstellt. In meinem Flutter-Projekt Space hat der Agent bereits 132 Bugs erfolgreich gefixt.
Was ist ralph-sentry-fixer?
ralph-sentry-fixer ist ein Automatisierungs-Tool, das Claude AI nutzt, um Sentry-Bugs systematisch zu beheben. Das Tool basiert auf dem Ralph Wiggum Plugin aus Claude Code, einem iterativen AI-Loop-Ansatz. Der Name ist eine Anspielung auf Ralph Wiggum aus den Simpsons, der “durch Fehler lernt”.
Das Prinzip hinter Ralph Wiggum: Claude arbeitet in einer Schleife an einer Aufgabe, bis sie erledigt ist. Jede Iteration sieht die modifizierten Dateien und kann darauf aufbauen. Für Sentry-Bugs bedeutet das: Der Agent holt sich einen Bug, fixt ihn, erstellt einen PR und macht mit dem nächsten weiter.
Das Tool arbeitet in drei Phasen:
- PLAN: Bugs aus Sentry laden und nach Impact priorisieren
- BUILD: Fixes implementieren und Pull Requests erstellen
- REVIEW: Code-Review-Kommentare bearbeiten
Jede Phase läuft als eigener Claude-Agent in einer Endlos-Schleife, bis alle Bugs behoben sind.
Voraussetzungen
- Claude Code CLI (claude command)
- GitHub CLI (gh), authentifiziert
- Flutter SDK (oder angepasst für dein Projekt)
- Node.js 18+ (für den Sentry MCP Server)
- Ein Sentry-Account mit API-Zugang
Nicht nur für Flutter
Das Tool wurde für ein Flutter-Projekt entwickelt, lässt sich aber leicht für andere Sprachen anpassen. Die Fix-Patterns sind universell: Null-Checks, Range-Validierung und Collection-Safety gibt es überall.
Installation & Setup
1. Repository klonen
Klone das Repository neben dein Projekt:
git clone https://github.com/friebetill/ralph-sentry-fixer
cd ralph-sentry-fixer
your-workspace/
├── ralph-sentry-fixer/ # Dieses Repo
└── your-flutter-app/ # Dein Projekt
2. Konfiguration erstellen
Kopiere die Umgebungsvariablen-Vorlage und passe sie an:
cp .env.example .env
Editiere .env mit deiner Konfiguration:
GITHUB_ORG=deine-github-org
GITHUB_REPO=dein-repo-name
PROJECT_PATH=../dein-flutter-app
3. Implementation Plan erstellen
cp IMPLEMENTATION_PLAN.template.md IMPLEMENTATION_PLAN.md
4. Verzeichnisstruktur
ralph-sentry-fixer/
├── loop.sh # Haupt-Script zum Starten
├── .env # Deine Konfiguration (gitignored)
├── PROMPT_plan.md # Prompt für PLAN-Phase
├── PROMPT_build.md # Prompt für BUILD-Phase
├── PROMPT_review.md # Prompt für REVIEW-Phase
├── IMPLEMENTATION_PLAN.md # Bug-Liste (gitignored)
├── IMPLEMENTATION_PLAN.template.md # Vorlage für den Plan
├── AGENTS.md # Codebase-Patterns
└── specs/ # Projektspezifikation
5. AGENTS.md anpassen
Die Datei AGENTS.md beschreibt die Patterns deiner Codebase. Claude nutzt diese Info, um bessere Fixes zu schreiben:
# My Project Patterns
## Architecture
- BLoC pattern for state management
- Repository pattern for data access
## Null Safety Patterns
- Use `firstOrNull`, `lastOrNull` statt `first`, `last`
- Use `singleWhereOrNull` statt `singleWhere`
6. Sentry Authentifizierung
Das Tool nutzt den offiziellen Sentry MCP Server. Beim ersten Start öffnet sich ein Browser für die OAuth-Authentifizierung.
Die drei Modi im Detail
PLAN Mode: Bugs priorisieren
./loop.sh plan 1 # Eine Iteration
./loop.sh plan 5 # Fünf Iterationen
./loop.sh plan # Unbegrenzt
Der PLAN-Agent verbindet sich mit Sentry und:
- Lädt alle ungelösten Issues
- Analysiert Stacktraces und kategorisiert Fehlertypen
- Berechnet Priorität nach:
Events × 0.7 + Users × 100 × 0.3 - Aktualisiert
IMPLEMENTATION_PLAN.md
Das Ergebnis ist eine priorisierte Bug-Liste:
| Priority | Issue ID | Events | Users | Description |
|---|---|---|---|---|
| 1 | SPACE-NK-1Z1 | 8,713 | 85 | Null check in deck/card getAll |
| 2 | SPACE-NK-210 | 10,302 | 21 | Null check in markdown body |
| 3 | SPACE-NK-MG | 6,243 | 23 | RangeError in review session |
BUILD Mode: Fixes implementieren
./loop.sh build 1 # Einen Bug fixen
./loop.sh build 5 # Fünf Bugs fixen
./loop.sh build # Unbegrenzt
Der BUILD-Agent arbeitet pro Iteration einen Bug ab:
- Liest den höchstpriorisierten Bug aus dem Plan
- Erstellt einen Feature-Branch (
fix/SPACE-XXX-description) - Analysiert den Code und implementiert den Fix
- Führt
flutter analyzeaus - Nutzt Extended Thinking für Konsequenzanalyse
- Erstellt einen Pull Request mit detaillierter Beschreibung
- Aktualisiert den Implementation Plan
Extended Thinking
Der Agent nutzt Claude’s Extended Thinking (ultrathink) um jeden Fix auf unbeabsichtigte Nebenwirkungen zu prüfen. Das PR-Template enthält dann eine vollständige Konsequenzanalyse.
REVIEW Mode: PRs durchbringen
./loop.sh review 1 # Eine Iteration
./loop.sh review # Unbegrenzt
Der REVIEW-Agent überwacht offene PRs und:
- Prüft auf unbearbeitete Code-Review-Kommentare
- Implementiert angeforderte Änderungen
- Oder begründet, warum ein Vorschlag nicht umgesetzt wird
- Triggert Re-Reviews wenn nötig
Praxisbeispiel: Ein Bug von A bis Z
Hier ein konkretes Beispiel aus meinem Space-Projekt:
Der Sentry-Error
StateError: No element
at List.last (dart:core/list.dart)
at Card.latestLearningState (card.dart:61)
Impact: 952 Events, 12 User betroffen
Die Ursache
// card.dart:61 - VORHER
LearningState get latestLearningState =>
learningState ?? learningStates.last;
Das Problem: learningStates.last crasht wenn die Liste leer ist, auch wenn learningState bereits null ist.
Der automatische Fix
// card.dart:61 - NACHHER
LearningState get latestLearningState =>
learningState ?? learningStates.lastOrNull ?? _defaultLearningState;
Der Agent hat:
- Die unsichere
.lastOperation erkannt lastOrNullauspackage:collectionverwendet- Einen sinnvollen Fallback hinzugefügt
Der Pull Request
Der erstellte PR enthält automatisch:
- Problem-Beschreibung mit Sentry-Link
- Root-Cause-Analyse
- Konsequenzanalyse (Behavior Changes, Edge Cases, Risk Assessment)
- Test-Checkliste
Typische Fix-Patterns
Der Agent wendet folgende Patterns automatisch an:
Null Safety
// Vorher: Crash bei null
final result = data!.value;
// Nachher: Graceful handling
final result = data?.value ?? defaultValue;
Collection Safety
// Vorher: Crash bei leerer Liste
final item = list.first;
final item = list.singleWhere((x) => x.id == id);
// Nachher: Sichere Alternativen
final item = list.firstOrNull;
final item = list.singleWhereOrNull((x) => x.id == id);
Range Validation
// Vorher: Index out of bounds
final item = list[index];
// Nachher: Bounds check
final item = index >= 0 && index < list.length
? list[index]
: null;
Ergebnisse
Nach dem Einsatz von ralph-sentry-fixer in meinem Space-Projekt:
- 132 Bugs gefixt durch automatisch erstellte PRs
- Alle PRs gemerged ohne manuelle Code-Änderungen
- 0 Regressionen dank der Konsequenzanalyse
- Zeitersparnis: Schätzungsweise 40+ Stunden manuelle Arbeit
Kein Ersatz für gute Tests
Der Agent fixt Symptome, nicht die Ursachen. Null-Pointer-Exceptions deuten oft auf tiefere Architektur-Probleme hin. Nutze das Tool als Erste-Hilfe, aber investiere auch in bessere Tests und Type-Safety.
Learnings
Was gut funktioniert:
- Simple Defensive-Programming-Fixes (Null-Checks, Bounds-Checks)
- Stacktrace-Analyse und Root-Cause-Identifikation
- PR-Erstellung mit detaillierter Dokumentation
Was weniger gut funktioniert:
- Komplexe Architektur-Refactorings
- Bugs ohne klaren Stacktrace
- Race Conditions und Timing-Issues
Fazit
ralph-sentry-fixer zeigt, wie AI-Agenten repetitive Bug-Fixing-Arbeit automatisieren können. Statt hunderte Sentry-Issues manuell durchzuarbeiten, lässt du einen Agent die Fleißarbeit erledigen.
Das Tool ist Open Source auf GitHub verfügbar. Ich freue mich über Feedback, Issues und Pull Requests!
Links: