Passer au contenu principal

Points d’accroche

Les points d’accroche sont de petits scripts qui s’exécutent lorsqu’un événement se produit dans la Gateway. Ils sont automatiquement détectés à partir de répertoires et peuvent être inspectés avec openclaw hooks. Il existe deux types de points d’accroche dans OpenClaw :
  • Points d’accroche internes (cette page) : s’exécutent dans la Gateway lorsque des événements d’agent se déclenchent, comme /new, /reset, /stop ou des événements du cycle de vie.
  • Webhooks : points de terminaison HTTP externes qui permettent à d’autres systèmes de déclencher du travail dans OpenClaw. Consultez Webhooks.
Les points d’accroche peuvent aussi être inclus dans des plugins. openclaw hooks list affiche à la fois les points d’accroche autonomes et ceux gérés par des plugins.

Démarrage rapide

# Lister les points d’accroche disponibles
openclaw hooks list

# Activer un point d’accroche
openclaw hooks enable session-memory

# Vérifier l’état des points d’accroche
openclaw hooks check

# Obtenir des informations détaillées
openclaw hooks info session-memory

Types d’événements

ÉvénementQuand il se déclenche
command:newCommande /new émise
command:resetCommande /reset émise
command:stopCommande /stop émise
commandTout événement de commande (écouteur général)
session:compact:beforeAvant que la compaction résume l’historique
session:compact:afterAprès la fin de la compaction
session:patchQuand les propriétés de session sont modifiées
agent:bootstrapAvant l’injection des fichiers bootstrap
gateway:startupAprès le démarrage des canaux et le chargement des hooks
message:receivedMessage entrant depuis n’importe quel canal
message:transcribedAprès la fin de la transcription audio
message:preprocessedAprès la fin de tout le traitement des médias et des liens
message:sentMessage sortant distribué

Écrire des points d’accroche

Structure d’un point d’accroche

Chaque point d’accroche est un répertoire contenant deux fichiers :
my-hook/
├── HOOK.md          # Métadonnées + documentation
└── handler.ts       # Implémentation du gestionnaire

Format de HOOK.md

---
name: my-hook
description: "Brève description de ce que fait ce point d’accroche"
metadata:
  { "openclaw": { "emoji": "🔗", "events": ["command:new"], "requires": { "bins": ["node"] } } }
---

# Mon point d’accroche

La documentation détaillée va ici.
Champs de métadonnées (metadata.openclaw) :
ChampDescription
emojiEmoji d’affichage pour la CLI
eventsTableau des événements à écouter
exportExport nommé à utiliser (par défaut "default")
osPlateformes requises (par ex. ["darwin", "linux"])
requiresbins, anyBins, env ou chemins config requis
alwaysIgnore les vérifications d’éligibilité (booléen)
installMéthodes d’installation

Implémentation du gestionnaire

const handler = async (event) => {
  if (event.type !== "command" || event.action !== "new") {
    return;
  }

  console.log(`[my-hook] Commande new déclenchée`);
  // Votre logique ici

  // Facultatif : envoyer un message à l’utilisateur
  event.messages.push("Point d’accroche exécuté !");
};

export default handler;
Chaque événement inclut : type, action, sessionKey, timestamp, messages (ajouter avec push pour envoyer à l’utilisateur) et context (données spécifiques à l’événement).

Points clés du contexte d’événement

Événements de commande (command:new, command:reset) : context.sessionEntry, context.previousSessionEntry, context.commandSource, context.workspaceDir, context.cfg. Événements de message (message:received) : context.from, context.content, context.channelId, context.metadata (données spécifiques au fournisseur, notamment senderId, senderName, guildId). Événements de message (message:sent) : context.to, context.content, context.success, context.channelId. Événements de message (message:transcribed) : context.transcript, context.from, context.channelId, context.mediaPath. Événements de message (message:preprocessed) : context.bodyForAgent (corps final enrichi), context.from, context.channelId. Événements bootstrap (agent:bootstrap) : context.bootstrapFiles (tableau modifiable), context.agentId. Événements de patch de session (session:patch) : context.sessionEntry, context.patch (uniquement les champs modifiés), context.cfg. Seuls les clients privilégiés peuvent déclencher des événements de patch. Événements de compaction : session:compact:before inclut messageCount, tokenCount. session:compact:after ajoute compactedCount, summaryLength, tokensBefore, tokensAfter.

Détection des points d’accroche

Les points d’accroche sont détectés à partir de ces répertoires, par ordre de priorité d’écrasement croissante :
  1. Points d’accroche intégrés : fournis avec OpenClaw
  2. Points d’accroche de plugin : points d’accroche inclus dans des plugins installés
  3. Points d’accroche gérés : ~/.openclaw/hooks/ (installés par l’utilisateur, partagés entre espaces de travail). Les répertoires supplémentaires provenant de hooks.internal.load.extraDirs ont cette même priorité.
  4. Points d’accroche d’espace de travail : <workspace>/hooks/ (par agent, désactivés par défaut jusqu’à activation explicite)
