8.3 KiB
HOOKS-README
Contient tous les détails, scripts et instructions pour les hooks Codex CLI.
Vue d'ensemble des événements hook
Codex CLI fournit 8 hooks via hooks.json :
| # | Hook | Type d'événement | Fichier de config | Description |
|---|---|---|---|---|
| 1 | SessionStart |
SessionStart |
hooks.json |
S'exécute une fois au démarrage de session — injecte du contexte + joue un son |
| 2 | PreToolUse |
PreToolUse |
hooks.json |
S'exécute avant l'exécution d'un outil — joue un son |
| 3 | PermissionRequest |
PermissionRequest |
hooks.json |
S'exécute quand Codex demande une approbation pour une opération sensible — joue un son |
| 4 | PostToolUse |
PostToolUse |
hooks.json |
S'exécute après la fin d'un outil — joue un son |
| 5 | Stop |
stop |
hooks.json |
S'exécute quand la session se termine — joue un son |
| 6 | UserPromptSubmit |
UserPromptSubmit |
hooks.json |
S'exécute quand l'utilisateur soumet un prompt — joue un son |
| 7 | PreCompact |
PreCompact |
hooks.json |
S'exécute avant la compaction du contexte — joue un son |
| 8 | PostCompact |
PostCompact |
hooks.json |
S'exécute après la compaction du contexte — joue un son |
Comment les hooks sont appelés
Tous les hooks (hooks.json) sont appelés avec le flag --hook :
python3 .codex/hooks/scripts/hooks.py --hook SessionStart
python3 .codex/hooks/scripts/hooks.py --hook PreToolUse
python3 .codex/hooks/scripts/hooks.py --hook PermissionRequest
python3 .codex/hooks/scripts/hooks.py --hook PostToolUse
python3 .codex/hooks/scripts/hooks.py --hook Stop
python3 .codex/hooks/scripts/hooks.py --hook UserPromptSubmit
python3 .codex/hooks/scripts/hooks.py --hook PreCompact
python3 .codex/hooks/scripts/hooks.py --hook PostCompact
Injection de contexte SessionStart
Le hook SessionStart écrit du contexte sur stdout, qui alimente directement la fenêtre de contexte du modèle. Cela inclut :
- Date/heure courante
- Nom de branche Git
- Statut du working tree (propre ou changements non commités)
- Chemin du répertoire de travail
Prérequis
Avant d'utiliser les hooks, assure-toi d'avoir Python 3 installé sur ton système.
Logiciels requis
Toutes plateformes (Windows, macOS, Linux)
- Python 3 : requis pour lancer le script hook
- Vérifier l'installation :
python3 --version
Instructions d'installation :
- Windows : télécharger depuis python.org ou installer via
winget install Python.Python.3 - macOS : installer via
brew install python3(requiert Homebrew) - Linux : installer via
sudo apt install python3(Ubuntu/Debian) ousudo yum install python3(RHEL/CentOS)
Lecteurs audio (détectés automatiquement)
Le script hook détecte et utilise automatiquement le lecteur audio approprié pour ta plateforme :
- macOS : utilise
afplay(intégré, aucune installation nécessaire) - Linux : utilise
paplaydepuispulseaudio-utils— installer viasudo apt install pulseaudio-utils - Windows : utilise le module intégré
winsound(inclus avec Python)
Fichiers de configuration
Il y a deux fichiers de configuration :
.codex/hooks.json— enregistre les hooksSessionStart,PreToolUse,PermissionRequest,PostToolUse,Stop,UserPromptSubmit,PreCompactetPostCompact.codex/hooks/config/hooks-config.json— active/désactive les hooks individuels et le logging
hooks.json
{
"hooks": {
"SessionStart": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook SessionStart",
"statusMessage": "Initializing session hooks...",
"timeout": 10
}
],
"PreToolUse": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook PreToolUse",
"statusMessage": "Running pre-tool-use hook...",
"timeout": 10
}
],
"PermissionRequest": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook PermissionRequest",
"statusMessage": "Running permission request hook...",
"timeout": 10
}
],
"PostToolUse": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook PostToolUse",
"statusMessage": "Running post-tool-use hook...",
"timeout": 10
}
],
"Stop": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook Stop",
"statusMessage": "Running session stop hook...",
"timeout": 10
}
],
"UserPromptSubmit": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook UserPromptSubmit",
"statusMessage": "Running user prompt submit hook...",
"timeout": 10
}
],
"PreCompact": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook PreCompact",
"statusMessage": "Running pre-compact hook...",
"timeout": 10
}
],
"PostCompact": [
{
"type": "shell",
"command": "python3 .codex/hooks/scripts/hooks.py --hook PostCompact",
"statusMessage": "Running post-compact hook...",
"timeout": 10
}
]
}
}
Configurer les hooks (activer/désactiver)
Désactiver des hooks individuels
Édite .codex/hooks/config/hooks-config.json :
{
"disableSessionStartHook": false,
"disablePreToolUseHook": false,
"disablePermissionRequestHook": false,
"disablePostToolUseHook": false,
"disableStopHook": false,
"disableUserPromptSubmitHook": false,
"disablePreCompactHook": false,
"disablePostCompactHook": false,
"disableLogging": true
}
Options de configuration :
disableSessionStartHook: mettretruepour désactiver l'injection de contexte et le son au démarrage de sessiondisablePreToolUseHook: mettretruepour désactiver le son pre-tool-usedisablePermissionRequestHook: mettretruepour désactiver le son de demande de permissiondisablePostToolUseHook: mettretruepour désactiver le son post-tool-usedisableStopHook: mettretruepour désactiver le son d'arrêt de sessiondisableUserPromptSubmitHook: mettretruepour désactiver le son de soumission de prompt utilisateurdisablePreCompactHook: mettretruepour désactiver le son pre-compactdisablePostCompactHook: mettretruepour désactiver le son post-compactdisableLogging: mettretruepour désactiver le logging des événements hook vers.codex/hooks/logs/hooks-log.jsonl
Fallback de configuration
Il y a deux fichiers de configuration :
.codex/hooks/config/hooks-config.json- configuration partagée/par défaut commitée dans git.codex/hooks/config/hooks-config.local.json- tes overrides personnels (ignorés par git)
Le fichier de config local (.local.json) prend le dessus sur la config partagée, ce qui permet à chaque développeur de personnaliser le comportement des hooks sans affecter l'équipe.
Configuration locale (overrides personnels)
Crée ou édite .codex/hooks/config/hooks-config.local.json pour tes préférences personnelles :
{
"disableSessionStartHook": false,
"disablePreToolUseHook": false,
"disablePermissionRequestHook": false,
"disablePostToolUseHook": false,
"disableStopHook": true,
"disableUserPromptSubmitHook": false,
"disablePreCompactHook": false,
"disablePostCompactHook": false,
"disableLogging": true
}
Logging
Quand le logging est activé ("disableLogging": false), les événements hook sont écrits dans .codex/hooks/logs/hooks-log.jsonl au format JSON Lines. Chaque entrée contient le payload JSON complet reçu depuis Codex CLI.
Tests
Lancer la suite de tests :
python3 -m unittest tests.test_hooks -v
Voix
site utilisé pour générer les sons : https://elevenlabs.io/ voix utilisée : Adam - American, Dark and Tough
Extensibilité future
Ce projet peut être étendu en :
- Ajoutant de nouvelles entrées à
HOOK_SOUND_MAPdanshooks.py - Ajoutant les fichiers son correspondants dans
.codex/hooks/sounds/ - Ajoutant des clés de toggle dans
hooks-config.json - Ajoutant de nouvelles entrées hook dans
hooks.json