Alle Artikel

Wie ich 100 Bugs auf Sentry automatisiert gefixed habe

KI Automatisierung Sentry

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:

  1. PLAN: Bugs aus Sentry laden und nach Impact priorisieren
  2. BUILD: Fixes implementieren und Pull Requests erstellen
  3. 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:

PriorityIssue IDEventsUsersDescription
1SPACE-NK-1Z18,71385Null check in deck/card getAll
2SPACE-NK-21010,30221Null check in markdown body
3SPACE-NK-MG6,24323RangeError 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:

  1. Liest den höchstpriorisierten Bug aus dem Plan
  2. Erstellt einen Feature-Branch (fix/SPACE-XXX-description)
  3. Analysiert den Code und implementiert den Fix
  4. Führt flutter analyze aus
  5. Nutzt Extended Thinking für Konsequenzanalyse
  6. Erstellt einen Pull Request mit detaillierter Beschreibung
  7. 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:

  1. Die unsichere .last Operation erkannt
  2. lastOrNull aus package:collection verwendet
  3. 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:

Till Friebe

Über Till Friebe

Teil des FriebeDev Teams - vier Geschwister aus Berlin, die gemeinsam Flutter Apps entwickeln. Mit über 300.000 Downloads und Projekten für Unternehmen wie get2Card und BlazeSQL.

Mehr über unser Team →

Bereit für Ihre App?

Lassen Sie uns in einem kostenlosen Erstgespräch über Ihr Projekt sprechen.

Kostenloses Erstgespräch