Communitygithub.com

Poirot

Disziplinierte Methode zur Untersuchung eines bestimmten Bugs, einer Regression oder eines anormalen Verhaltens. Verwenden Sie diese, wenn der Anwender ein konkretes Symptom meldet („X ist kaputt“, „das hat letzte Woche noch funktioniert“, „Y gibt den falschen Wert zurück“, „zeitweiliger Fehler in Z“) und die Ursache finden möchte – keinen schnellen Fix. Erzwingt reproduktionsorientierte, schreibgeschützte Diagnose, differentielle Widerlegung und Git-Forensik. NICHT für offene „Finde alle Bugs“-Durchläufe, Code-Reviews oder Feature-Arbeit verwenden.

Was ist Poirot?

Die Poirot-Fähigkeit ist eine strukturierte Untersuchungsmethodik für Entwickler und KI-Agenten, die bei der Fehlersuche und Problembehebung in Softwareprojekten eingesetzt wird. Sie ist ideal für Situationen, in denen ein konkretes Symptom gemeldet wird und der Anwender die tatsächliche Ursache verstehen möchte, anstatt nur einen schnellen Patch zu setzen. Die Fähigkeit erzwingt einen strengen, phasenbasierten Prozess: Reproduktion (Phase 1), differentielle Diagnose (Phase 2), Widerlegung (Phase 3), Git-Forensik (Phase 4) und Bericht/Fix (Phase 5). Ein zentrales Merkmal ist das strikte Verbot von Code-Änderungen vor der bestätigten Ursachenermittlung – nur Instrumentierung (Logging, Asserts, Breakpoints) ist während der Diagnose erlaubt, und diese muss vor dem Fix zurückgesetzt werden. Die Methodik ist besonders wertvoll für Regressionen, intermittierende Fehler und schwer fassbare Bugs, da sie Bestätigungsfehler vermeidet und einen reproduzierbaren, nachvollziehbaren Beweis für die Ursache erfordert. Sie unterstützt Git-Tools wie `git blame`, `git bisect` und `git log -S` und ist plattformunabhängig einsetzbar, z. B. mit Claude Code, Cursor oder Codex. Der Endbericht liefert eine klare kausale Kette vom Grund zum Symptom und empfiehlt genau einen Fix, keine ausweichenden Menüs.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dharmabumzee/claude-poirot/tree/main

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Poirot?

Sie führen eine Untersuchung durch, keinen Bugfix. Der Fix ist der letzte Schritt und der einfachste. Ihre Aufgabe ist es, die Ursache zu kennen, bevor Sie sie anfassen – so wie Poirot nicht anklagt, bevor er es beweisen kann.

Ihr voreingestellter Fehlermodus ist Ungeduld: Sie ordnen ein Symptom einer vertrauten Ursache zu, bearbeiten die Datei und erklären den Sieg, ohne den jemals reproduziert oder bewiesen zu haben, dass diese Änderung verantwortlich war. Diese Fähigkeit soll das verhindern. Wenn sich eine Phase langsam anfühlt, funktioniert die Fähigkeit – es ist kein Hindernis, das umgangen werden muss.

Harte Einschränkungen (während der gesamten Untersuchung)

  • Keine Quellcode-Änderungen, bis die Ursache bestätigt ist (Phase 3). Instrumentierung – Logging, Asserts, Breakpoints, Wegwerf-Testfälle – ist in den Phasen 1–3 erlaubt, aber jede Sonde muss nachverfolgt und vor Phase 5 rückgängig gemacht werden. Der Arbeitsbaum muss vor dem Vorschlag des Fixes frei von Ihren Sonden sein. Lassen Sie niemals „was ich geändert habe, um es zu verstehen“ mit „was ich geändert habe, um es zu beheben“ vermischen.
  • Keine Hypothese wird als Tatsache dargestellt, bis sie Phase 3 übersteht. Bis dahin ist alles ein Kandidat, eingestuft, mit Vertrauensniveau.
  • Beobachtung und Schlussfolgerung bleiben getrennt. „Das Log zeigt, dass userId undefiniert ist“ ist eine Beobachtung. „Die Session-Middleware läuft nicht“ ist eine Schlussfolgerung. Ziehen Sie die beiden nie zusammen; kennzeichnen Sie, was was ist, wenn es darauf ankommt.

Phase 1 – Reproduktion

Keine Theorien, bis es einen deterministischen Fehlerfall gibt. Ein Bug, den Sie nicht reproduzieren können, ist ein Bug, dessen Form Sie sich nur vorstellen.

  • Ermitteln Sie den genauen Auslöser: Eingaben, Zustand, Umgebung, Abfolge. Finden Sie heraus, was ihn verursacht und was ihn nicht verursacht.
  • Falls er intermittierend ist, finden Sie die Variable, die ihn umschaltet (Timing, Reihenfolge, Datenform, Cache-Zustand). Intermittenz ist Information, keine Wand.
  • Wenn Sie ihn nach ehrlicher Mühe wirklich nicht reproduzieren können, sagen Sie das und hören Sie auf – listen Sie auf, was Sie bräuchten (eine fehlschlagende Eingabe, einen Stacktrace, Reproduktionsschritte). Fahren Sie nicht fort, um einen Bug zu beheben, den Sie nicht auslösen können. Raten ist hier der mit Abstand teuerste Fehler.

Formulieren Sie die Reproduktion explizit, bevor Sie fortfahren: „Reproduziert: Aufruf von X mit Y ergibt Z, erwartet W. Rückgängigmachen von Y lässt es bestehen.“

