Vai al contenuto principale
Gli hook di Cascade ti consentono di eseguire comandi shell personalizzati nei punti chiave del flusso di lavoro di Cascade. Questa potente funzionalità di estensione ti permette di registrare le operazioni, applicare barriere di sicurezza, eseguire controlli di convalida o integrarti con sistemi esterni.
Gli hook sono pensati per utenti esperti e team aziendali che necessitano di un controllo granulare sul comportamento di Cascade. Richiedono conoscenze di base di scripting shell.

Cosa puoi creare

Hooks offrono un’ampia gamma di funzionalità di automazione e governance:
  • Logging e analisi: Tieni traccia di ogni file letto, modifica al codice, comando eseguito, prompt dell’utente o risposta di Cascade ai fini della conformità e dell’analisi dell’utilizzo
  • Controlli di sicurezza: Impedisci a Cascade di accedere a file sensibili, eseguire comandi pericolosi o elaborare prompt che violano le policy
  • Controllo qualità: Esegui automaticamente linter, formatter o test dopo le modifiche al codice
  • Flussi di lavoro personalizzati: Integrali con tracker di issue, sistemi di notifica o pipeline di distribuzione
  • Standardizzazione del team: Applica standard di codifica e best practice in tutta l’organizzazione

Come funzionano gli Hooks

Gli hook sono comandi shell che vengono eseguiti automaticamente quando si verificano specifiche azioni di Cascade. Ogni hook:
  1. Riceve il contesto (i dettagli dell’azione in esecuzione) tramite JSON come input standard
  2. Esegue il tuo script - Python, Bash, Node.js o qualsiasi altro eseguibile
  3. Restituisce un risultato tramite il codice di uscita e i flussi di output
Per i pre-hook (eseguiti prima di un’azione), il tuo script può bloccare l’azione terminando con il codice di uscita 2. Questo rende i pre-hook ideali per implementare policy di sicurezza o controllo di convalida.

Configurazione

Gli hook si configurano in file JSON che possono essere collocati a tre livelli diversi. Cascade carica e unisce gli hook da tutte queste posizioni, offrendo ai team flessibilità nel modo in cui distribuiscono e gestiscono le configurazioni degli hook.

A livello di sistema

Gli hook a livello di sistema sono ideali per applicare policy valide per l’intera organizzazione su macchine di sviluppo condivise. Ad esempio, puoi usarli per imporre policy di sicurezza, requisiti di conformità o flussi di lavoro obbligatori per la revisione del codice. I team Enterprise possono anche configurare gli hook tramite la dashboard cloud senza dover gestire file locali.
  • macOS: /Library/Application Support/Windsurf/hooks.json
  • Linux/WSL: /etc/windsurf/hooks.json
  • Windows: C:\ProgramData\Windsurf\hooks.json

A livello utente

Gli hook a livello utente sono ideali per preferenze personali e flussi di lavoro opzionali.
  • Devin Desktop IDE: ~/.codeium/windsurf/hooks.json
  • Plugin JetBrains: ~/.codeium/hooks.json

A livello di workspace

Gli hook a livello di workspace consentono ai team di tenere sotto controllo di versione le policy specifiche del progetto insieme al codice. Possono includere regole di convalida personalizzate, integrazioni specifiche del progetto o flussi di lavoro specifici del team.
  • Posizione: .windsurf/hooks.json nella radice del workspace
Gli hook di tutte e tre le posizioni vengono combinati. Se lo stesso evento hook è configurato in più posizioni, tutti gli hook verranno eseguiti nell’ordine seguente: sistema → utente → workspace.

Struttura di base

Ecco un esempio della struttura di base della configurazione degli hook:
In questo esempio, pre_read_code specifica sia un comando per macOS/Linux sia un comando PowerShell per Windows. L’hook post_write_code specifica solo command, quindi verrà eseguito su macOS/Linux e su Windows userà PowerShell come soluzione di fallback.

Opzioni di configurazione

Ogni hook accetta i seguenti parametri:

Comportamento multipiattaforma

