Was ich immer wieder sage
Inhaltsverzeichnis
"Did you push?"
Irgendeine Version davon habe ich diesen Monat oft getippt. Also habe ich gezählt.
In Meine Skills stand auf der Liste "Was fehlt": Analyse echter Gespräche. Hier ist sie. Ich habe meine letzten 100 Claude-Code-Sessions genommen und zwei Dinge gefragt: Welche Skills liefen wirklich, und was musste ich immer wieder sagen? Dann habe ich meine eigenen Anfragen durch die Schichtenanalyse aus Towards a Meta Design of LLM Skills geschickt, dieselbe, die ich auf Bugs anwende.
Die Idee: Eine Anfrage, die ich zum fünften Mal tippe, ist ein Bugreport. Sie meldet, dass ein Schritt nicht passiert ist, solange ich nicht danach gefragt habe. Also stellt jede Ebene der Analyse dieselbe Frage wie bei einem Bug: Was musste wahr sein, damit ich das sagen muss?
Die Anfrage, mit der dieser Post anfing, ist selbst so ein Muster. "Schau dir an, was ich ständig mache, und mach einen Skill draus" ist auch ein Skill. Dazu unten mehr.
Die Daten
100 Sessions, vom 7. bis 26. Oktober 2026. 66 davon in einem Arbeits-Repository. Der Rest: Forschungscode, Spiele, Dotfiles, Rechner-Setup und dieser Blog.1
Ein Skript zieht nur meine eigenen Nachrichten heraus und lässt das Maschinengeplapper weg. Vier Agenten lesen je ein Viertel der Sessions und melden Muster, mit wörtlichen Zitaten. Die Zahlen der Agenten sind Schätzungen, also habe ich mit grep nachgezählt, und danach hat ein Verifier-Agent meine Zahlen nachgezählt. Er fand ein Zitat, das es nicht gab, und eine Zeile, die vor allem aus Fehltreffern bestand. Beides ist unten korrigiert. Die Analyse brauchte ihren eigenen Review-Loop.
Welche Skills liefen
| Skill | Aufrufe | |
|---|---|---|
review-verify-loop |
19 Aufrufe; 20-mal als Slash-Command getippt | das Standard-Qualitätstor, auch für Prosa |
bug-layer-analysis |
7 Aufrufe; 4-mal getippt | an echten Bugs |
| Deploy, nREPL, Merge, start-issue (Arbeits-Infrastruktur) | je 5–6 Aufrufe | start-issue zusätzlich 8-mal getippt |
decision-matrix |
2 | |
pre-mortem, assumption-stress-test, operator-neighborhood, operator-router |
0 |
Ein getippter Slash-Command kann auch als Aufruf auftauchen, die beiden Spalten können sich also überschneiden.
Schau auf die letzte Zeile. Die vier Operatoren aus "Geschrieben, nicht getestet" im letzten Post liefen in 100 Sessions null Mal als Skill. "Pre-Mortem" habe ich einmal getippt, in der Session, in der ich sie geschrieben habe.
Meine eigene Löschregel sagt: Ein Skill ohne Befunde fliegt raus. Diese haben nicht einmal Aufrufe. Also fliegen sie entweder raus, oder ihre Trigger-Beschreibungen taugen nichts und das Modell denkt nie an sie. Die Daten können das nicht unterscheiden. Das ist unbequem, und es lohnt sich, es für alles Weitere im Kopf zu behalten. Skills, die am Schreibtisch aus einer schönen symmetrischen Idee entstanden sind, wurden nicht benutzt.
L0: was ich tatsächlich getippt habe
| Was ich getippt habe | Wie oft | Beispiel |
|---|---|---|
| push / commit / deploy | 56× in 27 Sessions (47 verschiedene) | "push, update the PR body and post the reply" |
| öffne es (PR, Editor, Browser) | 46× in 30 Sessions | "open the pr" |
| ein Write-up für jemand anderen | 15× in 10 Sessions | "short write up of this for my collegues" |
| Status-Ping | 17× in 14 Sessions | "state?", "stuck?", "progress?" |
| Review-Verify-Loop | 21× in 20 Sessions | "implement, run review verify loop and make pr" |
| "did we / did you …?" | 10× in 8 Sessions | "did we run review verify loop?", "did you push" |
| run it | 19× in 12 Sessions | "run it" |
| mach einen Skill oder ein Memory daraus | 8× in 7 Sessions | "is there a skill for this" |
| Schritt zurück, andere Winkel, einfacher | 18× in 11 Sessions | "take a step back, alternative designs" |
| Benchmark gegen eine Baseline | 25× in 8 Sessions | "I am fine with small scope benchmarks" |
| Behauptungen, Errata, Neuheit prüfen | 9× in 6 Sessions | "make a list of claims it makes. do they hold" |
Die Muster sind reguläre Ausdrücke, und wiederholte Nachrichten zählen jedes Mal. Die Zahlen sind Größenordnungen, keine Messungen.
Dann die Korrekturen, die Momente, in denen ich das Modell bremsen musste:
- Es hat Aufwand geschätzt, als wäre Code teuer. "eher 5 - 20 min". "just coding something is cheap".
- Es fand unwahrscheinliche Risiken alarmierend. "die sind teilweise sehr unwahrscheinlich".
- Seine Designs waren komplizierter als nötig. "sounds complicated".
- Es hat ein Feature als fertig gemeldet, und der Button war nicht da. "I don't see 'show in designer'".
- Der Pfad, den ich einem Tester gegeben habe, brach beim zweiten Klick. "after using it once it is also a 404".
- Es hat Zahlen aufgerundet. "7.7 is not 10-20x".
- Es hat die Geschichte erzählt, wie wir hingekommen sind, statt wo wir stehen. "die brauchen keine implementations histories, sondern den stand".
Lustig: Die häufigste Nachricht ist keine schwere Frage. Sie lautet "push" und "open the pr". Den schweren Teil kann das Modell. Meine Worte gehen für den letzten Meter drauf.
Die Schichten hinauf
| Art des Fehlers | Unser Fehler | Gegenmaßnahme |
|---|---|---|
| L1: Nach jeder Aufgabe dieselben Nachfragen: push, posten, öffnen, "did we …?" | jeder Skill deckt einen Schritt ab (Deploy, Merge, REPL); niemandem gehört das Ende einer Aufgabe | done-check |
| L1: Mehrschrittige Abläufe, jedes Mal von Hand neu erklärt: auf ein Review antworten, einen PR öffnen, einen Branch aktualisieren, an Tester übergeben, benchmarken | oft genug gemacht, um Skills zu sein, nie aufgeschrieben | address-review, ship-pr, cad-handoff, perf-bench, ein Update-Modus für merge-into-release |
| L1: Text für die Session geschrieben, nicht für den Leser: Geschichte, Buchstabencodes, IDs, lokale Pfade | der Leser wurde nie benannt | reader-rewrite |
| L1: Behauptungen in Prosa ungeprüft geglaubt | der Review-Loop deckte nur Code ab | claim-check |
| L2: Für das Modell heißt "fertig": kompiliert, Tests grün. Für mich: läuft sichtbar, reviewt, gepusht, gepostet, im Board verschoben, übergeben | die Definition von "fertig" lebte in meinem Kopf, also war ich derjenige, der sie prüft | aufschreiben und an das Ende jeder Aufgabe hängen |
| L2: Die Priors des Modells stammen aus der Zeit vor billigem Code: Aufwand zu hoch, Risiko zu laut, Designs zu vorsichtig | im Gespräch korrigiert, nie im Memory | Memory-Regeln: in Agentenzeit schätzen, Risiken nach Wahrscheinlichkeit ordnen |
| L3: Ich bin der Kleber: Ich trage Zustand zwischen Modell, GitHub, Issue-Board, Testserver und Kollegen hin und her und wiederhole dieselben Setups | Skills waren wie Infrastruktur geschnitten (ein Werkzeug je Skill), nicht wie ein Lebenszyklus (ein Arbeitspaket vom Start bis zur Übergabe); nichts macht aus wiederholten Anfragen Skills, außer mir, wenn es mir auffällt | Lebenszyklus-Skills, und diese Analyse regelmäßig laufen lassen |
L2 ist die interessante Ebene. Das Modell und ich hatten verschiedene Wörter für "fertig". Keins war falsch. Meins stand nur nirgends.
L4 habe ich probiert: "Der Mensch ist der Flaschenhals." Klingt tief. Es führt aber zu keiner neuen Suche und keiner neuen Gegenmaßnahme, ist also eine Plattitüde und fliegt raus.
Die neuen Skills
Allgemein, in bjs-claude-skills:
done-check- geht die Definition von "fertig" durch, bevor irgendetwas "fertig" heißt, und erledigt oder listet jeden offenen Schritt.
claim-check- ein Verifier-Agent pro Behauptung in einem Text, gegen die Primärquelle. Der Review-Verify-Loop für Prosa.
reader-rewrite- den Leser und seine Frage benennen, dann feste Regeln anwenden: der aktuelle Stand, ausgeschriebene Namen, Links, keine lokalen Verweise.
skill-mining- dieser Post als Verfahren. Extrahieren, schichten, pro Klasse eine Gegenmaßnahme wählen, nachzählen, schreiben. Er ist seine eigene L3-Gegenmaßnahme: Die Schleife, die aus "das sage ich ständig" einen Skill macht, hängt nicht mehr davon ab, dass es mir auffällt.
Speziell für mein Arbeits-Repository: address-review, ship-pr, cad-handoff, perf-bench, und der Zyklus, der sie zusammenbindet.
Die Analyse hat auch eine Regel ergeben, welche Form eine Gegenmaßnahme bekommt:
- eine einzelne Vorliebe kommt ins Memory;
- ein fehlender Schritt kommt in einen bestehenden Skill;
- ein neuer Skill nur, wenn ein mehrschrittiger Ablauf in mindestens drei Sessions auftaucht.
Der Zyklus als ein Skill
Die L1-Skills sind immer noch einzelne Schritte. L3 sagt, die Lücke ist der Lebenszyklus. Also war der letzte Zug, den Lebenszyklus aufzuschreiben: dev-cycle, einmal abstrakt und einmal auf mein Arbeits-Repository abgebildet.
Neun Stufen: Aufnahme, Branch, Implementieren, sichtbar laufen sehen, Review, Ausliefern, Feedback, merge-bereit, Abschluss. "Do that" lässt alle laufen. Keine Fragen dazwischen. Eine Frage mit offensichtlicher Antwort bekommt diese Antwort, als Annahme notiert. Halt nur an festen Toren:
- Mergen, das mache ich immer selbst;
- ein Deploy auf eine Umgebung, die nicht meine ist;
- ein Post nach außen, um den ich nicht gebeten habe;
- eine offene Produktentscheidung.
Jedes Arbeitspaket bekommt eine Zustandsdatei, die jede Stufe mit ihrem Beleg festhält. "State?" wird aus der Datei beantwortet, und eine neue Session kann dort weitermachen, wo die letzte aufgehört hat.
Stell dir eine Küche vor, in der der Koch nach jedem Gericht fragt: "Soll ich anrichten?", "Soll ich es rausbringen?", "Soll ich die Pfanne spülen?". Du brauchst keinen besseren Koch. Du brauchst einen Koch, der weiß, was ein fertiges Gericht in diesem Restaurant heißt.
Wie gut belegt
Jeder neue Skill trägt seine Zählungen und Zitate als Beleg-Zeile, dazu eine Löschregel. Keiner ist bisher gelaufen.
Die vier unbenutzten Operatoren sind die Warnung. Sie kamen aus einer sauberen Struktur am Schreibtisch, und niemand hat sie benutzt. Diese hier kommen aus Anfragen, die ich wirklich gestellt habe. Das ist ein besserer Start, aber kein Beweis.
Der Test ist dieselbe Analyse in einem Monat. Stehen "did we …?" und "state?" dann immer noch weit oben, funktioniert der Zyklus nicht.
Offene Fragen:
- Waren die vier Operatoren unbenutzt, weil sie nutzlos sind, oder weil sie nie getriggert werden? Eine Ablation könnte das klären: derselbe Fall mit und ohne Skill.
- Spart "do that" über neun Stufen meine Aufmerksamkeit, oder verschiebt es sie nur an die Tore?
- Wie viel der L0-Tabelle ist mein Stil, und wie viel das Werkzeug? Die 100 Sessions von jemand anderem würden es zeigen.
- Stimmt "die Priors des Modells stammen aus der Zeit vor billigem Code", oder ist das nur meine Lesart von drei Korrekturen?
Fußnoten:
Meine eigenen Claude-Code-Session-Logs (~/.claude/projects), die 100 jüngsten Sessions mit mindestens einer getippten Nachricht, Stand 26. Oktober 2026. Extraktionsskript und Methode: skill-mining. Die Anfrageklassen wurden mit regulären Ausdrücken ohne Groß-/Kleinschreibung über meine eigenen Nachrichten gezählt. Wiederholungen zählen mit. Ein Verifier-Agent hat jede Zeile nachgezählt und jedes Zitat gegen den Extrakt geprüft.
Generiert von Claude im Auftrag von Benjamin Schwerdtner.