CommunityCodierung & Entwicklunggithub.com

nudarofficial/bug-hunter

Untersucht und behebt Softwarefehler durch evidenzbasierte Root-Cause-Analyse. Liest Stacktraces, Logs und Fehlermeldungen; verfolgt Logik-, Laufzeit-, Nebenläufigkeits-, Sicherheits- und Performance-Defekte über Dateien hinweg; schlägt minimale Korrekturen mit einer Regressionsüberprüfung und zielgerichteten Tests vor. Verwenden, wenn der Benutzer einen Fehler, Absturz, eine Ausnahme, einen fehlschlagenden Test, falsche Ausgabe, flaky Verhalten oder eine Verlangsamung meldet oder darum bittet, Code zu debuggen, Fehler zu finden oder Code auf Defekte zu überprüfen in Python, JavaScript, TypeScript, Java, C, C++, C#.

Was ist bug-hunter?

Bug Hunter ist eine strukturierte KI-Fähigkeit zur evidenzbasierten Fehleranalyse und -behebung. Es führt Entwickler und KI-Agenten durch einen neunstufigen Workflow: vom Definieren des Fehlers über das Sammeln von Beweisen (Stacktraces, Logs, Code) und Reproduzieren/Verfolgen des Fehlers bis hin zur Identifizierung der Grundursache, Klassifizierung der Befunde, Entwurf der minimalen Korrektur, Regressionsprüfung, Testen und abschließenden Berichterstattung. Die Fähigkeit betont strikte Regeln gegen das Erfinden von Beweisen, die Trennung von bestätigten und vermuteten Befunden und die Konzentration auf die Ursache statt auf das Symptom. Es unterstützt viele Sprachen (Python, JavaScript, TypeScript, Java, C, C++, C#, Go, Rust, PHP, Ruby, SQL) und Plattformen wie Claude Code, Cursor und Codex. Der Nutzen liegt in der Vermeidung von typischen Fehlern bei der Debugging-Arbeit von KI-Agenten, wie etwa dem Erfinden von Stacktraces, oberflächlichen Korrekturen oder unnötigen Refactorings, und der Sicherstellung reproduzierbarer, getesteter und klar dokumentierter Korrekturen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nudarofficial/bug-hunter/tree/HEAD/bug-hunter

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Bug Hunter

Finde die Grundursache eines Defekts, behebe ihn mit der kleinstmöglichen soliden Änderung und berichte genau, was verifiziert wurde und was nicht.

Unverhandelbare Regeln

  1. Erfinde niemals Beweise. Erfinde keine Stacktraces, Fehlermeldungen, Logzeilen, Testergebnisse, Reproduktionen, Benchmark-Zahlen oder CVE-Identifikatoren. Wenn etwas nicht ausgeführt oder beobachtet wurde, sage das.
  2. Trenne Bestätigtes von Vermutetem. Ein Befund ist Bestätigt nur, wenn er durch einen beobachteten Fehler, eine reproduzierte Ausführung oder einen eindeutigen Codepfad gestützt wird. Alles andere ist ein Potentielles Risiko oder Benötigt Verifizierung.
  3. Behebe die Ursache, nicht das Symptom. Wickle Fehler nicht in try/except ein, füge keine Null-Prüfungen hinzu und erhöhe keine Timeouts, es sei denn, die Analyse zeigt, dass dies die tatsächliche Ursache ist.
  4. Bleibe im Rahmen. Führe kein Refactoring, keine Neuformatierung, Umbenennung oder „Verbesserung“ von nicht zusammenhängendem Code durch. Lösche keine Daten, schreibe keine Git-Historie um, ändere keine Abhängigkeiten und führe keine zerstörerischen Befehle ohne ausdrückliche Erlaubnis des Benutzers aus.
  5. Kennzeichne Annahmen. Wenn die Laufzeitversion, Konfiguration, Eingabedaten oder das Verhalten des Aufrufers unbekannt sind, gib die Annahme neben der Schlussfolgerung an, die davon abhängt.
  6. Bearbeite nur, wenn eine Korrektur verlangt wird. „Behebe dies“ / „mache den Test bestanden“ → wende die Korrektur an. „Finde Fehler“ / „überprüfe“ / „warum …“ → melde Befunde mit Korrekturvorschlägen und lasse den Code unverändert, es sei denn, der Benutzer bittet um Änderungen.
  7. Räume nach dir auf. Lege Skripte für schnelle Reproduktionen in einem temporären Verzeichnis ab (oder lösche sie danach aus dem Projekt) und erwähne sie im Bericht.

Arbeitsablauf

Kopiere diese Checkliste und verfolge den Fortschritt für jeden nicht-trivialen Fehler:

Bug Hunt Fortschritt:
- [ ] 1. Definiere den Fehler (beobachtet vs. erwartet)
- [ ] 2. Sammle Beweise (Code, Traces, Logs, Eingaben, Versionen)
- [ ] 3. Reproduziere oder verfolge den Fehler
- [ ] 4. Bilde und teste Hypothesen; identifiziere die Grundursache
- [ ] 5. Klassifiziere Befunde (bestätigt / potentiell / ausgeschlossen)
- [ ] 6. Entwerfe die minimale Korrektur
- [ ] 7. Überprüfe die Korrektur auf Regressionen
- [ ] 8. Füge Tests hinzu oder empfehle sie; führe sie aus, falls erlaubt
- [ ] 9. Berichte Ergebnisse und Verifizierungsstatus

1. Definiere den Fehler

Schreibe je einen Satz für beobachtetes Verhalten, erwartetes Verhalten und Auslösebedingungen (Eingaben, Umgebung, Häufigkeit). Wenn das erwartete Verhalten mehrdeutig ist, frage nach, bevor du Code änderst. Bei Anfragen vom Typ „finde Fehler in diesem Code“ ohne Bericht, leite das beabsichtigte Verhalten aus Namen, Dokumentation, Tests und Aufrufern ab und gebe diese Ableitung an.

2. Sammle Beweise

  • Lies den fehlerhaften Code sowie seine Aufrufer, aufgerufenen Funktionen und die Daten, die er verarbeitet. Fehler leben oft einen Schritt entfernt von dem Ort, an dem sie sichtbar werden.
  • Bei einem Stacktrace: Finde den tiefsten Frame im Projektcode (nicht in Bibliothekscode) und den ersten Frame, in dem der Zustand falsch wurde. Siehe reference/stack-traces.md.
  • Notiere Sprach-/Laufzeitversion, Framework und Konfiguration, wenn sie die Semantik beeinflussen (z. B. Go < 1.22 Schleifenvariablen, Python 2 vs. 3 Division, JavaScript ==).
  • Überprüfe kürzliche Änderungen, falls Versionskontrolle verfügbar ist (git log -p -- <file>, git blame, git bisect für Regressionen).

3. Reproduziere oder verfolge

Bevorzuge, in dieser Reihenfolge:

  1. Führe den vorhandenen fehlschlagenden Test oder Befehl aus.
  2. Schreibe das kleinste Skript oder den kleinsten Test, der den Fehler auslöst.
  3. Wenn die Ausführung nicht möglich ist (keine Berechtigungen, fehlende Dienste, keine Toolchain), verfolge den Pfad manuell: Liste jeden Schritt mit dem konkreten Wert der relevanten Variablen auf. Markiere das Ergebnis „verfolgt, nicht ausgeführt“.

Melde niemals eine Reproduktion, die nicht tatsächlich ausgeführt wurde.

4. Finde die Grundursache

  • Stelle eine Hypothese auf, die alle beobachteten Symptome erklärt, nicht nur das letzte.
  • Teste sie: Füge eine gezielte Assertion oder ein Log hinzu, grenze Eingaben ein oder führe eine Bisektion durch. Verwerfe Hypothesen, denen die Beweise widersprechen, und gib den Grund an.
  • Frage „warum“, bis du einen Defekt in Code, Konfiguration, Daten oder Vertrag erreichst – nicht eine Neuformulierung des Symptoms. „Variable ist None“ ist ein Symptom; „der Cache gibt bei einem Fehltreffer None zurück und der Aufrufer geht von einem Treffer aus“ ist eine Ursache.
  • Prüfe, ob dasselbe Fehlermuster auch anderswo existiert (grep nach demselben Aufruf, Idiom oder kopierten Block). Melde andere Vorkommen als separate Befunde.
  • Wenn du einen zweiten Defekt findest: Behebe ihn nur dann, wenn er Teil des gemeldeten Symptoms ist (und sage das); andernfalls melde ihn und lasse ihn unverändert.

Sprachspezifische Fallstricke: reference/language-pitfalls.md. Sicherheitsdefekte: reference/security.md. Performancedefekte: reference/performance.md.

5. Klassifiziere Befunde

StatusBedeutung
BestätigtReproduziert, im bereitgestellten Trace/Log beobachtet oder ein deterministischer Codepfad beweist es.
Potentielles RisikoUnter nicht gezeigten Bedingungen plausibel (bestimmte Eingabe, Last, Konfiguration). Nenne diese Bedingungen.
Benötigt VerifizierungHängt von Informationen ab, die du nicht hast. Sage, was die Klärung bringen würde.
AusgeschlossenEine Hypothese, die du geprüft und verworfen hast. Füge sie hinzu, wenn sie dem Benutzer Zeit spart.

Gib immer an, wie ein bestätigter Befund ermittelt wurde: reproduziert (du hast es ausgeführt), beobachtet (im Trace oder Log des Benutzers) oder verfolgt, nicht ausgeführt (deterministischer Codepfad gelesen, aber nicht ausgeführt).

Ordne Schweregrad nach Auswirkung zu, nicht danach, wie interessant der Fehler ist. Wenn Aufrufer nicht verfügbar sind, bewerte nach der plausibelsten Nutzung und gib diese Annahme an:

SchweregradTypische Auswirkung
KritischDatenverlust oder -beschädigung, Remote Code Execution, Authentifizierungsumgehung, Absturz eines Kernpfads für alle Benutzer
HochFalsche Ergebnisse auf häufigen Pfaden, ausnutzbare Injection, Absturz bei realistischen Eingaben, Ressourcenleck, das den Dienst lahmlegt
MittelFalsche Ergebnisse in Randfällen, verschlechterte Leistung unter Last, fehlende Validierung mit begrenztem Schadensradius
NiedrigKosmetische Probleme, irreführende Meldungen, geringfügige Ineffizienz, Code-Geruch mit einem plausiblen zukünftigen Fehler

6. Entwerfe die minimale Korrektur

  • Ändere die wenigsten Zeilen, die die Grundursache beseitigen. Behalte bestehenden Stil, Benennung und öffentliche Schnittstellen bei.
  • Wenn die eigentliche Korrektur umfangreich ist (Schemaänderung, API-Änderung, Architekturänderung), schlage sie vor und, falls sinnvoll, eine klar gekennzeichnete kurzfristige Abhilfemaßnahme.
  • Wenn mehr als eine Korrektur vernünftig ist, empfehle eine und nenne den Kompromiss in einem Satz.
  • Zeige die Korrektur als Unified Diff oder als vollständige korrigierte Funktion – je nachdem, was für die Größe der Änderung klarer ist.

7. Überprüfung auf Regressionen

Bevor du die Korrektur präsentierst, prüfe:

  • Jeder Aufrufer der geänderten Funktion erhält immer noch das Verhalten, auf das er angewiesen ist (Rückgabetyp, None/null-Handhabung, ausgelöste Ausnahmen, Reihenfolge).
  • Grenzfälle bei Eingaben: leer, einzelnes Element, maximale Größe, negativ, null, Unicode, None/null/undefined.
  • Nebenläufigkeit: gemeinsamer Zustand, Reihenfolge, Abbruch, Wiederholungen.
  • Fehlerpfade geben weiterhin Ressourcen frei (Dateien, Sperren, Verbindungen, Transaktionen).
  • Das Sicherheitsprofil ist unverändert oder verbessert (keine neue Injection, keine deaktivierte Validierung).
  • Die Leistung wird asymptotisch nicht schlechter.
  • Jede beobachtbare Verhaltensänderung (Rückgabewert, Ausnahme, Mutation vs. Kopie, API-Antwort) wird explizit genannt, zusammen mit den Aufrufern, die sich anpassen müssen.

8. Tests

  • Füge einen Regressionstest hinzu, der vor der Korrektur fehlschlägt und nach der Korrektur bestanden wird. Benenne ihn nach dem Verhalten, nicht nach dem Ticket. Wenn möglich, zeige den Fehler, indem du den Test gegen den unkorrigierten Code ausführst (vor der Bearbeitung oder über git stash); andernfalls sage „Fehler vor der Korrektur nicht demonstriert“.
  • Verwende das vorhandene Test-Framework und die Konventionen des Projekts. Füge kein neues Framework hinzu. Wenn das Projekt keines hat, gib den Test als einfache Assertions an, die mit den Standardwerkzeugen der Sprache ausführbar sind (python -m unittest, node:test, go test), und sage, dass kein Framework gefunden wurde.
  • Führe die Tests nur aus, wenn die Umgebung es erlaubt und der Benutzer es nicht verboten hat. Berichte den genauen Befehl und das tatsächliche Ergebnis; wenn nicht ausgeführt, sage „nicht ausgeführt“ und gib den Befehl an.

9. Bericht

Wähle das Format basierend auf dem, was gefunden wurde:

  • Ein Befund → das kompakte Format unten.
  • Mehrere Befunde oder eine Überprüfung → die vollständige Struktur in reference/report-template.md, angeführt von der Tabelle der Befunde; lasse Abschnitte weg, die nicht zutreffen.
  • Keine Beweise zum Arbeiten → siehe „Nicht genug Beweise“ unter Anfragentypen.

Kompaktes Format:

**Grundursache:** <ein oder zwei Sätze>
**Status:** Bestätigt – reproduziert mit `<Befehl>` / beobachtet in <Trace> / verfolgt, nicht ausgeführt | Potentielles Risiko | Benötigt Verifizierung
**Korrektur:** <Diff oder korrigierter Code>
**Regressionsprüfung:** <was berücksichtigt wurde>
**Tests:** <Name des hinzugefügten Tests> — <bestanden / fehlgeschlagen / nicht ausgeführt, und der Befehl>
**Nicht verifiziert:** <alles, was offen geblieben ist>

Anfragentypen

„Hier ist ein Fehler / Stacktrace“ → Schritte 1–9, beginnend mit dem Trace.

Nicht genug Beweise (ein Absturz, Trace oder Log wird erwähnt, aber nicht bereitgestellt; oder kein Code verfügbar) → Rate keinen Trace oder keine Korrektur. Sage klar, was fehlt, und frage nach: der genauen Fehlerausgabe (vollständig, ungekürzt), dem relevanten Code und seinen Aufrufern, der Laufzeit-/Sprachversion und wann es passiert (Häufigkeit, Last, kürzliche Änderungen). Du kannst wahrscheinliche Ursachen nur für diese Sprache als klar gekennzeichnete Hypothesen zum Prüfen auflisten. Tipps zur Trace-Erfassung pro Sprache (z. B. GOTRACEBACK=all, RUST_BACKTRACE=1, -race) findest du in reference/stack-traces.md.

„Finde Fehler in dieser Datei / überprüfe diesen Code“ → Lies die gesamte Einheit sowie ihre Schnittstellen, liste dann Befunde sortiert nach Schweregrad auf. Jeder Befund: Ort (datei:zeile), Status, Schweregrad, Beweis, Korrekturvorschlag. Bearbeite den Code nicht, es sei denn, du wirst darum gebeten. Füge keine Stil-Kleinigkeiten hinzu; gruppiere geringfügige Punkte unter „Niedrigprioritäre Hinweise“ oder lasse sie weg.

„Dieser Test ist flaky“ → Suche nach Zeit, Zufall, Reihenfolge (Dict/Set/Hash-Iteration, parallele Tests), gemeinsamem Zustand zwischen Tests, Netzwerk und nicht abgewarteten asynchronen Arbeiten. Beweise die Quelle, indem du sie kontrollierst (fester Seed, eingefrorene Uhr, isolierter Zustand).

„Es wurde langsam“ → Miss, bevor du behauptest; siehe reference/performance.md. Zitiere niemals eine Beschleunigung, die du nicht gemessen hast.

„Ist das sicher?“ → Folge reference/security.md. Melde nur Probleme mit einem konkreten Angriffspfad oder einem eindeutig unsicheren Muster; kennzeichne den Rest als Härtungsvorschläge.

Ausgearbeitete Beispiele

Siehe reference/examples.md für vollständige Fehlerberichte in Python, JavaScript, TypeScript, Java, Go, C, C++, C#, Rust, PHP, Ruby und SQL, die bestätigte Befunde, potenzielle Risiken und minimale Korrekturen zeigen.

Verwandte Skills