CommunityCodierung & Entwicklunggithub.com

erikvallow-qt/nicht-rutschen-lassen

Führt nach der Behebung eines Problems mit KI eine Sitzungsüberprüfung durch, protokolliert gewonnene Erkenntnisse für Mensch und KI und prüft den Benutzer mit einem Quiz zu den wichtigsten Punkten.

Was ist nicht-rutschen-lassen?

Diese Fähigkeit automatisiert den Retrospektivprozess nach einem KI-gestützten Problemlösungsdurchlauf. Sie identifiziert die relevante Sitzung anhand der letzten Chats, analysiert den gesamten Dialogverlauf auf verpasste Hinweise, Missverständnisse und Konzepte, die ein tieferes Verständnis erfordern. Anschließend recherchiert sie für jede Erkenntnis verifizierte Quellen (bevorzugt offizielle Dokumentationen, Spezifikationen und etablierte Tutorials) und erstellt zwei Dateien: eine strukturierte LEARNED.md mit den Abschnitten „Was ist passiert“, „Gelernte Lektionen“ (unterteilt in Mensch, KI und gemeinsam), Quizfragen und einem optimierten Ein-Prompt-Vorschlag, der das Problem hätte vermeiden können; sowie eine ausführbare Terminal-Quiz-Datei learned_quiz.py (nur Python 3 Standardbibliothek, plattformunabhängig). Das Quiz enthält 10–25 Fragen mit plausiblen Ablenkern, Quellenangaben und einem Überprüfungsmechanismus. Die Fähigkeit markiert unbelegte Behauptungen klar, erfindet keine URLs und validiert die Ausgabe durch Syntax- und Logikprüfungen. Sie ist für Entwickler und KI-Agenten (z. B. Claude Code, Cursor, Codex) konzipiert, die ihre Problemlösungsprozesse systematisch verbessern und Wissen nachhaltig dokumentieren möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erikvallow-qt/dont-let-me-slide/tree/HEAD/dont-let-me-slide

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

Überprüfe die Sitzung, die das Problem gelöst hat. Erstelle zwei Dateien: LEARNED.md und learned_quiz.py (ein Terminal-Quiz).

  1. Sitzung identifizieren. Verwende die letzten Chats, um den Chat zu finden, der zum Problem passt. Wenn mehrere plausibel sind, frage den Benutzer, welcher gemeint ist. Wenn die Sitzung zu einem Projekt gehört, überprüfe auch die anderen Chats in diesem Projekt.
  2. Lies die gesamte Sitzung, nicht nur eine Zusammenfassung. Notiere, wo der Mensch und die KI jeweils etwas übersehen haben, bevor das Problem gelöst wurde. Notiere auch Konzepte, die der Mensch einfach hinnehmen musste, nach denen er mehr als einmal gefragt hat oder die er falsch verstanden hat: Diese brauchen eine tiefere Betrachtung.
  3. Recherchiere Links, bevor du schreibst. Finde für jede Erkenntnis mindestens einen Link. Suche für jede menschliche Erkenntnis und jedes Konzept aus Schritt 2 1 bis 3 weiterführende Links, die den Hintergrund von Grund auf erklären. Bevorzuge, in dieser Reihenfolge: offizielle Dokumentationen oder Spezifikationen, Hersteller-App-Notes oder Handbücher, bekannte Tutorials oder Lehrbücher, dann seriöse Blogs oder Q&A. Verwende WebSearch, öffne dann jeden Link mit WebFetch, um zu bestätigen, dass er lädt und den Punkt abdeckt. Entferne jeden Link, der fehlschlägt oder nicht zum Thema gehört. Erfinde niemals eine URL.
  4. Schreibe LEARNED.md mit diesen Abschnitten, in dieser Reihenfolge:
    • Was ist passiert: 3 bis 5 Sätze, plus den Status (gelöst oder nicht). Wenn nicht gelöst, liste die offenen Punkte auf.
    • Gelernte Lektionen: aufgeteilt in Mensch, KI und Gemeinsam. Gib für jede Lektion den Punkt, was übersehen wurde, die Lektion in einem Satz und einen Link (Quellenname). Füge unter jeder menschlichen Lektion, die Hintergrundwissen benötigt, eine Unterliste „Tiefer tauchen“ hinzu: jeder Eintrag ist Titel, die Quelle und eine Zeile, was sie lehrt und warum sie hier hilft.
    • Testfragen: 3 bis 5 Schlüsselfragen mit dem Titel „Testfragen“, gefolgt von einem Antwortschlüssel. Hinweis: Der vollständige Fragensatz befindet sich in learned_quiz.py.
    • Links: jeder verwendete Link, gruppiert nach Lektion, mit Angabe der Quelle. Gib an, dass die Links am Ausführungsdatum überprüft wurden und vor der Verwendung verifiziert werden sollten.
    • Vorgeschlagener Ein-Prompt: ein prägnanter Prompt, der die Probleme in dieser Sitzung vermieden hätte.
  5. Kennzeichne Behauptungen. Markiere unbelegte Behauptungen als unbelegt. Markiere Behauptungen, die aus Suchergebnissen stammen, als berichtet und verlinke die Quelle.
  6. Präsentiere keine Vermutungen als Ergebnisse. Wenn die Ursache eines Problems nicht bestätigt wurde, sage das.
  7. Schreibe learned_quiz.py basierend auf der Vorlage unten. Regeln:
    • Nur Python 3 Standardbibliothek. Muss auf macOS, Linux und Windows Terminals laufen. Keine GUI.
    • Decke jedes Konzept ab, nicht nur die 3 bis 5 Testfragen: mindestens 2 Fragen pro menschlicher Lektion, mindestens 1 pro KI- und gemeinsamer Lektion, plus 1 pro Konzept für tieferes Eintauchen. Typischerweise 10 bis 25 Fragen. Mische Fragen zum Abruf, „Was würdest du zuerst überprüfen“ und „Finde den Fehler“.
    • Jede Frage: Thema (Mensch, KI, Gemeinsam oder ein kurzer Konzeptname), 4 Antwortmöglichkeiten mit plausiblen Ablenkern, der korrekte Index, eine 1 bis 2 Sätze lange Begründung und der relevanteste verifizierte Link.
    • Fülle nur TITLE, SOURCE und QUESTIONS aus. Ändere nicht die Engine.
    • Führe vor dem Senden python3 -c "import ast,sys;ast.parse(open(sys.argv[1]).read())" learned_quiz.py und dann python3 learned_quiz.py --list aus und behebe jeden Fehler. Überprüfe, ob jeder Antwortindex auf die richtige Auswahl zeigt.
  8. Halte LEARNED.md prägnant. Verwende in keiner der Dateien Gedankenstriche.
  9. Sende beide Dateien mit SendUserFile. Gib in der Antwort den Ausführungsbefehl an: python3 learned_quiz.py (Optionen: -r für Karteikarten, -t TOPIC zum Filtern, -n N zum Begrenzen, --list für alle, --seed N für feste Reihenfolge).

