Hooks
Exécutez des scripts lors d'événements de session, d'outil et de sous-agent. Ils peuvent autoriser, refuser ou demander.
Les hooks sont des scripts que Spirit exécute à des points fixes. Ils peuvent autoriser un outil, le refuser ou forcer une demande d'approbation (ask).
Événements
sessionStartsessionEndsubmitPromptpreToolUsepostToolUsesubagentStartsubagentEnd
preToolUse retournant ask vous invite toujours même en mode approbation automatique ou contournement.
Où ils se trouvent
| Portée | Config | Scripts |
|---|---|---|
| Utilisateur | {spiritDataDir}/hooks.json | {spiritDataDir}/hooks/ |
| Espace de travail | {workspace}/.spirit/hooks.json | {workspace}/.spirit/hooks/ |
Sur le même événement, les entrées utilisateur et les entrées d'espace de travail sont concaténées dans cet ordre. Elles ne se remplacent pas mutuellement.
Gérez-les dans Paramètres → Hooks. Validez depuis la CLI avec spirit hooks list et spirit hooks validate. La compétence intégrée create-hook rédige un hook.
Champs du fichier
L'objet racine doit inclure version et hooks. version n'accepte actuellement que 1.
| Champ | Description |
|---|---|
version | Requis. Doit être 1 |
hooks | Requis. Objet. Les clés sont les noms d'événements ; les valeurs sont des tableaux de hooks pour cet événement |
Chaque hook
| Champ | Description |
|---|---|
command | Requis. Chemin du script. Un chemin relatif est résolu par rapport au répertoire de configuration et doit rester à l'intérieur de celui-ci |
timeout | Optionnel. Délai d'expiration en secondes. Doit être un nombre positif. Par défaut : 30 |
failClosed | Optionnel. Indique si le blocage doit se produire lorsque le script plante, expire ou écrit du JSON invalide sur stdout. Par défaut : pas de blocage |
matcher | Optionnel. Expression régulière non vide. Correspond au nom de l'outil sur preToolUse / postToolUse, ou au type de sous-agent sur subagentStart / subagentEnd |
Exemple
{
"version": 1,
"hooks": {
"preToolUse": [
{
"command": "hooks/guard.sh",
"timeout": 10,
"failClosed": true,
"matcher": "^shell$"
}
],
"sessionEnd": [
{
"command": "hooks/log.sh"
}
]
}
}