claude-code-notifier
fonctionnement guides faq
◐Français
English العربية Deutsch Español Français עברית Italiano 日本語 한국어 Nederlands Polski Português (Brasil) Русский Türkçe Tiếng Việt 简体中文 繁體中文
Commencer
Tous les guides

Les hooks de Claude Code expliqués : chaque événement et à quoi il sert

Mis à jour le 31 octobre 2026 · 7 min de lecture
sur cette page 01Comment un hook est structuré 02Où se trouvent les hooks 03Types de handlers 04Matchers 05Entrée : ce que reçoit ton hook 06Sortie : codes de sortie et JSON 07Tous les événements de hook 08Quels événements comptent pour les notifications 09Où se situe Claude Code Notifier 10FAQ

Les hooks de Claude Code sont des commandes (ou des appels HTTP, des prompts et quelques autres types de handlers) que Claude Code exécute automatiquement à des moments précis d'une session : avant l'exécution d'un outil, quand une permission est requise ou quand Claude a fini de répondre, par exemple. Tu les définis sous une clé hooks dans un fichier de paramètres comme ~/.claude/settings.json. Chaque hook reçoit sur stdin un JSON décrivant l'événement et peut répondre via son code de sortie ou un objet JSON sur stdout, ce qui lui permet de journaliser, d'envoyer une notification, de bloquer une action ou de répondre à ta place.

01Comment un hook est structuré

Une configuration de hook comporte trois niveaux :

  1. L'événement de hook, comme PreToolUse ou Stop.
  2. Un groupe de matchers, qui filtre quand il se déclenche, par exemple « uniquement pour l'outil Bash ».
  3. Un ou plusieurs handlers de hook, c'est-à-dire ce qui s'exécute réellement.
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/lint-check.sh"
          }
        ]
      }
    ]
  }
}

Ceci lance un script de lint après que Claude a écrit ou modifié un fichier. Pour ajouter un second événement, ajoute une clé voisine dans le même objet hooks.

02Où se trouvent les hooks

FichierS'applique àPartagé ?
~/.claude/settings.jsonTous tes projetsNon, uniquement ta machine
.claude/settings.jsonUn projetOui, peut être commité
.claude/settings.local.jsonUn projetNon
Paramètres de politique géréeTon organisationDéfinis par les admins
Le hooks/hooks.json d'un pluginTant que le plugin est activéOui

Les hooks de différents fichiers s'additionnent au lieu de se remplacer. Tape /hooks dans Claude Code pour voir tous les hooks actifs et leur provenance.

En session interactive, Claude Code retient les hooks, même les tiens, tant que tu n'as pas accepté la boîte de dialogue de confiance du workspace pour le dossier.

03Types de handlers

La plupart des hooks sont de type "type": "command", qui exécute une commande shell. Il en existe quatre autres :

  • http : envoie le JSON de l'événement en POST à une URL et lit le corps de la réponse.
  • mcp_tool : appelle un outil sur un serveur MCP que tu as configuré.
  • prompt : pose une question en un seul tour à un modèle Claude et lit une décision en JSON.
  • agent : lance un sous-agent qui peut lire des fichiers avant de décider (expérimental).

Les hooks de type command s'exécutent avec toutes tes permissions utilisateur, via sh -c sur macOS et Linux, et via Git Bash (ou PowerShell) sur Windows. Ajoute "async": true pour en lancer un en arrière-plan ; il ne peut alors plus prendre de décisions.

04Matchers

Le matcher détermine quelles occurrences d'un événement déclenchent le hook. Ce sur quoi il porte dépend de l'événement : le nom de l'outil pour les événements d'outil, le type de notification pour Notification, la façon dont la session a démarré pour SessionStart, etc.

  • "*", "" ou l'absence de matcher correspondent à tout.
  • Les lettres, chiffres, _, -, espaces, | et , sont traités comme des noms exacts. Edit|Write correspond à l'un ou l'autre outil.
  • Tout le reste est interprété comme une expression régulière JavaScript : mcp__memory__.* correspond donc à tous les outils d'un même serveur MCP.

Les matchers sont sensibles à la casse. Certains événements, dont Stop et UserPromptSubmit, ignorent les matchers. Pour les événements d'outil, un champ if contenant une règle de permission comme "Bash(git *)" restreint encore davantage un handler donné.

05Entrée : ce que reçoit ton hook

