🪝 Guide du développeur · 2026

OpenClaw Hooks : le guide complet du développeur (2026)

Maîtrisez les hooks OpenClaw en 2026 : apprenez à écrire des gardes PreToolUse, l'automatisation PostToolUse et des garde-corps à l'échelle de l'équipe qui vous donnent un contrôle total sur votre agent IA.

📅 Mise à jour : avril 2026⏱ 14 minutes de lecture✍️ Éditorial EasyClaw
  • X(Twitter) icon
  • Facebook icon
  • LinkedIn icon
  • Copy link icon

Que sont les crochets OpenClaw ? (Et pourquoi ils changent la façon dont vous travaillez avec les agents IA)

Si vous avez déjà vu un agent IA écraser un fichier auquel il ne devrait pas toucher, ou si vous souhaiteriez qu'il exécute automatiquement votre suite de tests après chaque modification de code, les hooks OpenClaw sont la réponse. Ils vous permettent d'intercepter, de réagir et de contrôler le comportement des agents précisément aux moments qui comptent.

Les crochets sont petits scripts basés sur des événements qui s'exécutent dans OpenClaw Gateway à des moments précis du cycle de vie d'un agent. Considérez-les comme un middleware pour votre agent IA : ils se situent entre l'agent et les outils qu'il appelle, vous offrant ainsi une couche d'interception programmable.

Il en existe deux types distincts :

  • Crochets internes — des scripts qui s'exécutent à l'intérieur le processus Gateway lui-même. Ils ont un accès direct à l'état de la session, aux métadonnées des appels d'outils et au contexte de travail de l'agent. Zéro surcharge réseau.
  • Webhooks — Rappels HTTP qui se déclenchent sur un point de terminaison externe lorsqu'un événement de cycle de vie se produit. La passerelle envoie une requête POST ; votre serveur gère la logique.

La différence pratique : les crochets internes sont destinés aux garde-corps rapides et synchrones et à l'automatisation locale. Les webhooks sont destinés à tout ce qui doit atteindre l'extérieur de votre machine : notifications Slack, systèmes CI, plates-formes de journalisation.

Hooks internes et webhooks : de lequel avez-vous besoin ?

Facteur Crochet interne Webhook
Lieu d'exécution À l’intérieur du processus Gateway Serveur HTTP externe
Latence Proche de zéro (synchrone) Aller-retour réseau
Accès à l'état de session Direct Charge utile sérialisée uniquement
Idéal pour Protections de fichiers, formatage automatique, scripts locaux Alertes Slack, journalisation d'audit, API externes
Complexité de configuration Faible : juste un répertoire + un fichier de gestionnaire Moyen : nécessite un point de terminaison HTTP en cours d'exécution
Exécution de l'agent bloquant Oui (les hooks PreToolUse peuvent abandonner) Généralement asynchrone/non bloquant

Règle de décision : Si votre crochet doit prévenir une action ou lire les données de session locale, utilisez un crochet interne. S'il le faut avertir un système externe et n'a pas besoin de bloquer l'agent, utilisez un webhook.

Comment fonctionne la découverte de crochets OpenClaw

La passerelle utilise analyse automatique des répertoires pour découvrir des hameçons. Au démarrage, il analyse les répertoires de hook configurés et charge tous les packages de hook valides qu'il trouve.

Deux conditions préalables importantes avant l’activation des hooks :

  1. Les crochets doivent être explicitement activé — un répertoire hook seul ne suffit pas
  2. Au moins une entrée de hook doit être configurée dans les paramètres de votre passerelle

Il s’agit d’un point de confusion courant. Vous pouvez avoir un hook parfaitement écrit dans le bon répertoire, mais si la passerelle n'a pas été invitée à activer les hooks, elle les ignore silencieusement.

Chaque package de hook nécessite exactement deux fichiers :

  • HOOK.md — fichier de métadonnées déclarant le nom, la version, la description, les abonnements aux événements du cycle de vie et toutes les autorisations requises du hook
  • handler.ts (ou handler.js) — le fichier d'implémentation contenant la logique réelle qui s'exécute lorsque l'événement se déclenche

Le fichier HOOK.md est ce que la passerelle lit en premier lors de la découverte. S'il est mal formé ou s'il manque des champs obligatoires, le hook ne se chargera pas - pas d'erreur, juste le silence. Il s’agit de la cause la plus courante des rapports « mon hook ne fonctionne pas ».

Les quatre événements du cycle de vie que tout développeur devrait connaître

