Home › Claude Code › Hook
PanoramicaInstallazioneriferimento della CLIPrezzi e limitiAgent SDKSkill e pluginGitHubWeb, desktop e IDEModelliErroriÈ open source?TutorialPer studentiAutomazione QAConfronto con CursorConfronto con Codex e OpenCodeSubagentiHookMCPEcosistemaVS CodeOpenRouterLimiti di frequenzaGuida in cinese
Ultimo aggiornamento: 11 ottobre 2026

Hook di Claude Code: controllo deterministico su ciò che fa l'agente

Gli hook sono comandi shell che Claude Code esegue in punti prestabiliti del proprio ciclo: prima di una chiamata a uno strumento, dopo una chiamata, quando invii un prompt e quando termina. A differenza delle istruzioni in CLAUDE.md, che il modello può seguire o meno, un hook viene sempre eseguito. Sono il modo per rendere vincolanti le regole.

TLDR

  • Configurati in .claude/settings.json (progetto) oppure ~/.claude/settings.json (utente), oppure con /hooks.
  • Eventi: PreToolUse, PostToolUse, UserPromptSubmit, Notification, Stop, SubagentStop, PreCompact, SessionStart.
  • L'hook riceve JSON su stdin (nome dello strumento, input, sessione); il codice di uscita 0 consente l'operazione, il codice di uscita 2 la blocca e restituisce stderr a Claude.
  • Usi tipici: formattazione dopo ogni modifica, blocco dei comandi pericolosi, test obbligatori prima di terminare, notifiche desktop.

Struttura di un hook

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "npx prettier --write \"$(jq -r .tool_input.file_path)\"" }
        ]
      }
    ]
  }
}

Tre parti: l'evento, un matcher (una regex sul nome dello strumento per gli eventi degli strumenti; omettilo per includere tutto) e uno o più comandi. Il comando riceve su stdin un oggetto JSON che descrive l'evento; per gli eventi degli strumenti include tool_name e tool_input, che permette all'esempio precedente di individuare il file appena modificato. Inseriscilo in .claude/settings.json per condividerlo con il repository, ~/.claude/settings.json per uso personale, oppure esegui /hooks e lascia che sia Claude Code a scriverlo.

Gli eventi

  • PreToolUse — prima dell'esecuzione di uno strumento. L'unico evento che può bloccare: il codice di uscita 2 annulla la chiamata e Claude legge stderr come motivo.
  • PostToolUse — dopo che uno strumento ha completato l'operazione con successo. Formattatori, linter e controlli dei tipi sul file modificato.
  • UserPromptSubmit — quando invii un prompt; può aggiungere contesto o rifiutare il prompt.
  • Stop / SubagentStop — quando l'agente (o un sottoagente) sta per terminare. Qui il codice di uscita 2 significa "non è ancora finita": l'uso classico è impedire l'arresto finché i test falliscono.
  • PreCompact — prima di /compact; salva tutto ciò che ti serve dalla trascrizione completa.
  • SessionStart — quando una sessione inizia o riprende; carica l'ambiente, stampa promemoria.
  • Notification — quando Claude Code richiede la tua attenzione (richiesta di autorizzazione, inattività); collegalo a una notifica desktop o Slack.

Bloccare i comandi pericolosi

#!/usr/bin/env bash
# .claude/hooks/guard.sh  -- PreToolUse, matcher: Bash
cmd=$(jq -r '.tool_input.command')
if echo "$cmd" | grep -Eq 'rm -rf|git push --force|DROP TABLE|--no-verify'; then
  echo "blocked by guard.sh: $cmd" >&2
  exit 2
fi
exit 0

Il codice di uscita 2 definisce il comportamento: la chiamata allo strumento non viene eseguita e tutto ciò che l'hook ha scritto su stderr diventa la spiegazione mostrata a Claude, che può così scegliere un approccio diverso anziché riprovare la stessa operazione. Qualsiasi altro codice di uscita diverso da zero viene registrato, ma non blocca l'operazione.

"Non fermarti finché i test non passano"

#!/usr/bin/env bash
# Stop hook: refuse to finish while the suite is red
if ! npm test --silent >/tmp/claude-test.log 2>&1; then
  echo "Tests are failing; fix them before finishing:" >&2
  tail -n 40 /tmp/claude-test.log >&2
  exit 2
fi

Abbinalo a un limite di --max-turns nelle esecuzioni senza interfaccia, così un errore davvero irrisolvibile non genera un ciclo infinito.