Phase 2 – Differenzialdiagnose

Listen Sie 2–3 Kandidatenursachen, geordnet nach Wahrscheinlichkeit, mit den spezifischen Beweisen, die darauf hindeuten. Widerstehen Sie dem Drang, bei einer stehen zu bleiben – die erste Ursache, die einem in den Sinn kommt, ist die, gegenüber der Sie voreingenommen sind, und ein einzelner Kandidat ist keine Diagnose, sondern eine Ahnung.

Notieren Sie für jeden Kandidaten, welche Beobachtung ihn widerlegen würde. Wenn ein Kandidat durch nichts, was Sie überprüfen könnten, widerlegt werden kann, ist es keine nützliche Hypothese – verwerfen oder schärfen Sie sie.

Phase 3 – Widerlegung

Nehmen Sie den am höchsten eingestuften Kandidaten und versuchen Sie, ihn zu widerlegen, nicht zu bestätigen. Das Sammeln von Beweisen, die zur Lieblingstheorie passen, ist Bestätigungsfehler und der größte Qualitätsverlust in echten Untersuchungen – Sie werden für fast alles Unterstützung finden, wenn Unterstützung das ist, wonach Sie suchen.

  • Wenn der Top-Kandidat einen echten Widerlegungsversuch überlebt, befördern Sie ihn. Wenn er stirbt, gehen Sie zum nächsten über und wiederholen Sie.
  • Ein Kandidat ist nur dann bestätigt, wenn Sie die Kausalkette von der Ursache zum beobachteten Symptom Ende-zu-Ende angeben können, jedes Glied gestützt durch eine Beobachtung – nicht „das würde es erklären“, sondern „das erzeugt es, hier ist der Beleg.“

Phase 4 – Git-Forensik

Nutzen Sie die Historie. Sie überspringen diese routinemäßig, und sie sind oft der schnellste Weg zur Antwort:

  • git blame auf der/den genauen fehlerhaften Zeile(n) – wer/was/wann hat das eingeführt, und lesen Sie die Absicht dieses Commits.
  • git log -S'<string>' / git log -G'<regex>' – finden Sie den Commit, in dem ein Verhalten, ein String oder eine Codeform eingeführt oder geändert wurde. Unschätzbar für „wo hat dieser Wert angefangen, falsch zu sein.“
  • git bisect – für jede „das hat früher funktioniert“-Regression, bisect auf den exakten fehlerhaften Commit. Wenn es eine zuverlässige Reproduktion aus Phase 1 gibt, skripten Sie sie als Bisect-Test (git bisect run) und lassen Sie den Commit mechanisch finden. Für Regressionen beendet dies allein normalerweise die Untersuchung.
  • git log --oneline <datei> und git diff <bereich>, um die relevante Änderung im Kontext zu lesen.

Forensik kann parallel zu den Phasen 2–3 laufen – das Finden des Commits, der das Symptom eingeführt hat, ist oft der Widerlegungsschritt.

Phase 5 – Bericht, dann Fix

Formulieren Sie die Diagnose sauber, bevor Sie etwas vorschlagen:

  • Unmittelbare Ursache (die Zeile/Bedingung, die fehlschlägt oder den falschen Wert zurückgibt) vs. Grundursache (warum diese Zeile existiert oder ausgeführt wird). Beheben Sie die Grundursache, nicht das Symptom – das Patchen der unmittelbaren Ursache, wo die Grundursache flussaufwärts liegt, verschiebt nur den Bug.
  • Die vollständige Kausalkette, Grund → Symptom.
  • Was würde diese Diagnose widerlegen (damit der Mensch Ihre Gewissheit auf Plausibilität prüfen kann).

Bestätigen Sie, dass alle Sonden aus den Phasen 1–3 rückgängig gemacht wurden und der Baum sauber ist. Dann schlagen Sie den Fix vor – minimal, auf die Grundursache beschränkt, mit der Reproduktion aus Phase 1 als Test, der beweist, dass er tatsächlich behoben ist.

Empfehlen Sie genau einen Fix. Beenden Sie nicht mit einem Menü. Die Disziplin der Untersuchung muss bis zur Empfehlung durchhalten – eine Methode, die rigoros diagnostiziert und dann drei gleichwertige Optionen zurückgibt und den Menschen bitten lässt, auszuwählen, ist stillschweigend zu derselben Ausflucht zurückgekehrt, die diese Fähigkeit verhindern soll. Führen Sie mit dem einzigen Fix, den Sie ausliefern würden, und warum. Listen Sie alles andere – Härtung, benachbarte gefundene Bugs, Nice-to-haves – als explizit sekundär und aufgeschoben (separates Ticket, optional) auf, nicht als Alternativen gleichen Gewichts. Widerstehen Sie dem Vorschlag defensiver Härtung für Fehlermodi, die nicht die bestätigte Ursache sind; das ist Vergoldung, nicht der Fix.

Präsentieren Sie eine echte Wahl nur, wenn die Optionen tatsächlich gegeneinander abgewogen werden müssen und der entscheidende Faktor etwas ist, das nur der Mensch weiß – Risikotoleranz, Zeitplan, wie viel Umfang er bereit ist anzufassen (z. B. „jetzt eng patchen“ vs. „den flussaufwärts liegenden Ablauf umgestalten“). Das ist eine echte Gabelung. Drei Arten, denselben Fix zu buchstabieren, oder „fix it / auch härter fixen / auch diese andere Sache fixen“ ist ein falsches Menü – reduzieren Sie es auf die Empfehlung plus aufgeschobene Punkte.

Verwandte Skills