Skip to main content
Cascade Hooks ermöglichen es Ihnen, benutzerdefinierte Shell-Befehle an entscheidenden Punkten im Workflow von Cascade auszuführen. Diese leistungsfähige Erweiterungsfunktion erlaubt es, Abläufe zu protokollieren, Leitplanken durchzusetzen, Validierungen durchzuführen oder Integrationen mit externen Systemen herzustellen.
Hooks sind für Power-User und Enterprise-Teams konzipiert, die eine fein abgestimmte Kontrolle über das Verhalten von Cascade benötigen. Sie erfordern grundlegende Kenntnisse in Shell-Scripting.

Was Sie bauen können

Hooks erschließen ein breites Spektrum an Automatisierungs- und Governance-Funktionen:
  • Protokollierung & Analytics: Verfolgen Sie jede gelesene Datei, jede Codeänderung, jeden ausgeführten Befehl, jede Nutzereingabe oder jede Cascade-Antwort für Compliance- und Nutzungsanalysen
  • Sicherheitskontrollen: Verhindern Sie, dass Cascade auf sensible Dateien zugreift, gefährliche Befehle ausführt oder Prompts verarbeitet, die gegen Richtlinien verstoßen
  • Qualitätssicherung: Führen Sie nach Codeänderungen automatisch Linter, Formatter oder Tests aus
  • Benutzerdefinierte Workflows: Integrieren Sie Issue-Tracker, Benachrichtigungssysteme oder Deployment-Pipelines
  • Team-Standardisierung: Setzen Sie Coding-Standards und Best Practices in Ihrer Organisation durch

Funktionsweise von Hooks

Hooks sind Shell-Befehle, die automatisch ausgeführt werden, wenn bestimmte Cascade-Aktionen stattfinden. Jeder Hook:
  1. Erhält Kontext (Details zur ausgeführten Aktion) über JSON über die Standardeingabe
  2. Führt Ihr Skript aus – Python, Bash, Node.js oder jede andere ausführbare Datei
  3. Gibt ein Ergebnis zurück über Rückgabecode und Ausgabeströme
Bei Pre-Hooks (vor einer Aktion ausgeführt) kann Ihr Skript die Aktion blockieren, indem es mit dem Rückgabecode 2 beendet wird. Dadurch eignen sich Pre-Hooks ideal zur Umsetzung von Sicherheitsrichtlinien oder Validierungsprüfungen.

Konfiguration

Hooks werden in JSON-Dateien konfiguriert, die auf drei Ebenen abgelegt werden können. Cascade lädt und zusammenführt Hooks aus allen Standorten und bietet Teams so Flexibilität bei der Verteilung und Verwaltung von Hook-Konfigurationen.

Systemebene

Systemweite Hooks eignen sich ideal für unternehmensweite Richtlinien, die auf gemeinsam genutzten Entwicklungsrechnern durchgesetzt werden. Sie können sie beispielsweise verwenden, um Sicherheitsrichtlinien, Compliance-Vorgaben oder verpflichtende Code-Review-Workflows durchzusetzen. Enterprise-Teams können Hooks außerdem über das Cloud-Dashboard konfigurieren, ohne lokale Dateien verwalten zu müssen.
  • macOS: /Library/Application Support/Windsurf/hooks.json
  • Linux/WSL: /etc/windsurf/hooks.json
  • Windows: C:\ProgramData\Windsurf\hooks.json

Benutzerebene

Benutzerebenen-Hooks sind ideal für persönliche Präferenzen und optionale Workflows.
  • Windsurf-IDE: ~/.codeium/windsurf/hooks.json
  • JetBrains-Plugin: ~/.codeium/hooks.json

Auf Workspace-Ebene

Hooks auf Workspace-Ebene ermöglichen Teams, projektspezifische Richtlinien gemeinsam mit ihrem Code unter Versionskontrolle zu halten. Sie können benutzerdefinierte Validierungsregeln, projektspezifische Integrationen oder teambezogene Workflows umfassen.
  • Speicherort: .windsurf/hooks.json im Workspace-Root
Hooks aus allen drei Speicherorten werden zusammengeführt. Wenn dasselbe Hook-Ereignis an mehreren Speicherorten konfiguriert ist, werden alle Hooks in folgender Reihenfolge ausgeführt: System → Benutzer → Workspace.

