{"meta":{"title":"Настраивайте рабочие процессы агента с помощью крючков","intro":"Запускайте автоматические проверки — такие как линтинг, форматирование или сканирование безопасности — в ключевые моменты выполнения агента для обеспечения соблюдения стандартов качества.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/how-tos","title":"Инструкции"},{"href":"/ru/copilot/how-tos/copilot-on-github","title":"Copilot на GitHub"},{"href":"/ru/copilot/how-tos/copilot-on-github/customize-copilot","title":"Кастомизация Copilot"},{"href":"/ru/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent","title":"Кастомизация cloud agent"},{"href":"/ru/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/use-hooks","title":"Используйте крючки"}],"documentType":"article"},"body":"# Настраивайте рабочие процессы агента с помощью крючков\n\nЗапускайте автоматические проверки — такие как линтинг, форматирование или сканирование безопасности — в ключевые моменты выполнения агента для обеспечения соблюдения стандартов качества.\n\nХуки позволяют расширять и настраивать поведение GitHub Copilot агентов, выполняя пользовательские команды оболочки в ключевых точках выполнения агента. Для концептуального обзора крючков — включая детали доступных триггеров крюка — см. [О крючках для GitHub Copilot](/ru/copilot/concepts/agents/hooks).\n\n## Создание крючка в репозитории на GitHub\n\n1. Создайте новый `NAME.json` файл (где `NAME` описывается назначение файла) в `.github/hooks/` папке вашего репозитория.\n\n   > \\[!IMPORTANT]\n   > Конфигурационный файл hooks **должен находиться** на стандартной ветке вашего репозитория, чтобы использовать Copilot cloud agent.\n\n2. В вашем текстовом редакторе скопируйте и вставьте следующий шаблон крючка. Уберите все крючки, которые не планируете использовать, из массива `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. Настройте синтаксис крюка под `bash` клавишами и `powershell` или напрямую ссылайтесь на созданные вами скрипт-файлы.\n\n   > \\[!NOTE]\n   > Включите клавишу `bash` (с скриптом для Linux и macOS) и клавишу `powershell` (для скрипта для Windows), чтобы хуки могли работать на всех трёх операционных системах.\n   > Copilot использует соответствующий ключ в зависимости от операционной системы пользователя.\n\n   * В этом примере запускается скрипт, который выводит дату начала сессии в файл журнала с помощью хука `sessionStart` :\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   * Этот пример вызывает внешний `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     Для полной информации о входном JSON из сессий агентов вместе с примерами скриптов см. [Ссылка на крючки GitHub Copilot](/ru/copilot/reference/hooks-reference).\n\n4. Зафиксируйте файл в репозитории и объедините его в ветвь по умолчанию. Теперь ваши крючки будут работать во время сессий агентов.\n\n## Troubleshooting\n\nЕсли возникнут проблемы с крючками, используйте следующую таблицу для устранения неполадок.\n\n| Проблема                | Действие                                                                                                                                                                                                                                                                                                                                                                                                                      |\n| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Крючки не выполняются   | <ul><li>Проверьте, что JSON-файл находится в `.github/hooks/` каталоге.</li><li>Проверьте правильный синтаксис JSON (например, `jq .  hooks.json`).</li><li>Убедитесь `version: 1` , что указано в вашем `hooks.json` деле.</li><li>Проверьте, что скрипт, который вы вызываете с вашего хука, исполняемый (`chmod +x script.sh`)</li><li>Проверьте, есть ли у скрипта правильный shebang (например, `#!/bin/bash`)</li></ul> |\n| Зацепки заканчиваются   | <ul><li>По умолчанию время ожидания составляет 30 секунд. При необходимости увеличивайте `timeoutSec` конфигурацию.</li><li>Оптимизируйте производительность скриптов, избегая ненужных операций.</li></ul>                                                                                                                                                                                                                   |\n| Некорректный вывод JSON | <ul><li>Убедитесь, что выход находится на одной линии.</li><li>В Unix используйте `jq -c` для компакта и валидации JSON-вывода.</li><li>В Windows используйте команду `ConvertTo-Json -Compress` в PowerShell, чтобы сделать то же самое.</li></ul>                                                                                                                                                                           |\n\n## Отладка\n\nВы можете отладить хуки следующими методами:\n\n* **Включите подробное логирование** скрипта для проверки входных данных и трассировки выполнения скрипта.\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* **Тестируйте хуки локально** , проводя тестовый вход в ваш хук для проверки его поведения:\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## Дополнительные материалы\n\n* [Ссылка на крючки GitHub Copilot](/ru/copilot/reference/hooks-reference)\n* [О облачном агенте GitHub Copilot](/ru/copilot/concepts/agents/cloud-agent/about-cloud-agent)\n* [О GitHub Copilot CLI](/ru/copilot/concepts/agents/copilot-cli/about-copilot-cli)\n* [Настройка среды разработки](/ru/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment)"}