# Hooks
URL: /fr/docs/customize/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 [#événements]

* `sessionStart`
* `sessionEnd`
* `submitPrompt`
* `preToolUse`
* `postToolUse`
* `subagentStart`
* `subagentEnd`

`preToolUse` retournant `ask` vous invite toujours même en mode [approbation automatique ou contournement](../agent/approvals.mdx).

## Où ils se trouvent [#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 [#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 [#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 [#exemple]

```json
{
  "version": 1,
  "hooks": {
    "preToolUse": [
      {
        "command": "hooks/guard.sh",
        "timeout": 10,
        "failClosed": true,
        "matcher": "^shell$"
      }
    ],
    "sessionEnd": [
      {
        "command": "hooks/log.sh"
      }
    ]
  }
}
```