Grundstruktur

Hier ein Beispiel für die Grundstruktur der Hooks-Konfiguration:

Konfigurationsoptionen

Jeder Hook akzeptiert die folgenden Parameter:
Zum Parameter working_directory:
  • In Multi-Repo-Workspaces ist die Standardeinstellung das Root-Verzeichnis des Repos, an dem aktuell gearbeitet wird
  • Relative Pfade werden ausgehend vom Standardpfad (Workspace- oder Repo-Root) aufgelöst
  • Absolute Pfade werden unterstützt
  • Die Verwendung von ~ für die Erweiterung des Home-Verzeichnisses wird nicht unterstützt

Hook-Ereignisse

Cascade stellt zwölf Hook-Ereignisse bereit, die die wichtigsten Aktionen im Agent-Workflow abdecken.

Gemeinsame Eingabestruktur

Alle Hooks erhalten ein JSON-Objekt mit den folgenden gemeinsamen Feldern: In den folgenden Beispielen werden die gemeinsamen Felder der Übersichtlichkeit halber weggelassen. Es gibt zwölf Haupttypen von Hook-Ereignissen:

pre_read_code

Wird ausgelöst, bevor Cascade eine Code-Datei liest. Dies kann die Aktion blockieren, wenn der Hook mit Exit-Code 2 endet. Anwendungsfälle: Dateizugriff einschränken, Lesevorgänge protokollieren, Berechtigungen prüfen Eingabe-JSON:
Der file_path kann ein Verzeichnispfad sein, wenn Cascade ein Verzeichnis rekursiv einliest.

post_read_code

Ausgelöst nachdem Cascade eine Code-Datei erfolgreich gelesen hat. Anwendungsfälle: Erfolgreiche Lesevorgänge protokollieren, Dateizugriffsmuster nachverfolgen Eingabe-JSON:
Dieser file_path kann ein Verzeichnispfad sein, wenn Cascade ein Verzeichnis rekursiv einliest.

pre_write_code

Wird ausgelöst, bevor Cascade eine Code-Datei schreibt oder ändert. Die Aktion kann blockiert werden, wenn der Hook mit Code 2 beendet wird. Anwendungsfälle: Änderungen an geschützten Dateien verhindern, Dateien vor Änderungen sichern Eingabe-JSON:

post_write_code

Ausgelöst nachdem Cascade eine Code-Datei schreibt oder ändert. Anwendungsfälle: Linter, Formatter oder Tests ausführen; Codeänderungen protokollieren Input JSON:

pre_run_command

Wird ausgelöst, bevor Cascade einen Terminalbefehl ausführt. Dies kann die Aktion blockieren, wenn der Hook mit dem Code 2 beendet wird. Anwendungsfälle: Gefährliche Befehle blockieren, alle Befehlsausführungen protokollieren, Sicherheitsprüfungen hinzufügen Input JSON:

post_run_command

Wird nachdem Cascade einen Terminalbefehl ausgeführt hat, ausgelöst. Anwendungsfälle: Befehlsausgaben protokollieren, Folgeaktionen auslösen Eingabe-JSON:

pre_mcp_tool_use

Ausgelöst bevor Cascade ein MCP (Model Context Protocol)‑Tool aufruft. Dies kann die Aktion blockieren, wenn der Hook mit Code 2 beendet wird. Anwendungsfälle: MCP‑Nutzung protokollieren, festlegen, welche MCP‑Tools verwendet werden dürfen Eingabe‑JSON:

post_mcp_tool_use

Wird ausgelöst, nachdem Cascade erfolgreich ein MCP-Tool aufgerufen hat. Anwendungsfälle: MCP-Vorgänge protokollieren, API-Nutzung nachverfolgen, MCP-Ergebnisse anzeigen Eingabe-JSON:

pre_user_prompt

Ausgelöst bevor Cascade den Text eines Benutzerprompts verarbeitet. Dies kann die Aktion blockieren, wenn der Hook mit Code 2 beendet wird. Anwendungsfälle: Sämtliche Benutzerprompts zu Prüfzwecken protokollieren, potenziell schädliche oder gegen Richtlinien verstoßende Prompts blockieren Input JSON:
Die Konfigurationsoption show_output gilt für diesen Hook nicht.

