settings.json ist keine Einstellungsdatei. Hier wird das Verhalten deines Agenten konfiguriert. Themes und Modellauswahl liegen auch dort, aber das ist der langweilige Teil. Wirklich wichtig ist der eine Block, der ändert, was der Agent tut, nicht wie er aussieht. Das hier ist die Kurzfassung der Datei, auf die es ankommt.
Wo die Datei Claude Code settings.json liegt
An drei Orten, und die Rangfolge ist der ganze Punkt. .claude/settings.local.json in deinem Projekt (gitignored, nur für dich auf diesem Rechner) gewinnt zuerst. Danach kommt die im Repo committete .claude/settings.json, die sich das Team teilt. Zuletzt ~/.claude/settings.json, dein globaler Standard überall. Die spezifischere Datei überschreibt die allgemeineren, Key für Key.
~/.claude/settings.json · deine projektübergreifenden Standards, lokal bei dir.claude/settings.json · committet, damit alle dasselbe Verhalten bekommen.claude/settings.local.json · gitignored, maschinenspezifische Pfade und OverridesDiese Aufteilung folgt derselben Disziplin wie bei einer CLAUDE.md-Datei. Persönliches bleibt lokal, Gemeinsames wird committet, und die maschinenspezifischen Teile landen nie in Git. Wenn die Rangfolge stimmt, kämpfst du nicht mehr gegen deine eigene Konfiguration.