I campi command e powershell consentono di definire, in un’unica configurazione, comandi appropriati per ciascuna piattaforma. Questo è utile per i team con parchi macchine misti macOS/Linux e Windows.
Informazioni sul parametro working_directory:
  • Nei workspace multi-repo, il valore predefinito è la radice del repo su cui si sta lavorando
  • I percorsi relativi vengono risolti a partire dalla posizione predefinita (workspace o radice del repo)
  • I percorsi assoluti sono supportati
  • L’uso di ~ per espandere la home directory non è supportato

Eventi hook

Cascade offre dodici eventi hook che coprono le azioni più importanti nel flusso di lavoro dell’agente.

Struttura di input comune

Tutti gli hook ricevono un oggetto JSON con i seguenti campi comuni: Negli esempi seguenti, i campi comuni sono omessi per brevità. Esistono dodici tipi principali di eventi hook:

pre_read_code

Si attiva prima che Cascade legga un file di codice. Può bloccare l’azione se l’hook termina con il codice 2. Casi d’uso: limitare l’accesso ai file, registrare le operazioni di lettura, verificare le autorizzazioni JSON di input:
Questo file_path può essere il percorso di una directory quando Cascade legge una directory in modo ricorsivo.

post_read_code

Si attiva dopo che Cascade ha letto correttamente un file di codice. Casi d’uso: registrare le letture riuscite, monitorare gli schemi di accesso ai file JSON di input:
Questo file_path può essere il percorso di una directory quando Cascade legge una directory in modo ricorsivo.

pre_write_code

Si attiva prima che Cascade scriva o modifichi un file di codice. Può bloccare l’azione se l’hook termina con il codice 2. Casi d’uso: impedire modifiche ai file protetti, eseguire il backup dei file prima delle modifiche JSON di input:

post_write_code

Attivato dopo che Cascade scrive o modifica un file di codice. Casi d’uso: Run di linter, formatter o test; registra le modifiche al codice JSON di input:

pre_run_command

Si attiva prima che Cascade esegua un comando nel terminale. Può bloccare l’action se l’hook termina con il codice 2. Casi d’uso: Bloccare comandi pericolosi, registrare tutte le esecuzioni dei comandi, aggiungere controlli di sicurezza JSON di input:

post_run_command

Si attiva dopo che Cascade esegue un comando nel terminale. Casi d’uso: registrare i risultati dei comandi, attivare azioni successive JSON di input:

pre_mcp_tool_use

Si attiva prima che Cascade invochi uno strumento MCP (Model Context Protocol). Può bloccare l’azione se l’hook termina con il codice 2. Casi d’uso: Registrare l’utilizzo degli strumenti MCP, limitare quali strumenti MCP possono essere usati JSON di input:

post_mcp_tool_use

Si attiva dopo che Cascade invoca con successo uno strumento MCP. Casi d’uso: Registrare le operazioni MCP, monitorare l’utilizzo dell’API, visualizzare i risultati MCP JSON di input:

pre_user_prompt

Attivato prima che Cascade elabori il testo del prompt di un utente. Questo può bloccare l’azione se l’hook termina con il codice 2. Casi d’uso: registrare tutti i prompt degli utenti a fini di audit, bloccare prompt potenzialmente dannosi o in violazione delle policy JSON di input:
L’opzione di configurazione show_output non è applicabile a questo hook.

post_cascade_response

Attivato in modo asincrono dopo che Cascade ha completato una risposta al prompt di un utente. Questo hook riceve l’intera risposta di Cascade successiva all’ultimo input dell’utente. Casi d’uso: Registrare tutte le risposte di Cascade a fini di audit, analizzare i pattern delle risposte, inviare le risposte a sistemi esterni per la revisione della conformità JSON di input:
Il campo response contiene il contenuto in formato Markdown della risposta di Cascade dall’ultimo input dell’utente. Include le risposte del planner, le azioni degli strumenti (letture e scritture di file, comandi) e qualsiasi altro passaggio eseguito da Cascade. Include anche informazioni su quali regole sono state attivate. Consulta l’esempio Tracking Triggered Rules per capire come analizzare l’utilizzo delle regole. L’opzione di configurazione show_output non si applica a questo hook.
Il contenuto di response è derivato dai dati della traiettoria e può contenere informazioni sensibili provenienti dalla tua codebase o dalle tue conversazioni. Gestisci questi dati in conformità con le politiche di sicurezza e privacy della tua organizzazione.

