20 Punkte von GN⁺ 2025-07-02 | 4 Kommentare | Auf WhatsApp teilen
  • In Claude Code wurde die Funktion für benutzerdefinierte Hooks eingeführt. Damit lässt sich das Verhalten der App präziser und wiederholbar steuern, ohne von den Entscheidungen des LLM abhängig zu sein
  • Verschiedene Automatisierungen sind möglich, etwa die Anpassung von Benachrichtigungen, automatisches Code-Formatting und Nachverfolgung von Befehlslogs
  • Sie können vor/nach der Ausführung von Befehlen, beim Auslösen von Benachrichtigungen und beim Abschluss einer Antwort ausgeführt werden und sich über Konfigurationsdateien auf Projekt-, Benutzer- und Enterprise-Ebene verwalten lassen
  • Über die Struktur der Konfigurationsdatei und Matcher lässt sich festlegen, dass nur bestimmte Hooks beim Aufruf bestimmter Tools ausgeführt werden
  • Eingaben werden im JSON-Format übergeben, Ausgaben steuern per Exit-Code oder JSON Ergebnis und Feedback
  • Hooks führen Shell-Befehle automatisch mit den vollständigen Rechten des Benutzers aus; daher ist bei Sicherheit und Schutz Vorsicht geboten

Einführung

  • Hooks in Claude Code sind benutzerdefinierte Shell-Befehle, die in jeder Phase des Code-Ausführungslebenszyklus automatisch ausgeführt werden
  • Dadurch wird konsistente Automatisierung bei jedem Durchlauf möglich, statt von optionalen Ausführungen durch das LLM abzuhängen
  • Wichtige Anwendungsbeispiele

    • Benachrichtigungen: Benutzerdefinierte Hinweise für den Nutzer bereitstellen, wenn auf Eingaben gewartet wird
    • Automatisches Formatting: Nach dem Bearbeiten von Dateien prettier oder gofmt automatisch ausführen
    • Logging: Ausgeführte Befehle aufzeichnen und aggregieren, um sie für Nachverfolgung oder Debugging zu nutzen
    • Feedback: Automatisch Rückmeldungen geben, wenn Code erzeugt wird, der nicht den Regeln der Codebasis entspricht
    • Benutzerdefinierte Berechtigungen: Änderungen an sensiblen Verzeichnissen oder Produktionsdateien blockieren
  • Da Hooks als Systemcode und nicht als Prompt arbeiten, werden sie jedes Mal deterministisch ausgeführt → höhere Zuverlässigkeit der Automatisierung
  • Hooks führen Shell-Befehle direkt mit den vollständigen Benutzerrechten aus; eine Sicherheitsprüfung ist daher erforderlich.

Konfigurationsbeispiel

  • Beispiel: Einen Hook registrieren, damit Claude jedes Mal vor dem Ausführen eines Bash-Befehls ein Log schreibt
    1. Mit dem Befehl /hooks das Hook-Konfigurationsmenü öffnen und das Ereignis PreToolUse auswählen
    2. Den Matcher Bash hinzufügen (gilt nur für Bash-Befehle)
    3. Den Hook-Befehl eintragen und speichern (bei Auswahl von User settings gilt er für alle Projekte)
    4. Die Konfiguration mit /hooks prüfen oder die Datei ~/.claude/settings.json direkt kontrollieren

Konfigurationsstruktur

  • Hooks werden nach Matchern gruppiert; pro Matcher kann ein Array mit mehreren Hooks hinterlegt werden
    • Beispiele: einzelner String (exakte Übereinstimmung), regulärer Ausdruck, leer gelassen = gilt für alle Ereignisse
  • Arten von Konfigurationsdateien
    • ~/.claude/settings.json: globale Benutzereinstellungen
    • .claude/settings.json: Projekteinstellungen
    • .claude/settings.local.json: lokale (nicht geteilte) Einstellungen
    • Enterprise-Richtlinieneinstellungen

