Les Hooks exécutent des commandes shell ou des requêtes d'agent automatiquement lorsque des événements précis se produisent dans votre session - un fichier est enregistré, un outil est invoqué ou une tâche est terminée. Vous définissez le déclencheur et l'action; Kiro se charge de l'exécution.
| Capability | IDE | CLI | Web | Mobile |
|---|---|---|---|---|
| Hooks événementiels | ✓ | ✓ | — | — |
| Actions de commande shell | ✓ | ✓ | — | — |
| Actions de requête d'agent | ✓ | ✓ | — | — |
| Création de Hooks par clavardage | ✓ | ✓ | — | — |
Un Hook PostFileSave qui exécute ESLint chaque fois que vous enregistrez un fichier TypeScript :
{ "version": "v1", "hooks": [{ "name": "Lint on save", "trigger": "PostFileSave", "matcher": "\\.(ts|tsx)$", "action": { "type": "command", "command": "npx eslint --fix" } }] }
Ce fichier se trouve à .kiro/hooks/lint-on-save.json et s'active automatiquement - aucune requête manuelle n'est nécessaire. Le Hook reçoit le chemin du fichier enregistré et le contexte de session par STDIN. Consultez Hook Actions pour plus de détails sur la façon dont les commandes reçoivent les données d'événement.
Les configurations de Hooks sont des fichiers JSON stockés dans .kiro/hooks/. Chaque fichier définit un ou plusieurs Hooks avec un événement déclencheur, un motif de correspondance facultatif et une action.
Lorsque l'événement déclencheur se produit, Kiro vérifie le motif de correspondance. S'il correspond (ou si aucun motif n'est spécifié), l'action s'exécute :
| Déclencheur | Quand il se produit | Peut bloquer? |
|---|---|---|
PostFileSave | Après l'enregistrement d'un fichier | Non |
PostFileCreate | Après la création d'un nouveau fichier | Non |
PostFileDelete | Après la suppression d'un fichier | Non |
PreToolUse | Avant qu'un outil ne soit sur le point de s'exécuter | Oui |
PostToolUse | Après l'exécution d'un outil | Non |
UserPromptSubmit | Lorsqu'un message est envoyé à l'agent | Oui |
SessionStart | Lorsqu'une nouvelle session commence | Non |
Stop | Lorsque l'agent termine sa réponse | Non |
PreTaskExec | Avant le début d'une tâche de spec | Oui |
PostTaskExec | Après la fin d'une tâche de spec | Non |
Consultez Hook Triggers pour des descriptions détaillées, des motifs de correspondance et des cas d'utilisation pour chaque type de déclencheur.
Chaque fichier de Hook est un fichier JSON autonome situé à .kiro/hooks/<id>.json. Le schéma complet :
{ "version": "v1", "hooks": [ { "name": "example-hook", "trigger": "PostFileSave", "matcher": "\\.(ts|tsx)$", "action": { "type": "command", "command": "npx eslint --fix" } } ] }
| Champ | Requis | Description |
|---|---|---|
version | Oui | Version du schéma - actuellement "v1" |
hooks | Oui | Tableau de définitions de Hooks |
hooks[].name | Oui | Identifiant lisible par un humain pour le Hook |
hooks[].description | Non | Documentation seulement |
hooks[].trigger | Oui | Événement qui déclenche le Hook (PascalCase - voir le tableau des déclencheurs) |
hooks[].matcher | Non | Motif d'expression régulière pour filtrer quels événements déclenchent ce Hook. Pour PreToolUse/PostToolUse, correspond au nom de l'outil. Pour les événements de fichier, correspond au chemin du fichier. Par défaut, correspond toujours. |
hooks[].action.type | Oui | "command" (commande shell) ou "agent" (injecter une requête) |
hooks[].action.command | Cond. | Commande shell à exécuter (requise lorsque type est "command") |
hooks[].action.prompt | Cond. | Texte de la requête à injecter (requis lorsque type est "agent") |
hooks[].timeout | Non | Délai d'expiration en secondes pour les actions de commande (par défaut : 60). 0 désactive le délai d'expiration. Ignoré pour les actions d'agent. |
hooks[].enabled | Non | Réglez à false pour ignorer le Hook sans le supprimer (par défaut : true) |
hooks[].confirm | Non | Demander une confirmation avant l'exécution d'un Hook de commande sur Stop. Consultez Confirmation prompts. |
Un Hook de commande sur le déclencheur Stop peut demander une confirmation avant de s'exécuter. Ajoutez un bloc confirm avec la question à poser et les options à présenter :
{ "version": "v1", "hooks": [ { "name": "Submit session results", "trigger": "Stop", "action": { "type": "command", "command": "./submit.sh" }, "confirm": { "question": "Submit this session's results?", "options": [ { "id": "submit", "label": "Yes, submit", "run": true }, { "id": "dismiss", "label": "Not this time", "run": false } ] } } ] }
Chaque option a un id, un label affiché sur le bouton, et un indicateur run qui contrôle si la commande du Hook s'exécute lorsque cette option est choisie.
Pour décider au moment de l'exécution s'il faut poser une question et laquelle, ajoutez un confirmCommand facultatif au bloc confirm. La commande s'exécute avant l'affichage de la requête, et sa sortie standard contrôle la requête en JSON :
{ "skip": true } supprime la requête et ignore le Hook pour ce tour{ "question": "...", "options": [...] } remplace la question et les options statiques{ "confirm": { "question": "Submit this session's results?", "confirmCommand": "./confirm-options.sh", "options": [ { "id": "submit", "label": "Yes, submit", "run": true }, { "id": "dismiss", "label": "Not this time", "run": false } ] } }
Si confirmCommand se termine avec un code non nul, expire ou affiche un JSON invalide, la question et les options statiques question et options sont utilisées comme solution de repli. Cela est utile pour les requêtes qui ne devraient apparaître que sous certaines conditions - par exemple, une option « ne plus demander pour cette session » qui écrit un fichier marqueur et renvoie { "skip": true } lors des tours suivants.
.kiro/hooks/ à la racine de votre projet.json fonctionne - utilisez des noms descriptifs en kebab-case (p. ex. lint-on-save.json, guard-writes.json)hooksCliquez sur le bouton + dans la section Agent Hooks du panneau Kiro et sélectionnez Ask Kiro to create a hook. Décrivez ce que vous souhaitez en langage naturel - par exemple, « exécuter les tests après chaque enregistrement de fichier » - et Kiro génère la configuration du Hook par la conversation.
Le Hook obtenu est enregistré sous forme de fichier JSON dans .kiro/hooks/.
Le format .kiro/hooks/*.json a été introduit dans IDE 1.0 et CLI 3.0. Si vous effectuez une mise à niveau à partir d'une version antérieure :
kiro-cli agent migrate pour une conversion automatique, ou consultez CLI 3.0 Hooks migration pour la correspondance manuelle.
Hooks