Chaque hook reçoit sur stdin un JSON avec quelques champs communs, dont session_id, transcript_path, cwd et hook_event_name, ainsi que des champs propres à l'événement. Un hook PreToolUse pour un appel Bash reçoit par exemple aussi tool_name et tool_input.command. Lis-le avec jq ou n'importe quel parseur JSON :

#!/bin/bash
input=$(cat)
cmd=$(jq -r '.tool_input.command // empty' <<<"$input")
echo "Claude wants to run: $cmd" >> ~/claude-commands.log
exit 0

06Sortie : codes de sortie et JSON

Un hook peut répondre de deux façons.

Codes de sortie. 0 signifie succès. 2 est une erreur bloquante : sur les événements qui peuvent bloquer, l'action s'arrête et ton stderr sert de motif. Tout autre code, y compris le classique 1, est une erreur non bloquante : l'action continue et tu vois un avertissement d'erreur du hook. Si ton hook doit faire respecter une règle, sors avec 2, pas 1.

JSON sur stdout. Pour un contrôle plus fin, sors avec 0 et affiche un unique objet JSON. Certains champs fonctionnent partout, comme continue: false pour arrêter complètement Claude. D'autres dépendent de l'événement : Stop utilise decision: "block" avec un reason, tandis que PreToolUse et PermissionRequest placent leur décision dans hookSpecificOutput. N'affiche rien d'autre sur stdout : une ligne parasite venant de ton profil shell empêche Claude Code de lire le JSON.

07Tous les événements de hook