post_cascade_response

Wird asynchron ausgelöst, nachdem Cascade eine Antwort auf den Prompt eines Nutzers abgeschlossen hat. Dieser Hook erhält die vollständige Cascade-Antwort seit der letzten Nutzereingabe. Anwendungsfälle: Alle Cascade-Antworten zu Prüfzwecken protokollieren, Antwortmuster analysieren, Antworten zur Compliance-Prüfung an externe Systeme senden Input JSON: Das Feld response enthält den in Markdown formatierten Inhalt der Antwort von Cascade seit der letzten Benutzereingabe. Dies umfasst Planner-Antworten, Tool-Aktionen (Datei-Lese- und -Schreibvorgänge, Commands) und alle anderen Schritte, die Cascade ausgeführt hat. Es enthält außerdem Informationen darüber, welche rules ausgelöst wurden. Siehe das Beispiel Tracking Triggered Rules, um zu erfahren, wie Sie die Nutzung von Regeln auswerten können. Die Konfigurationsoption show_output gilt nicht für diesen Hook.
Der Inhalt von response wird aus Verlaufsdaten (Trajectory-Daten) abgeleitet und kann sensible Informationen aus Ihrer Codebasis oder aus Unterhaltungen enthalten. Behandeln Sie diese Daten gemäß den Sicherheits- und Datenschutzrichtlinien Ihrer Organisation.
Das Feld response enthält den in Markdown formatierten Inhalt der Antwort von Cascade seit der letzten Benutzereingabe. Dies umfasst Planner-Antworten, Tool-Aktionen (Datei-Lese- und -Schreibvorgänge, Commands) und alle anderen Schritte, die Cascade ausgeführt hat. Es enthält außerdem Informationen darüber, welche rules ausgelöst wurden. Siehe das Beispiel Tracking Triggered Rules, um zu erfahren, wie Sie die Nutzung von Regeln auswerten können. Die Konfigurationsoption show_output gilt nicht für diesen Hook.
Der Inhalt von response wird aus Verlaufsdaten (Trajectory-Daten) abgeleitet und kann sensible Informationen aus Ihrer Codebasis oder aus Unterhaltungen enthalten. Behandeln Sie diese Daten gemäß den Sicherheits- und Datenschutzrichtlinien Ihrer Organisation.

post_cascade_response_with_transcript

Wird asynchron ausgelöst, nachdem Cascade eine Antwort auf den Prompt eines Nutzers abgeschlossen hat, ähnlich wie bei post_cascade_response. Anstatt eine Markdown-Zusammenfassung inline bereitzustellen, schreibt dieser Hook das vollständige Gesprächstranskript (vom Beginn der Unterhaltung an) in eine lokale JSONL-Datei und gibt den Dateipfad zurück. Anwendungsfälle: Enterprise-Audit- und Compliance-Protokollierung, Nachverfolgung von KI-generierten Beiträgen, Einspeisen von Transkripten in externe Observability- oder Analytics-Tools Eingabe-JSON:
Der transcript_path verweist auf eine JSONL-Datei unter ~/.windsurf/transcripts/{trajectory_id}.jsonl. Jede Zeile ist ein JSON-Objekt, das einen einzelnen Schritt in der Konversation darstellt, mit den Feldern type und status sowie schrittspezifischen Daten. Zum Beispiel:
Das Transkript enthält detaillierte, vom Kunden verwaltete Daten wie Dateiinhalte, Befehlsausgaben, Tool-Argumente, Suchergebnisse und Regeln, die angewendet wurden. Bitte beachten Sie, dass sich die genaue Struktur jedes Schritts in zukünftigen Versionen ändern kann. Implementieren Sie daher alle Hook-Consumer so, dass sie robust gegenüber Änderungen sind. Transkriptdateien werden mit 0600-Berechtigungen geschrieben. Windsurf begrenzt das Transkriptverzeichnis automatisch auf 100 Dateien und entfernt die ältesten anhand der Änderungszeit. Die Konfigurationsoption show_output gilt nicht für diesen Hook. Diese Tabelle zeigt die wichtigsten Unterschiede zwischen den Hooks post_cascade_response und post_cascade_response_with_transcript:
Transkriptdateien enthalten sensible Informationen aus Ihrer Codebasis, einschließlich Dateiinhalte, Befehlsausgaben und Gesprächsverlauf. Behandeln Sie diese Dateien gemäß den Sicherheits- und Datenschutzrichtlinien Ihrer Organisation.

