Hooks sunt concepute pentru utilizatori avansați și echipe Enterprise care au nevoie de control granular asupra comportamentului Cascade. Acestea necesită cunoștințe de bază de scripting în shell.
Ce puteți construi
- Jurnalizare & Analytics: Monitorizați fiecare fișier citit, modificare de cod, comandă executată, prompt de utilizator sau răspuns Cascade, pentru conformitate și analiză a utilizării
- Controale de securitate: Împiedicați Cascade să acceseze fișiere sensibile, să ruleze comenzi periculoase sau să proceseze prompturi care încalcă politicile
- Asigurarea calității: Rulați automat linters, formatare sau teste după modificările de cod
- Fluxuri de lucru personalizate: Integrați cu trackere de issue-uri, sisteme de notificare sau pipeline-uri de deployment
- Standardizare la nivel de echipă: Aplicați standarde de cod și bune practici în întreaga organizație
Cum funcționează hook-urile
- Primește context (detalii despre acțiunea executată) prin JSON ca intrare standard
- Execută scriptul dvs. – Python, Bash, Node.js sau orice executabil
- Returnează un rezultat prin codul de ieșire și fluxurile de ieșire
2. Acest lucru face ca pre-hook-urile să fie ideale pentru implementarea politicilor de securitate sau a verificărilor de validare.
Configurare
La nivel de sistem
- macOS:
/Library/Application Support/Windsurf/hooks.json - Linux/WSL:
/etc/windsurf/hooks.json - Windows:
C:\ProgramData\Windsurf\hooks.json
La nivel de utilizator
- Windsurf IDE:
~/.codeium/windsurf/hooks.json - JetBrains Plugin:
~/.codeium/hooks.json
La nivel de workspace
- Locație:
.windsurf/hooks.jsonîn rădăcina workspace-ului
Hook-urile din toate cele trei locații sunt comasate. Dacă același eveniment de hook este configurat în mai multe locații, toate hook-urile se vor executa în această ordine: sistem → utilizator → workspace.
Structură de bază
Opțiuni de configurare
Despre parametrul
working_directory:- În workspace‑urile cu mai multe repo‑uri, valoarea implicită este rădăcina repo‑ului la care lucrați în prezent
- Căile relative sunt rezolvate pornind de la locația implicită (rădăcina workspace‑ului sau a repo‑ului)
- Căile absolute sunt acceptate
- Utilizarea lui
~pentru extinderea la directorul home nu este acceptată
Evenimente hook
Structura comună a inputului
În exemplele de mai jos, câmpurile comune sunt omise pentru concizie. Există douăsprezece tipuri majore de evenimente de tip hook:
pre_read_code
file_path poate fi o cale de director atunci când Cascade parcurge recursiv un director.
post_read_code
file_path poate fi o cale de director atunci când Cascade parcurge recursiv un director.
pre_write_code
post_write_code
pre_run_command
post_run_command
pre_mcp_tool_use
post_mcp_tool_use
pre_user_prompt
show_output nu se aplică acestui hook.
post_cascade_response
response conține conținutul în format markdown al răspunsului generat de Cascade de la ultima intrare a utilizatorului. Acesta include răspunsurile planificatorului, acțiunile instrumentelor (citiri de fișiere, scrieri, comenzi) și orice alți pași pe care i-a efectuat Cascade. Include și informații despre regulile care au fost declanșate. Consultați exemplul Tracking Triggered Rules pentru a vedea cum să interpretați utilizarea regulilor.
Opțiunea de configurare show_output nu se aplică acestui hook.
post_cascade_response_with_transcript
post_cascade_response. În loc să ofere un rezumat markdown direct în conversație, acest hook scrie transcrierea completă a conversației (începând de la debutul conversației) într-un fișier JSONL local și furnizează calea către fișier.
Cazuri de utilizare: jurnalizare pentru audit și conformitate la nivel Enterprise, urmărirea contribuțiilor generate de AI, trimiterea transcrierilor către instrumente externe de observabilitate sau Analytics
Input JSON:
transcript_path indică către un fișier JSONL la ~/.windsurf/transcripts/{trajectory_id}.jsonl. Fiecare linie este un obiect JSON care reprezintă un singur pas în conversație, cu câmpurile type și status, plus date specifice pasului. De exemplu:
0600. Windsurf limitează automat directorul de transcripturi la 100 de fișiere, ștergându-le pe cele mai vechi în funcție de timpul ultimei modificări.
Opțiunea de configurare show_output nu se aplică acestui hook.
Acest tabel arată principalele diferențe dintre hook-urile post_cascade_response și post_cascade_response_with_transcript:
post_setup_worktree
.env sau alte fișiere neurmărite în worktree, instalați dependențele, rulați scripturi de configurare
Variabile de mediu:
JSON de intrare:
Coduri de ieșire
Țineți cont că utilizatorul poate vedea orice ieșire standard și eroare standard generate de hook în interfața Cascade dacă
show_output este true.
Exemple de scenarii de utilizare
Înregistrarea tuturor acțiunilor Cascade
log_input.py):
Restricționarea accesului la fișiere
block_read_access.py):
Blocarea comenzilor periculoase
block_dangerous_commands.py):
Blocarea prompturilor care încalcă politicile
block_bad_prompts.py):
Înregistrarea răspunsurilor Cascade
log_cascade_response.py):
Urmărirea regulilor declanșate
track_rules.py):
Always On- Reguli care sunt incluse întotdeaunaModel Decision- Reguli ale căror descrieri au fost afișate modelului AI pentru aplicare condiționatăManual- Reguli menționate explicit cu @ în introducerea utilizatoruluiGlobal- Reguli globale dinglobal_rules.mdGlob- Reguli declanșate de accesarea fișierelor care se potrivesc cu șabloane glob
Aceasta urmărește ce reguli au fost prezentate modelului AI sau declanșate de accesarea fișierelor, dar nu indică dacă modelul AI a respectat efectiv o regulă. Regulile care au fost deja afișate recent în conversație sunt deduplicate și este posibil să nu mai apară din nou decât mai târziu.
Rularea formatarelor de cod după modificări
format_code.sh):
Configurarea worktree-urilor
.windsurf/hooks.json):
hooks/setup_worktree.sh):
Recomandări de bune practici
Securitate
- Validați toate intrările: Nu aveți niciodată încredere în JSON‑ul de intrare fără validare, mai ales în ceea ce privește căile de fișiere și comenzile.
- Folosiți căi absolute: Utilizați întotdeauna căi absolute în configurațiile hook‑urilor pentru a evita ambiguitățile.
- Protejați datele sensibile: Evitați înregistrarea (logging) informațiilor sensibile, precum chei API sau credențiale.
- Revizuiți permisiunile: Asigurați-vă că scripturile hook au permisiuni adecvate în sistemul de fișiere.
- Auditați înainte de implementare: Examinați fiecare comandă și script de hook înainte de a le adăuga în configurație.
- Testați în izolare: Rulați hook‑urile într-un mediu de test înainte de a le activa pe stația dvs. principală de dezvoltare.
Considerații privind performanța
- Păstrați hook-urile rapide: Hook-urile lente vor afecta capacitatea de răspuns a Cascade. Vizați timpi de execuție sub 100 ms.
- Folosiți operațiuni asincrone: Pentru hook-uri neblocante, luați în considerare logarea într-o coadă sau într-o bază de date, asincron.
- Filtrați cât mai devreme: Verificați tipul acțiunii la începutul scriptului pentru a evita procesarea inutilă.
Gestionarea erorilor
- Validați întotdeauna JSON-ul: Folosiți blocuri try-catch pentru a gestiona elegant datele de intrare malformate.
- Înregistrați corect erorile: Trimiteți erorile la
stderrpentru a fi vizibile cândshow_outputeste activat. - Eșuați în siguranță: Dacă hook-ul dvs. întâmpină o eroare, evaluați dacă ar trebui să blocheze acțiunea sau să permită continuarea acesteia.
Testarea hook-urilor
- Începeți cu jurnalizarea: Implementați mai întâi un hook simplu de jurnalizare pentru a înțelege fluxul de date.
- Folosiți
show_output: true: Activați afișarea rezultatelor în timpul dezvoltării pentru a vedea ce fac hook-urile. - Testați comportamentul de blocare: Verificați că valoarea de ieșire 2 (exit code 2) blochează corect acțiunile în pre-hooks.
- Verificați toate ramurile de cod: Testați atât scenariile de reușită, cât și pe cele de eșec în scripturi.
Distribuție Enterprise
- Cloud Dashboard – Configurați hooks în Team Settings din dashboard-ul Windsurf
- System-Level Files – Implementați hooks prin MDM sau instrumente de gestionare a configurațiilor
Configurarea dashboard-ului în cloud
- Plan Enterprise
- Permisiunea
TEAM_SETTINGS_UPDATE
- Navigați la Team Settings în dashboard-ul Windsurf
- Găsiți secțiunea Cascade Hooks
- Introduceți configurația pentru hooks, în format JSON
- Salvați modificările
Atunci când mai multe configurații de echipă sunt îmbinate, hook-urile sunt combinate pentru fiecare acțiune, în loc să fie suprascrise. Aceasta înseamnă că hook-urile din toate configurațiile de echipă aplicabile vor rula împreună.
Implementare fișiere la nivel de sistem
hooks.json în aceste locații specifice sistemului de operare:
macOS:
MDM și gestionarea configurațiilor
- Jamf Pro (macOS) - Implementare prin profiluri de configurare sau scripturi
- Microsoft Intune (Windows/macOS) - Utilizați scripturi PowerShell sau implementarea prin politici
- Workspace ONE, Google Endpoint Management și alte soluții MDM
- Ansible, Puppet, Chef, SaltStack - Utilizați automatizarea existentă a infrastructurii
- Scripturi personalizate de implementare - Scripturi shell, PowerShell sau instrumentele preferate
Verificare și auditare
Important: Hook-urile la nivel de sistem sunt administrate în întregime de echipa dvs. IT sau de securitate. Windsurf nu distribuie și nu gestionează fișiere în locații la nivel de sistem. Asigurați-vă că echipele interne se ocupă de distribuire, actualizări și conformitate în acord cu politicile organizației dvs.
Hook-uri de workspace pentru proiecte de echipă
Resurse suplimentare
- Integrare MCP: Aflați mai multe despre Model Context Protocol în Windsurf
- Workflows: Descoperiți cum să combinați hooks cu Cascade Workflows
- Analytics: Urmăriți utilizarea Cascade cu Analytics pentru echipă