Wie man ein gutes Claude.md schreibt
(humanlayer.dev)- Da ein LLM eine zustandslose Funktion ist, fungiert
CLAUDE.mdals zentrales Dokument, das Claude in jeder Sitzung erneut in die Codebasis einführt - Die Datei sollte das WHAT (Struktur), WHY (Zweck) und HOW (Funktionsweise) des Projekts prägnant enthalten; ein Übermaß an unnötigen Anweisungen führt zu Leistungseinbußen
- Claude kann den Inhalt von
CLAUDE.mdgemäß den Anweisungen in der Systemnachricht ignorieren, wenn er als wenig relevant eingestuft wird - Eine effektive Datei enthält nur kurze, allgemein anwendbare Informationen; detaillierte Anweisungen sollten in separate Dokumente ausgelagert und per Progressive Disclosure verwaltet werden
CLAUDE.mdist der wirkungsmächtigste Hebelpunkt der Agent-Harness und sollte deshalb nicht automatisch generiert, sondern sorgfältig von Hand geschrieben werden
Die Zustandslosigkeit von LLMs und die Rolle von CLAUDE.md
- LLMs verwenden zum Zeitpunkt der Inferenz feste Gewichte und behalten weder sitzungsübergreifendes Lernen noch Erinnerungen bei
- Damit das Modell die Codebasis verstehen kann, müssen alle Informationen als Eingabe-Token bereitgestellt werden
- Coding-Agenten wie Claude Code müssen Speicher explizit verwalten, und
CLAUDE.mdist die einzige Datei, die automatisch in jede Unterhaltung aufgenommen wird - Daraus ergeben sich drei zwingende Punkte
- Zu Beginn einer Sitzung weiß Claude nichts über die Codebasis
- In jeder Sitzung müssen die nötigen Informationen erneut vermittelt werden
- Das Standardmittel dafür ist
CLAUDE.md
Onboarding der Codebasis: WHAT, WHY, HOW
CLAUDE.mddient als Onboarding-Dokument, das Claude hilft, das Projekt zu verstehen- WHAT: Liefert eine Karte der Codebasis, etwa Tech-Stack, Projektstruktur oder Monorepo-Aufbau
- WHY: Erklärt Zweck und Funktion der einzelnen Komponenten
- HOW: Beschreibt, wie konkrete Aufgaben wie Build, Tests oder Type-Checking ausgeführt werden
- Allerdings ist es ineffizient, alle Befehle aufzulisten; es sollte nur die minimal notwendige Information enthalten sein
Warum Claude CLAUDE.md ignoriert
- Claude Code fügt in Nutzernachrichten den folgenden System-Reminder ein
IMPORTANT: this context may or may not be relevant...- Dadurch ignoriert Claude diesen Kontext, wenn er für die aktuelle Aufgabe als nicht relevant eingeschätzt wird
- Je mehr nicht allgemein gültige Anweisungen die Datei enthält, desto wahrscheinlicher ist es, dass sie ignoriert wird
- Vermutlich hat Anthropic dies hinzugefügt, weil sich die Qualität der Ergebnisse verbessert, wenn unnötige Anweisungen ignoriert werden
Prinzipien für ein gutes CLAUDE.md
Less (instructions) is more
- LLMs können etwa 150 bis 200 Anweisungen zuverlässig befolgen
- Bei kleineren Modellen fällt die Leistung deutlich schneller ab, und sie eignen sich weniger für mehrstufige Aufgaben
- Der System-Prompt von Claude Code enthält bereits rund 50 Anweisungen
- Daher sollte
CLAUDE.mdnur minimale, allgemein gültige und unverzichtbare Anweisungen enthalten
- Daher sollte
- Je mehr Anweisungen hinzukommen, desto stärker verschlechtert sich die Ausführungsqualität aller Anweisungen gleichmäßig
Dateilänge und Geltungsbereich
- LLMs arbeiten besser mit fokussiertem und hochrelevantem Kontext
- Da
CLAUDE.mdin jede Sitzung aufgenommen wird, sollte es nur allgemein anwendbare Informationen enthalten - Im Allgemeinen wird empfohlen, unter 300 Zeilen zu bleiben, möglichst noch kürzer
- Die Beispieldatei von HumanLayer hat weniger als 60 Zeilen
Progressive Disclosure
- In großen Projekten ist es schwierig, alle Informationen in einer Datei unterzubringen; deshalb wird Progressive Disclosure empfohlen
- Detaillierte Anweisungen werden in separate Markdown-Dateien im Ordner
agent_docs/ausgelagert - Zum Beispiel:
building_the_project.md,running_tests.md,code_conventions.md
- Detaillierte Anweisungen werden in separate Markdown-Dateien im Ordner
CLAUDE.mdsollte nur eine Liste dieser Dateien mit kurzen Beschreibungen enthalten sowie die Anweisung, dass Claude sie bei Bedarf lesen soll- Statt Code-Snippets sollten
file:line-Verweise verwendet werden, um Aktualität zu bewahren - Das ähnelt dem Konzept von Claude Skills, konzentriert sich aber eher auf die Verwaltung von Anweisungen als auf den Einsatz von Tools
Claude ist kein Linter
- Es ist ineffizient, Richtlinien zum Code-Stil in
CLAUDE.mdaufzunehmen- LLMs sind teuer und langsam und im Vergleich zu Lintern weniger deterministisch
- Stilregeln werden über bestehende Code-Muster natürlich mitgelernt, daher sind separate Anweisungen unnötig
- Für Formatierung sollten Linter mit automatischer Korrektur (z. B. Biome) eingesetzt werden, und Claude sollte nur das Ergebnis der Korrektur erhalten
- Bei Bedarf lassen sich Formatierung und Validierung mit Stop Hook oder Slash Command automatisieren
Keine automatische Generierung
- Ein per
/init-Befehl oder Auto-Generierung erstelltesCLAUDE.mdwird nicht empfohlen- Denn diese Datei ist ein High-Leverage-Punkt, der alle Sitzungen und Ergebnisse beeinflusst
- Schon eine einzige falsche Anweisung kann kaskadierende negative Auswirkungen auf die gesamte Codequalität haben
- Deshalb sollte jeder Satz sorgfältig geprüft und von Hand geschrieben werden
Fazit
CLAUDE.mdist ein Dokument, das Claude in die Codebasis onboardet, und sollte WHY, WHAT und HOW klar definieren- Anweisungen sollten minimiert werden; enthalten sein sollte nur allgemein gültiger und knapper Inhalt
- Mit Progressive Disclosure werden nur die jeweils nötigen Informationen schrittweise bereitgestellt
- Claude sollte nicht als Linter verwendet werden; stattdessen sollten spezialisierte Tools sowie Hook- und Command-Funktionen parallel genutzt werden
- Statt automatischer Generierung sollte die Datei sorgfältig von Hand erstellt werden, um die Qualität der gesamten Harness zu maximieren
1 Kommentare
Hacker-News-Kommentare
Claude neigt dazu, Anweisungen in CLAUDE.md gelegentlich zu ignorieren
Je mehr Informationen in der Datei stehen, die mit der konkreten Aufgabe nichts zu tun haben, desto eher befolgt Claude diese Anweisungen nicht
Ein Freund hatte Claude angewiesen, ihn „Mr Tinkleberry“ zu nennen, und immer wenn Claude das vergaß, war klar, dass es die Datei ignorierte
Ich nutze schon länger den Table-of-Contents-Ansatz
Ich trenne aufgabenspezifische Anweisungen in einzelne Markdown-Dateien auf, und in CLAUDE.md stehen nur die Liste und kurze Beschreibungen
So bleibt das Context Window sauber
Meine Beispieldatei gibt es hier
Claude hat die anderen Dokumentdateien in der Praxis kaum tatsächlich gelesen
Ich habe das Gefühl, dass zu viel Context für Claude die Qualität eher verschlechtert
Deshalb halte ich immer zwei Versionen des Codes vor
Dem LLM gebe ich nur die erste Version
Ich denke, das Verhältnis von Compute zu Information ist entscheidend. Rechenkapazität ist schließlich begrenzt
Man muss nicht alles hineinwerfen, aber Kerninformationen hineinzuschreiben hatte einen hohen ROI
Bei allgemeinen Projekten funktioniert Claude gut, aber bei neuen Frameworks oder Tools ist es oft verwirrt
Ich würde gern wissen, ob du nach Änderungen ein Skript verwendest, das Kommentare und Leerraum entfernt
Eigentlich gibt es auch ohne dieses komplizierte Setup eine Lösung
Nämlich den Code klar zu dokumentieren
Wenn man knapp aufschreibt, was jede Datei macht, dient das bereits als Prompt
Man kann README.md aktiv nutzen
LLMs wurden bereits mit öffentlichen Informationen trainiert, daher muss man nichts Neues erfinden
Der bloße Rat „Dokumentiere den Code gut“ passt in diesem Kontext nicht
README ist gut, aber CLAUDE.md hat einen anderen Zweck
Zum Beispiel hat Claude/agents.md die Funktion, beim Zugriff auf ein bestimmtes Verzeichnis automatisch in den Context eingefügt zu werden
In komplexen Codebases ist Context-Management viel wichtiger
Deshalb verfehlt der Rat „Schreib einfach einen guten Prompt“ den Kern
Wenn man sie ins README schreibt, erfüllt es am Ende dieselbe Rolle wie CLAUDE.md
Der Zweck von CLAUDE.md ist es, Claude zentrale Informationen im Voraus zu geben, damit es nicht jedes Mal alle Dokumente erneut lesen muss
Menschen erinnern sich, aber Claude vergisst bei jeder Aufgabe wieder alles, deshalb braucht man eine Struktur, die erneutes Onboarding reduziert
Ehrlich gesagt habe ich das Gefühl, wenn man KI-Infrastruktur so aufwendig aufsetzen muss, dann ist es besser, einfach selbst zu programmieren
Ich verwalte gemeinsame Regeln und projektspezifische Regeln getrennt
KI nicht zu nutzen ist schlicht ein Produktivitätsverlust
Wenn das Setup nur einmal nötig ist, lohnt sich die Investition absolut
„Das Setup ist lästig“ klingt wie die Ausrede von Leuten, die auch die Einrichtung eines Debuggers vermeiden
Ich kopiere den benötigten Code einfach in das Chatfenster und füge ihn dort ein und nutze es wie ein Gespräch
Die Modelle sind inzwischen so viel besser geworden, dass sie auch ohne .md-Dateien ziemlich gute Ergebnisse liefern
Solche Dateien können vielleicht kleine Verbesserungen bringen, aber ich glaube nicht, dass sie eine magische 100-fache Produktivität liefern
Hier geht es darum, dass Claude selbstständig vollständige Features implementiert oder Bugs behebt
Es funktioniert schon gut genug, wenn man einfach den nötigen Context gibt. Es wirkt ein bisschen wie Bikeshedding
Ich lasse Claude CLAUDE.md selbst schreiben
Wenn man ihm sagt: „README.md ist für Nutzer, CLAUDE.md ist für dich“,
aktualisiert es Anweisungen wie „Prüfe immer die API-Dokumentation“ automatisch mit
Man muss keinen magischen Prompt kennen, solange das Ergebnis gut ist
Es scheint keinen besonderen Grund zu geben, warum KI sich selbst am besten prompten können sollte