post_setup_worktree

Wird ausgelöst, nachdem ein neuer git worktree erstellt und konfiguriert wurde. Der Hook wird im neuen worktree-Verzeichnis ausgeführt. Anwendungsfälle: .env-Dateien oder andere unversionierte Dateien in den Worktree kopieren, Abhängigkeiten installieren, Setup-Skripte ausführen Umgebungsvariablen: Eingabe-JSON:

Exit Codes

Ihre Hook-Skripte übermitteln Ergebnisse über Exit Codes:
Nur Pre-Hooks (pre_user_prompt, pre_read_code, pre_write_code, pre_run_command, pre_mcp_tool_use) können Aktionen mit Exit Code 2 blockieren. Post-Hooks können nicht blockieren, da die Aktion bereits ausgeführt wurde.
Beachten Sie, dass der Nutzer jede vom Hook erzeugte Standardausgabe und jeden Standardfehler in der Cascade-UI sehen kann, wenn show_output auf true gesetzt ist.

Anwendungsbeispiele

Protokollierung aller Cascade-Aktionen

Protokolliere jede von Cascade ausgeführte Aktion zu Audit‑Zwecken. Konfiguration:
Skript (log_input.py):
Dieses Skript protokolliert jeden Hook-Aufruf in einer Logdatei und erzeugt so einen Audit-Trail aller Cascade-Aktionen. Sie können die Eingabedaten transformieren oder nach Bedarf benutzerdefinierte Logik ausführen.

Dateizugriff einschränken

Verhindern Sie, dass Cascade Dateien außerhalb eines bestimmten Verzeichnisses liest. Konfiguration:
Skript (block_read_access.py):
Wenn Cascade versucht, eine Datei außerhalb des zulässigen Verzeichnisses zu lesen, verhindert dieser Hook den Vorgang und zeigt eine Fehlermeldung an.

Gefährliche Commands blockieren

Verhindern Sie, dass Cascade potenziell schädliche Commands ausführt. Konfiguration:
Skript (block_dangerous_commands.py):
Dieser Hook prüft Commands auf gefährliche Muster und blockiert sie vor der Ausführung.

Blockieren von richtlinienwidrigen Prompts

Verhindern Sie, dass Benutzer Prompts senden, die gegen Organisationsrichtlinien verstoßen. Config:
Skript (block_bad_prompts.py):
Dieser Hook überprüft Benutzereingaben, bevor sie verarbeitet werden, und blockiert alle Eingaben, die verbotene Muster enthalten. Wenn eine Eingabe blockiert wird, sieht der Benutzer eine Fehlermeldung in der Cascade-UI.

Cascade-Antworten protokollieren

Erfassen Sie alle Cascade-Antworten für Compliance-Prüfungen oder Analytics. Konfiguration:
Skript (log_cascade_response.py):
Dieser Hook protokolliert jede Cascade-Antwort in einer Datei und erzeugt damit einen Audit-Trail aller KI-generierten Inhalte. Sie können dies erweitern, um die Daten an externe Logging-Systeme, Datenbanken oder Compliance-Plattformen weiterzuleiten.

Ausgelöste Regeln nachverfolgen

Verfolgen Sie, welche Regeln während Cascade-Interaktionen angewendet wurden, um Observability und Metriken zu ermöglichen. Konfiguration:
Skript (track_rules.py):
Regeltypen:
  • Always On - Regeln, die immer aktiv sind
  • Model Decision - Regeln, deren Beschreibungen dem AI-Modell zur bedingten Anwendung angezeigt wurden
  • Manual - Regeln, die explizit per @-Mention in der Benutzereingabe erwähnt werden
  • Global - Globale Regeln aus global_rules.md
  • Glob - Regeln, die durch Dateizugriff mit passenden Glob-Mustern ausgelöst werden
