{"meta":{"title":"Personnaliser des flux de travail d’agent avec des hooks","intro":"Exécutez des vérifications automatisées, telles que le linting, la mise en forme ou les scans de sécurité, à des points clés durant l’exécution de l’agent pour appliquer des normes de qualité.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/how-tos","title":"Procédures"},{"href":"/fr/copilot/how-tos/copilot-on-github","title":"\n              Copilot sur GitHub"},{"href":"/fr/copilot/how-tos/copilot-on-github/customize-copilot","title":"Personnaliser Copilot"},{"href":"/fr/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent","title":"Personnaliser agent de cloud"},{"href":"/fr/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/use-hooks","title":"Utiliser des crochets"}],"documentType":"article"},"body":"# Personnaliser des flux de travail d’agent avec des hooks\n\nExécutez des vérifications automatisées, telles que le linting, la mise en forme ou les scans de sécurité, à des points clés durant l’exécution de l’agent pour appliquer des normes de qualité.\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](/fr/copilot/concepts/agents/cloud-agent/about-hooks).\n\n## Création d’un hook dans un référentiel sur GitHub\n\n1. Créez un `hooks.json` fichier avec le nom de votre choix dans le `.github/hooks/` dossier de votre dépôt. Le fichier de configuration des hooks **doit être présent** sur la branche par défaut de votre référentiel à utiliser par Agent cloud Copilot. Pour CLI GitHub Copilot, les hooks sont chargés à partir de votre répertoire de travail actuel.\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 votre syntaxe de hook sous les clés `bash` ou `powershell`, ou référencez directement les fichiers de script que vous avez créés.\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 [Configuration des hooks](/fr/copilot/reference/hooks-configuration).\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## 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* [Configuration des hooks](/fr/copilot/reference/hooks-configuration)\n* [À propos de GitHub Copilot agent cloud](/fr/copilot/concepts/agents/cloud-agent/about-cloud-agent)\n* [À propos de GitHub Copilot CLI](/fr/copilot/concepts/agents/about-copilot-cli)\n* [Configurer l’environnement de développement](/fr/copilot/how-tos/use-copilot-agents/cloud-agent/customize-the-agent-environment)"}