ÉvénementQuand il se déclenchePeut bloquer ?
SessionStartUne session démarre ou reprendNon (ajoute du contexte)
SetupLancé avec --init-only, ou --init / --maintenance avec -pNon
InstructionsLoadedUn fichier CLAUDE.md ou .claude/rules/*.md est chargéNon
UserPromptSubmitTu envoies un prompt, avant que Claude le voieOui
UserPromptExpansionUne commande saisie se développe en promptOui
PreToolUseAvant chaque appel d'outilOui
PermissionRequestUn appel d'outil nécessite une décision de permissionAutorise ou refuse via JSON
PermissionDeniedLe mode auto refuse un appel d'outilNon
PostToolUseAprès un appel d'outil réussiNon (l'outil a déjà tourné)
PostToolUseFailureAprès l'échec d'un appel d'outilNon
PostToolBatchAprès un lot d'appels d'outils parallèles, avant le prochain appel au modèleOui
NotificationClaude Code envoie une notificationNon
MessageDisplayPendant l'affichage du texte de réponse de ClaudeNon (peut modifier ce qui s'affiche)
SubagentStart / SubagentStopUn subagent démarre ou se termineSubagentStop uniquement
TaskCreated / TaskCompletedUne tâche est créée ou marquée comme terminéeOui
StopClaude a fini de répondreOui (relance Claude)
StopFailureLe tour se termine sur une erreur d'APINon
TeammateIdleUn coéquipier d'une agent team est sur le point de passer inactifOui
ConfigChangeUn fichier de settings change pendant une sessionOui
CwdChangedLe répertoire de travail changeNon
DirectoryAddedUn répertoire est ajouté avec /add-dirNon
FileChangedUn fichier surveillé change sur le disqueNon
WorktreeCreate / WorktreeRemoveUn worktree est créé ou suppriméOui
PreCompact / PostCompactAvant et après la compaction du contextePreCompact uniquement
PreModelSwitch / PostModelSwitchAvant et après le changement de modèlePreModelSwitch uniquement
Elicitation / ElicitationResultUn serveur MCP te demande une saisie, puis après ta réponseOui
SessionEndUne session se termineNon

Anthropic ajoute des événements de temps en temps, donc consulte la référence des hooks pour la liste à jour et les champs d'entrée de chaque événement.

08Quels événements comptent pour les notifications

Quatre événements couvrent presque tout ce dont on veut être prévenu :

  • Stop pour « Claude a terminé ». Voir le guide du Stop hook.
  • Notification pour « Claude t'attend », avec des types comme permission_prompt et idle_prompt. Voir le guide du Notification hook.
  • PermissionRequest pour être prévenu, ou répondre, dès qu'une permission est nécessaire. Voir le guide PermissionRequest.
  • PreToolUse sur l'outil AskUserQuestion, pour voir ou répondre aux questions à choix multiples de Claude. Voir répondre aux questions depuis ton téléphone.

Pour une config desktop prête à coller, commence par comment recevoir une notification quand Claude Code a terminé.

09Où se situe Claude Code Notifier

Claude Code Notifier repose entièrement sur ces hooks. Son outil en ligne de commande gratuit, ccn, tourne sur Mac, Windows et Linux. L'installation ajoute sept entrées de hook dans ~/.claude/settings.json, chacune lançant ccn hook, et crée une sauvegarde unique du fichier. ccn s'exécute quelques millisecondes par événement puis se ferme : rien ne reste actif.

Seul, il affiche des notifications desktop. Avec l'app iPhone ou Android associée, les mêmes hooks renvoient tes réponses : autoriser ou refuser une permission, répondre à une question, ou envoyer l'instruction suivante quand Claude s'arrête. C'est un outil indépendant, non développé par Anthropic. Si tu as juste besoin d'un log ou d'une étape de lint, quelques lignes à toi suffisent. Plus de détails sur la page ccn.

10FAQ

Comment tester un hook sans attendre Claude ?

Envoie un JSON d'exemple au script via un pipe et vérifie le code de sortie : echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh; echo $?. Ensuite, lance /hooks dans Claude Code pour vérifier qu'il est enregistré sous le bon événement.

Pourquoi mon hook ne se lance pas ?

Les causes habituelles : un JSON invalide dans settings.json (virgules finales, commentaires), un matcher qui ne correspond pas exactement (ils sont sensibles à la casse), un script non exécutable, ou un dossier que tu n'as pas encore approuvé. Lance Claude Code avec claude --debug et lis le log de debug pour voir ce qui s'est exécuté. La liste complète est dans la checklist de dépannage.

Comment désactiver tous les hooks temporairement ?

Mets "disableAllHooks": true dans un fichier de settings. Pour les ignorer le temps d'une seule session, lance Claude Code avec --settings '{"disableAllHooks": true}'. Il n'existe pas d'interrupteur pour un seul hook : il faut supprimer son entrée. Aucune de ces options ne désactive les hooks définis par ton organisation dans les managed settings.

Quel est le timeout par défaut d'un hook ?

Dix minutes (600 secondes) pour les hooks de type command, HTTP et outil MCP, 30 secondes pour les hooks prompt et 60 pour les hooks agent. Quelques événements ont des valeurs par défaut plus courtes, et tu peux définir timeout en secondes sur n'importe quel handler.

Claude Code Notifier Reçois un push sur ton téléphone quand Claude Code a terminé ou a besoin de toi, puis approuve, refuse ou réponds directement. L'outil en ligne de commande ccn est gratuit sur Mac, Windows et Linux.
Télécharger pour iOS Télécharger pour Android Installer ccn

Guides associés

  • Comment recevoir une notification quand Claude Code a terminéUtilise un Stop hook pour « terminé » et un Notification hook pour « attend ta réponse ». Des configs prêtes à copier pour Mac, Windows et Linux, plus les alertes sur téléphone.
  • Le Notification hook de Claude Code : quand il se déclenche et comment l'utiliserQuand le Notification hook de Claude Code se déclenche, ce que signifient permission_prompt et idle_prompt, les données qu'il reçoit et pourquoi il attend avant de se déclencher.
  • Le Stop hook de Claude Code : lancer quelque chose quand Claude a terminéComment fonctionne le Stop hook de Claude Code, quelles données il reçoit, comment lancer une commande quand Claude a terminé, et comment faire continuer Claude sans risque.
  • Répondre aux demandes de permission depuis un hook (PermissionRequest)Comment fonctionne le hook PermissionRequest de Claude Code, comment autoriser ou refuser depuis un script, et pourquoi les règles de permission sont souvent le meilleur outil.
claude-code-notifier

Claude Code Notifier est une application tierce indépendante. Elle n’est ni affiliée à Anthropic, PBC, ni approuvée ou parrainée par celle-ci. « Claude » et « Claude Code » sont des marques d’Anthropic, PBC.

apps App iOS App Android ccn pour macOS, Windows et Linux Tous les guides
mentions légales Politique de confidentialité Conditions d’utilisation Autres langues © 2026 touchtap. Tous droits réservés. TouchTap Ltd est immatriculée en Angleterre et au pays de Galles, numéro 13942589.