post_cascade_response_with_transcript

Attivato in modo asincrono dopo che Cascade ha completato una risposta al prompt dell’utente, in modo simile a post_cascade_response. Invece di fornire un riepilogo markdown inline, questo hook scrive la trascrizione completa della conversazione (dall’inizio della conversazione) in un file JSONL locale e ne fornisce il percorso. Casi d’uso: registrazione per audit e conformità in ambito Enterprise, monitoraggio dei contributi generati dall’IA, invio delle trascrizioni a strumenti esterni di osservabilità o analisi JSON di input:
Il transcript_path punta a un file JSONL in ~/.windsurf/transcripts/{trajectory_id}.jsonl. Ogni riga contiene un oggetto JSON che rappresenta un singolo passaggio della conversazione, con i campi type e status, oltre ai dati specifici del passaggio. Ad esempio:
La trascrizione include dati dettagliati di proprietà del cliente, come contenuti dei file, output dei comandi, argomenti dei tool, risultati di ricerca e regole applicate. Nota che la struttura esatta di ogni passaggio potrebbe cambiare nelle versioni future, quindi assicurati che gli eventuali consumer degli hook siano robusti a queste variazioni. I file di trascrizione vengono scritti con autorizzazioni 0600. Devin Desktop limita automaticamente la directory delle trascrizioni a 100 file, eliminando i più vecchi in base alla data di modifica. L’opzione di configurazione show_output non si applica a questo hook. Questa tabella mostra le principali differenze tra gli hook post_cascade_response e post_cascade_response_with_transcript:
I file di trascrizione conterranno informazioni sensibili della tua codebase, inclusi contenuti dei file, output dei comandi e cronologia della conversazione. Gestisci questi file in conformità con le policy di sicurezza e privacy della tua organizzazione.

post_setup_worktree

Si attiva dopo la creazione e la configurazione di un nuovo git worktree. L’hook viene eseguito all’interno della directory del nuovo worktree. Casi d’uso: Copiare file .env o altri file non tracciati nel worktree, installare dipendenze, eseguire script di setup Variabili d’ambiente: JSON di input:

Codici di uscita

I tuoi script hook comunicano i risultati tramite i codici di uscita:
Solo i pre-hook (pre_user_prompt, pre_read_code, pre_write_code, pre_run_command, pre_mcp_tool_use) possono bloccare le action usando il codice di uscita 2. I post-hook non possono bloccare l’esecuzione, perché l’action è già avvenuta.
Tieni presente che, se show_output è true, l’utente può vedere nella UI di Cascade qualsiasi output standard o errore standard generato da un hook.

Esempi di casi d’uso

Registrazione di tutte le azioni di Cascade

Monitora ogni azione eseguita da Cascade a fini di audit. Configurazione:
Script (log_input.py):
Questo script aggiunge ogni invocazione di hook a un file di log, creando una traccia di controllo di tutte le azioni di Cascade. Puoi trasformare i dati di input o applicare una logica personalizzata, come ritieni opportuno.

Limitare l’accesso ai file

Impedisci a Cascade di leggere file al di fuori di una directory specifica. configurazione:
Script (block_read_access.py):
Quando Cascade tenta di leggere un file al di fuori della directory consentita, questo hook blocca l’operazione e visualizza un messaggio di errore.

Blocco dei comandi pericolosi

Impedisci a Cascade di eseguire comandi potenzialmente pericolosi. Configurazione:
Script (block_dangerous_commands.py):
Questo hook analizza i comandi per individuare pattern pericolosi e li blocca prima dell’esecuzione.

Blocco dei prompt che violano le policy