Événement Quand il tire Utilisation courante
Utilisation du pré-outil Avant l'agent appelle n'importe quel outil Bloquer les opérations dangereuses, valider les entrées
Utilisation de l'outil de publication Après un appel d'outil est terminé Exécuter des tests, formater le code, enregistrer les résultats
Arrêt Quand la session de l'agent se termine Envoyer des notifications, vider les journaux, nettoyer
Début de session Lorsqu'une nouvelle session d'agent commence Charger le contexte, définir les garde-fous, l'état d'échauffement

Utilisation du pré-outil est le plus puissant — c'est le seul événement qui peut avorter un appel d'outil avant son exécution. Si votre hook renvoie un signal de rejet pendant PreToolUse, l'agent n'appelle jamais l'outil.

Utilisation de l'outil de publication est le cheval de bataille de l’automatisation. Fichier écrit ? Exécutez votre linter. Test modifié ? Exécutez la suite. Code commis ? Déclenchez une build.

Étape par étape : écrire votre premier hook personnalisé à partir de zéro

La plupart de la documentation vous montre des commandes. Cela vous montre le chemin complet de rien à un hook fonctionnel.

But: Exécutez automatiquement ESLint après chaque écriture de fichier.

Étape 1 — Créez le répertoire hook

mkdir -p .OpenClaw/hooks/auto-lint

Étape 2 — Écrivez les métadonnées HOOK.md

# auto-lint

**Version:** 1.0.0
**Event:** PostToolUse
**Description:** Runs ESLint on any file written by the agent
**Tools:** write_file, edit_file

Le champ Tools étend votre hook à des appels d'outils spécifiques. Sans cela, le crochet tire chaque Événement PostToolUse — généralement pas ce que vous voulez.

Étape 3 — Mettre en œuvre handler.ts

import { PostToolUseEvent } from "@OpenClaw/sdk";
import { execSync } from "child_process";

export default function handler(event: PostToolUseEvent) {
  const filePath = event.toolResult?.path;
  if (!filePath) return;

  try {
    execSync(`npx eslint --fix "${filePath}"`, { stdio: "inherit" });
  } catch (err) {
    console.error(`[auto-lint] ESLint failed on ${filePath}`);
  }
}

Étape 4 — Activer via CLI

OpenClaw hooks enable auto-lint

Étape 5 — Vérifiez qu'il est chargé

OpenClaw hooks list

Vous devriez voir auto-lint avec le statut enabled. Démarrez une session, écrivez un fichier et regardez le linter se déclencher.

JavaScript vs TypeScript pour les gestionnaires de hooks : que choisir en 2026

Le SDK est livré avec des saisies TypeScript complètes et, à partir des versions 2026 du SDK, TypeScript est la valeur par défaut recommandée pour les nouveaux crochets.

Facteur Manuscrit Javascript
Type de sécurité Complet : les formes d'événement sont saisies Aucun — surprises d'exécution
Étape de compilation Obligatoire (tsc ou esbuild) Aucun
Compatibilité SDK Assistance de première classe Pris en charge mais pas de saisie semi-automatique
Idéal pour Tout hook qui sera maintenu ou partagé Scripts ponctuels rapides

Si vous écrivez un hook que vous vous engagerez à contrôler la version ou à partager avec une équipe, utilisez TypeScript. Pour un garde-corps local jetable, du JavaScript simple convient : nommez-le simplement handler.js et ignorez l'étape de compilation.

Référence CLI d'OpenClaw Hooks

Commande Drapeaux Ce que ça fait
liste des crochets OpenClaw --json Répertorie tous les hooks découverts et leur statut
les crochets OpenClaw inspectent Affiche les métadonnées complètes de HOOK.md + la configuration actuelle
les crochets OpenClaw activent Active un hook pour le projet en cours
les hooks OpenClaw désactivent Désactive sans supprimer
les crochets OpenClaw installent --yes, --dry-run Installe un pack de hooks à partir du registre
mise à jour des crochets OpenClaw --all, --dry-run Mises à jour des packs de hooks installés

Gestion des packs de hooks : installation, mise à jour et flux de travail --dry-run

Les packs de crochets regroupent plusieurs crochets associés en une seule unité installable. Le workflow d'installation vérifie un hachage d'intégrité avant d'écrire quoi que ce soit sur le disque.

# Preview what would be installed without committing
OpenClaw hooks install productivity-pack --dry-run

# Install non-interactively (for CI environments)
OpenClaw hooks install productivity-pack --yes

# Update all installed packs
OpenClaw hooks update --all

