Hooks¶
Cette rubrique décrit comment utiliser des hooks pour exécuter du code personnalisé à des moments clés du cycle de vie de l’agent. Les hooks vous permettent d’intercepter les appels aux outils, d’auditer le comportement des agents, de faire respecter des politiques, d’injecter du contexte et de contrôler le flux d’exécution.
Comment fonctionnent les hooks¶
Les hooks suivent un processus en quatre étapes : un événement se déclenche, le SDK vérifie si une correspondance s’applique, il appelle votre rappel, puis votre rappel renvoie une décision qui contrôle la suite des opérations.
L’agent déclenche un événement (par exemple, il s’agit d’appeler un outil).
Le SDK vérifie chaque correspondance de hook enregistrée pour ce type d’événement.
Si une correspondance correspond (ou n’a pas de modèle de correspondance, c’est-à-dire qu’elle correspond à tout), le SDK appelle les fonctions de rappel associées.
Chaque rappel renvoie un objet de sortie qui peut autoriser, bloquer ou modifier l’opération.
Événements de hooks¶
Les événements suivants sont disponibles :
Événement |
Lorsqu’il se déclenche |
|---|---|
|
Avant l’exécution d’un outil. Peut bloquer l’outil ou modifier son entrée. |
|
Après l’exécution réussie d’un outil. Peut injecter du contexte supplémentaire. |
|
Après l’échec de l’exécution d’un outil. |
|
Lorsque l’utilisateur envoie une invite. Peut injecter du contexte supplémentaire. |
|
Lorsque l’agent est sur le point de s’arrêter. Peut injecter du contexte ou interrompre la session. |
|
Lorsqu’un sous-agent démarre. |
|
Lorsqu’un sous-agent est sur le point de s’arrêter. |
|
Avant que la conversation ne soit compactée (résumée pour s’adapter à la fenêtre contextuelle). |
|
Lorsque l’agent émet une notification. |
|
Lorsqu’un contrôle d’autorisation d’outil se produit. |
Configuration des hooks¶
Transmettez des hooks via l’option hooks lors de la création d’une session. Chaque événement de hook correspond à une liste de correspondances, et chaque correspondance contient une liste de fonctions de rappel.
Correspondances¶
Chaque correspondance de hook présente trois champs :
Champ |
Type |
Description |
|---|---|---|
|
|
Un modèle regex utilisé par les événements qui prennent en charge la correspondance. |
|
Liste de rappels |
Une ou plusieurs fonctions de rappel à exécuter lorsque la correspondance est établie. |
|
|
Temps maximum en secondes pour tous les rappels de cette correspondance. La valeur par défaut est 60. |
Le champ matcher accepte n’importe quel modèle regex valide. Par exemple :
"Bash": ne correspond qu’à l’outil Bash"Write|Edit": correspond à Écrire ou Modifier".*": correspond à tous les outils (équivalent à l’omission de la correspondance)
Entrées de rappel¶
Chaque rappel reçoit trois arguments :
Argument |
Description |
|---|---|
|
Un objet contenant des données spécifiques à l’événement. Tous les événements incluent |
|
L’ID d’utilisation de l’outil (pour les événements liés à l’outil) ou |
|
Un objet de contexte. Réservé pour une utilisation future (par exemple, signaux d’annulation). |
Les champs d’entrée varient selon l’événement :
Événement |
Champs d’entrée supplémentaires |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Les hooks liés au cycle de vie des outils et PermissionRequest peuvent également inclure des champs agent_id et agent_type facultatifs lorsqu’ils sont déclenchés par un sous-agent.
Sorties de rappel¶
Les rappels renvoient un objet de sortie qui contrôle l’exécution. Les champs suivants sont disponibles :
Champ |
Type |
Description |
|---|---|---|
|
|
Indique si le traitement doit se poursuivre. Définissez ce champ sur |
|
|
Message affiché lorsque |
|
|
Définissez ce champ sur |
|
|
Message de retour de l’agent concernant la décision. |
|
|
Message d’avertissement affiché à l’utilisateur. |
|
|
Contrôles spécifiques à l’événement (voir ci-dessous). |
Note
Le SDK Python utilise continue_ (avec un trait de soulignement de fin) au lieu de continue afin d’éviter le conflit de mots clés Python. Le SDK le convertit automatiquement en continue lors de la communication avec la CLI.
Sorties spécifiques aux hooks¶
Le champ hookSpecificOutput accepte des contrôles spécifiques à l’événement :
PreToolUse
Champ |
Description |
|---|---|
|
|
|
Motif de la décision d’autorisation. |
|
Entrée d’outil modifiée à utiliser à la place de l’originale. |
PostToolUse
Champ |
Description |
|---|---|
|
Contexte supplémentaire injecté dans la conversation après l’exécution de l’outil. |
UserPromptSubmit
Champ |
Description |
|---|---|
|
Contexte supplémentaire injecté dans la conversation. |
PermissionRequest
Champ |
Description |
|---|---|
|
|
|
Message affiché lorsque la demande d’autorisation est refusée. |
Exemples¶
Bloquer les outils dangereux¶
Empêchez l’agent d’exécuter des commandes bash spécifiques :
Autoriser automatiquement les demandes d’autorisations en lecture seule¶
Autorisez les demandes d’autorisations pour les outils qui ne lisent que des données :
Modifier l’entrée d’outil¶
Ajoutez un délai d’expiration à toutes les commandes bash avant qu’elles ne s’exécutent :
Journaliser les audits¶
Consignez tous les appels d’outils à des fins d’audit sans affecter l’exécution :
Hooks vs. canUseTool¶
Les hooks et le rappel canUseTool peuvent intercepter les appels d’outils, mais ils servent à des fins différentes :
Fonctionnalité |
|
Hooks |
|---|---|---|
Portée |
Contrôle des autorisations de pré-exécution uniquement |
Plusieurs événements du cycle de vie (cycle de vie de l’outil, soumission immédiate, arrêt, cycle de vie du sous-agent, notification et compactage) |
Événements |
Un : demande d’autorisation |
Dix : |
Correspondance de modèles |
Aucune prise en charge des correspondances. Appelée pour les demandes d’autorisations qui ne sont pas encore résolues par les listes de règles. |
Oui (les correspondances de regex filtrent par nom d’outil, type de notification ou déclencheur de compactage, selon l’événement) |
Modifier l’entrée |
Limité. |
Oui ( |
Mieux adapté à |
Décisions simples d’autorisation et de refus |
Journalisation des audits, injection de contexte, politiques complexes, actions post-exécution |
Vous pouvez utiliser les deux ensemble. Le rappel canUseTool s’exécute dans le cadre du système d’autorisation de la CLI, tandis que les hooks PreToolUse s’exécutent séparément.
Avis juridiques¶
Lorsque votre configuration de Cortex Code utilise un modèle fourni conformément aux Conditions de répercussion relatives aux modèles et aux services, votre utilisation de ce modèle est en outre soumise aux conditions de ce modèle sur cette page.
La classification des données d’entrées et de sorties est présentée dans la table suivante.
Classification des données d’entrée |
Classification des données de sortie |
Désignation |
|---|---|---|
Usage Data |
Données sur les clients |
Fonctionnalités AI couvertes [1] |
Pour plus d’informations, reportez-vous à Snowflake AI et ML.