Impedisci agli utenti di inviare prompt che violano le policy dell’organizzazione. Configurazione:
Script (block_bad_prompts.py):
Questo hook esamina i prompt dell’utente prima che vengano elaborati e blocca quelli che contengono pattern non consentiti. Quando un prompt viene bloccato, l’utente vede un messaggio di errore nella UI di Cascade.

Registrazione delle risposte di Cascade

Registra tutte le risposte di Cascade per verifiche di conformità o analisi. Configurazione:
Script (log_cascade_response.py):
Questo hook registra ogni risposta di Cascade in un file, creando una traccia di controllo di tutti i contenuti generati dall’IA. Puoi estenderlo per inviare i dati a sistemi di logging esterni, database o piattaforme di conformità.

Tracciamento delle regole attivate

Monitora quali regole vengono applicate durante le interazioni con Cascade, per l’osservabilità e le metriche. Configurazione:
Script (track_rules.py):
Tipi di regole:
  • Always On - Regole sempre incluse
  • Model Decision - Regole le cui descrizioni sono state mostrate al modello per un’applicazione condizionale
  • Manual - Regole menzionate esplicitamente con @ nell’input dell’utente
  • Global - Regole globali da global_rules.md
  • Glob - Regole attivate dall’accesso a file che corrispondono a pattern glob
Questo tiene traccia di quali regole sono state presentate al modello o attivate dall’accesso ai file, ma non indica se il modello abbia effettivamente seguito una regola. Le regole già mostrate di recente nella conversazione vengono deduplicate e potrebbero non comparire di nuovo fino a più avanti.

Eseguire i formattatori del codice dopo le modifiche

Formatta automaticamente i file di codice dopo che Cascade li ha modificati. Configurazione:
Script (format_code.sh):
Questo hook applica automaticamente il formatter appropriato in base al tipo di file dopo ogni modifica.

Configurazione dei worktree

Copia i file dell’ambiente e installa le dipendenze quando viene creato un nuovo worktree. Config (in .windsurf/hooks.json):
Script (hooks/setup_worktree.sh):
Questo hook garantisce che ogni worktree disponga automaticamente della configurazione dell’ambiente necessaria e delle dipendenze richieste.

Buone pratiche

Sicurezza

Usa Cascade Hooks a tuo rischio e pericolo: gli hook eseguono automaticamente comandi shell con tutte le autorizzazioni del tuo account utente. Sei interamente responsabile del codice che configuri. Hook progettati male o dannosi possono modificare file, eliminare dati, esporre credenziali o compromettere il sistema.
  • Convalida tutti gli input: non fidarti mai dell’input JSON senza prima convalidarlo, soprattutto per quanto riguarda i percorsi dei file e i comandi.
  • Usa percorsi assoluti: usa sempre percorsi assoluti nelle configurazioni degli hook per evitare ambiguità.
  • Proteggi i dati sensibili: evita di registrare informazioni sensibili come API key o credenziali.
  • Verifica le autorizzazioni: assicurati che gli script degli hook abbiano autorizzazioni del file system appropriate.
  • Controlla prima della distribuzione: controlla ogni comando e script degli hook prima di aggiungerli alla configurazione.
  • Testa in isolamento: esegui gli hook in un ambiente di test prima di abilitarli sulla macchina di sviluppo principale.

Considerazioni sulle prestazioni

  • Mantieni gli hook veloci: gli hook lenti riducono la reattività di Cascade. Punta a tempi di esecuzione inferiori a 100 ms.
  • Usa operazioni asincrone: per hook non bloccanti, valuta la possibilità di inviare i log a una coda o a un database in modo asincrono.
  • Filtra subito: verifica il tipo di action all’inizio dello script per evitare elaborazioni non necessarie.

Gestione degli errori

  • Verifica sempre il JSON: Usa blocchi try-catch per gestire correttamente input non validi.
  • Registra correttamente gli errori: Scrivi gli errori su stderr in modo che siano visibili quando show_output è abilitato.
  • Gestisci gli errori in modo sicuro: Se il tuo hook incontra un errore, valuta se debba bloccare l’action o consentirle di proseguire.