L'indicateur --dry-run est sous-utilisé. Exécutez-le avant tout install ou update pour voir exactement quels fichiers changeraient. Dans les pipelines CI, associez --yes à --dry-run dans une étape de validation distincte avant l'installation réelle.

Référence des hooks groupés : ce qui est livré avec OpenClaw

Crochet État par défaut Ce que ça fait Mieux utilisé quand
mémoire de session Activé Conserve le contexte clé au fil des sessions Projets de longue durée avec tâches récurrentes
les hooks fournis supplémentaires varient selon la version de Gateway Exécutez OpenClaw hooks list --builtin pour voir le vôtre

Exécutez OpenClaw hooks inspect session-memory pour voir ses options de configuration complètes. La plupart des hooks fournis sont livrés avec des valeurs par défaut raisonnables mais exposent des champs de configuration pour la personnalisation.

Cas d'utilisation de Hooks dans le monde réel (avec exemples pratiques)

1. Garde-corps de protection des fichiers (PreToolUse)

Empêchez l'agent de toucher à votre fichier .env :

import { PreToolUseEvent } from "@OpenClaw/sdk";

export default function handler(event: PreToolUseEvent) {
  const target = event.toolInput?.path ?? "";
  if (target.includes(".env")) {
    return { abort: true, reason: "Modification of .env files is blocked by policy." };
  }
}

Déposez ceci dans .OpenClaw/hooks/protect-env/ avec le HOOK.md correspondant abonné à PreToolUse étendu à write_file et edit_file. L'agent reçoit le motif du rejet dans son contexte et ne réessaiera pas.

2. Notification Slack à l'arrêt de la session

import { StopEvent } from "@OpenClaw/sdk";

export default async function handler(event: StopEvent) {
  await fetch(process.env.SLACK_WEBHOOK_URL!, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      text: `OpenClaw session ended. Files modified: ${event.session.filesModified ?? 0}`
    })
  });
}

Abonnez ce hook à l'événement Stop. Chaque fin de session déclenche un message Slack avec un résumé. Aucun serveur externe n'est nécessaire : le processus Gateway effectue directement la demande sortante.

3. Formatage automatique + Test sur PostToolUse

import { PostToolUseEvent } from "@OpenClaw/sdk";
import { execSync } from "child_process";

export default function handler(event: PostToolUseEvent) {
  const file = event.toolResult?.path;
  if (!file?.endsWith(".ts")) return;

  execSync(`prettier --write "${file}"`);
  execSync("npm test -- --passWithNoTests", { stdio: "inherit" });
}

Cela se déclenche après chaque écriture de fichier TypeScript, le formate, puis exécute votre suite de tests. Lent sur les grands projets : définissez-le étroitement à l'aide du champ Tools dans HOOK.md.

Hooks for Teams – Application de garde-fous dans un projet partagé

Validez votre répertoire .OpenClaw/hooks/ dans le contrôle de version. Chaque développeur qui clone le dépôt a automatiquement la même configuration de hook.

  • Verrouillez les hooks critiques sur enabled dans la configuration du projet - empêche les coéquipiers de désactiver accidentellement les protections de fichiers
  • Utilisez les descriptions HOOK.md pour documenter l'intention — traitez-les comme des commentaires de code, les coéquipiers les liront
  • La portée s'accroche à la granularité au niveau de l'outil — les crochets larges ralentissent toutes les interactions des agents, créant des frictions qui amènent les coéquipiers à les désactiver
  • Dans monorepos, les hooks d'un répertoire parent s'appliquent à tous les projets imbriqués, sauf s'ils sont remplacés au niveau du sous-répertoire.

Intégration CI/CD – Exécution de Hooks OpenClaw de manière non interactive

Dans GitHub Actions ou dans tout environnement sans tête, l'invite de confirmation interactive bloquera votre pipeline. Utilisez --yes pour l'ignorer :

- name: Install hooks non-interactively
  run: OpenClaw hooks install qa-pack --yes

- name: Run OpenClaw session
  env:
    OpenClaw_HOOKS_ENABLED: "true"
    SLACK_WEBHOOK_URL: secrets.SLACK_WEBHOOK_URL
  run: OpenClaw run --task "audit dependencies" --yes

Définissez OpenClaw_HOOKS_ENABLED=true comme variable d'environnement pour activer les hooks sans confirmation interactive. Cela remplace l'exigence « au moins une entrée configurée » en mode CI.

Hook Security : ce qui fonctionne, à quoi il peut accéder et comment rester en sécurité