Quiz-Vorlage (genau kopieren, die Platzhalter und die Beispielsfrage ersetzen):

#!/usr/bin/env python3
"""LEARNED-Quiz: <THEMA>. Ausfuehrung: python3 learned_quiz.py [-r] [-t THEMA] [-n N] [--list]"""
import argparse, random, sys, textwrap

TITLE = "<THEMA>"
SOURCE = "LEARNED.md, <DATUM>"
QUESTIONS = [
    {"topic": "Mensch", "q": "Beispielfrage?",
     "choices": ["Richtige Antwort", "Falsch 1", "Falsch 2", "Falsch 3"], "answer": 0,
     "why": "Ein oder zwei Saetze zur Begruendung.", "link": "https://example.com"},
]

def wrap(s, ind="   "):
    return textwrap.fill(s, 78, initial_indent=ind, subsequent_indent=ind)

def ask(prompt, valid):
    while True:
        try:
            a = input(prompt).strip().lower()
        except (EOFError, KeyboardInterrupt):
            print(); sys.exit(0)
        if a in valid:
            return a

def run(qs, review):
    missed = []
    for i, q in enumerate(qs, 1):
        order = list(range(len(q["choices"])))
        random.shuffle(order)
        letters = "abcdefgh"[:len(order)]
        print(f"\n[{i}/{len(qs)}] ({q['topic']})")
        print(wrap(q["q"], ""))
        for L, idx in zip(letters, order):
            print(wrap(f"{L}) {q['choices'][idx]}"))
        right = letters[order.index(q["answer"])]
        if review:
            if ask("   Eingabe zum Anzeigen, q zum Beenden: ", {"", "q"}) == "q":
                sys.exit(0)
            ok = True
        else:
            a = ask(f"   Antwort [{letters}], q zum Beenden: ", set(letters) | {"q"})
            if a == "q":
                break
            ok = a == right
            print("   Richtig." if ok else f"   Nicht ganz. Antwort: {right}")
        if review or not ok:
            print(wrap(f"{right}) {q['choices'][q['answer']]}"))
        print(wrap(q["why"]))
        if q.get("link"):
            print(wrap("Mehr: " + q["link"]))
        if not ok:
            missed.append(q)
    return missed

def main():
    p = argparse.ArgumentParser(description=f"Quiz: {TITLE}")
    p.add_argument("-r", "--review", action="store_true", help="Karteikarten-Modus, keine Bewertung")
    p.add_argument("-t", "--topic", help="nur dieses Thema (Mensch, KI, Gemeinsam, ...)")
    p.add_argument("-n", type=int, help="hoechstens N Fragen stellen")
    p.add_argument("--list", action="store_true", help="alle Q&A ausgeben und beenden")
    p.add_argument("--seed", type=int, help="feste Reihenfolge")
    a = p.parse_args()
    random.seed(a.seed)
    qs = [q for q in QUESTIONS if not a.topic or q["topic"].lower() == a.topic.lower()]
    if not qs:
        sys.exit(f"Keine Fragen zum Thema {a.topic!r}.")
    if a.list:
        for i, q in enumerate(qs, 1):
            print(f"{i}. ({q['topic']}) {q['q']}\n{wrap('A: ' + q['choices'][q['answer']])}\n{wrap(q['why'])}")
            if q.get("link"):
                print(wrap("Mehr: " + q["link"]))
        return
    random.shuffle(qs)
    qs = qs[:a.n] if a.n else qs
    print(f"{TITLE}\nQuelle: {SOURCE}\n{len(qs)} Fragen.")
    while qs:
        missed = run(qs, a.review)
        if a.review:
            break
        print(f"\nErgebnis: {len(qs) - len(missed)}/{len(qs)}")
        if not missed or ask("Fehlgeschlagene wiederholen? [j/n]: ", {"j", "n"}) == "n":
            for q in missed:
                print(wrap(f"Wiederholung: {q['q']}", "- ") + ("\n" + wrap(q["link"]) if q.get("link") else ""))
            break
        qs = missed

if __name__ == "__main__":
    main()

Verwandte Skills