Mein persönliches Claude-Code-Kit — das Scaffolding-System, mit dem neue Projekte entstehen und Bestandsprojekte aktuell bleiben: ein Plugin mit Workflow-Skills, dem Projekt-Template (Core, Stack-Module, Standards-Fragmente) und den globalen Kit-Regeln für jede Claude-Session, ein Marketplace zum Installieren, ein Renovate-Preset für alle Projekte und ein Installer für neue Rechner. Das Template lag bis 0.16.0 im eigenen Repo project-template; seit 1.0.0 kommt es mit dem Plugin, Skills und Template teilen eine Version.
Kit-Sprache ist Deutsch (das Kit ist primär für den Eigenbedarf). Englisch ist nur, was in Projekte gelangt oder dort wirkt: der Template-Inhalt, Governance-Doku, Commit-Messages, Hook-Ausgaben.
Das Kit baut auf GitHub auf. Marketplace und Plugin samt Template kommen von
github.com, und ein Teil der Skills spricht über gh mit der API — Repo-Anlage,
Repo-Settings, projektübergreifende Discovery, Sichtbarkeitswechsel. Wer GitHub nicht hat
oder nicht nutzen will, verliert genau diese Teile; der Arbeitszyklus (Planen, Bauen,
Abschließen) läuft rein lokal über git und just weiter. Was das im Einzelnen heißt: Ohne
GitHub und die Spalte GitHub in der
Skill-Tabelle.
Zwei alternative Wege zum selben Ergebnis — der Installer führt automatisiert genau
die Schritte aus, die unten manuell stehen. Eins von beiden genügt. Voraussetzung für
beide: gh (authentifiziert) und claude sind installiert. Ohne GitHub-Konto führt nur
der dritte Weg.
Repo klonen und den Installer ausführen — er prüft die Voraussetzungen, richtet
Marketplace + Plugin ein, legt die Personal-Config an (via gh api vorbefüllt), meldet
den Stand der globalen Kit-Regeln und prüft die Toolchain
(Installation auf Wunsch via brew). Die Kit-Regeln schreibt er nicht; die richtest du
danach in einer Claude-Session mit /coding-kit:update-conventions global ein:
git clone https://github.com/xnyzer/coding-kit.git && cd coding-kit && ./install.shDer Installer läuft nur mit vollständig eingerichtetem GitHub. Er prüft als erstes
ghinklusive Login und bricht sonst sofort ab (gh auth statusmuss grün sein, install.sh:40-41); die Personal-Config befüllt er übergh api user. Ohne Konto oder ohne Login ist er kein gangbarer Weg — dann manuell bzw. ohne GitHub einrichten. Und ihn in einer Shell starten, nicht per Doppelklick: bei einem Abbruch schließt sich das per Dateizuordnung geöffnete Fenster mitsamt der Fehlermeldung.
Der Installer ist idempotent: jeder Schritt prüft erst den Zustand, mehrfaches
Ausführen ist gefahrlos und überspringt, was schon da ist — auch geeignet, um nach den
zwei /plugin-Befehlen nur den Rest nachzuziehen. Der Klon wird bloß für den Installer
gebraucht; das Plugin samt Kit-Regeln kommt über den Marketplace von GitHub. Für die reine Nutzung brauchst du das Repo also nicht lokal.
1. Marketplace + Plugin (in einer Claude-Code-Session):
/plugin marketplace add xnyzer/coding-kit
/plugin install coding-kit@xnyzer
2. Personal-Config ~/.claude/coding-kit.env — praktisch erforderlich:
CODING_KIT_PROJECTS_DIR hat keinen Fallback und wird direkt in Shell-Kommandos
eingesetzt. Fehlt er, scheitert das nicht laut, sondern falsch — neue Projekte landen im
Verzeichnis, in dem die Session gerade steht, und die lokale Projekt-Discovery von
/update-conventions findet nichts. Die Identitäts-Schlüssel sind dagegen nur
Offline-Fallback (primär löst alles zur Laufzeit über gh api user auf):
mkdir -p ~/.claude
cat > ~/.claude/coding-kit.env <<EOF
CODING_KIT_GITHUB_LOGIN="$(gh api user --jq .login)"
CODING_KIT_GIT_AUTHOR_NAME="$(gh api user --jq '.name // .login')"
CODING_KIT_EMAIL_GITHUB="$(gh api user --jq .id)+$(gh api user --jq .login)@users.noreply.github.com"
CODING_KIT_PROJECTS_DIR="$HOME/Documents/Coding-Projects"
EOF
chmod 600 ~/.claude/coding-kit.envProjekte-Verzeichnis vorher prüfen und ggf. anpassen. Schlüssel-Referenz: Personal-Config.
3. Globale Kit-Regeln — optional: Das Kit funktioniert ohne. Sie setzen die House-Defaults für jede Session (Antwortsprache, Erklär-Niveau, „nie automatisch committen", Commit-Adresse je Host, Graphiti-Konventionen) — ohne sie fehlen diese Leitplanken außerhalb der Skills. Einrichten in einer Claude-Session:
/coding-kit:update-conventions global
Das fragt Antwortsprache und Erklär-Niveau ab und zeigt die Regeln, bevor es sie schreibt. Was dabei mit deinen Einstellungen geschieht: Globale Kit-Regeln.
4. Toolchain — mise, just, lefthook, gitleaks: die Skills rufen die
just-Standardrezepte, die Projekt-Hooks nutzen lefthook + gitleaks. Auf macOS:
brew install mise just lefthook gitleaks.
Frisch installierte Skills sind ggf. erst nach einem Session-Neustart sichtbar.
Windows: Beide Wege brauchen eine Bash (Git for Windows) —
install.shund die Snippets sind Bash, und die Hooks des Plugins rufenbashauf. Ausführen in derselben Umgebung, in derclaudeläuft: in Git Bash ist$HOMEdas Windows-Benutzerverzeichnis, ein Lauf unter WSL schreibt dagegen ins WSL-Home und bleibt für eine native Windows-Installation unsichtbar. Die Toolchain kommt dort über scoop/winget statt brew.
Für Rechner ohne GitHub-Konto oder mit dem Verbot, Code dorthin zu pushen — etwa Firmenrechner mit eigenem Git-Host. Voraussetzung ist nur, dass github.com lesend erreichbar ist; ein Login braucht keiner dieser Schritte. Ist auch das Lesen gesperrt, muss das Plugin (mit dem Template darin) über einen Firmen-Mirror oder Datenträger auf den Rechner — einen eingebauten Pfad dafür hat das Kit nicht.
-
Marketplace + Plugin wie im manuellen Weg — die zwei
/plugin-Befehle lesen nur.install.shist hier keine Option (er verlangt ein authentifiziertesgh). -
Personal-Config von Hand, ohne
gh api-Vorbefüllung.CODING_KIT_GITHUB_LOGINentfällt; die Commit-Adresse für Projekte ohne Host steht unterCODING_KIT_EMAIL_GIT:mkdir -p ~/.claude cat > ~/.claude/coding-kit.env <<EOF CODING_KIT_GIT_AUTHOR_NAME="Vorname Nachname" CODING_KIT_DEFAULT_HOST="git" CODING_KIT_EMAIL_GIT="adresse@example.org" CODING_KIT_PROJECTS_DIR="$HOME/Documents/Coding-Projects" EOF chmod 600 ~/.claude/coding-kit.env
-
Toolchain wie im manuellen Weg (Schritt 4).
Das Template kommt mit dem Plugin; ein eigener Klon ist nicht nötig, und kein Skill fragt dafür nach GitHub.
Projekte anlegen: /new-project fragt als Erstes nach dem Git-Host; vorgeschlagen
wird CODING_KIT_DEFAULT_HOST aus der Personal-Config — auf einem Rechner ohne GitHub
einmal git eintragen. Mit git legt es das Projekt per git init lokal an, ohne
Remote und ohne gh; Repo-Anlage, Repo-Settings, Topics und Push weist es als
übersprungen aus. Das Projekt bekommt dann weder .github/ noch renovate.json, und
die Texte zu Commit-Adresse, Sicherheitsmeldung und Prüftor sprechen nicht von GitHub.
Einen Remote — etwa ein Bare-Repo auf einem NAS — setzt du später selbst (git remote add origin <url>); den Umzug auf einen Host übernimmt /coding-kit:update-conventions host.
Die projektübergreifende Discovery von /update-conventions alle findet lokale Projekte
über .claude/template-version unter $CODING_KIT_PROJECTS_DIR, das Marker-Topic braucht
sie dafür nicht.
Commit-Identität: Die globalen Kit-Regeln verlangen die
Adresse des Projekt-Hosts aus der Personal-Config — für Projekte ohne Host
CODING_KIT_EMAIL_GIT, für GitHub-Projekte CODING_KIT_EMAIL_GITHUB (sonst die
Noreply-Adresse über gh api user). /coding-kit:step-done setzt sie pro Repo
(git config --local), damit eine Firmenadresse nicht in private Projekte wandert.
Für Projekte in einer Firma auf Azure DevOps Services (der Cloud-Dienst unter
dev.azure.com). Azure DevOps Server, im eigenen Rechenzentrum betrieben, läuft als
„nur Git". Das Kit ruft dabei kein az auf und fasst keinen Token an: Das Repo legst du
im Web an, der Skill verbindet das Projekt über die Clone-Adresse.
Voraussetzungen:
- Ein Azure-Projekt, in dem du Repos anlegen darfst — standardmäßig dürfen das nur Projekt-Admins; sonst legt ein Admin das leere Repo für dich an.
- Anmeldung für git: ein SSH-Schlüssel in deinem Profil (User settings → SSH public
keys). Azure nimmt nur RSA-Schlüssel an —
ssh-keygenerzeugt heute ED25519, alsossh-keygen -t rsa -b 4096. Oder HTTPS mit dem Git Credential Manager. - Beim ersten Kontakt kennt ssh den Server noch nicht: einmal
ssh -T git@ssh.dev.azure.comim Terminal ausführen und den Fingerabdruck bestätigen. Der Befehl endet auch bei erfolgreicher Anmeldung mit einem Fehler und „Shell access is not supported" — das ist richtig so. - In der Personal-Config die Commit-Adresse für Azure-Projekte, meist die Firmenadresse
(
CODING_KIT_EMAIL_AZURE; fehlt sie, fragtstep-done), und auf einem FirmenrechnerCODING_KIT_DEFAULT_HOST="azure". Organisation und Azure-Projekt stehen nur in der Adresse des Projekts, nie in der Personal-Config.
Projekt anlegen: /new-project mit Host azure zeigt die Schritte, um im Web ein
leeres Repo anzulegen (ohne README), fragt nach der Clone-Adresse und prüft sie mit
template-sync.sh remote-check: Zugangsdaten in der Adresse lehnt es ab, ohne den Server
zu fragen; verbunden wird nur ein erreichbares, leeres Repo. Azure-Projekte sind immer
privat — Azure DevOps legt keine öffentlichen Projekte mehr an. Das Projekt bekommt
azure-pipelines.yml, die PR-Vorlage unter .azuredevops/ und renovate.json, aber kein
.github/.
Danach im Web (der Abschlussbericht nennt die Klicks):
- Pipeline registrieren, einmal nach dem ersten Push: Pipelines → New pipeline →
Azure Repos Git → das Repo; meist erkennt Azure die
azure-pipelines.ymlselbst und zeigt sie zur Prüfung → Run (sonst: Existing Azure Pipelines YAML file →/azure-pipelines.yml). Sie läuftjust setupundjust checkwie lokal, im PoolDefault— also auf einem eigenen Agenten der Organisation. Für Microsoft-gehostete Agenten ändert man die Zeilepoolin der Datei; die brauchen gekaufte Laufzeit. - Renovate läuft auf Azure nicht als App, sondern zentral in der Organisation über
ihre Repos;
renovate.jsonim Projekt wirkt erst dann. Das Preset liegt auf GitHub — ein zentraler Lauf braucht für den Abruf einen GitHub-Token, sonst greift das Abruflimit von GitHub.
Was entfällt: Repo-Einstellungen, Beschreibung und Topics, Branch-Policies (jede
Policy auf main sperrt direkte Pushes), Work Items und der Wechsel auf öffentlich —
go-public verweist auf den Umzug nach GitHub. Bestandsprojekte mit Azure-Remote bekommen
beim nächsten /coding-kit:update-conventions den Host azure ohne Frage; der Umzug nach
Azure oder von dort weg geht mit … host.
Die Skills erscheinen namespaced als /coding-kit:<skill>:
Die Spalte GitHub sagt, was ohne GitHub bleibt — bei Host azure oder git oder ohne
angemeldetes gh: – = rein lokal über git und just, teils = der Skill läuft, einzelne Teilschritte
weist er als übersprungen aus (Details unter der Tabelle), ja = braucht einen Host, ohne
ist er gegenstandslos.
| Skill | GitHub | Zweck |
|---|---|---|
/coding-kit:new-project |
teils | Der Orchestrator: Short-Info → Abfragen (Git-Host/Name/Lizenz/Stack/…, Sub-Skills aufrufbar) → Plan → leeres Repo anlegen (auf GitHub, im Web auf Azure DevOps oder nur lokal mit Git) und aus dem mitgelieferten Template befüllen (Renderer, Antworten-Datei und Basis-Snapshot im Erst-Commit), verifizieren, Erst-Commit nach OK. Trockenlauf: Argument dry-run. |
/coding-kit:add-feature |
– | Neue Aufgabe aufnehmen: erst das Problem, dann Beratung (stärkstes Gegenargument, Alternativen, eine von vier Empfehlungen — auch „nicht aufnehmen"), dann eine Datei features/F-NNN-kurzname.md mit Status BACKLOG und ein Vorschlag für die Reihenfolge; Umsetzungsideen nur als grobe Lösungsskizze. Startest du oder Claude selbst, angelegt wird nach deinem OK. |
/coding-kit:prep-step |
– | Feature vor der Umsetzung spezifizieren und planen: Größe S/M/L aus Aufwand, Unsicherheit und Reichweite; Spezifikation in der Tiefe je Größe (Abnahmekriterien, Randfälle, Nicht-Ziele, Tests, Einbettung; ab M Interview, bei L Example Mapping), darf abraten; neue Frameworks, Sprachen und Toolchains per Erkennungs-Skript gegen Fragment-Katalog und Stack-Module prüfen; Substeps planen, Ready prüfen, Status PLANNED. |
/coding-kit:build-step |
– | Aufgabe plan-treu aus ihrer Feature-Datei umsetzen: Substep für Substep mit Verifikation und Selbst-Review (verständlich, einfach, sicher, lesbar, kein Workaround — gegen die CODING-STANDARDS.md, ohne sie gegen drei Abschnitte der Vorlage), Nicht-Ziele als Grenze, Abweichungen gesammelt für step-done. Vorhandene Fehler im berührten Code behebt er mit (bei großen Korrekturen erst nach Rückfrage); lässt der Plan keine saubere Lösung zu, hält er an, statt einen Workaround zu bauen. Jeder Substep endet mit einer step-done-Empfehlung (du prüfst und schließt selbst ab). |
/coding-kit:step-done |
– | Abschluss-Checkliste: Review nach denselben fünf Prüffragen wie build-step (gegen die CODING-STANDARDS.md, ohne sie gegen drei Abschnitte der Vorlage), vorhandene Fehler im berührten Code gleich mitbehoben, just check, unabhängiges Review durch einen nur lesenden Reviewer-Agenten mit frischem Kontext (gegen Spezifikation und Maßstab; Befunde am Code nachgeprüft — auch an gleichartigen Stellen —, behoben oder mit Grund verworfen, die Liste steht in der Vorschau), Erkennungs-Backstop (in diesem Schritt neue Frameworks ohne Fragment, Sprachen ohne Modul, Tools ohne Vorlage), Backstop für geänderte managed Dateien ohne Registry-Zeile, Secrets-Scan, Privacy-Scan der lebenden Doku, Verbuchung in der Feature-Datei (Verlauf-Eintrag, Abnahmekriterien mit Beleg, Status IN-PROGRESS bzw. DONE, erzeugte Tabelle) und Commit nach einer gemeinsamen Freigabe (Vorschau vor dem Schreiben). |
/coding-kit:audit-code |
– | Vollaudit (Code, Security, Deps, Deployment) → AUDIT-RESULTS.md, fixt nichts. |
/coding-kit:teach-step |
– | Lehrer-Modus: Aufgabe aus ihrer Feature-Datei selbst umsetzen, der Skill leitet sokratisch an, prüft nach denselben fünf Fragen wie step-done, zeigt vorhandene Fehler als Hinweis und testet — schreibt nie Code. |
/coding-kit:name-it |
teils | Namenskandidaten nach Kriterien + Verfügbarkeits-Checks (GitHub/npm/PyPI, Domain optional). |
/coding-kit:choose-license |
– | Kurzinterview → Lizenz-Empfehlung (Default Apache-2.0, „TBD" gültig); im Bestandsprojekt zieht sie Antworten-Datei und lizenzabhängige managed Dateien nach. |
/coding-kit:choose-stack |
– | Modul-Empfehlung für Neuanlage oder Nachrüsten/Wechsel EINES Moduls im Bestand (Empfehlung aus den Projektsignalen, Render und Drei-Wege-Merge, Diff + Bestätigung, Snapshot nachgezogen); baut die vom Modul deklarierten Standards-Fragmente komponierbar ein (an ihre Stelle aus dem Render, per Skript), Eigenschafts-Fragmente nachrüstbar auf Bestätigung; hält die Begleithandlungen, die einzelne Fragmente beim Einbau verlangen, samt FRAGMENTS-Eintrag und keep-Zeilen (referenziert von new-project, update-conventions, prep-step, step-done), und die Regel zum Erzeugen und Prüfen der mise.lock mit Plattform-Einträgen (Prüfung per template-sync.sh lock-check; referenziert von new-project, update-conventions). |
/coding-kit:define-requirements |
– | Interview → Ziele, Nicht-Ziele und Rahmenbedingungen im Überblick der Projekt-CLAUDE.md → je Kern-Feature eine Datei in features/ (Status BACKLOG) mit empfohlener Reihenfolge; fragt die Eigenschafts-Trigger des Fragment-Katalogs ab. |
/coding-kit:refine-requirements |
– | Zurück zur Spec: Diagnose mit drei Pfaden; arbeitet auf den Ziel-Abschnitten der CLAUDE.md, den Feature-Dateien und ADRs; teilt Features (SUPERSEDED), streicht sie (DROPPED), datiert Entscheidungen, plant die Reihenfolge um. |
/coding-kit:update-conventions |
teils | Konventions-Sync Template → Projekte (nur abwärts), Update-Fenster aus dem CHANGELOG: managed Dateien per Drei-Wege-Merge gegen den Basis-Snapshot des Projekts (scripts/template-sync.sh) — Projektzusätze bleiben, Konflikte kommen mit Lösungsvorschlag; Diff + Bestätigung je Datei, je Standards-Fragment und je markierter seed-Zone (section:NAME; Zonen und Fragmente vergleicht und setzt das Skript ein, neue und gestrichene Zonen erkennt es an der Basis des letzten Syncs); Abweichungs-Registry mit den Arten skip, keep, adapt samt Revision; erkennt bei jedem Lauf, wofür das Template inzwischen Module oder Fragmente hat und welche Tools es nicht kennt (dauerhafte Ablehnung als Rules-Zeile); ohne Argument nur das aktuelle Projekt, alle für alle, Modi status und revise; Migration für Projekte ohne Snapshot (Basis aus der Template-Historie) und für Altprojekte; erkennt im Template entfernte/umbenannte Dateien (Rückbau/Umzug je Datei bestätigt); projektlokale Fragmente und Tools ohne Vorlage meldet er mit dem Angebot eines Übernahme-Vorschlags fürs Template (propose-to-template); prüft die mise.lock per Skript auf Plattform-Einträge für die CI und bietet mise lock an. Überträgt die Auto-Memory des Projekts auf diesem Rechner nach Freigabe in Graph oder docs/notes.md und löscht sie danach. Mit global gleicht er die globalen Kit-Regeln auf dem Rechner ab (~/.claude/rules/coding-kit.md, Ersteinrichtung und Migration einer alten Kit-Kopie in ~/.claude/CLAUDE.md inklusive) und bietet zwei Settings an (Auto-Memory aus, Transkripte 365 Tage), jeder andere Lauf prüft die Regeln einmal mit; eine selbst angelegte CLAUDE.md fasst er nie an. |
/coding-kit:explain-level |
– | Antwortsprache und Erklär-Niveau festlegen: kurzes Interview (Programmieren, Shell, Git, Frameworks, Projekt-Werkzeuge, Code mitlesen) → Vorschlag für Stufe (einsteiger, junior, fortgeschritten, senior) und Notiz mit dem Stufentext der Kit-Regeln; schreibt die Werte nach Freigabe in die Personal-Config. Wirksam, sobald /coding-kit:update-conventions global die globalen Regeln neu erzeugt; jederzeit erneut aufrufbar. |
/coding-kit:check-upstreams |
teils | Watchliste externer Vorbild-Repos prüfen (upstreams.json), Neuerungen seit letztem Ref, Übernahme-Vorschläge. |
/coding-kit:go-public |
ja | Projekt nachträglich public machen: blockierendes Preflight-Audit (Secrets in der vollen Historie, Privacy inkl. Commit-Metadaten, Lizenz, private/-Hygiene), Datei-Nachzug vor dem Umstellen (update-conventions mit Sichtbarkeits-Prämisse), dann Sichtbarkeitswechsel bzw. Repo-Anlage + Push nur nach laufbezogener Freigabe; Abschluss-Check (CodeQL, Settings). |
/coding-kit:refine-prompt |
– | Übergebenen Prompt analysieren, Schwachstellen benennen, nach Best Practices neu formulieren und ausführen. |
/coding-kit:handoff |
– | Am Kontextlimit: kopierfertigen Handoff-Prompt für einen frischen Chat schreiben — übergibt nur, was aus der Session noch nicht dokumentiert ist, verweist sonst auf die Quelldateien; baut und ändert nichts. |
propose-to-template (Hintergrund) |
– | Kein Slash-Command — Claude startet ihn bei einem Fund: ein Tool ohne Vorlage, ein projektlokales Fragment, eine Abweichung an einer managed Datei, die allen Projekten nützt, oder eine globale Regel für die Kit-Datei. Erzeugt den Übernahme-Vorschlag fürs Template, generalisiert und personendatenfrei, kopierfertig als Issue (Standard, gh-Befehl als Text) oder als Prompt für eine Session im Kit-Repo; sendet nichts ab. |
Was bei teils konkret entfällt — der Rest des Skills läuft lokal weiter:
new-project: mit Hostgitdie Repo-Anlage auf GitHub (Schritt 4a — stattdessengit init), die Repo-Settings samt Topics (4c) und der Push. Instanziierung, Verifikation und Erst-Commit sind lokal; siehe Ohne GitHub. Mit Hostazurelegst du das Repo im Web an, Repo-Settings und Topics entfallen; siehe Auf Azure DevOps.update-conventions: die projektübergreifende Discovery (alle) über das Marker-Topic (gh search repos) und der Abgleich der Sichtbarkeit; lokale Projekte findet sie weiter über.claude/template-versionunter$CODING_KIT_PROJECTS_DIR.name-it: der Verfügbarkeitscheck auf dem Host (nur GitHub prüft er); npm, PyPI und Domain bleiben.check-upstreams: der Vergleich der Commits übergh api; den aktuellen Ref holt er übergit ls-remote, neue Releases per Websuche.
step-done braucht GitHub nicht: Die Commit-Adresse kommt aus der Personal-Config
(CODING_KIT_EMAIL_GIT bzw. CODING_KIT_EMAIL_AZURE), fehlt sie, fragt der Skill. Der
ja-Skill go-public dreht die Sichtbarkeit eines Repos auf GitHub; bei git und
azure (keine öffentlichen Projekte) verweist er auf den Host-Wechsel und bietet den
Preflight als reine Prüfung an.
Der übliche Zyklus: add-feature → prep-step → build-step → step-done (je Substep).
step-done rufst du bewusst selbst auf, wenn du den Substep geprüft hast — build-step
empfiehlt es nur. Jede Aufgabe ist eine Datei features/F-NNN-kurzname.md, die mitwächst
(Erfassung, Spezifikation, Plan, Verlauf); features/INDEX.md zeigt die empfohlene Reihenfolge
(Nummern verlinkt) und erzeugte Tabellen aller Features — offene oben, erledigte darunter.
Das Feld status im Kopfblock zeigt die Station: BACKLOG = nur aufgenommen (→
prep-step), PLANNED = geplant (→ build-step), IN-PROGRESS = erster Substep verbucht,
DONE = fertig; dazu DROPPED und SUPERSEDED für Verworfenes und Aufgegangenes. Für
die Implementierungsphase gibt es drei Wege: build-step baut diszipliniert, teach-step
leitet dich durch die eigene Umsetzung, oder du implementierst frei und schließt mit
step-done ab.
Freigabe für Feature-Dateien: Kein Skill schreibt ungefragt eine Feature-Datei,
features/INDEX.md oder die Ziel-Abschnitte der Projekt-CLAUDE.md — du siehst den Text
vorher und gibst ihn frei; lange Entwürfe liegen dafür in private/. step-done
bündelt das mit der Commit-Frage. Gepusht wird nie von einem Skill, nur auf deine Bitte.
Alle Skills sind stack-agnostisch: Sie rufen nur die just-Standardrezepte
(just check / test / lint) auf und lesen Projektspezifika (Graphiti-group_id,
Sprache der lebenden Doku, Sicherheits-Postur) aus der Projekt-CLAUDE.md — nichts ist
hartkodiert.
Graphiti ist optional; das Kit läuft ohne vollständig. Wissen, das ein Projekt braucht und das keinen Ort im Repo hat (Stolperfallen, Eigenheiten von Werkzeugen), liegt je nach Projekt an einer von zwei Stellen:
- Mit Graphiti-Block in der Projekt-CLAUDE.md: im Graph, den mehrere Rechner erreichen. Ist er gerade nicht erreichbar, melden die Skills, was sie nicht schreiben konnten, samt Text zum Nachtragen.
- Ohne Block: in
docs/notes.md. Das Template legt die Datei an, die CLAUDE.md lädt sie in jeder Session, und sie reist mit git.
Die Wahl trifft das Projekt (/coding-kit:new-project fragt danach), nicht der Rechner.
Die Auto-Memory von Claude Code ist in Projekten abgeschaltet (.claude/settings.json),
weil sie nur auf einem Rechner liegt. Graphiti nachrüsten:
/coding-kit:update-conventions mit graphiti in OPTIONAL und einer GROUP_ID in
.claude/template-answers.
/coding-kit:update-conventions holt, was das Kit inzwischen anders macht — in Projekte
und auf den Rechner, immer nur abwärts und nie ohne deine Bestätigung je Datei bzw.
Abschnitt:
| Aufruf | Wann | Was passiert |
|---|---|---|
/coding-kit:update-conventions |
im Projekt, nach einem Plugin-Update | Projekt abgleichen (managed Dateien, Fragmente, seed-Zonen, Lock-Datei), die Auto-Memory des Projekts auf diesem Rechner in Graph oder docs/notes.md übertragen; danach einmal die globalen Kit-Regeln, sofern eingerichtet |
… <pfad> oder … <name> |
ein anderes Projekt | wie oben, für dieses Projekt |
… alle |
alle Projekte auf einmal | Liste bestätigen, dann je Projekt; danach einmal die globalen Kit-Regeln |
… global |
Ersteinrichtung der Kit-Regeln, nach einer Änderung der Werte, nach dem Hinweis beim Session-Start | nur die globalen Kit-Regeln und die zwei empfohlenen Settings, auch außerhalb eines Projekts |
… status |
vorher sehen, was käme | nur Bericht, schreibt nichts (auch nicht global) |
… revise |
die Abweichungs-Registry aufräumen | nur die Registry-Revision, ohne globale Regeln |
… host |
das Projekt auf einen anderen Git-Host bringen — zwischen GitHub, Azure DevOps und „nur Git" | Repo privat anlegen (auf Azure im Web, der Skill prüft die Adresse), alten origin unter dem Namen des alten Hosts behalten, neuen setzen, HOST umstellen; dann der Abgleich, der die Dateien des neuen Hosts anbietet und die des alten zum Entfernen. Push nur auf deine Bitte; Issues, Secrets und das alte Repo bleiben Handarbeit |
global <ordner> nimmt einen anderen Ordner als ~/.claude — gedacht für Tests, das
echte ~/.claude bleibt dabei unberührt.
Ein Bestandsprojekt ohne Eintrag HOST bekommt beim ersten Abgleich seinen Host: Liegt es
auf GitHub oder Azure DevOps, trägt der Skill HOST=github bzw. HOST=azure ohne Frage
ein; sonst fragt er, ob es bei Git bleibt oder auf einen Host umzieht. … global bietet an, eine Commit-Adresse unter dem
alten Schlüssel CODING_KIT_GIT_NOREPLY_EMAIL nach CODING_KIT_EMAIL_GITHUB umzubenennen.
Das Plugin bringt einen projekterkennenden Stop-Hook mit: Endet ein Claude-Turn,
während im Projekt uncommittete Änderungen liegen, erinnert er einmal pro Stopp an
/coding-kit:step-done.
- Feuert nur in Kit-Projekten: erkannt an einer Datei
.claude/template-version, anfeatures/INDEX.mdoder — bis zur Migration — an einerPROGRESS.mdmitFEATURE-INDEX-Block. In allen anderen Repos ist der Hook vollständig still. - Loop-Schutz: pro Stopp maximal eine Erinnerung (
stop_hook_active). - Als „uncommitted" zählen geänderte und neue (nicht ignorierte) Dateien;
private/und anderes Gitignoriertes lösen nichts aus. - Abschalten: Plugin deaktivieren (
claude plugin disable coding-kit) oder committen. 😉
Ein zweiter Hook läuft beim Start einer Session und meldet sich in einer Zeile, wenn die globalen Kit-Regeln einen Abgleich brauchen — Claude sagt es dir dann einmal:
~/.claude/CLAUDE.mdist noch eine Kopie der früheren Kit-Vorlage;- die Kit-Regeln oder deine Werte haben sich seit dem letzten Abgleich geändert (etwa nach einem Plugin-Update oder einer Änderung der Personal-Config);
- die Personal-Config lässt sich nicht lesen.
Er liest nur, schreibt nichts und schweigt, wenn du die globalen Regeln nicht eingerichtet
hast oder eine eigene Datei unter ~/.claude/rules/coding-kit.md liegt. Abgelehnte
Änderungen meldet er nicht erneut, erst die nächste Änderung des Kits oder der Werte.
default.json im Repo-Root ist ein Shareable Preset; Projekte binden es so an:
{ "extends": ["github>xnyzer/coding-kit"] }Inhalt: config:recommended + Digest-Pinning für GitHub Actions + Label dependencies +
die mise-Version der Azure-Pipeline.
Details und die (bewusst manuelle) App-Installation: docs/renovate-preset.md.
Die Haus-Regeln des Kits für jede Claude-Session: Antwortsprache, Erklär-Niveau, Git- und
Commit-Regeln, Graphiti, Arbeitsweise. Sie kommen mit dem Plugin
(plugins/coding-kit/global/coding-kit.md) und liegen auf dem Rechner als
~/.claude/rules/coding-kit.md — Claude Code lädt jede Datei in ~/.claude/rules/ in
jeder Session, wie die CLAUDE.md. Eingerichtet und abgeglichen werden sie mit
/coding-kit:update-conventions global.
Was das Kit mit deinen globalen Claude-Einstellungen macht
- Es legt eine eigene Datei an:
~/.claude/rules/coding-kit.md, nur nach deiner Bestätigung. Sie gehört dem Kit; nach Plugin-Updates bietetupdate-conventionsdie Änderungen abschnittsweise an, wieder mit Diff und Bestätigung.- Deine
~/.claude/CLAUDE.mdschreibt das Kit nie. Einzige Ausnahme: Sie ist eine Kopie der früheren Kit-Vorlage (Titel „Globale House-Defaults — Claude Code", darunter „Gepflegt als Vorlage im coding-kit …"). Dann bietetupdate-conventions globalan, den Kit-Teil herauszunehmen; persönliche Zeilen bleiben, und du siehst den Diff vorher. Bleibt nichts Persönliches übrig, schlägt es vor, die Datei zu löschen.- Widersprüche: Claude Code lädt CLAUDE.md und Kit-Regeln zusammen, ohne Vorrang. Widersprechen sie sich, folgt Claude einer beliebigen Seite. Der Abgleich weist darauf hin; auflösen kannst du es wie unter Eigene Abweichungen beschrieben.
- Eine fremde Datei unter
~/.claude/rules/coding-kit.md— ohne die Kennung des Kits in der ersten Zeile — fasst das Kit nicht an.- Zwei Werte in
~/.claude/settings.jsonbietetupdate-conventions globalan, jeden einzeln mit Grund und mit Diff vor dem Schreiben; alle anderen Einträge bleiben unverändert. Abgelehnt wird nichts geschrieben, der nächste Lauf fragt wieder.
"autoMemoryEnabled": falseschaltet die Auto-Memory von Claude Code für alle Projekte ab. Sie liegt nur auf einem Rechner; Projektwissen gehört in den Graph oder ins Repo (docs/notes.md). In Projekten aus dem Kit ist sie über deren.claude/settings.jsonohnehin aus, auch wenn du hier ablehnst. Notizen anderer Projekte bleiben liegen, werden aber nicht mehr geladen."cleanupPeriodDays": 365lässt Claude Code die lokalen Transkripte ein Jahr statt 30 Tage aufheben. Sie sind der Rückweg für Graphiti-Episoden, die der Server verliert, und helfen, den Auto-Memory-Ordner eines Projekts zu finden. Dafür brauchen sie mehr Platz auf der Platte.- Mit
CLAUDE_CONFIG_DIRgilt statt~/.claudedieser Ordner.
Drei Werte in der Personal-Config bestimmen, wie Claude mit dir spricht:
CODING_KIT_REPLY_LANGUAGE="" # Sprache der Antworten, z. B. Deutsch, English; leer = Claude-Standard
CODING_KIT_EXPLAIN_LEVEL="" # einsteiger | junior | fortgeschritten | senior; leer = Claude-Standard
CODING_KIT_EXPLAIN_NOTE="" # freier Text, präzisiert die Stufe; leer = keine Notiz| Stufe | Wie Claude antwortet |
|---|---|
einsteiger |
wenig oder keine Programmiererfahrung: einfache Sprache, jeder Fachbegriff erklärt, eine Frage auf einmal, bei größeren Änderungen der Hinweis, was sich zu lesen lohnt |
junior |
Grundlagen sitzen, Frameworks und Werkzeuge sind neu: Zusammenhänge und das Warum erklärt, übliche Wege genannt und einer empfohlen |
fortgeschritten |
selbstständig: nur Neues, Ungewöhnliches und Abwägungen erklärt |
senior |
knapp und in Fachsprache, Trade-offs und Risiken, Details auf Nachfrage |
Die Notiz ergänzt die Stufe um das, was keine Stufe ausdrückt (z. B. „Python sicher, Git und Frameworks neu"); bei einem Widerspruch gilt die Notiz. Das Niveau betrifft nur Claudes Antworten, Rückfragen, Pläne und Zusammenfassungen — nie den Code, die Commits oder die Doku im Projekt; dafür gelten die Coding-Regeln.
- Setzen:
/coding-kit:explain-level— ein kurzes Interview zu Programmieren, Shell, Git, Frameworks und Projekt-Werkzeugen, danach ein Vorschlag für Stufe und Notiz.update-conventions globalstartet es selbst, wenn Werte fehlen. Einen Wert, den du bewusst leer lässt, fragt kein Lauf erneut ab. - Ändern:
/coding-kit:explain-levelerneut aufrufen oder die Zeile in der env-Datei ändern — danach/coding-kit:update-conventions global. Nur die env-Datei zu ändern reicht nicht: Die Regeln auf dem Rechner entstehen erst beim Abgleich neu; der Session-Hinweis erinnert daran.
| Wunsch | Weg |
|---|---|
| Antwortsprache, Erklär-Niveau | die Werte oben — nicht die Regeldatei ändern |
| Eine Kit-Regel anders | den Abschnitt in ~/.claude/rules/coding-kit.md ändern und darin eine eigene Zeile <!-- override: Grund --> ergänzen; der Abgleich lässt ihn dann stehen |
| Eine Kit-Regel gar nicht | die beiden section:-Markerzeilen des Abschnitts löschen; der Abgleich bietet ihn nie wieder an |
| Eigene Zusatzregeln | in ~/.claude/CLAUDE.md, die das Kit nie anfasst |
| In einem Projekt anders | in der Projekt-CLAUDE.md, wo die Kit-Regel das vorsieht (z. B. der Languages-Block) |
Nicht das Gegenteil einer Kit-Regel in die CLAUDE.md schreiben — Claude folgt dann beliebig einer Seite. Eine allgemein nützliche Regel aus deiner CLAUDE.md bietet der Abgleich als Vorschlag fürs Kit an.
~/.claude/coding-kit.env (dotenv, shell-sourcebar, nie committen; mit
CLAUDE_CONFIG_DIR in diesem Ordner) — legt der Installer an. Enthält, was nicht zur
Laufzeit ermittelbar ist, plus Offline-Fallbacks:
| Schlüssel | Bedeutung |
|---|---|
CODING_KIT_GITHUB_LOGIN |
GitHub-Login (Fallback; primär via gh api user) |
CODING_KIT_GIT_AUTHOR_NAME |
Git-Autorname |
CODING_KIT_DEFAULT_HOST |
Git-Host, den /new-project vorschlägt: github, azure oder git; leer = github |
CODING_KIT_EMAIL_GITHUB |
Commit-Adresse für GitHub-Projekte (Noreply); der frühere Schlüssel CODING_KIT_GIT_NOREPLY_EMAIL gilt bis zur Umbenennung weiter |
CODING_KIT_EMAIL_AZURE |
Commit-Adresse für Azure-DevOps-Projekte (meist die Firmenadresse) |
CODING_KIT_EMAIL_GIT |
Commit-Adresse für Projekte ohne Host |
CODING_KIT_PROJECTS_DIR |
Wurzelverzeichnis der Projekte |
CODING_KIT_REPLY_LANGUAGE |
Antwortsprache der globalen Kit-Regeln |
CODING_KIT_EXPLAIN_LEVEL |
Erklär-Niveau: einsteiger, junior, fortgeschritten oder senior |
CODING_KIT_EXPLAIN_NOTE |
Notiz, die die Stufe präzisiert |
Die letzten drei setzt /coding-kit:explain-level; wirksam werden sie mit
/coding-kit:update-conventions global.
.claude-plugin/marketplace.json Marketplace „xnyzer" (Quelle: dieses Repo)
plugins/coding-kit/ Das Plugin
.claude-plugin/plugin.json Name, Version (gilt für Skills und Template), Beschreibung
CHANGELOG.md Ein CHANGELOG ab 1.0.0, darunter die eingefrorenen Reihen
skills/<name>/SKILL.md Die Skills (ein Ordner je Skill)
agents/<name>.md Prüf-Agenten mit frischem Kontext, nur lesend (Reviewer für step-done)
hooks/hooks.json + *.sh Projekterkennender Stop-Hook und Session-Hinweis
global/coding-kit.md Globale Kit-Regeln (→ ~/.claude/rules/coding-kit.md, deutsch)
scripts/template-sync.sh Rendern, Drei-Wege-Merge, Snapshot und Erkennung (von Skills aufgerufen)
template/ Projekt-Template (englisch): MANIFEST.md, core/, modules/
default.json Renovate-Shareable-Preset (Root = Preset-Konvention)
upstreams.json Watchliste für /check-upstreams (persistierte Refs)
docs/ Pflege-Doku (Skill-Authoring, Renovate-Preset, Verlauf der TPL-Reihe)
install.sh Neuer-Rechner-Bootstrap (idempotent)
scripts/validate.py Validator für Kit, Template und Vertrag (`just check` + CI)
scripts/version-rule.py Versionsregel (Pre-Commit + CI, `just version-rule`)
tests/template-sync/ Tests des Skripts und des Session-Hinweises unter dash und bash, dazu mawk/gawk (`just test`)
features/ Aufgaben (F-NNN): je Feature eine Datei, INDEX.md als Übersicht
private/ Gitignoriert — private Notizen/Quellen
- Regeln für neue/geänderte Skills: docs/skill-authoring.md.
- Installierte Version aktualisieren:
claude plugin marketplace update xnyzer, dannclaude plugin update coding-kit@xnyzer(voll qualifiziert — der kurze Name wird nicht gefunden); Session-Neustart wendet die Änderung an. - Jede inhaltliche Änderung an Skills, Hooks, Skripten oder Template braucht eine Version
über dem gepushten Stand in
plugin.jsonund einen Eintrag inplugins/coding-kit/CHANGELOG.md(Template-Änderungen im Abschnitt### Template, den/update-conventionsProjekten zeigt);just version-ruleprüft das vor jedem Commit und in der CI. - Skills und Template testen:
claude --plugin-dir plugins/coding-kit— eine normale Session im Repo läuft mit dem installierten Plugin, nicht mit dem Arbeitsstand. just setupinstalliert die Git-Hooks (gitleaks, Validator, Versionsregel; die Skript-Tests, wenn Skript, Template oder Tests sich ändern),just checkist das Vollgate — muss vor jedem Commit grün sein.- Für Arbeit an
template-sync.shmawk installieren (brew install mawk), optional gawk: Die Skript-Tests laufen dann zusätzlich mit ihnen. mawk ist das Standard-awk auf Debian und Ubuntu, gawk auf Fedora und Arch, und das macOS-awk nimmt mehr hin als beide. Beide bleiben optionale lokale Werkzeuge (GPL), nicht Teil der Toolchain. - Aufgaben laufen als F-Nummern in
features/— das Kit nutzt seine eigenen Skills (Dogfooding).just features-indexerzeugt die Tabelle infeatures/INDEX.md; das Skript kommt aus dem Template (plugins/coding-kit/template/core/scripts/).
Apache-2.0 — siehe LICENSE.