Claude Code / Codex
Anweisungs-Prompts & Vorlagensammlung
30 CLAUDE.md / AGENTS.md / Cursor Rules Vorlagen. Füge einen Prompt in den Chat ein, um sie generieren zu lassen, oder füge eine fertige Datei direkt ein. Beides funktioniert.
KI-Coding-Agenten (Claude Code, OpenAI Codex, Cursor und andere) lesen die Anweisungsdatei im Wurzelverzeichnis deines Repositorys (CLAUDE.md / AGENTS.md), um 'die Regeln dieses Projekts' zu lernen. Sind diese Anweisungen aber vage, ignoriert die KI sie bereitwillig. Eine wirksame Anweisungsdatei sieht so aus: kurze imperative Sätze, ausdrückliche Verbote und eine klare 'Definition of Done' mit Verifizierungsschritten.
Warum sie ignoriert werden und wie man das behebt, erfährst du unter 'Warum die KI deine .md-Regeln ignoriert und wie du das behebst' .
Füge den Prompt einfach direkt in das Chat-Feld von Claude Code / Codex / Cursor ein. Die KI untersucht dein Repository und schreibt eine Anweisungsdatei mit deinen echten Befehlen darin.
Fast keine manuelle Bearbeitung nötig. Nutze dies auch, um bestehende Anweisungsdateien zu prüfen und zu verbessern oder sie ins AGENTS.md- / Cursor-Format zu konvertieren.
Kopiere eine fertige Anweisungsdatei und speichere sie als CLAUDE.md im Wurzelverzeichnis deines Repositorys. Ersetze nur wenige Platzhalter wie <name> durch deine eigene Umgebung.
Für alle, die den Inhalt selbst verstehen und verwalten möchten, oder die eine Startvorlage für eine bestimmte Sprache/Framework wünschen.
Einfach in den Chat einfügen (Generieren- & Verbessern-Prompts)
Eine Anweisungsdatei von Grund auf generieren (CLAUDE.md / AGENTS.md, untersucht das Repo automatisch)★
Die einfachste Option. Füge ihn in den Chat ein, und die KI untersucht dein Repository und schreibt eine Anweisungsdatei mit deinen echten Befehlen darin. Fast keine manuelle Bearbeitung nötig.
Untersuche dieses gesamte Repository und erstelle im Wurzelverzeichnis die
Anweisungsdatei, die du (dieser Agent) automatisch lädst
(Claude Code nutzt `CLAUDE.md`, Codex nutzt `AGENTS.md`, Cursor nutzt `.cursor/rules/`).
Einschließen:
- Projektüberblick (was die App macht, der Tech-Stack)
- Befehle (Dev-Server / build / test / lint). Ermittle die echten Befehle
aus tatsächlichen Dateien wie package.json oder Makefile (nicht raten)
- Coding-Konventionen (passe dich dem tatsächlichen Stil an, den du aus dem
bestehenden Code abliest)
- Absolute Regeln: niemals Geheimnisse oder .env committen / niemals nicht
betroffene Zeilen umformatieren / niemals pushen, sofern nicht angewiesen
- Definition of Done: melde nicht \'fertig\', bevor lint und test bestehen
(gib die echten Befehlsnamen an)
Fülle Lücken nicht mit Vermutungen; frage mich, wenn etwas unklar ist.
Schreibe abschließend alles als die oben beschriebene Anweisungsdatei aus.
Warum es funktioniert:Die KI dein eigenes Repo lesen und schreiben zu lassen, ist der schnellste Weg. Den Dateinamen dem Tool zu überlassen (CLAUDE.md / AGENTS.md usw.) bedeutet, dass es in Claude und Codex unverändert funktioniert. Und weil sie Befehle und Pfade aus deinen tatsächlichen Dateien festlegt, ist keine manuelle Bearbeitung nötig.
Eine bestehende Anweisungsdatei prüfen und in eine 'wirksame' Form umschreiben
Für den Fall, dass du bereits eine Anweisungsdatei hast (CLAUDE.md / AGENTS.md), die KI sie aber nicht befolgt. Lass sie die Schwachstellen benennen und sie dann mit imperativer Formulierung und Verifizierungsschritten umschreiben.
Lies die Anweisungsdatei, die du (dieser Agent) lädst (CLAUDE.md / AGENTS.md usw.),
benenne die Schwachstellen, die KI-Agenten gerne ignorieren, und schreibe sie
dann in eine wirksame Form um.
Worauf zu achten ist:
- Wandle vage Formulierungen in Imperative um (immer X tun / niemals Y tun)
- Füge eine \'Definition of Done\' und Verifizierungsschritte hinzu (lint / test ausführen)
- Mache Verbote konkret bis zum Ziel (Verzeichnisnamen, Befehlsnamen)
- Ist sie zu lang, kürze sie auf den durchzusetzenden Kern
Liste zuerst die Schwachstellen als Aufzählungspunkte auf, gib dann die
vollständige umgeschriebene Version aus und wende sie auf diese Anweisungsdatei an.
Warum es funktioniert:Eine 'unwirksame Anweisungsdatei' ist meist vage, hat keine Verifizierungsschritte und benennt Verbote nur abstrakt. Die KI die Schwachstellen selbst benennen zu lassen, bevor sie sie behebt, macht die Verbesserungen konkret.
Eine 'Definition of Done' passend zu deinem aktuellen Repo hinzufügen
Füge den einzelnen wichtigsten Block mit deinen echten Befehlen hinzu, um zu verhindern, dass die KI aufhört, wenn sie nur glaubt, fertig zu sein.
Nachdem du die tatsächlichen build- / test- / lint-Befehle dieses Repositorys
ermittelt hast, füge der Anweisungsdatei, die du lädst (CLAUDE.md / AGENTS.md usw.),
einen Abschnitt \'Definition of Done\' hinzu.
Anforderungen:
- Mache daraus eine Checkliste in der Form \'melde nicht fertig, bevor alle
folgenden Punkte erfüllt sind\'
- Gib die echten lint- und test-Befehle ausdrücklich an
- Schließe ein: keine TODOs oder Debug-Logs in geänderten Dateien hinterlassen
und das eigene Diff erneut durchlesen
Zerstöre den bestehenden Inhalt nicht; füge nur den Abschnitt hinzu.
Warum es funktioniert:Sind die Abschlusskriterien vage, hört die KI aus Selbstzufriedenheit auf. Schon das Hinzufügen einer Checkliste mit echten Befehlen bringt die Selbstverifizierungsschleife in Gang. Die Angabe 'hinzufügen, bestehenden Inhalt nicht zerstören' ist der sichere Ansatz.
Sprache/Framework automatisch erkennen und Regeln hinzufügen
Lass sie den Stack erkennen und die passenden Regeln hinzufügen, z. B. Server/Client-Grenzen für Next.js.
Erkenne automatisch die Sprache und das Framework dieses Repositorys und füge
die entsprechenden Best-Practice-Regeln der Anweisungsdatei hinzu, die du lädst
(CLAUDE.md / AGENTS.md usw.).
Beispiele:
- Next.js: Server/Client-Grenze (Standard ist Server, use client minimal halten)
- Laravel: Validierung über Form Requests, Migrations-Konventionen
- Python: Typannotationen, Rohdaten niemals überschreiben oder erfinden
Füge vor dem Anhängen eine einzeilige Notiz zur Grundlage deiner Erkennung hinzu
(aus welchen Dateien du es beurteilt hast). Dupliziere nichts bereits Geschriebenes.
Warum es funktioniert:Die Fehlerquellen unterscheiden sich je nach Sprache. Die KI automatisch erkennen und nur die relevanten Regeln hinzufügen zu lassen, ist genauer als eine generische Vorlage und leichter zu pflegen.
Absolute Regeln für Sicherheit / Git / Tests hinzufügen
Füge eine Reihe 'absoluter Regeln' hinzu, die unwiederbringliche Unfälle verhindern.
Füge der Anweisungsdatei, die du lädst (CLAUDE.md / AGENTS.md usw.), die folgenden
\'absoluten Regeln\' hinzu, abgestimmt auf das Setup dieses Repositorys.
- Niemals Geheimnisse, .env oder Zugangsdaten committen
- Niemals pushen / force-pushen, sofern nicht angewiesen
- Eingaben an der Grenze validieren / niemals eigenmächtig Authentifizierung
oder Autorisierung lockern
- Niemals destruktive Befehle (DROP / TRUNCATE / migrate:fresh usw.) auf der
Produktions-DB ausführen
- Wann immer du das Verhalten änderst, immer Tests hinzufügen oder aktualisieren
Existieren bereits ähnliche Regeln, dupliziere sie nicht; ergänze nur das Fehlende.
Warum es funktioniert:Unfälle häufen sich rund um 'durchgesickerte Geheimnisse, unaufgeforderte Pushes, destruktive DB-Operationen'. Diese als benannte absolute Regeln hinzuzufügen, stoppt die KI gleich am Einstiegspunkt davor, aus dem Ruder zu laufen.
CLAUDE.md ins AGENTS.md-Format (Codex) konvertieren
Erstelle denselben Inhalt für Codex neu. Für alle, die mehrere KI-Tools gemeinsam nutzen.
Konvertiere den Inhalt dieser `CLAUDE.md` ins `AGENTS.md`-Format für
OpenAI Codex und schreibe ihn aus.
- Erhalte die Bedeutung, gib ihm aber eine für Codex gut lesbare Struktur
(Überschriften, Aufzählungspunkte)
- Behalte Befehle, absolute Regeln und Definition of Done unverändert bei
- Gib es als `AGENTS.md` im Wurzelverzeichnis aus
Warum es funktioniert:CLAUDE.md und AGENTS.md teilen fast ihren gesamten Inhalt. Eine als Quelle der Wahrheit zu behandeln und daraus zu konvertieren, spart den Aufwand, zwei Dateien zu pflegen.
Ins Cursor-Rules-Format (.mdc) konvertieren
Ins Project-Rules-Format von Cursor. Gibt stets angewandte Regeln und dateitypspezifische Regeln getrennt aus.
Konvertiere den Inhalt dieser `CLAUDE.md` ins Project-Rules-Format von Cursor
(`.mdc`-Dateien unter `.cursor/rules/`).
- Teile die Regeln in sinnvolle Einheiten auf
- Trenne die Regeln, die stets gelten sollen, von den Regeln, die nur für
bestimmte Dateitypen gelten
- Setze am Anfang jeder Datei die passenden Anwendungsbedingungen (globs usw.)
Warum es funktioniert:Cursor funktioniert besser mit nach Zweck aufgeteilten .mdc-Dateien als mit einem einzigen großen Regelblatt. Die Aufteilungsentscheidungen der KI zu überlassen, ist zudem schneller.
Aufgeteilte Anweisungsdateien für ein Monorepo generieren
Verteilt gemeinsame Regeln automatisch ans Wurzelverzeichnis und stackspezifische Regeln an jedes Paket.
Untersuche die Struktur dieses Monorepos und erstelle die Anweisungsdateien,
die du (dieser Agent) lädst (Claude Code nutzt CLAUDE.md, Codex nutzt AGENTS.md usw.),
wie folgt aufgeteilt.
- Im Wurzelverzeichnis: Regeln, die für das gesamte Repo gelten
(Commit-Konventionen, Geheimnisschutz, die übergreifende Definition of Done)
- In jedem Paket-/App-Verzeichnis: nur die Regeln und Befehle, die für diesen Stack gelten
Vermeide Duplikate und füge in jedem Paket eine einzeilige Notiz hinzu: \'folge den
gemeinsamen Regeln im Wurzelverzeichnis\'. Berichte am Ende eine Liste, was du in welchem Verzeichnis abgelegt hast.
Warum es funktioniert:Ein Monorepo bricht unter einer einzigen riesigen Anweisungsdatei zusammen. Gemeinsame Regeln ans Wurzelverzeichnis und spezifische Regeln an jedes Paket aufzuteilen, lässt die KI die richtigen Regeln für den jeweiligen Kontext lesen.
Fertige Dateien zum direkten Einfügen - Grundlagen & Regeln
Universelle Basis (für jedes Projekt)
Deine erste Datei. Ein minimales Setup mit Projektüberblick, Befehlen, Konventionen und absoluten Regeln. Im Zweifel hier starten und hinzufügen oder entfernen.
# Projekt: <name>
## Was das ist
Ein einabsätziger Überblick über die App. Was sie macht, wer sie nutzt und der
Tech-Stack (Sprache, Framework, DB, Runtime).
## Befehle
- Dev-Server: `npm run dev`
- Build: `npm run build`
- Test: `npm test`
- Lint: `npm run lint`
## Konventionen
- Sprache ist TypeScript (strict). Verwende kein `any`.
- Passe dich dem Stil der Datei an, die du gerade bearbeitest. Bestehe Lint immer vor dem Abschluss.
- Halte Änderungen minimal; berühre keine nicht betroffenen Zeilen (keine unzusammenhängende Umformatierung).
## Absolute Regeln (strikt durchgesetzt)
- Bevor du fertig meldest, führe immer die obigen Tests und Lint aus und lass sie bestehen.
- Committe niemals, unter keinen Umständen, Geheimnisse, .env oder Build-Artefakte.
- Bevorzuge das Bearbeiten bestehender Dateien gegenüber dem Erstellen neuer.
- Sind die Anforderungen vage, stelle vor einer großen Änderung genau eine klärende Frage.
## Tabu (sofern nicht anders angewiesen)
- CI-Konfiguration, Abhängigkeitsversionen, Infrastruktur-Setup.
Warum es funktioniert:Die 'Befehle' zuerst zu platzieren, gibt der KI eine Möglichkeit, ihre Arbeit zu verifizieren. Die absoluten Regeln als kurze Imperative zu schreiben (immer / niemals), macht sie schwerer zu ignorieren. Der 'Tabu'-Abschnitt blockiert ausufernde Änderungen von vornherein.
'Definition of Done'-Block, der dafür sorgt, dass Regeln befolgt werden★
Die wichtigste. Verhindert, dass die KI aufhört, wenn sie nur glaubt, fertig zu sein. Ein generischer Block, den du in jede Anweisungsdatei einfügen kannst.
## Definition of Done (vor dem Melden immer lesen)
Betrachte die Arbeit nur dann als \'fertig\', wenn alle folgenden Punkte erfüllt sind:
1. `npm run lint` besteht mit Exit-Code 0
2. `npm test` besteht mit Exit-Code 0
3. Keine TODO / FIXME / Debug-Logs in den geänderten Dateien hinterlassen
4. Du hast dein eigenes Diff erneut durchgelesen und bestätigt, dass es der Anfrage entspricht
Ist auch nur einer nicht erfüllt, arbeite weiter. Melde nicht \'fertig\'.
## Absolute Regeln (strikt durchgesetzt)
- Bearbeite keine Dateien unter `legacy/` oder `vendor/`.
- Füge keine Abhängigkeiten hinzu, entferne oder aktualisiere sie nicht.
- Formatiere keine Zeilen um, die du nicht geändert hast.
- Lösche oder deaktiviere keine Tests, nur damit der Build besteht.
## Im Zweifel
Fahre nicht auf Vermutungen fort; stelle genau eine knappe Frage.
Eine falsche, große Änderung ist weitaus schlimmer als eine klärende Frage.
Warum es funktioniert:Sind die 'Abschlusskriterien' vage, hört die KI aus Selbstzufriedenheit auf. Daraus eine Checkliste zu machen plus die Aussage 'wenn nicht erfüllt, weitermachen; nicht fertig sagen' bringt die Selbstverifizierungsschleife in Gang. Verbote bis zum Pfad zu benennen, funktioniert.
Minimalversion (nur ein paar Zeilen)
Für Projekte, die lange Anweisungsdateien nicht mögen. Der absolute Mindestkern, der die Unfallrate dennoch deutlich senkt.
# <name>
- Stack: <z. B. Next.js + TypeScript + PostgreSQL>
- Vor dem Abschluss immer ausführen: `npm run lint` und `npm test` (beide müssen bestehen)
- Passe dich dem bestehenden Stil an. Formatiere keine nicht betroffenen Zeilen um.
- Committe keine Geheimnisse oder .env. Pushe nicht, bis du angewiesen wirst.
- Im Zweifel nicht raten; stelle genau eine Frage.
Warum es funktioniert:Länger ist bei Anweisungsdateien nicht besser. Sie auf nur den durchzusetzenden Kern einzugrenzen (Verifizierung, Umformatierungs-Zurückhaltung, Geheimnisschutz, kein Pushen, Nachfragen) lässt die KI sie bis zum Ende behalten.
Fertige Dateien zum direkten Einfügen - Nach Sprache & Framework
Next.js / TypeScript
Setzt App Router voraus. Legt die Server/Client-Grenze und den Daten-Fetching-Stil für die KI fest.
# Next.js (App Router) + TypeScript
## Stack
Next.js (App Router), TypeScript strict, Tailwind CSS, <your-ORM>
## Befehle
- Dev: `npm run dev`
- Build: `npm run build` # muss ohne Typfehler bestehen
- Lint: `npm run lint`
- Test: `npm test`
## Architektur-Regeln
- Standardmäßig Server Components. Füge "use client" nur hinzu, wenn State,
Effekte oder Browser-APIs nötig sind. Halte Client Components klein und an den Blättern.
- Hole Daten in Server Components oder Route Handlers.
Hole keine initialen Daten in useEffect.
- Platziere Komponenten beim zugehörigen Route-Segment. Gemeinsame UI kommt nach `components/`.
- Validiere externe Eingaben an der Grenze immer per Schema (z. B. Zod).
## Konventionen
- Kein `any`. Gib öffentlichen Funktionen explizite Rückgabetypen.
- Verwende die bestehenden Design-Tokens / Tailwind-Klassen. Füge keine Farben eigenmächtig hinzu.
- Halte `page.tsx` schlank; verlagere Logik in Funktionen und Komponenten.
## Definition of Done
`npm run build`, `npm run lint` und `npm test` bestehen alle mit Exit-Code 0.
Kein `any`, keine ungenutzten Exports, kein übrig gebliebenes console.log.
Warum es funktioniert:Next.js ist das Paradebeispiel dafür, dass die KI die 'Server-vs.-Client-Entscheidung' falsch trifft. 'Standardmäßig Server, use client minimal halten' auszubuchstabieren, senkt Unfälle drastisch.
React (Vite) SPA
Für Vite-basierte SPAs. Legt den Ansatz für State-Management und Komponentendesign fest.
# React (Vite) + TypeScript
## Befehle
- Dev: `npm run dev`
- Build: `npm run build`
- Lint: `npm run lint`
- Test: `npm test` (Vitest + Testing Library)
## Regeln
- Nur Funktionskomponenten und Hooks. Verwende keine Klassenkomponenten.
- Halte State minimal, in der Reihenfolge "lokal -> Context -> State-Bibliothek".
Hebe State nicht unnötig auf Global an.
- Schließe Seiteneffekte in useEffect ein und schreibe das Dependency-Array korrekt.
- Trenne UI von Logik. Bündle das Daten-Fetching in dedizierten Hooks (useXxx).
- Barrierefreiheit: Gib interaktiven Elementen passende Rollen und Tastaturbedienung.
## Konventionen
- Kein `any`. Definiere Props mit Typen.
- Passe dich dem Stil der bestehenden Komponenten und Styles an.
## Definition of Done
`npm run build`, `npm run lint` und `npm test` bestehen mit Exit-Code 0.
Warum es funktioniert:In React sind die klassischen Unfälle 'State zu früh auf Global anheben' und 'falsche useEffect-Abhängigkeiten'. Die Anhebungsreihenfolge und die Dependency-Array-Regel auszubuchstabieren, hält die Sache stabil.
Node.js API (Express / Hono)
Für Backend-APIs. Stellt Leitplanken für Validierung, Fehlerbehandlung und Geheimnisverwaltung auf.
# Node.js API (Express / Hono) + TypeScript
## Befehle
- Dev: `npm run dev`
- Build: `npm run build`
- Test: `npm test`
- Lint: `npm run lint`
## Regeln
- Validiere alle Eingaben (body, query, params, headers) an der Grenze per Schema.
- Verschlucke keine Fehler. Gib sie typisiert über einen zentralen Error-Handler zurück.
- Lies Geheimnisse aus Umgebungsvariablen. Hardcode sie nicht im Code.
- Schichte den DB-Zugriff (route -> service -> repository).
- Gib eine konsistente JSON-Form zurück (vereinheitliche Erfolgs- und Fehlerform).
## Absolute Regeln
- Überspringe oder lockere Authentifizierungs-/Autorisierungslogik nicht eigenmächtig.
- Verifiziere stets die Autorisierung, wenn du einen öffentlich zugänglichen Endpunkt hinzufügst.
- Logge keine personenbezogenen Daten, Tokens oder Passwörter.
## Definition of Done
`npm test` (Happy Path + Fehlerfälle) und `npm run lint` bestehen.
Warum es funktioniert:Bei APIs sind die drei großen Unfallursachen 'unvalidierte Eingaben', 'verschluckte Fehler' und 'Geheimnisse in Logs'. Grenzvalidierung und Autorisierungsprüfungen zu absoluten Regeln zu machen, erhöht die Wahrscheinlichkeit, dass sie befolgt werden.
Laravel / PHP
Gewöhnt die KI an ein konventionsorientiertes Framework: Eloquent, Migrationen und Konventionen.
# Laravel + PHP
## Befehle
- Serve: `php artisan serve`
- Migrate: `php artisan migrate`
- Test: `php artisan test`
- Format: `./vendor/bin/pint` # vor dem Abschluss ausführen
## Konventionen (folge dem Laravel-Weg)
- Verwende Eloquent-Relationen. Vermeide rohes SQL ohne klaren Grund.
- Validiere Eingaben in Form-Request-Klassen. Mache es nicht in Controllern.
- Halte Controller schlank. Verlagere Geschäftslogik in Services / Actions.
- Jede Schemaänderung bekommt eine neue Migration. Bearbeite keine bereits ausgeführten.
- Verwende benannte Routes und Route Model Binding.
## Absolute Regeln
- Committe niemals, unter keinen Umständen, `.env` oder echte Zugangsdaten.
- Führe keine destruktiven Befehle wie `migrate:fresh` gegen die Produktions-DB aus.
- Wann immer du das Verhalten änderst, füge immer Tests hinzu oder aktualisiere sie (`php artisan test`).
## Definition of Done
Sowohl `php artisan test` als auch `./vendor/bin/pint --test` bestehen.
Warum es funktioniert:Bei einem 'konventionsorientierten' Framework ist es der sichere Zug, 'folge den Konventionen des Frameworks' plus ein Verbot destruktiver Befehle auszubuchstabieren. Ein Verbot von Änderungen an bereits ausgeführten Migrationen ist ebenfalls wichtig.
Python / Datenanalyse
Betont Typen, virtuelle Umgebungen und Reproduzierbarkeit. Stellt die Regeln 'Daten nicht zerstören oder erfinden' an erste Stelle.
# Python / Datenanalyse
## Umgebung
- Verwende das Projekt-venv `.venv`. Installiere nicht global.
- Installation: `pip install -r requirements.txt`
- Ausführen: `python -m src.main`
- Test: `pytest`
- Format: `ruff check .` und `ruff format .`
## Konventionen
- Füge jeder Funktionssignatur Typannotationen hinzu. Führe `mypy src` aus, falls konfiguriert.
- Schreibe keine Logik in Notebooks. Wiederverwendbarer Code kommt nach `src/`.
- Fixiere den Seed für alles, was Zufälligkeit nutzt, damit Ergebnisse reproduzierbar sind.
## Absolute Datenregeln (am wichtigsten)
- Fülle fehlende Werte nicht stillschweigend aus und erfinde sie nicht. Gibt es
fehlende Werte, melde sie und kläre, wie sie zu behandeln sind.
- Überschreibe keine Rohdatendateien. Schreibe die Ausgabe nach `data/processed/`.
- Dokumentiere alle Annahmen (Filter, ausgeschlossene Zeilen, Einheiten) in Code-Kommentaren.
## Definition of Done
`pytest` besteht, `ruff check .` ist sauber, und die Ergebnisse sind aus einem sauberen Zustand reproduzierbar.
Warum es funktioniert:In der Analyse sind die größten Fehler der KI 'fehlende Werte stillschweigend ausfüllen' und 'Rohdaten überschreiben'. Diese ausdrücklich zu verbieten, macht die Ergebnisse weitaus vertrauenswürdiger.
Go
Bringt die KI dazu, dem Go-Weg zu folgen, der Einfachheit und explizite Fehlerbehandlung schätzt.
# Go
## Befehle
- Build: `go build ./...`
- Test: `go test ./...`
- Format: `gofmt -w .` und `go vet ./...`
## Konventionen
- Verschlucke keine Fehler. Behandle sie immer mit `if err != nil` und gib sie
mit Kontext zurück (`fmt.Errorf("...: %w", err)`).
- Halte die Verschachtelung mit frühen Returns flach.
- Nutze Nebenläufigkeit nur, wenn nötig. Achte auf Goroutine-Leaks und Races
(lass `go test -race` bestehen).
- Kommentiere exportierte Symbole. Bevorzuge die Standardbibliothek.
## Absolute Regeln
- Füge keine unnötigen Abstraktionen oder Interfaces hinzu (erstelle sie bei Bedarf).
- Bevor du eine Abhängigkeit hinzufügst, prüfe zuerst, ob die Standardbibliothek genügt.
## Definition of Done
`go build ./...`, `go vet ./...` und `go test -race ./...` bestehen alle.
Warum es funktioniert:In Go sind 'Über-Abstraktion' und 'verschluckte Fehler' die Unfallquellen. Frühe Returns, %w-Wrapping und -race auszubuchstabieren, erzeugt sicheren, idiomatischen Go-Code.
Rust
Verhindert übermäßigen Einsatz von unwrap und unsafe und sorgt für korrekte Behandlung von Result/Option.
# Rust
## Befehle
- Build: `cargo build`
- Test: `cargo test`
- Lint: `cargo clippy -- -D warnings`
- Format: `cargo fmt`
## Konventionen
- Verwende `unwrap()` / `expect()` in Produktionscode nicht leichtfertig.
Behandle `Result` / `Option` korrekt mit `?` oder match.
- `unsafe` ist grundsätzlich verboten. Falls wirklich nötig, nenne den Grund in einem Kommentar.
- Folge dem Compiler bei Borrowing und Lifetimes. Überdenke das Design, bevor du
mit `clone()` ausweichst.
- Mache Fehlertypen mit `thiserror` / `anyhow` usw. aussagekräftig.
## Definition of Done
`cargo build` und `cargo test` bestehen, und
`cargo clippy -- -D warnings` meldet null Warnungen.
Warum es funktioniert:In Rust weicht die KI, wenn sie feststeckt, gerne mit `unwrap()` und `clone()` aus. Diese zu entmutigen und clippy mit -D warnings bestehen zu lassen, bewahrt die Qualität.
Ruby on Rails
Halte es 'auf den Schienen'. Vermeide fette Models/Controller und folge den Konventionen.
# Ruby on Rails
## Befehle
- Serve: `bin/rails server`
- Migrate: `bin/rails db:migrate`
- Test: `bin/rails test` (oder `bundle exec rspec`)
- Format: `bundle exec rubocop -A`
## Konventionen (folge dem Rails-Weg)
- Respektiere \'Konvention vor Konfiguration\'; erfinde keine eigene Struktur.
- Vermeide fette Controller / Models. Verlagere Logik in Services / Concerns.
- Beschränke Eingaben mit Strong Parameters.
- Vermeide N+1 (nutze `includes`).
- Schemaänderungen bekommen eine neue Migration. Bearbeite keine bereits ausgeführten.
## Absolute Regeln
- Committe niemals, unter keinen Umständen, `.env` oder Zugangsdaten.
- Führe keine destruktiven Befehle gegen die Produktions-DB aus.
- Wenn du das Verhalten änderst, füge Tests hinzu oder aktualisiere sie.
## Definition of Done
Tests und `bundle exec rubocop` bestehen.
Warum es funktioniert:Rails wird schnell unwartbar, sobald man von der Konvention abweicht. 'Auf den Schienen bleiben', 'Fettes vermeiden' und 'N+1 vermeiden' auszubuchstabieren, bewahrt die Rails-Idiome.
SQL / DB-Migrationen
Daten nicht zerstören; nur umkehrbare Änderungen. Sicherheits-Leitplanken für Migrationen.
# SQL / Datenbank-Migrationen
## Absolute Regeln (Datenschutz kommt zuerst)
- Führe keine destruktiven Operationen gegen Produktionsdaten eigenmächtig aus
(DROP / TRUNCATE / bedingungsloses DELETE oder UPDATE).
- Migrationen müssen eine Rollback-Prozedur bereitstellen, nicht nur die Vorwärtsrichtung.
- Bearbeite keine bereits ausgeführten Migrationen. Füge stets neue hinzu.
- Lösche oder benenne Spalten in Stufen um ("hinzufügen -> migrieren -> stilllegen"); mache es nicht in einem Zug.
## Query-Konventionen
- Vermeide `SELECT *`; gib die benötigten Spalten an.
- Bestätige, dass WHERE- / JOIN-Bedingungen einen Index nutzen können.
- Teile große Updates in Batches auf, um die Sperrzeit kurz zu halten.
- Bei destruktiven Verifizierungs-Queries bestätige zuerst die betroffene Anzahl mit einem `SELECT`, bevor du sie ausführst.
## Definition of Done
Sowohl Anwenden als auch Rollback gelingen in einer staging-äquivalenten Umgebung, und du
hast bestätigt, dass es keine unbeabsichtigten Änderungen an bestehenden Daten gibt.
Warum es funktioniert:Die DB ist der 'unwiederbringlichste' Bereich von allen. Ein Verbot destruktiver Operationen, stufenweise Schemaänderungen und erforderliche Rollbacks auszubuchstabieren, ist die Rettungsleine.
Fertige Dateien zum direkten Einfügen - Nach Workflow
Testgetrieben (TDD)
Setzt 'Tests nicht aufschieben' und 'nicht durch Löschen von Tests bestehen lassen' durch.
# Testgetriebener Ansatz
Wenn du das Verhalten änderst, folge jedes Mal dieser Schleife:
1. Schreibe zuerst einen \'fehlschlagenden Test\', der das gewünschte Verhalten ausdrückt.
2. Führe den Test aus und bestätige, dass er aus dem richtigen Grund fehlschlägt.
3. Schreibe den minimalen Code, der nötig ist, damit der Test besteht.
4. Führe die gesamte Test-Suite aus und bestätige, dass alles grün ist.
5. Refaktoriere, während du es grün hältst.
## Absolute Regeln
- Lösche oder überspringe keine Tests, damit die Suite besteht.
- Schwäche keine Assertions ab, um Dinge grün zu machen.
- Ist ein Test wirklich falsch, erkläre warum, bevor du ihn änderst.
- Neuer Code ohne Tests ist nicht \'fertig\'.
## Definition of Done
Die gesamte Suite besteht, die Abdeckung ist nicht gesunken, und das Zurücksetzen der
Implementierung lässt den neuen Test fehlschlagen (d. h. er ist ein aussagekräftiger Test).
Warum es funktioniert:Wenn die KI feststeckt, löscht sie manchmal Tests und sagt 'es hat bestanden'. 'Nicht löschen, nicht abschwächen, beim Zurücksetzen Fehlschlag bestätigen' auszuschreiben, schließt die Schlupflöcher.
Debugging-fokussiert
Verhindert Versuch-und-Irrtum-Korrekturen. Setzt die Disziplin von Ursachenidentifikation und dann minimaler Korrektur durch.
# Debugging-Ansatz
Gehe in dieser Reihenfolge vor. Korrigiere nicht durch Raten:
1. Stelle die Reproduktionsschritte fest (wie der Bug ausgelöst wird).
2. Schreibe das erwartete Verhalten und das tatsächliche Verhalten aus, je ein Satz.
3. Bilde eine Hypothese. Verifiziere sie mit Logs oder einer minimalen Repro, bevor du korrigierst.
4. Sobald du die Ursache identifiziert hast, wende die minimale Korrektur an.
5. Bestätige nach der Korrektur über die Repro-Schritte, dass der Bug weg ist und dass bestehende Tests bestehen.
6. Füge, wenn möglich, einen Regressionstest hinzu, der diesen Bug abfängt.
## Absolute Regeln
- Ändere nicht mehrere Stellen gleichzeitig, solange die Ursache unbekannt ist.
- Bleibe nicht bei \'es funktioniert erst mal\' stehen. Erkläre, warum es behoben wurde.
- Mische kein unzusammenhängendes Refactoring ins Debugging.
Warum es funktioniert:Wenn die KI an einem Bug feststeckt, schreibt sie gerne mehrere Stellen gleichzeitig um und verschlimmert die Dinge. Die Reihenfolge 'reproduzieren -> Hypothese -> verifizieren -> minimale Korrektur -> Regressionstest' zu erzwingen, behebt es zuverlässig.
Refactoring-fokussiert
Macht 'das Verhalten nicht ändern' zur absoluten Bedingung. Sichere Verbesserung, abgesichert durch grüne Tests.
# Refactoring-Ansatz
## Grundprinzip
Ändere kein von außen beobachtbares Verhalten. Ändere für keinerlei Eingabe die
Ausgaben oder Seiteneffekte.
## Schritte
1. Bestätige zuerst, dass für den Zielbereich Tests existieren und grün sind.
Falls nicht, schreibe zuerst Charakterisierungstests, die das aktuelle Verhalten festhalten.
2. Ändere in kleinen, einzelnen Schritten und führe nach jedem Schritt die Tests aus.
3. Halte einen Commit = eine Art von Verbesserung.
## Absolute Regeln
- Mische keine Feature-Ergänzungen oder Bugfixes ins Refactoring (mache sie zu separater Arbeit).
- Wird ein Test rot, halte sofort an. Fahre nicht fort.
- Ändere keine öffentlichen API-Signaturen eigenmächtig (kläre es bei Bedarf vorher).
## Definition of Done
Alle Tests bleiben grün, und der Code ist lesbarer mit weniger Duplikation.
Warum es funktioniert:Beim Refactoring ist 'das Verhalten nicht ändern' alles. Ohne dies zum Grundprinzip zu machen und mit grünen Tests abzusichern, zerstört die KI bereitwillig Features. Das Verbot, Feature-Ergänzungen beizumischen, ist ebenfalls wichtig.
Spezifikationen / Design-Dokumente schreiben
Lass es nicht sofort implementieren; lass es zuerst das Design in Prosa ausschreiben. Reduziert Nacharbeit drastisch.
# Wie man ein Design-Dokument schreibt
Vor dem Implementieren schreibe zuerst Folgendes in Prosa aus (schreibe keinen Code):
## 1. Ziel
Das zu lösende Problem und die Bedingungen, unter denen es als erreicht gilt (Erfolgskriterien).
## 2. Aktueller Zustand und Einschränkungen
Das bestehende Setup, die Abhängigkeiten und die zu wahrenden Einschränkungen (Performance, Kompatibilität, Deadline).
## 3. Design-Vorschlag
- Der gewählte Ansatz und die Ansätze, die du erwogen und verworfen hast (und warum).
- Der Datenfluss, die wichtigsten Schnittstellen und die zu ändernden Dateien.
## 4. Risiken und offene Fragen
Was kaputtgehen könnte, die zu bestätigenden Annahmen und die Punkte, die eine Entscheidung erfordern.
## 5. Plan
Zerlege die Implementierung in kleine Schritte, geordnet in verifizierbare Einheiten.
## Regeln
- Beginne nicht mit der Implementierung, bis dieses Design genehmigt ist.
- Liste Unbekanntes unter \'offene Fragen\' auf; fülle sie nicht mit eigenen Annahmen.
Warum es funktioniert:Die KI springt direkt zur Implementierung und produziert massenhaft falsche Richtungen. Schon 'zuerst das Design schreiben, nicht implementieren, bis genehmigt' einzufügen, reduziert Nacharbeit drastisch.
Große Änderungen staffeln
Verhindert eine riesige Alles-auf-einmal-Änderung. Lässt sie in kleine, überprüfbare Einheiten aufteilen.
# Wie man große Änderungen vornimmt
## Grundprinzip
Vermeide eine einzige riesige Änderung. Teile sie so auf, dass jeder Schritt
unabhängig überprüfbar, testbar und (idealerweise) deploybar ist.
## Schritte
1. Zerlege die zur Endform führenden Änderungen in eine Folge kleiner,
unabhängiger Schritte und präsentiere sie.
2. Schreibe für jeden Schritt \'was / warum / Auswirkungsbereich\' in 1-2 Zeilen.
3. Führe nach jedem Schritt die gesamte Test-Suite aus und bestätige Grün, bevor du weitergehst.
4. Gehe unter Wahrung der Abwärtskompatibilität vor (hinzufügen -> migrieren -> alten Pfad stilllegen).
## Absolute Regeln
- Schreibe nicht einen breiten Bereich auf einmal um und \'teste alles später zusammen\'.
- Wird ein Schritt zu groß, teile ihn weiter auf.
- Halte jeden Schritt auf einer Granularität, die zurückgesetzt werden kann.
## Definition of Done
Tests sind nach Abschluss aller Schritte grün, und auch jeder Zwischen-Commit ist nicht kaputt.
Warum es funktioniert:Die KI macht große Überarbeitungen gerne als 'alles auf einmal umschreiben', und wenn es kaputtgeht, wird das Isolieren der Ursache unmöglich. In Stufen aufzuteilen und bei jeder Grün zu erzwingen, lässt dich große Überarbeitungen sicher durchführen.
Fertige Dateien zum direkten Einfügen - Betrieb & Governance
Code-Review-spezialisiert
Verhindert eine Flut trivialer Mäkeleien; lässt nach Schweregrad-Reihenfolge berichten. Legt die Review-Kriterien fest.
# Code-Review-Anweisungen
Überprüfe die Änderungen, gruppiere sie nach Schweregrad und berichte in dieser Reihenfolge:
1. CRITICAL - Sicherheitslücken, Datenverlust, Abstürze, defekte Authentifizierung
2. HIGH - Logikfehler, Race Conditions, fehlende Fehlerbehandlung
3. MEDIUM - Performance-Probleme, fehlende Tests, verwirrende Namen
4. LOW - kleinere Stil-Mäkeleien (nur wenn es keine höheren Probleme gibt)
## Wie zu berichten ist
- Für jeden Befund: Datei:Zeile / was falsch ist / warum es wichtig ist / eine konkrete Korrektur.
- Zitiere nur den kleinsten relevanten Ausschnitt. Füge nicht die ganze Datei ein.
- Ist eine Änderung korrekt, sage es ausdrücklich. Erfinde keine Probleme.
## Was nicht zu tun ist
- Vergrabe keine echten Bugs unter einem Haufen LOW-Mäkeleien.
- Schreibe keine ganzen Dateien um. Schlage das kleinste Diff vor.
- Sofern kein echter Schaden besteht, markiere keine Zeilen außerhalb des Diff-Bereichs.
## Ausgabe
Schließe mit einem einzeiligen Urteil ab: APPROVE / REQUEST CHANGES / BLOCK, mit einer Begründung.
Warum es funktioniert:Sich selbst überlassen produziert eine Review-KI massenhaft triviale Mäkeleien. Die Schweregrad-Reihenfolge anzugeben plus 'sag es, wenn es kein Problem gibt' und 'erfinde nichts' entfernt das Rauschen und macht sie nutzbar.
Commit- / PR-Betriebsregeln
Verhindert unaufgeforderte Pushes, riesige Commits und durchgesickerte Geheimnisse. Sicherheits-Leitplanken für Git-Operationen.
# Git- / PR-Regeln
## Commits
- Verwende Conventional Commits: `type(scope): summary`
type: feat, fix, refactor, test, docs, chore.
- Ein Commit = eine logische Änderung. Halte ihn klein und überprüfbar.
- Schreibe im Body das \'Warum\' statt des \'Was\'.
## Absolute Regeln
- Führe `git push` nicht aus, sofern nicht angewiesen.
- Führe auf geteilten Branches / main kein force-push, rebase oder amend aus.
- Committe keine Geheimnisse, .env, Zugangsdaten oder große Binärdateien.
- Füge Dateien namentlich hinzu. Reiße nicht alles mit `git add -A` mit.
## Pull Requests
- Titel innerhalb von 70 Zeichen. Body ist \'Zusammenfassung\' + \'Testplan (Checkliste)\'.
- Vermerke etwaige Breaking Changes.
- Merge nicht. Erstelle den PR und berichte die URL.
Warum es funktioniert:Git-Operationen neigen zu 'unwiederbringlichen Unfällen'. Pushes, Force-Pushes und Geheimnis-Lecks mit 'niemals X tun' zu benennen und zu verbieten, ist das, was funktioniert.
Security-Review-spezialisiert
Lässt nach Kategorie auf Schwachstellen prüfen. Priorisiert das Vermeiden von Übersehenem über Fehlalarme.
# Security-Review-Anweisungen
Prüfe die Änderungen der Reihe nach gegen die folgenden Aspekte und berichte
jedes gefundene Problem mit einer Schweregrad-Bewertung:
- Fehlende Eingabevalidierung (Injection: SQL / Command / XSS / SSRF)
- Lücken bei Authentifizierung/Autorisierung (fehlende Berechtigungsprüfungen, Privilegieneskalation)
- Geheimnis-Offenlegung (hardcodierte Schlüssel/Tokens, Ausgabe in Logs)
- Unsichere Defaults (übermäßige Offenlegung, laxes CORS, unvalidierte Redirects)
- Bekannte Schwachstellen in Abhängigkeiten, unsichere Krypto- / RNG-Nutzung
## Wie zu berichten ist
- Für jeden Befund: Ort / Angriffsszenario (wie es ausgenutzt werden könnte) / eine konkrete Korrektur.
- Markiere Verdachtsfälle, bei denen du dir nicht sicher bist, als \'bedarf der Bestätigung\' (übergehe sie nicht stillschweigend).
- Gibt es kein Problem, gib \'keine Probleme\' zusammen mit den geprüften Aspekten an.
## Was nicht zu tun ist
- Generiere keinen tatsächlichen Angriffscode oder Ausnutzungsschritte (zeige nur Korrekturen).
Warum es funktioniert:Bei Sicherheit ist ein 'Übersehen' am kostspieligsten. Die Aspekte aufzulisten und 'markiere Verdachtsfälle als bedarf-der-Bestätigung' zu sagen, verhindert das Verhalten, aus Angst vor Fehlalarmen still zu bleiben.
Docker- / Infra-Sicherheits-Leitplanken
Verhindert unwiederbringliche Unfälle bei Container- und Infrastrukturoperationen.
# Docker- / Infrastruktur-Arbeitsregeln
## Absolute Regeln (Zerstörungsverhütung kommt zuerst)
- Führe keine destruktiven Befehle gegen Produktions- oder geteilte Umgebungen eigenmächtig aus
(`docker system prune`, Volumes löschen, `down -v` usw.).
- Hefte Images an feste Tags. Verlasse dich nicht auf `latest`.
- Übergib Geheimnisse über Umgebungsvariablen / Secret-Management.
Backe sie nicht ins Dockerfile oder Image ein.
- Halte offene Ports und Privilegien (privileged usw.) auf das nötige Minimum.
## Konventionen
- Halte Dockerfiles klein mit Multi-Stage-Builds, achte auf Layer-Caching.
- Laufe als Nicht-Root-Benutzer.
- Baue und starte nach Änderungen lokal zur Verifizierung, bevor du berichtest.
## Definition of Done
`docker build` besteht, der Container startet, und der Health Check / grundlegende
Betrieb kann bestätigt werden.
Warum es funktioniert:Infrastruktur ist ein Bereich, in dem man eine Umgebung in einem Zug zerstören kann. Ein Verbot destruktiver Befehle, das Vermeiden der latest-Abhängigkeit und kein Einbacken von Geheimnissen auszubuchstabieren, bildet die Sicherheits-Leitplanken.
Regeln für Abhängigkeits-Updates
Verhindert nicht autorisierte Abhängigkeitsergänzungen und Major-Updates. Schnürt den Einstiegspunkt der Lieferkette ein.
# Abhängigkeitsregeln
## Absolute Regeln
- Bevor du eine Abhängigkeit hinzufügst, prüfe, ob die Standardbibliothek oder eine
bestehende Abhängigkeit genügt.
- Wenn du eine neue Abhängigkeit hinzufügst, füge eine einzeilige Notiz zu ihrem Zweck,
zu Alternativen und zum Wartungsstand hinzu.
- Erhöhe keine Major-Versionen eigenmächtig (nur wenn angewiesen).
- Generiere Lock-Dateien (package-lock.json usw.) nicht eigenmächtig neu.
- Vermeide Pakete dubioser Herkunft oder mit extrem wenigen Sternen oder schlechter Wartung.
## Schritte
1. Nenne den Grund für die Ergänzung oder das Update.
2. Bestätige nach dem Hinzufügen, dass Build und Tests bestehen.
3. Bestätige, dass die Lizenz nicht mit deinem Anwendungsfall kollidiert.
## Definition of Done
Build und Tests bestehen nach der Abhängigkeitsänderung, und du kannst das Diff in der Lock-Datei erklären.
Warum es funktioniert:Leichtfertige Abhängigkeitsergänzungen und Major-Updates sind der Einstiegspunkt zu Build-Brüchen und Lieferketten-Unfällen. 'Zuerst prüfen, ob Bestehendes genügt' und 'keine unaufgeforderten Major-Updates' funktionieren.
Wenn deine Anweisungsdatei sich anfühlt, als würde sie 'nicht funktionieren'
Wenn die KI die Regeln auch nach dem Hinzufügen einer Vorlage nicht befolgt, liegt die Ursache oft an Platzierung, Granularität oder Priorität. Wir erklären die Lösungen nach Ursache.
Lesen: Warum die KI deine .md-Regeln ignoriert und wie du das behebst* Die Prompts sind auf Deutsch; Befehle und Pfade in den Dateivorlagen bleiben auf Englisch (sie sind umgebungsabhängig). Zuletzt aktualisiert: 2026-05