Der einzige Block, der das Verhalten ändert, ist hooks
Jeder andere Key in settings.json regelt Optik oder Zugriff: Theme, Modell, Berechtigungen, Statuszeile. Der hooks-Block ist anders. Er verknüpft ein Lifecycle-Event mit einem Shell-Befehl, den Claude Code in genau diesem Moment automatisch ausführt. Das ist der einzige Teil der Datei, der den Agenten zum Handeln bringt, also der einzige Teil, der ein genaues Studium verdient. Wie das im Detail funktioniert, steht unter wie Hooks funktionieren.
modelWelches Modell antwortet. Eine Vorliebe, mehr nicht.themeDie Farben in deinem Terminal.statusLineDie Zeile unter deinem Prompt. Sie führt zwar einen Befehl aus, aber nur, um Text zu zeichnen.permissionsWelche Tools laufen dürfen, ohne dich vorher zu fragen. Regelt den Zugriff, fügt kein Verhalten hinzu.hooksVerknüpft ein Lifecycle-Event mit einem Shell-Befehl, den Claude Code für dich ausführt. Der einzige Key in der Datei, der dich warnen, einen Build anhalten oder mitten im Lauf Kontext zurückgeben kann.statusLine, das zeichnet, und hooks, das handelt.Ein Hook-Eintrag hat genau eine Form. Unser Installer schreibt ihn so, und du solltest das auch tun:
{ "matcher": "Bash",
"hooks": [{ "type": "command", "command": "node safety-guard.mjs" }] }Der matcher entscheidet, welche Tool-Aufrufe den Hook auslösen. Lässt du ihn weg, feuert das Event bedingungslos. Der command ist einfach ein Shell-String, ein Hook kann also jedes Skript in jeder Sprache sein. Mehr Vertrag gibt es nicht.
Was kitstarter in die settings.json einbaut, Event für Event
Der Installer von kitstarter generiert den gesamten hooks-Block für dich, einen Eintrag pro Lifecycle-Event. Hier ist die echte Event-zu-Skript-Tabelle, die er schreibt, direkt aus dem Wiring-Code. Nichts erfunden, genau das wird ausgeliefert.
session-start.mjs, tutor.mjs · Status und Tutor zu Beginn einer Session ladenclarity.mjs, tutor.mjs · eine vage Anfrage abfangen, bevor der Agent damit loslegtsafety-guard.mjs · vor einem destruktiven Shell-Befehl warnenclarity.mjs · vor einem Build pausieren, nach dem der Agent nie gefragt hatslop-check.mjs · die gerade geschriebene Datei nach AI-Slop-Anzeichen scannensubagent-rules.mjs · dieselben Regeln an gestartete Subagenten weitergebentutor.mjs · den Tutor über eine Kontext-Komprimierung hinweg am Leben haltenstop-reminder.mjs / recap.mjs · den Abschluss kontrollieren, dann zusammenfassen, was passiert istBash für die Sicherheit, die vier Edit-Tools für die Klarheit, Edit|Write für den Slop-Check.Lies die Matcher genau, denn dort steckt das Design. Safety-guard hört nur auf Bash und bremst deshalb nie eine Bearbeitung aus. Clarity hört auf alle vier Edit-Tools plus das Absenden des Prompts, denn ein Build kann von jedem davon ausgehen. Slop-check hört auf Edit|Write, denn genau dann ändert sich eine Datei auf der Festplatte.
Was ein verdrahteter Hook tatsächlich tut
Jedes Skript ist klein und arbeitet nach dem Prinzip „fail open“: Bei einem Fehler verstummt es, statt deine Arbeit zu blockieren. safety-guard.mjs liest den anstehenden Bash-Befehl und gleicht ihn mit einer Liste destruktiver Muster ab: rekursives Löschen eines Root- oder Home-Pfads, Force-Push, Hard-Reset, das Droppen einer Tabelle. Es warnt, es blockiert nie. Ein Kit, das deine Befehle hart blockiert, wird deinstalliert.
slop-check.mjs feuert nach einer Bearbeitung an einer UI-Datei. Es lässt den Slop-Detektor über genau diese eine Datei laufen und reicht gefundene Anzeichen als Kontext weiter, den der Agent beheben muss, bevor er weitermacht. Beide Hooks werden von nichts weiter ausgelöst als von einem Eintrag im hooks-Block. Das ist die Hebelwirkung, die dir diese Datei gibt.
Hilft es wirklich, die settings.json so zu verdrahten?
Ja, bei den Dingen, auf die es ankommt, und wir haben ehrlich gemessen. In unserem Cleanroom-Benchmark gegen das nackte Claude Code fragte das Kit bei 5 von 5 Aufgaben nach, bevor es baute, gegenüber 2 von 5 ohne Kit. Es lieferte rund 40% weniger Code für dasselbe Ergebnis und drückte die Slop-Anzeichen bei einer Debugging-Spirale von 5 auf 0, wo ohne Kit fünf stehen blieben.
Die Verluste sind real und wir verstecken sie nicht, das ist Hausregel. Bei einer ohnehin einfachen Todo-App war das Kit etwa doppelt so langsam und rund 75% teurer bei fast identischem Ergebnis, und über die ganze Suite hinweg kostet der Hook-Kontext im Schnitt etwa 25% mehr, bezahlt aus deinem bestehenden Abo. Hooks sind nicht gratis. Bei vagen Prompts zahlen sie sich durch vermiedene Nacharbeit aus, bei ohnehin klaren sind sie Overhead.
Schreib deine eigenen, oder starte mit welchen, die funktionieren
Der Mechanismus ist simpel: Event wählen, Skript schreiben, einen Eintrag hinzufügen. Schwierig ist das Urteil: auf welche Matcher du hörst, wann du warnst statt zu blockieren, wie du „fail open“ sicherstellst, damit ein Hook nie eine Session aufhängt. Genau das ist kitstarter: eine abgestimmte settings.json und die Skripte dahinter, für dich generiert und sofort einsatzbereit. Bau dir mit der Tabelle oben deine eigenen, oder installiere welche, die ihre Kosten schon einspielen.
Eine settings.json, die schon funktioniert
kitstarter generiert den hooks-Block und liefert die Skripte dahinter gleich mit, abgestimmt darauf, dass dein Agent erst fragt und schlank bleibt, für Claude Code, Codex und Antigravity.