Dies erfasst, welche Regeln dem AI-Modell präsentiert oder durch Dateizugriff ausgelöst wurden, zeigt aber nicht an, ob das AI-Modell einer Regel tatsächlich gefolgt ist. Regeln, die kürzlich bereits im Gespräch angezeigt wurden, werden dedupliziert (Duplikate entfernt) und erscheinen möglicherweise erst später erneut.

Code-Formatter nach Änderungen ausführen

Code-Dateien automatisch formatieren, nachdem Cascade sie bearbeitet hat. Konfiguration:
Skript (format_code.sh):
Dieser Hook führt nach jeder Bearbeitung automatisch den passenden Formatter je nach Dateityp aus.

Worktrees einrichten

Umgebungsdateien kopieren und Abhängigkeiten installieren, sobald ein neuer Worktree erstellt wird. Konfiguration (in .windsurf/hooks.json):
Skript (hooks/setup_worktree.sh):
Dieser Hook stellt sicher, dass für jeden Worktree automatisch die erforderliche Umgebungskonfiguration eingerichtet und die benötigten Abhängigkeiten installiert werden.

Bewährte Praktiken

Sicherheit

Verwenden Sie Cascade Hooks auf eigenes Risiko: Hooks führen Shell-Befehle automatisch mit den vollen Berechtigungen Ihres Benutzerkontos aus. Für den von Ihnen konfigurierten Code tragen Sie die volle Verantwortung. Schlecht konzipierte oder bösartige Hooks können Dateien verändern, Daten löschen, Anmeldedaten offenlegen oder Ihr System kompromittieren.
  • Alle Eingaben validieren: Vertrauen Sie niemals dem Eingabe-JSON ohne Validierung, insbesondere bei Dateipfaden und Befehlen.
  • Absolute Pfade verwenden: Verwenden Sie in Ihren Hook-Konfigurationen stets absolute Pfade, um Mehrdeutigkeiten zu vermeiden.
  • Sensible Daten schützen: Vermeiden Sie das Protokollieren sensibler Informationen wie API-Schlüssel oder Anmeldedaten.
  • Berechtigungen überprüfen: Stellen Sie sicher, dass Ihre Hook-Skripte geeignete Dateisystemberechtigungen haben.
  • Vor der Bereitstellung prüfen: Überprüfen Sie jeden Hook-Befehl und jedes Skript, bevor Sie es Ihrer Konfiguration hinzufügen.
  • Isoliert testen: Führen Sie Hooks zuerst in einer Testumgebung aus, bevor Sie sie auf Ihrem primären Entwicklungsrechner aktivieren.

Performance-Aspekte

  • Hooks schnell halten: Langsame Hooks beeinträchtigen die Reaktionsfähigkeit von Cascade. Streben Sie Ausführungszeiten unter 100 ms an.
  • Asynchrone Vorgänge nutzen: Für nicht blockierende Hooks sollten Protokollierungen asynchron in eine Warteschlange (Queue) oder eine Datenbank erfolgen.
  • Früh filtern: Prüfen Sie den Aktionstyp gleich zu Beginn Ihres Skripts, um unnötige Verarbeitung zu vermeiden.

Fehlerbehandlung

  • JSON immer validieren: Verwenden Sie try-catch-Blöcke, um fehlerhafte Eingaben robust zu behandeln.
  • Fehler korrekt protokollieren: Schreiben Sie Fehler auf stderr, damit sie sichtbar sind, wenn show_output aktiviert ist.
  • Sicher ausfallen: Wenn Ihr Hook auf einen Fehler stößt, prüfen Sie, ob er die Aktion blockieren oder sie fortsetzen lassen sollte.

Testen Ihrer Hooks

  1. Mit Logging starten: Implementieren Sie zunächst einen einfachen Logging-Hook, um den Datenfluss nachzuvollziehen.
  2. show_output: true verwenden: Aktivieren Sie während der Entwicklung die Ausgabe, um zu sehen, was Ihre Hooks machen.
  3. Blockierverhalten testen: Stellen Sie sicher, dass Exit-Code 2 Aktionen in Pre-Hooks ordnungsgemäß blockiert.
  4. Alle Codepfade prüfen: Testen Sie sowohl Erfolgs- als auch Fehlerfälle in Ihren Skripten.