Test dei tuoi hook

  1. Inizia con il logging: inizia implementando un semplice hook di logging per comprendere il flusso dei dati.
  2. Usa show_output: true: abilita l’output durante lo sviluppo per vedere cosa stanno facendo i tuoi hook.
  3. Testa il comportamento di blocco: verifica che il codice di uscita 2 blocchi correttamente le azioni nei pre-hook.
  4. Verifica tutti i percorsi del codice: testa nei tuoi script sia gli scenari di successo sia quelli di errore.

Distribuzione Enterprise

Le organizzazioni Enterprise devono applicare policy di sicurezza, requisiti di conformità e standard di sviluppo che i singoli utenti non possono aggirare. Cascade Hooks supporta due metodi di distribuzione Enterprise:
  1. Cloud Dashboard - Configura gli hook tramite Team Settings nella dashboard di Devin Desktop
  2. File a livello di sistema - Distribuisci gli hook tramite MDM o strumenti di gestione della configurazione
Entrambi i metodi possono essere usati insieme — gli hook da tutte le origini vengono combinati ed eseguiti in ordine.

Configurazione della Cloud Dashboard

Gli admin del team possono configurare i Cascade Hooks direttamente dalla dashboard di Devin Desktop. Requisiti:
  • piano Enterprise
  • autorizzazione TEAM_SETTINGS_UPDATE
Per configurare:
  1. Vai a Team Settings nella dashboard di Devin Desktop
  2. Individua la sezione Cascade Hooks
  3. Inserisci la configurazione degli hook in formato JSON
  4. Salva le modifiche
Gli hook configurati tramite la dashboard vengono distribuiti automaticamente a tutti i membri del team e caricati all’avvio di Devin Desktop. Gli hook configurati nel cloud vengono caricati per primi, seguiti da quelli a livello di sistema, utente e workspace.
Quando vengono unite più configurazioni del team, gli hook vengono combinati per action anziché essere sovrascritti. Ciò significa che gli hook di tutte le configurazioni del team applicabili verranno eseguiti insieme.

Distribuzione dei file a livello di sistema

Per le organizzazioni che preferiscono una configurazione basata su file o hanno bisogno che gli hook funzionino offline, distribuisci la configurazione obbligatoria hooks.json nelle seguenti posizioni specifiche del sistema operativo: macOS:
Linux/WSL:
Windows:
Colloca gli script hook nella directory di sistema corrispondente (ad es. /usr/local/share/windsurf-hooks/ sui sistemi Unix). Gli hook a livello di sistema hanno la precedenza su quelli dell’utente e del workspace e non possono essere disabilitati dagli utenti finali senza autorizzazioni di root.

MDM e gestione della configurazione

I team IT Enterprise possono distribuire hook a livello di sistema utilizzando strumenti standard: Mobile Device Management (MDM)
  • Jamf Pro (macOS) - Distribuzione tramite profili di configurazione o script
  • Microsoft Intune (Windows/macOS) - Usa script PowerShell o la distribuzione tramite criteri
  • Workspace ONE, Google Endpoint Management e altre soluzioni MDM
Gestione della configurazione
  • Ansible, Puppet, Chef, SaltStack - Usa l’automazione dell’infrastruttura esistente
  • Script di distribuzione personalizzati - Script shell, PowerShell o gli strumenti che preferisci

Verifica e audit

Dopo la distribuzione, verifica che gli hook siano installati correttamente:
Importante: Gli hook a livello di sistema sono gestiti interamente dal team IT o di sicurezza. Devin Desktop non distribuisce né gestisce file nei percorsi di sistema. Assicurati che i team interni si occupino della distribuzione, degli aggiornamenti e della conformità in base alle policy della tua organizzazione.

Hook del workspace per i progetti del team

Per convenzioni specifiche di progetto, i team possono usare hook a livello di workspace nel controllo di versione:
Questo consente ai team di standardizzare le pratiche di sviluppo. Mantieni le policy critiche per la sicurezza a livello di cloud o di sistema ed evita di archiviare informazioni sensibili nel sistema di controllo versione.

Risorse aggiuntive