Wichtige Hook-Ereignisse

  • PreToolUse: Wird vor dem Tool-Aufruf ausgeführt; kann die Ausführung bei Bedarf blockieren (wichtige Matcher: Bash, Write, Edit, Grep usw.)
  • PostToolUse: Direkt nach der Tool-Ausführung; unterstützt dieselben Matcher
  • Notification: Wird beim Versenden einer Benachrichtigung ausgeführt
  • Stop: Wird nach Abschluss der Antwort ausgeführt

Matcher-Beispiele

  • Task: Agentenaufgabe
  • Bash: Shell-Befehl
  • Glob: Dateipattern-Matching
  • Grep: Inhaltssuche
  • Read: Datei lesen
  • Edit, MultiEdit: Datei bearbeiten
  • Write: Datei schreiben
  • WebFetch, WebSearch: Web-Aufgaben

Ein- und Ausgabeformate

  • Eingabe: JSON wird über stdin übergeben (einschließlich Sitzungsinformationen und ereignisspezifischer Daten)
    • Beispiel: PreToolUse enthält tool_input, PostToolUse zusätzlich tool_response
  • Ausgabe:
    • Exit-Code 0: normale Ausführung, stdout wird dem Nutzer angezeigt
    • Exit-Code 2: Blockierung, stderr wird als Feedback an Claude übergeben (bei PreToolUse wird die Tool-Ausführung blockiert)
    • Andere Codes: Fehler, nur stderr wird dem Nutzer angezeigt
    • Erweiterte Steuerung: Wenn JSON über stdout zurückgegeben wird, lassen sich mit "continue": false oder "decision": "block" feingranulare Abläufe steuern

Integration mit MCP-Tools

  • Auch Tools auf Basis des Model Context Protocol (MCP) werden unterstützt und lassen sich über ein spezielles Benennungsschema (mcp____) gezielt ansprechen

Sicherheitsempfehlungen

  • Da Hooks das Risiko der Ausführung beliebiger Systembefehle mit sich bringen, sind Sicherheitsregeln wie Eingabevalidierung, Pfadprüfung, Ausschluss sensibler Dateien und die Verwendung absoluter Pfade zwingend erforderlich
  • Änderungen an der Konfiguration werden nicht sofort übernommen; es wird ein Snapshot beim Start der Sitzung verwendet, und bei externen Änderungen wird eine Warnung angezeigt

Laufzeitumgebung und Debugging

  • Jeder Hook läuft mit einem Limit von maximal 60 Sekunden, parallel sowie im aktuellen Arbeitsverzeichnis und in der aktuellen Umgebung
  • Debugging ist über /hooks möglich, etwa durch Prüfen der Konfiguration, direktes Testen von Befehlen sowie Kontrolle von Exit-Code und Ausgabe
  • Ablauf und Ergebnisse lassen sich im Transcript-Modus (Ctrl-R) nachvollziehen

4 Kommentare

 
shakespeare 2025-07-02

Bitte macht auch eine Windows-Version, bitte ;_;

 
nalbam 2025-07-06

Verwenden Sie WSL.

 
slowmo 2025-07-08

