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 - l'agent modifie un fichier, invoque un outil ou termine une tâche. Vous définissez le déclencheur et l'action; Kiro se charge de l'exécution.
| Capacité | IDE | CLI | Web | Mobile |
|---|---|---|---|---|
| Hooks basés sur des événements | ✓ | ✓ | ✓ | — |
| Actions de commande shell | ✓ | ✓ | ✓ | — |
| Actions de requête d'agent | ✓ | ✓ | ✓ | — |
| Créer des Hooks en le demandant à l'agent dans le clavardage | ✓ | ✓ | ✓ | — |
Un Hook PostFileSave qui exécute ESLint chaque fois que l'agent enregistre ou modifie 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 la session via STDIN. Consultez Actions de Hook pour en savoir plus sur la façon dont les commandes reçoivent les données d'événement.
Les configurations de Hook 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 déclenche | IDE | CLI | Web | Peut bloquer? |
|---|---|---|---|---|---|
| Prompt Submit | Lorsqu'un message est envoyé à l'agent | ✓ | ✓ | — | Oui |
| Agent Stop | Lorsque l'agent termine sa réponse | ✓ | ✓ | — | Non |
| Session Start | Lorsqu'une nouvelle session commence (IDE) | ✓ | — | — | Non |
| Agent Spawn | Lorsque l'agent est activé (CLI) | — | ✓ | — | Non |
| Pre Tool Use | Avant qu'un outil ne s'exécute | ✓ | ✓ | — | Oui |
| Post Tool Use | Après l'exécution d'un outil | ✓ | ✓ | — | Non |
| File Create | Après que l'agent crée un nouveau fichier | ✓ | — | — | Non |
| File Save | Après que l'agent enregistre ou modifie un fichier | ✓ | — | — | Non |
| File Delete | Après que l'agent supprime un fichier | ✓ | — | — | Non |
| Pre Task Execution | Avant le début d'une tâche de spec | ✓ | — | — | Oui |
| Post Task Execution | Après qu'une tâche de spec est terminée | ✓ | — | — | Non |
| Legacy Manual Hook | Hooks IDE 0.x hérités, exécutés manuellement | Héritage seulement | — | — | Non |
Consultez Déclencheurs de Hook 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 Hook |
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 les événements qui 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 (requis 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 qu'un Hook de commande Stop ne s'exécute. Voir Requêtes de confirmation. |
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, une label affichée sur le bouton et un indicateur run qui détermine 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 demander une confirmation et quoi demander, 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 sous forme de JSON :
{ "skip": true } supprime la requête et ignore le Hook pour ce tour{ "question": "...", "options": [...] } remplace la question statique et les options{ "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 sont utilisées comme solution de repli. Cela le rend 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, puis sélectionnez Ask Kiro to create a hook. Décrivez ce que vous voulez en langage naturel - par exemple, « exécuter les tests après chaque enregistrement de fichier » - et Kiro génère la configuration du Hook au fil de la conversation.
Le Hook résultant est enregistré comme 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 effectuer la conversion automatique, ou consultez Migration des Hooks CLI 3.0 pour la correspondance manuelle.
Hooks