C'est la partie que la plupart de la documentation ignore entièrement - et c'est la section la plus importante si vous installez des packs de hooks communautaires.

À quels hooks peuvent accéder : Les scripts Hook héritent du autorisations complètes du processus Gateway. Si la passerelle s'exécute en tant que compte utilisateur, vos hooks peuvent lire n'importe quel fichier que le compte peut lire, effectuer des requêtes réseau, exécuter des sous-processus et accéder aux variables d'environnement, y compris les secrets.

Le risque des packs de crochets non examinés : Un pack de crochets malveillant pourrait exfiltrer votre .env, vos clés SSH ou vos jetons API, tout en semblant faire quelque chose de bénin comme « formater le code ».

Liste de contrôle d’audit du pack de crochets

Parcourez ceci avant d'installer un pack tiers :

  • Lisez le HOOK.md complet : les autorisations déclarées correspondent-elles à l'objectif déclaré ?
  • Lisez chaque ligne de handler.ts/js — recherchez l'accès fetch(), execSync, process.env
  • Vérifiez la provenance npm si le pack est distribué par le registre (npm info <pack> --json | grep provenance)
  • Vérifiez l'identité de l'éditeur : s'agit-il d'un responsable connu ou d'un nouveau compte ?
  • Exécutez d'abord --dry-run et examinez le manifeste du fichier.
  • N'installez jamais de packs de crochets avec --yes sans avoir d'abord effectué les étapes ci-dessus.

La commande OpenClaw hooks inspect vous montre le chemin source complet d'un hook installé - utilisez-la pour réexaminer le code du gestionnaire après les mises à jour.

Dépannage des hooks OpenClaw - Lorsqu'ils ne se déclenchent pas

Crochet pas découvert du tout

  • Vérifiez que le répertoire se trouve dans un chemin de hooks analysé : OpenClaw hooks list --verbose
  • Confirmez que HOOK.md existe et est valide – les champs obligatoires manquants ignorent silencieusement le crochet
  • Vérifiez que les hooks sont activés globalement et qu'au moins une entrée est configurée

Crochet découvert mais ne tirant pas

  • Exécutez OpenClaw hooks inspect <name> — vérifiez que le champ Event dans HOOK.md correspond à l'événement de cycle de vie que vous attendez
  • Vérifiez la portée Tools — si vous avez étendu la portée à write_file mais que l'agent appelle create_file, le hook ne se déclenchera pas
  • Confirmez que l'état du hook indique enabled, et non loaded (chargé signifie découvert mais non actif)

Hook se déclenche mais les erreurs du gestionnaire sont silencieuses

  • Ajoutez des blocs try/catch explicites avec la connexion console.error dans votre gestionnaire
  • Les journaux de passerelle sont écrits dans ~/.OpenClaw/logs/ — vérifiez le journal de session le plus récent pour les lignes préfixées [hook]
  • Utilisez OpenClaw hooks inspect <name> --logs pour faire apparaître le dernier résultat d'exécution

Hook ralentit chaque action de l'agent

  • Profil avec OpenClaw hooks list --timing pour voir le temps d'exécution par hook
  • Déplacez les appels execSync synchrones vers async où le résultat n'a pas besoin de bloquer l'agent
  • La portée s'accroche à des outils spécifiques plutôt que de s'abonner à tous les événements PostToolUse

Améliorez le flux de travail de vos agents IA avec EasyClaw

Les hooks OpenClaw vous donnent le contrôle au niveau de l'agent. EasyClaw vous offre ce contrôle, ainsi qu'un environnement de bureau complet conçu pour les développeurs et les équipes de contenu qui ont besoin de fiabilité, de confidentialité et de vitesse sans dépendance au cloud.

  • Exécutez des hooks, des agents et des automatisations entièrement sur votre propre machine : aucune donnée ne quitte votre environnement
  • Intégration native avec votre chaîne d'outils de développement existante : linters, exécuteurs de tests, formateurs, pipelines CI
  • Gestion visuelle des hooks : activez, désactivez et inspectez les hooks sans mémoriser les indicateurs CLI
  • Prêt pour l'équipe : partagez les configurations de hook, les garde-corps de verrouillage et les journaux de session d'audit à partir d'un seul tableau de bord
Essayez EasyClaw gratuitement →

Foire aux questions

Q : Un hook peut-il empêcher complètement l’agent d’exécuter un appel d’outil ?

