.devin/ del tuo progetto (o in una configurazione a livello utente) e Devin CLI li esegue in corrispondenza degli eventi del ciclo di vita corrispondenti. Anche gli hook esistenti nelle directory .claude/ vengono rilevati automaticamente — vedi Dove si trovano gli hook.
Cosa possono fare gli Hook?
Applicare policy
Bloccare comandi pericolosi, richiedere conferma per azioni specifiche o limitare l’accesso ai file.
Aggiungere contesto
Inserire istruzioni o informazioni aggiuntive quando vengono richiamati strumenti specifici.
Eseguire effetti collaterali
Eseguire script, inviare notifiche o registrare eventi quando si verificano determinate condizioni.
Modificare le autorizzazioni
Concedere o limitare dinamicamente le autorizzazioni in base al contesto.
Esempio rapido
Crea.devin/hooks.v1.json nel tuo progetto:
./scripts/check-command.sh prima di ogni esecuzione di un comando shell. Lo script riceve i dati dell’evento su stdin e può bloccare l’azione uscendo con il codice 2 (oppure stampando un oggetto JSON "decision": "block"); qualsiasi altro codice di uscita non zero viene registrato come errore e non blocca l’azione — vedi Codici di uscita.
Eventi degli hook
Gli hook possono rispondere a questi eventi del ciclo di vita:
Per i dettagli su ciascun evento e sui dati disponibili, consulta Hook del ciclo di vita.
Formato degli hook
Ogni hook ha un tipo (command o prompt), un matcher facoltativo (regex sul tool_name dell’evento hook) e una configurazione:
Hook di comando
Gli hook di comando eseguono un comando shell. I dati dell’evento vengono passati come JSON su stdin e il comando può restituire JSON su stdout per determinare l’esito (vedi Formato di output di seguito). Input (stdin):
La variabile di ambiente
DEVIN_PROJECT_DIR viene impostata automaticamente sulla directory radice del progetto.
Consulta Using the Matcher per i nomi degli strumenti integrati e il formato dei nomi degli strumenti MCP che puoi abbinare.
Formato di output
Un hook di comando può stampare un oggetto JSON su stdout per controllare l’esito. Per approvare o bloccare un’azione, restituisci unadecision di primo livello (con un reason facoltativo):
additionalContext all’interno di un oggetto hookSpecificOutput contrassegnato con il nome dell’evento:
updatedInput all’interno di un hookSpecificOutput PreToolUse. I campi in updatedInput vengono integrati negli argomenti dello strumento, quindi puoi aggiornarne un sottoinsieme (ad es. solo command):
Codici di uscita
Dove si trovano gli hook
Devin CLI legge gli hook nelle seguenti posizioni. In tutti i casi, il formato JSON è lo stesso. I file hook a livello di progetto vengono individuati nella directory di lavoro e nelle directory antenate fino alla radice del repository, in modo analogo a come vengono caricati skill e regole.A livello di progetto
A livello di utente (globale)
In
.devin/hooks.v1.json, l’oggetto hooks coincide con l’intero file (non è necessaria alcuna chiave contenitore). In tutte le altre posizioni, hooks è annidato sotto la chiave "hooks" in un file Settings.Gli hook dei percorsi
.claude/ vengono caricati quando read_config_from.claude è abilitato (per impostazione predefinita). Se necessario, puoi disabilitarlo nella tua configurazione utente.Verifica degli hook
Usa il comando slash/hooks per visualizzare tutti gli hook attualmente caricati e i relativi file sorgente:
Prossimi passaggi
Hook del ciclo di vita
Approfondisci ogni tipo di evento e i dati disponibili.
Configurazione
Controlla da quali percorsi di configurazione Devin CLI legge gli hook.

