Vai al contenuto principale

Documentation Index

Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt

Use this file to discover all available pages before exploring further.

Ogni evento hook viene attivato in un punto specifico del ciclo di vita dell’agente. Usa il campo matcher (una regex confrontata con il tool_name dell’evento hook) per filtrare quali invocazioni di tool attivano il tuo hook.

PreToolUse

Si attiva prima dell’esecuzione di un tool. Usalo per bloccare, modificare o aggiungere contesto alle chiamate ai tool. Dati stdin:
CampoDescrizioneEsempio
tool_nameNome del tool chiamatoexec, edit, mcp__github__create_issue
tool_inputArgomenti passati al tool{ "command": "rm -rf /", "shell_id": "main" }
Esempio — Bloccare i comandi distruttivi:
{
  "PreToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); sys.exit(2 if 'rm -rf' in cmd else 0)\""
        }
      ]
    }
  ]
}
Esempio — Richiedere conferma per le operazioni di scrittura al di fuori di src/: Usa uno script che esamina l’input del tool e restituisce una decisione:
{
  "PreToolUse": [
    {
      "matcher": "edit",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/check-edit-path.sh",
          "timeout": 5
        }
      ]
    }
  ]
}

PostToolUse

Si attiva dopo il completamento dell’esecuzione di un tool. Usalo per la registrazione, la convalida o per attivare azioni successive. Dati stdin:
CampoDescrizione
tool_nameNome del tool eseguito
tool_inputArgomenti passati
tool_responseOggetto con success (booleano), output (stringa) e error (stringa o null)
Esempio — Registra tutti i comandi shell:
{
  "PostToolUse": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "sh -c 'cat >> ~/.devin-command-log'"
        }
      ]
    }
  ]
}

PermissionRequest

Si attiva quando l’agente richiede una decisione sull’autorizzazione. Usalo per implementare una logica di approvazione personalizzata. Dati stdin:
CampoDescrizione
tool_nameTool che richiede l’autorizzazione
tool_inputArgomenti per la chiamata al tool
Esempio — approvazione automatica dei comandi git:
{
  "PermissionRequest": [
    {
      "matcher": "exec",
      "hooks": [
        {
          "type": "command",
          "command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); print(json.dumps({'decision': 'approve'})) if cmd.startswith('git ') else sys.exit(0)\""
        }
      ]
    }
  ]
}

UserPromptSubmit

Si attiva quando l’utente invia un messaggio. Usalo per aggiungere contesto o attivare flussi di lavoro. Dati stdin:
CampoDescrizione
promptIl testo del messaggio dell’utente
Esempio — Aggiungi il contesto del progetto per i prompt relativi al deploy:
{
  "UserPromptSubmit": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/add-deploy-context.sh"
        }
      ]
    }
  ]
}

Stop

Si attiva quando l’agente decide di fermarsi (concludendo il proprio turno). Usalo per aggiungere istruzioni successive o per evitare che si fermi troppo presto. Dati stdin:
CampoDescrizione
stop_hook_activeSe un hook di stop è già attivo
Esempio — Ricorda all’agente di eseguire i test:
{
  "Stop": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "echo '{\"decision\": \"block\", \"reason\": \"Please run the test suite before stopping.\"}'"
        }
      ]
    }
  ]
}
Fai attenzione agli hook di arresto che bloccano: possono far entrare l’agente in un loop se la condizione non viene soddisfatta prima o poi.

PostCompaction

Si attiva dopo il completamento corretto della compattazione del contesto. Usalo per registrare eventi nei log, attivare azioni successive o reinserire il contesto che potrebbe essere andato perso durante la compattazione. Dati stdin:
CampoDescrizione
summaryTesto di riepilogo prodotto dal compattatore (può essere null se non è stato generato alcun riepilogo)
Esempio — Registra gli eventi di compattazione nei log:
{
  "PostCompaction": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "sh -c 'cat >> ~/.devin-compaction-log'"
        }
      ]
    }
  ]
}

SessionStart

Si attiva quando inizia una nuova sessione. Usalo per l’inizializzazione, la registrazione o la configurazione dell’ambiente. Dati stdin:
CampoDescrizione
sourceCome è stata avviata la sessione
Esempio — Esegui lo script di configurazione:
{
  "SessionStart": [
    {
      "matcher": "",
      "hooks": [
        {
          "type": "command",
          "command": "./scripts/dev-setup.sh",
          "timeout": 10
        }
      ]
    }
  ]
}

SessionEnd

Si attiva quando termina una sessione. Usalo per la pulizia o per la registrazione finale. Dati stdin:
CampoDescrizione
reasonMotivo della fine della sessione

Corrispondenza di più eventi

Un singolo file di hook può definire hook per più eventi:
{
  "PreToolUse": [
    {
      "matcher": "",
      "hooks": [
        { "type": "command", "command": "./scripts/audit.sh" }
      ]
    }
  ],
  "PostToolUse": [
    {
      "matcher": "",
      "hooks": [
        { "type": "command", "command": "./scripts/audit.sh" }
      ]
    }
  ]
}

Uso del matcher

Il campo matcher è una regex applicata al tool_name dell’evento hook. È disponibile per gli eventi relativi ai tool: PreToolUse, PostToolUse e PermissionRequest. Per gli eventi non relativi ai tool (UserPromptSubmit, Stop, PostCompaction, SessionStart e SessionEnd), tool_name non è presente; usa "" oppure ometti il matcher per eseguire l’hook per ogni evento di quel tipo.
Il matcher non è un glob di autorizzazione. Pattern come mcp__github__* sono utili nelle autorizzazioni, ma i matcher degli hook sono regex. In un matcher di hook, usa mcp__github__.*.
MatcherCorrispondenze
"" (vuoto) o omessoTutti i nomi dei tool per gli eventi relativi ai tool
"exec"Nomi di tool che contengono exec
"^exec$"Solo il tool exec
"^(exec|edit)$"Solo exec o edit
"^mcp__.*"Tutti i tool MCP
"^mcp__github__.*"Tutti i tool del server MCP github
"^mcp__github__create_issue$"Il tool create_issue del server MCP github

Nomi di tool che puoi usare per la corrispondenza

I matcher degli hook vengono eseguiti sugli stessi nomi di tool esposti esternamente che gli script degli hook ricevono tramite stdin come tool_name. I nomi esatti dei tool disponibili possono variare in base alla modalità CLI, al modello e alle integrazioni abilitate. I nomi più comuni dei tool core pubblici sono:
  • read
  • edit
  • grep
  • glob
  • exec
I tool dei server MCP hanno il formato mcp__<server>__<tool>. Per esempio, un tool di un server MCP github denominato create_issue appare come mcp__github__create_issue. Per gli altri tool, fai corrispondere esattamente il tool_name mostrato nello stdin dell’hook. Per confermare l’insieme completo disponibile nella sessione corrente, aggiungi temporaneamente un hook PostToolUse con matcher: "" e registra il payload ricevuto su stdin.