Les points d’accroche d’espace de travail peuvent ajouter de nouveaux noms de hooks, mais ne peuvent pas écraser des points d’accroche intégrés, gérés ou fournis par un plugin portant le même nom.

Packs de points d’accroche

Les packs de points d’accroche sont des paquets npm qui exportent des hooks via openclaw.hooks dans package.json. Installez-les avec :
openclaw plugins install <path-or-spec>
Les spécifications npm sont limitées au registre (nom du paquet + version exacte facultative ou dist-tag). Les spécifications Git/URL/fichier et les plages semver sont rejetées.

Points d’accroche intégrés

Point d’accrocheÉvénementsCe qu’il fait
session-memorycommand:new, command:resetEnregistre le contexte de session dans <workspace>/memory/
bootstrap-extra-filesagent:bootstrapInjecte des fichiers bootstrap supplémentaires à partir de motifs glob
command-loggercommandJournalise toutes les commandes dans ~/.openclaw/logs/commands.log
boot-mdgateway:startupExécute BOOT.md au démarrage de la gateway
Activez n’importe quel point d’accroche intégré :
openclaw hooks enable <hook-name>

Détails de session-memory

Extrait les 15 derniers messages utilisateur/assistant, génère un slug de nom de fichier descriptif via LLM, puis enregistre le tout dans <workspace>/memory/YYYY-MM-DD-slug.md. Nécessite que workspace.dir soit configuré.

Configuration de bootstrap-extra-files

{
  "hooks": {
    "internal": {
      "entries": {
        "bootstrap-extra-files": {
          "enabled": true,
          "paths": ["packages/*/AGENTS.md", "packages/*/TOOLS.md"]
        }
      }
    }
  }
}
Les chemins sont résolus relativement à l’espace de travail. Seuls les noms de base bootstrap reconnus sont chargés (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md, MEMORY.md).

Détails de command-logger

Journalise chaque commande slash dans ~/.openclaw/logs/commands.log.

Détails de boot-md

Exécute BOOT.md depuis l’espace de travail actif au démarrage de la gateway.

Hooks de plugin

Les plugins peuvent enregistrer des hooks via le Plugin SDK pour une intégration plus poussée : interception des appels d’outils, modification des prompts, contrôle du flux de messages, etc. Le Plugin SDK expose 28 hooks couvrant la résolution de modèles, le cycle de vie des agents, le flux des messages, l’exécution des outils, la coordination des sous-agents et le cycle de vie de la gateway. Pour la référence complète des hooks de plugin, y compris before_tool_call, before_agent_reply, before_install et tous les autres hooks de plugin, consultez Plugin Architecture.

Configuration

{
  "hooks": {
    "internal": {
      "enabled": true,
      "entries": {
        "session-memory": { "enabled": true },
        "command-logger": { "enabled": false }
      }
    }
  }
}
Variables d’environnement par hook :
{
  "hooks": {
    "internal": {
      "entries": {
        "my-hook": {
          "enabled": true,
          "env": { "MY_CUSTOM_VAR": "value" }
        }
      }
    }
  }
}
Répertoires de hooks supplémentaires :
{
  "hooks": {
    "internal": {
      "load": {
        "extraDirs": ["/path/to/more/hooks"]
      }
    }
  }
}
L’ancien format de configuration en tableau hooks.internal.handlers reste pris en charge pour compatibilité descendante, mais les nouveaux hooks doivent utiliser le système basé sur la détection.

Référence CLI

# Lister tous les hooks (ajoutez --eligible, --verbose ou --json)
openclaw hooks list

# Afficher les informations détaillées d’un hook
openclaw hooks info <hook-name>

# Afficher le résumé d’éligibilité
openclaw hooks check

# Activer/désactiver
openclaw hooks enable <hook-name>
openclaw hooks disable <hook-name>

Bonnes pratiques

  • Gardez les gestionnaires rapides. Les hooks s’exécutent pendant le traitement des commandes. Déclenchez les tâches lourdes en arrière-plan avec void processInBackground(event).
  • Gérez les erreurs proprement. Encadrez les opérations risquées avec try/catch ; ne lancez pas d’exception pour que les autres gestionnaires puissent s’exécuter.
  • Filtrez tôt les événements. Retournez immédiatement si le type/l’action d’événement n’est pas pertinent.
  • Utilisez des clés d’événement spécifiques. Préférez "events": ["command:new"] à "events": ["command"] pour réduire la surcharge.

Dépannage

Hook non détecté

# Vérifier la structure du répertoire
ls -la ~/.openclaw/hooks/my-hook/
# Doit afficher : HOOK.md, handler.ts

# Lister tous les hooks détectés
openclaw hooks list

Hook non éligible

openclaw hooks info my-hook
Vérifiez les binaires manquants (PATH), les variables d’environnement, les valeurs de configuration ou la compatibilité du système d’exploitation.

Hook non exécuté

  1. Vérifiez que le hook est activé : openclaw hooks list
  2. Redémarrez votre processus gateway pour recharger les hooks.
  3. Vérifiez les journaux de la gateway : ./scripts/clawlog.sh | grep hook

Lié