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.
- 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
- Erhält Kontext (Details zur ausgeführten Aktion) über JSON über die Standardeingabe
- Führt Ihr Skript aus – Python, Bash, Node.js oder jede andere ausführbare Datei
- Gibt ein Ergebnis zurück über Rückgabecode und Ausgabeströme
2 beendet wird. Dadurch eignen sich Pre-Hooks ideal zur Umsetzung von Sicherheitsrichtlinien oder Validierungsprüfungen.
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.
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
- Windsurf-IDE:
~/.codeium/windsurf/hooks.json - JetBrains-Plugin:
~/.codeium/hooks.json
- Speicherort:
.windsurf/hooks.jsonim 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.
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
In den folgenden Beispielen werden die gemeinsamen Felder der Übersichtlichkeit halber weggelassen. Es gibt zwölf Haupttypen von Hook-Ereignissen:
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:
file_path kann ein Verzeichnispfad sein, wenn Cascade ein Verzeichnis rekursiv einliest.
Ausgelöst nachdem Cascade eine Code-Datei erfolgreich gelesen hat.
Anwendungsfälle: Erfolgreiche Lesevorgänge protokollieren, Dateizugriffsmuster nachverfolgen
Eingabe-JSON:
file_path kann ein Verzeichnispfad sein, wenn Cascade ein Verzeichnis rekursiv einliest.
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:
show_output gilt für diesen Hook nicht.
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.
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.
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:
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:
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:
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:
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.
Protokolliere jede von Cascade ausgeführte Aktion zu Audit‑Zwecken.
Konfiguration:
log_input.py):
block_read_access.py):
block_dangerous_commands.py):
block_bad_prompts.py):
log_cascade_response.py):
track_rules.py):
Always On- Regeln, die immer aktiv sindModel Decision- Regeln, deren Beschreibungen dem AI-Modell zur bedingten Anwendung angezeigt wurdenManual- Regeln, die explizit per @-Mention in der Benutzereingabe erwähnt werdenGlobal- Globale Regeln ausglobal_rules.mdGlob- 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.
format_code.sh):
.windsurf/hooks.json):
hooks/setup_worktree.sh):
- 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.
- 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.
- 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, wennshow_outputaktiviert ist. - Sicher ausfallen: Wenn Ihr Hook auf einen Fehler stößt, prüfen Sie, ob er die Aktion blockieren oder sie fortsetzen lassen sollte.
- Mit Logging starten: Implementieren Sie zunächst einen einfachen Logging-Hook, um den Datenfluss nachzuvollziehen.
show_output: trueverwenden: Aktivieren Sie während der Entwicklung die Ausgabe, um zu sehen, was Ihre Hooks machen.- Blockierverhalten testen: Stellen Sie sicher, dass Exit-Code 2 Aktionen in Pre-Hooks ordnungsgemäß blockiert.
- Alle Codepfade prüfen: Testen Sie sowohl Erfolgs- als auch Fehlerfälle in Ihren Skripten.
- Cloud Dashboard – Konfigurieren Sie Hooks über die Team Settings im Windsurf-Dashboard
- System-Level Files – Verteilen Sie Hooks über MDM- oder Konfigurationsmanagement-Tools
- Enterprise-Plan
TEAM_SETTINGS_UPDATE-Berechtigung
- Navigieren Sie im Windsurf-Dashboard zu Team Settings
- Suchen Sie den Abschnitt Cascade Hooks
- Geben Sie Ihre Hooks-Konfiguration im JSON-Format ein
- Speichern Sie Ihre Änderungen
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.
hooks.json-Konfiguration an diesen betriebssystemspezifischen Speicherorten bereit:
macOS:
/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.
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
- Ansible, Puppet, Chef, SaltStack - Nutzen Sie Ihre bestehende Infrastrukturautomatisierung
- Benutzerdefinierte Bereitstellungsskripte - Shell-Skripte, PowerShell oder Ihre bevorzugten Tools
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.
- MCP-Integration: Erfahren Sie mehr über das Model Context Protocol in Windsurf
- Workflows: Erfahren Sie, wie Sie Hooks mit Cascade Workflows kombinieren können
- Analytics: Verfolgen Sie die Nutzung von Cascade mit Team Analytics