R : Oui – seuls les hooks PreToolUse peuvent abandonner un appel d'outil. Renvoyez { abort: true, reason: "..." } de votre gestionnaire et la passerelle empêche l'exécution de l'outil. L'agent reçoit la chaîne de motif dans son contexte. Les hooks PostToolUse, Stop et SessionStart ne peuvent pas abandonner les actions de manière rétroactive.

Q : Que se passe-t-il si mon gestionnaire de hook renvoie une erreur non gérée ?

R : Par défaut, une erreur non gérée dans un gestionnaire de hook est consignée dans le journal de session Gateway mais ne fait pas planter la session de l'agent. L'agent continue comme si le crochet n'avait pas tiré. C'est inhérent à la conception : les hooks ne doivent jamais bloquer les fonctionnalités principales de l'agent. Enveloppez toujours la logique de votre gestionnaire dans try/catch et gérez les erreurs explicitement afin d'avoir une visibilité sur les échecs.

Q : Puis-je utiliser async/await dans les gestionnaires de crochets ?

R : Oui, les gestionnaires PreToolUse et PostToolUse prennent en charge les fonctions asynchrones. Pour PreToolUse, la passerelle attend le gestionnaire avant de décider de continuer — la logique d'abandon asynchrone fonctionne donc correctement. N'oubliez pas que les opérations asynchrones de longue durée dans PreToolUse retarderont chaque appel d'outil, alors gardez-les rapides.

Q : Les hooks s'appliquent-ils à tous les projets ou uniquement à celui dans lequel ils se trouvent ?

R : Les hooks placés dans le répertoire .OpenClaw/hooks/ d'un projet sont limités au projet et ne s'activent que pour les sessions de ce projet. Les hooks globaux peuvent être placés dans ~/.OpenClaw/hooks/ et s'appliquer à tous les projets. Dans monorepos, les hooks d'un répertoire parent s'appliquent aux projets imbriqués à moins qu'ils ne soient remplacés au niveau du sous-répertoire.

Q : L’exécution de nombreux hooks a-t-elle un coût en termes de performances ?

R : Chaque hook ajoute de la latence à l’événement auquel il est abonné. Un hook rapide et bien ciblé (moins de 50 ms) est imperceptible. Des problèmes surviennent lorsque les hooks exécutent des opérations synchrones lourdes sur chaque événement PostToolUse sans portée au niveau de l'outil. Utilisez OpenClaw hooks list --timing pour créer un profil, étendez la portée à des outils spécifiques dans HOOK.md et déplacez le travail non bloquant vers l'asynchrone lorsque cela est possible.

Q : Les hooks peuvent-ils accéder en toute sécurité aux secrets des variables d’environnement ?

R : Les hooks héritent de l'environnement complet du processus Gateway, donc process.env.MY_SECRET fonctionne dans n'importe quel gestionnaire. Pour les environnements CI, injectez des secrets via le gestionnaire de secrets de votre pipeline (par exemple, GitHub Actions Secrets) plutôt que de les coder en dur. Ne confiez jamais de secrets à HOOK.md ou aux fichiers de gestionnaire : traitez les fichiers source du hook comme du code qui sera examiné et contrôlé en version.

Réflexions finales – Choisir la bonne stratégie de hook pour votre flux de travail

Scénario Approche recommandée
Solo dev – protégez les fichiers sensibles Hook interne, PreToolUse, limité aux outils d'écriture
Développement solo – tests exécutés automatiquement Hook interne, PostToolUse, limité aux types de fichiers adjacents au test
Équipe : appliquer des garde-fous partagés Valider les hooks dans le contrôle de version, verrouiller les hooks critiques activés dans la configuration du projet
Équipe — piste d'audit Publication du hook d'événement Stop sur un point de terminaison de journalisation partagé
Pipeline CI – sessions automatisées --yes flag + OpenClaw_HOOKS_ENABLED env var, --dry-run dans l'étape de validation
Notifications externes Webhook ou hook d'événement Stop avec fetch() vers Slack/PagerDuty

Commencez avec un hook qui résout un vrai problème : un garde de fichiers ou un linter post-écriture. Faites-le fonctionner de bout en bout avant d’en superposer davantage. La puissance des hooks composés : une session avec trois hooks de bonne portée qui se déroulent sans problème est nettement plus fiable qu'une session avec dix hooks de mauvaise portée auxquels vous ne faites pas confiance.

Le premier hook le plus efficace pour la plupart des développeurs : un PreToolUse garde sur vos .env et vos fichiers secrets. L'écriture prend dix minutes, l'exécution ne nécessite aucune maintenance et élimine définitivement toute une classe d'erreurs d'agent.