Hook, CLAUDE.md e autorizzazioni a confronto

CLAUDE.md contiene indicazioni che il modello legge; /permissions è un elenco di ciò che può fare senza chiedere; gli hook sono codice che viene eseguito in ogni caso. Usa CLAUDE.md per lo stile e il contesto, le autorizzazioni per stabilire cosa è consentito e cosa richiede conferma, e gli hook per tutto ciò che deve essere garantito ogni volta: formattazione, scansione dei segreti, controlli obbligatori dei test, log di audit. Si combinano: un'autorizzazione consente l'esecuzione di Bash(git *) , mentre un hook PreToolUse blocca comunque git push --force.

Gli hook e il gateway

Gli hook vengono eseguiti localmente e non accedono mai all'API, quindi non cambia nulla quando Claude Code punta a ANTHROPIC_BASE_URL=https://aiprimetech.io. Una combinazione utile: un hook Stop che stampa /costcome riepilogo dell'utilizzo ricavato dai tuoi log, così un team che usa crediti a consumo vede il costo di ogni sessione alla sua conclusione.

Provalo prima gratuitamente

I nuovi account ricevono $5 di credito API gratuito con il codice CLAUDECODE — abbastanza per una serata con Claude Code su Sonnet — poi crediti pari a 7.69231× il valore nominale.

export ANTHROPIC_BASE_URL=https://aiprimetech.io
export ANTHROPIC_API_KEY=your_key

Crea un account con il codice CLAUDECODE

Domande frequenti

Che cosa sono gli hook di Claude Code?

Comandi shell che Claude Code esegue automaticamente in corrispondenza degli eventi del proprio ciclo: prima e dopo le chiamate agli strumenti, all'invio di un prompt e all'arresto. Sono deterministici, a differenza delle istruzioni in CLAUDE.md.

Come posso bloccare un comando con un hook?

Con un hook PreToolUse con matcher Bash che esamina tool_input.command da stdin e termina con il codice 2; il testo di stderr viene mostrato a Claude come motivo.

Dove si inseriscono gli hook?

In .claude/settings.json nel progetto (condivisi) oppure in ~/.claude/settings.json (personali), sotto la chiave hooks; /hooks permette di modificarli in modo interattivo.

Esegui Claude Code sul gateway

Stessi modelli, due variabili d'ambiente, crediti pari a 7.69231× il valore nominale — oppure un piano illimitato a tariffa fissa. Nuovi account: $5 di credito API gratuito con il codice CLAUDECODE.

Ottieni una chiave API Scopri i piani illimitati

AI Prime Tech è un gateway API indipendente e non è affiliato ad Anthropic, né approvato o sponsorizzato da Anthropic. «Claude» e «Claude Code» sono marchi di Anthropic. Le funzionalità di Claude Code descritte qui rispecchiano la documentazione pubblica di Anthropic al momento della stesura e cambiano frequentemente; i prezzi e gli elenchi dei modelli presenti in questa pagina vengono letti dalle impostazioni attuali di questo gateway.

Altre guide su Claude Code

Claude Code: la guida completaCome installare Claude CodeDocumentazione della CLI di Claude Code: comandi e flagPrezzi e limiti di Claude Code, spiegatiL'SDK di Claude Code, ora Claude Agent SDKSkill e plugin di Claude CodeClaude Code in GitHub: App, Action e @claudeClaude Code ha un'interfaccia web? Le versioni web, desktop e per IDE spiegateQuale modello usa Claude Code e come cambiarloErrori di Claude Code e come risolverliClaude Code è open source?Tutorial di Claude Code: la tua prima sessione realeClaude per studenti: Claude Code, l'API e ciò che offre davvero il settore educationCome usare Claude Code per l'automazione QAClaude Code e Cursor a confronto: quale scegliere, quando — e come usarli entrambiClaude Code vs Codex vs OpenCode: confronto tra gli agenti da terminaleSubagenti di Claude Code: come funzionano, come definirli e team di agentiMCP in Claude Code: connessione ai server, ambiti, MCP remoto ed esempi concretiL'ecosistema Claude Code: router, framework, plugin e gli elenchi che li raccolgonoClaude Code in VS Code: l'estensione, l'uso dal terminale e gli erroriCome usare OpenRouter in Claude Code (e quando evitarlo)Errore di limite di frequenza di Claude: cosa significa "Errore API: limite di frequenza raggiunto" e come risolverloCome usare Claude Code: dall'installazione all'uso quotidiano