Enterprise-Verteilung

Enterprise-Organisationen müssen Sicherheitsrichtlinien, Compliance-Anforderungen und Entwicklungsstandards durchsetzen, die von einzelnen Nutzern nicht umgangen werden können. Cascade Hooks unterstützt zwei Methoden der Enterprise-Verteilung:
  1. Cloud Dashboard – Konfigurieren Sie Hooks über die Team Settings im Windsurf-Dashboard
  2. System-Level Files – Verteilen Sie Hooks über MDM- oder Konfigurationsmanagement-Tools
Beide Methoden können gemeinsam verwendet werden – Hooks aus allen Quellen werden kombiniert und der Reihe nach ausgeführt.

Konfiguration im Cloud-Dashboard

Team-Administrator:innen können Cascade Hooks direkt über das Windsurf-Dashboard konfigurieren. Voraussetzungen:
  • Enterprise-Plan
  • TEAM_SETTINGS_UPDATE-Berechtigung
Vorgehensweise:
  1. Navigieren Sie im Windsurf-Dashboard zu Team Settings
  2. Suchen Sie den Abschnitt Cascade Hooks
  3. Geben Sie Ihre Hooks-Konfiguration im JSON-Format ein
  4. Speichern Sie Ihre Änderungen
Über das Dashboard konfigurierte Hooks werden automatisch an alle Teammitglieder verteilt und beim Start von Windsurf geladen. Cloud-konfigurierte Hooks werden zuerst geladen, gefolgt von systemweiten, benutzerspezifischen und Workspace-spezifischen Hooks.
Wenn mehrere Teamkonfigurationen zusammengeführt werden, werden Hooks pro Aktion kombiniert, anstatt überschrieben zu werden. Das bedeutet, dass Hooks aus allen zutreffenden Teamkonfigurationen gemeinsam ausgeführt werden.

Systemweite Dateibereitstellung

Für Organisationen, die eine dateibasierte Konfiguration bevorzugen oder Hooks offline verwenden müssen, stellen Sie Ihre verpflichtende hooks.json-Konfiguration an diesen betriebssystemspezifischen Speicherorten bereit: macOS:
Linux/WSL:
Windows:
Legen Sie Ihre Hook-Skripte in ein entsprechendes Systemverzeichnis (z. B. /usr/local/share/windsurf-hooks/ auf Unix-Systemen). Systemweite Hooks haben Vorrang vor Benutzer- und Workspace-Hooks und können von Endnutzern ohne Root-Rechte nicht deaktiviert werden.

MDM und Konfigurationsmanagement

Enterprise-IT-Teams können systemweite Hooks mit Standardtools bereitstellen: Mobile Device Management (MDM)
  • Jamf Pro (macOS) - Bereitstellung über Konfigurationsprofile oder Skripte
  • Microsoft Intune (Windows/macOS) - per PowerShell-Skripten oder Richtlinienbereitstellung
  • Workspace ONE, Google Endpoint Management und andere MDM-Lösungen
Konfigurationsmanagement
  • Ansible, Puppet, Chef, SaltStack - Nutzen Sie Ihre bestehende Infrastrukturautomatisierung
  • Benutzerdefinierte Bereitstellungsskripte - Shell-Skripte, PowerShell oder Ihre bevorzugten Tools

Verifizierung und Auditing

Nach der Bereitstellung prüfen, ob Hooks korrekt installiert sind:
Wichtig: Systemweite Hooks werden vollständig von Ihrem IT- oder Sicherheitsteam verwaltet. Windsurf installiert oder verwaltet keine Dateien in systemweiten Pfaden. Stellen Sie sicher, dass Ihre internen Teams Bereitstellung, Updates und Compliance gemäß den Richtlinien Ihrer Organisation übernehmen.

Workspace-Hooks für Teamprojekte

Für projektspezifische Konventionen können Teams Hooks auf Workspace-Ebene in der Versionsverwaltung verwenden:
So können Teams ihre Entwicklungspraktiken standardisieren. Belassen Sie sicherheitskritische Richtlinien auf Cloud- oder Systemebene, und vermeiden Sie es, sensible Informationen in die Versionsverwaltung einzuchecken.

Zusätzliche Ressourcen