Vielleicht liegt es an der eher schwachen Leistung meines PCs, aber unter Windows WSL sind manche Aufgaben mit Claude Code (z. B. Projekt-Builds, das Starten eines lokalen Webservers usw.) viel zu langsam.
Es gibt zwar Möglichkeiten, nur diese Aufgaben manuell außerhalb von WSL auszuführen, aber das ist umständlich und bringt Einschränkungen mit sich. Seit Gemini CLI erschienen ist, nutze ich unter Windows daher überwiegend Gemini CLI statt Claude Code.

 
GN⁺ 2025-07-02
Hacker-News-Kommentare
  • Ich war frustriert darüber, dass Claude Code Opus 4 die Angewohnheit hat, am Ende von Dateien keinen Zeilenumbruch anzufügen.
    Da man Claude neu starten muss, um neue Hooks zu testen, war es viel effizienter, ein Skript zu verwenden, mit dem man innerhalb der Sitzung weiter editieren kann.
    Dieses Skript wendet auf C-Dateien und Shell-Skripte einen Formatter an und korrigiert bei anderen Dateien nur fehlende abschließende Zeilenumbrüche.
    KI wie Claude ist nicht besonders gut darin, Probleme passend zu zerlegen, und versucht Dinge manchmal auf seltsame Weise zu lösen, daher habe ich es mehrfach überarbeitet, etwa indem ich wie im Hook-Beispiel oben die JSON-Datei auf die Festplatte speichern ließ, nur den Pfad herauszog, erneut speicherte und diesen Pfad dann an save-hook.sh übergab.
    In 10 Minuten hatte ich erreicht, was ich wollte, aber ich habe mehr Zeit verschwendet, weil ich zu große Schritte auf einmal verlangt habe.

  • Man hört oft, dass KI Entwickler ersetzen wird, aber wer solche Hooks einrichtet und neue Funktionen vorschlägt, bleibt weiterhin Aufgabe von Menschen.
    Solche Arbeiten rund um Tooling werden weiter existieren, bis KI sich so weit entwickelt, dass sie diese Idee selbstständig hat und sie auf andere KI anwendet.

    • Als Analogie aus der Holzbearbeitung würde ich sagen, wir befinden uns gerade am Übergang von Handwerkzeugen zu Elektrowerkzeugen.
      Wer die Grundlagen versteht, kann die Werkzeuge gut einsetzen, aber statt Dinge sorgfältig von Hand zu fertigen, arbeitet man jetzt schnell mit der Tischkreissäge; das ist effizienter, kann aber auch gefährlicher sein.

    • Das ähnelt der Behauptung, Landmaschinen wie Mähdrescher würden Arbeitsplätze in der Landwirtschaft ersetzen.
      Ist es wirklich plausibel, dass alle Arbeitskräfte einfach zu Maschinenbedienern werden?
      Die Sichtweise ist, dass bei Automatisierungswerkzeugen – ob in der Landwirtschaft oder bei KI – nicht bloß der reine Übergang den Wert ausmacht.

    • Wie in der bekannten Geschichte von der „Welt auf dem Rücken der Schildkröte“ kann man nach dem Aufkommen von KI endlos mit der Frage fortfahren: „Und wer verwaltet dann diese KI?“
      Es gibt bereits Fälle, in denen man Claude Code selbst CLAUDE.md aktualisieren lässt, daher ist es nicht völlig ausgeschlossen, es auch die eigenen Hooks ändern zu lassen.
      Interessant ist aber, dass man wie in Jurassic Park leicht die Frage vergisst, „ob man es überhaupt tun sollte“.

    • Sowohl die Meinung, dass KI Entwicklerjobs reduzieren wird, als auch die Frage, wer dann die Hooks einrichtet, sind richtig.
      Es wird betont, dass technologischer Fortschritt sich nicht einfach auf Zu- oder Abnahme von Jobs reduzieren lässt, sondern gleichzeitig Arbeitsplätze beseitigt und neue schafft.

    • Eigentlich ist so etwas für die meisten Menschen keine Entwicklung, sondern eher Wartung oder DevOps.
      Auch bei SaaS-Produkten gibt es viele Aufgaben, die eher mit Betrieb als mit Code zu tun haben und sich von dem unterscheiden, was HN-Nutzer als eigentliche Entwicklung ansehen.

  • Ich freue mich sehr auf diese Funktion.
    Hooks werden voraussichtlich eine wichtige Rolle beim Context Engineering von Agenten und bei der Verifikation der Laufzeitleistung spielen.
    Das lässt sich auf viele Situationen ausweiten, etwa Enterprise-Compliance oder Verhaltensüberwachung.
    Beeindruckend ist auch, dass Anthropic das direkt aus einem GitHub-Issue-Vorschlag heraus unterstützt hat.
    Zugehöriger Issue-Link

    • Tatsächlich nutze ich statt Claude Code die VS-Code-Erweiterung cline.bot.
      Ich denke, so eine Funktion wird künftig bei allen Coding-Agenten zum Standard-Killerfeature.
  • Mir gefällt diese Funktion, weil man damit direkt komplexe Regeln zur Steuerung der Befehlsausführung schreiben kann, ohne den Umweg über CLAUDE.md.
    Zum Beispiel kann man
    docker compose exec django python manage.py test
    erlauben und
    docker compose exec django python manage.py makemigrations
    blockieren.

    • So etwas lässt sich bereits in .Claude/settings.json umsetzen.
  • Ich denke, es wäre noch besser gewesen, wenn diese Funktion direkt als MCP-Server gearbeitet hätte.
    Man könnte Hooks als MCP-Tools mit vorab vereinbarten Namen bereitstellen, und der Agent könnte die Hooks automatisch entdecken, ohne die interne Implementierung zu kennen; so ließe sich ein MCP-Server wiederverwenden oder auch mit anderen Agenten erneut nutzen.

  • Claude Code vergisst oft die Anweisungen in der Datei CLAUDE.md und die wichtigen Inhalte der Codebasis, sodass man es ständig daran erinnern muss.
    Ich hoffe, dieses Update kann dieses Problem beheben.

    • Zum Beispiel: „Verwende keine frühen Returns in void-Funktionen! In CLAUDE.md steht doch, dass dieses Muster verboten ist!“
      Claude liest CLAUDE.md und sagt: „22 Sekunden, 2.6k Tokens…“
      „Du hast recht!“
  • Ich teile ein paar Beispiel-Hooks.
    Beispielartikel zum Schreiben von Hooks und zur Workflow-Automatisierung
    Es freut mich, dass Claude Code nun beim Modifizieren von Code auf einem Niveau mit Cursor angekommen ist, was Linting- und Type-Check-Unterstützung danach angeht.

  • Ich wünschte, Cursor hätte auch so eine Funktion.
    Im Moment löse ich das notdürftig, indem ich mehrere Regeln kombiniere.

    • Da ich Cursor nicht nutze, frage ich mich immer noch, ob es überhaupt noch einen Grund gibt, das zu verwenden.
  • Ich denke, diese Funktion schließt eine große Funktionslücke, die bisher bestand.
    Weil normale Git-Hooks wegen der Art, wie Claude Code Commits erzeugt, meist nicht funktionieren, habe ich als Workaround über CLAUDE.md angewiesen, die Code-Formatierung mit Qlty CLI zu automatisieren; Claude hat das aber nicht konsistent gut ausgeführt, was enttäuschend war.
    Mit dieser Änderung lassen sich verlässlichere Ergebnisse erzielen.
    Derzeit sind die hookbaren Events zwar begrenzt, aber ich hoffe, dass sich künftig auch Git-Commit- und Push-Events leicht hooken lassen.
    Qlty-CLI-GitHub-Link

    • Übrigens ist Claude sehr gut im Umgang mit Java.
      Es erfasst meinen Styleguide und sogar meine Einrückungsvorlieben so genau, dass Reformatierung bei Java-Code praktisch nicht nötig ist.
      Sogar JavaDoc passt es präzise an, was mich überrascht hat.
      Vermutlich hat es eine enorme Menge großer Enterprise-Java-Codebasen gelernt.

    • Ich frage mich, warum normale Git-Hooks in Claude Code nicht richtig funktionieren.

    • Husky und lint-staged funktionierten normal, aber Pre-Commit-Hooks nicht.

  • Nach meinem knappen Verständnis verbraucht diese Funktion keinen Context und ist auch nicht wie MCP so aufgebaut, dass Claude entscheidet, wann sie ausgeführt wird, sondern es ist eine vom Nutzer direkt festgelegte automatische Aktion für jede Tool-Nutzung.