{"meta":{"title":"Utilisation de crochets avec GitHub Copilot CLI","intro":"Étendez le comportement de l’agent GitHub Copilot avec des commandes shell personnalisées aux points clés pendant l’exécution de l’agent.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/fr/enterprise-cloud@latest/copilot/how-tos","title":"Procédures"},{"href":"/fr/enterprise-cloud@latest/copilot/how-tos/copilot-cli","title":"Copilot CLI"},{"href":"/fr/enterprise-cloud@latest/copilot/how-tos/copilot-cli/customize-copilot","title":"Personnaliser le CLI Copilot"},{"href":"/fr/enterprise-cloud@latest/copilot/how-tos/copilot-cli/customize-copilot/use-hooks","title":"Utiliser des crochets"}],"documentType":"article"},"body":"# Utilisation de crochets avec GitHub Copilot CLI\n\nÉtendez le comportement de l’agent GitHub Copilot avec des commandes shell personnalisées aux points clés pendant l’exécution de l’agent.\n\nLes hooks vous permettent d’étendre et de personnaliser le comportement de GitHub Copilot agents en exécutant des commandes shell personnalisées aux points clés pendant l’exécution des agents. Pour obtenir une vue d’ensemble conceptuelle des hooks, y compris les détails des déclencheurs de hook disponibles, consultez [À propos des crochets pour GitHub Copilot](/fr/enterprise-cloud@latest/copilot/concepts/agents/hooks).\n\n## Conditions préalables\n\n**Utilisateurs Windows uniquement :** Les exemples de hooks de cet article sont conçus pour s’exécuter sur Windows, Linux et macOS. Pour Windows, ils utilisent PowerShell et nécessitent que PowerShell 7.0 ou version ultérieure soit installé et dans votre chemin d’accès. Vous pouvez vérifier votre version de PowerShell en s’exécutant `pwsh --version` dans un terminal. Pour installer PowerShell, exécutez `winget install Microsoft.PowerShell` puis redémarrez votre terminal.\n\n## Création d’un hook au niveau du référentiel\n\n1. Créez un `NAME.json` fichier (où `NAME` décrit l’objectif du fichier) dans le `.github/hooks/` dossier de votre dépôt.\n\n2. Dans votre éditeur de texte, copiez et collez le modèle de hook suivant. Supprimez les éléments que vous ne prévoyez pas d’utiliser dans le tableau `hooks`.\n\n   ```json copy\n   {\n     \"version\": 1,\n     \"hooks\": {\n       \"sessionStart\": [...],\n       \"sessionEnd\": [...],\n       \"userPromptSubmitted\": [...],\n       \"preToolUse\": [...],\n       \"postToolUse\": [...],\n       \"errorOccurred\": [...]\n     }\n   }\n   ```\n\n3. Configurez la syntaxe de votre hook sous les clés `bash` et `powershell`, ou référencez directement les fichiers de script que vous avez créés.\n\n   > \\[!NOTE]\n   > Incluez à la fois une clé `bash` (avec un script pour Linux et macOS) et une clé `powershell` (pour un script pour Windows) afin d’autoriser les hooks à s’exécuter sur les trois systèmes d’exploitation.\n   > Copilot utilise la clé appropriée en fonction du système d’exploitation de l’utilisateur.\n\n   * Cet exemple exécute un script qui génère la date de début de la session dans un fichier journal à l’aide du `sessionStart` hook :\n\n     ```json copy\n     \"sessionStart\": [\n       {\n         \"type\": \"command\",\n         \"bash\": \"echo \\\"Session started: $(date)\\\" >> logs/session.log\",\n         \"powershell\": \"Add-Content -Path logs/session.log -Value \\\"Session started: $(Get-Date)\\\"\",\n         \"cwd\": \".\",\n         \"timeoutSec\": 10\n       }\n     ],\n     ```\n\n   * Cet exemple appelle un script externe `log-prompt` :\n\n     ```json copy\n     \"userPromptSubmitted\": [\n       {\n         \"type\": \"command\",\n         \"bash\": \"./scripts/log-prompt.sh\",\n         \"powershell\": \"./scripts/log-prompt.ps1\",\n         \"cwd\": \"scripts\",\n         \"env\": {\n           \"LOG_LEVEL\": \"INFO\"\n         }\n       }\n     ],\n     ```\n\n     Pour obtenir une référence complète sur l’entrée JSON à partir de sessions d’agent, ainsi que des exemples de scripts, consultez [Références sur les hooks GitHub Copilot](/fr/enterprise-cloud@latest/copilot/reference/hooks-reference).\n\n4. Validez le fichier dans le référentiel et fusionnez-le dans la branche par défaut. Vos hooks s’exécuteront désormais pendant les sessions de l’agent.\n\n## Création d’un hook au niveau de l’utilisateur\n\nLes hooks au niveau de l'utilisateur se configurent comme les hooks au niveau du référentiel, mais leurs fichiers sont stockés localement, sous votre répertoire personnel.\n\nLes exemples suivants pour macOS et Windows montrent comment configurer des hooks qui émettent un son et affichent une boîte de message lorsque l'interface CLI termine de répondre à une invite, ainsi que lorsque vous quittez Copilot CLI. Les hooks pour Linux sont similaires à l’exemple macOS, mais utilisent des outils Linux pour lire des sons et afficher des messages.\n\n### Exemple de niveau utilisateur pour macOS\n\n1. Créez un fichier appelé `notification-hooks.json` dans `~/.copilot/hooks/`.\n\n   > \\[!NOTE]\n   > Si `COPILOT_HOME` est défini, créez le fichier dans `$COPILOT_HOME/hooks/`.\n\n2. Copiez et collez le code JSON suivant dans le fichier :\n\n   ```json copy\n   {\n     \"version\": 1,\n     \"hooks\": {\n       \"agentStop\": [\n         {\n           \"type\": \"command\",\n           \"bash\": \"osascript -e 'do shell script \\\"afplay /System/Library/Sounds/Funk.aiff &> /dev/null &\\\"' -e 'display dialog \\\"Agent stopped.\\\" with title \\\"Hook-generated message\\\" buttons {\\\"OK\\\"} default button \\\"OK\\\"'\",\n           \"timeoutSec\": 5\n         }\n       ],\n       \"sessionEnd\": [\n         {\n           \"type\": \"command\",\n           \"bash\": \"osascript -e 'do shell script \\\"afplay /System/Library/Sounds/Funk.aiff &> /dev/null &\\\"' -e 'display dialog \\\"Session ended.\\\" with title \\\"Hook-generated message\\\" buttons {\\\"OK\\\"} default button \\\"OK\\\"'\",\n           \"timeoutSec\": 5\n         }\n       ]\n     }\n   }\n   ```\n\n3. Démarrez ou redémarrez. Copilot CLI\n\n   > \\[!NOTE]\n   > Les modifications apportées aux configurations de raccordement sont chargées au démarrage de l’interface CLI.\n\n4. Entrez une invite et vérifiez que vous entendez un son et voyez une fenêtre de message lorsque l'agent a terminé de répondre et lorsque vous quittez l'interface en ligne de commande (CLI).\n\n5. Supprimez le `notification-hooks.json` fichier pour supprimer ces hooks.\n\n### Exemple de niveau utilisateur pour Windows\n\n1. Créez un fichier appelé `notification-hooks.json` dans `%USERPROFILE%\\.copilot\\hooks\\`.\n\n   > \\[!NOTE]\n   > Si `COPILOT_HOME` est défini, créez le fichier dans `%COPILOT_HOME%\\hooks\\`.\n\n2. Copiez et collez le code JSON suivant dans le fichier :\n\n   ```json copy\n   {\n     \"version\": 1,\n     \"hooks\": {\n       \"agentStop\": [\n         {\n           \"type\": \"command\",\n           \"powershell\": \"Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Agent stopped.', 'Hook-generated message') | Out-Null\",\n           \"timeoutSec\": 5\n         }\n       ],\n       \"sessionEnd\": [\n         {\n           \"type\": \"command\",\n           \"powershell\": \"Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Session ended.', 'Hook-generated message') | Out-Null\",\n           \"timeoutSec\": 5\n         }\n       ]\n     }\n   }\n   ```\n\n3. Démarrez ou redémarrez. Copilot CLI\n\n   > \\[!NOTE]\n   > Les modifications apportées aux configurations de raccordement sont chargées au démarrage de l’interface CLI.\n\n4. Entrez une invite et vérifiez que vous entendez un son et voyez une fenêtre de message lorsque l'agent a terminé de répondre et lorsque vous quittez l'interface en ligne de commande (CLI).\n\n5. Supprimez le `notification-hooks.json` fichier pour supprimer ces hooks.\n\n## Résolution des problèmes\n\nSi vous rencontrez des problèmes à l’aide de crochets, utilisez le tableau suivant pour résoudre les problèmes.\n\n| Problème                     | Action                                                                                                                                                                       |\n| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Les hooks ne s’exécutent pas | <ul><li>Vérifiez que le fichier JSON se trouve dans le `.github/hooks/` répertoire.</li><li>Recherchez la syntaxe JSON valide (par exemple). `jq .  hooks.json`</li><li>\\*\\* |\n\nAssurez-vous que `version: 1` est spécifié dans le fichier `hooks.json`.</li><li>Vérifiez que le script que vous appelez à partir de votre hook est exécutable (`chmod +x script.sh`)</li><li>Vérifiez que le script a un shebang approprié (par exemple, `#!/bin/bash`)</li></ul> |\n\\| Les crochets expirent | <ul><li>Le délai d’expiration par défaut est de 30 secondes. Augmentez `timeoutSec` dans la configuration si nécessaire.</li><li>Optimisez les performances des scripts en évitant les opérations inutiles.</li></ul> |\n\\| Sortie JSON non valide | <ul><li>Vérifiez que la sortie se trouve sur une seule ligne.</li><li>Sur Unix, utilisez `jq -c` pour compacter et valider la sortie JSON.</li><li>Sur Windows, utilisez la commande `ConvertTo-Json -Compress` dans PowerShell pour effectuer la même opération.</li></ul> |\n\n## Débogage\n\nVous pouvez déboguer des hooks à l’aide des méthodes suivantes :\n\n* **Activez la journalisation détaillée** dans le script pour inspecter les données d’entrée et tracer l'exécution du script.\n\n  ```shell copy\n  #!/bin/bash\n  set -x  # Enable bash debug mode\n  INPUT=$(cat)\n  echo \"DEBUG: Received input\" >&2\n  echo \"$INPUT\" >&2\n  # ... rest of script\n  ```\n\n* **Testez les hooks localement** en redirigeant l’entrée de test dans votre hook pour valider son comportement :\n\n  ```shell copy\n  # Create test input\n  echo '{\"timestamp\":1704614400000,\"cwd\":\"/tmp\",\"toolName\":\"bash\",\"toolArgs\":\"{\\\"command\\\":\\\"ls\\\"}\"}' | ./my-hook.sh\n\n  # Check exit code\n  echo $?\n\n  # Validate output is valid JSON\n  ./my-hook.sh | jq .\n  ```\n\n## Lectures complémentaires\n\n* [Références sur les hooks GitHub Copilot](/fr/enterprise-cloud@latest/copilot/reference/hooks-reference)\n* [À propos de GitHub Copilot agent cloud](/fr/enterprise-cloud@latest/copilot/concepts/agents/cloud-agent/about-cloud-agent)\n* [À propos de GitHub Copilot CLI](/fr/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/about-copilot-cli)\n* [Configurer l’environnement de développement](/fr/enterprise-cloud@latest/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment)"}