{"meta":{"title":"Использование крючков с GitHub Copilot CLI","intro":"Расширять GitHub Copilot поведение агента с помощью пользовательских команд оболочки в ключевых точках выполнения агента.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos","title":"Инструкции"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-cli","title":"Copilot CLI"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-cli/customize-copilot","title":"Настройка Copilot CLI"},{"href":"/ru/enterprise-cloud@latest/copilot/how-tos/copilot-cli/customize-copilot/use-hooks","title":"Используйте крючки"}],"documentType":"article"},"body":"# Использование крючков с GitHub Copilot CLI\n\nРасширять GitHub Copilot поведение агента с помощью пользовательских команд оболочки в ключевых точках выполнения агента.\n\nХуки позволяют расширять и настраивать поведение GitHub Copilot агентов, выполняя пользовательские команды оболочки в ключевых точках выполнения агента. Для концептуального обзора крючков — включая детали доступных триггеров крюка — см. [О крючках для GitHub Copilot](/ru/enterprise-cloud@latest/copilot/concepts/agents/hooks).\n\n## Предпосылка\n\n**Только для пользователей Windows:** Примеры крючков в этой статье предназначены для работы на Windows, Linux и macOS. Для Windows они используют PowerShell и требуют установку PowerShell 7.0 или более поздней версии в вашем PATH. Вы можете проверить версию для PowerShell, запустив `pwsh --version` в терминале. Чтобы установить PowerShell, запустите `winget install Microsoft.PowerShell` затем перезагрузите терминал.\n\n## Создание крючка уровня репозитория\n\n1. Создайте новый `NAME.json` файл (где `NAME` описывается назначение файла) в `.github/hooks/` папке вашего репозитория.\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/enterprise-cloud@latest/copilot/reference/hooks-reference).\n\n4. Зафиксируйте файл в репозитории и объедините его в ветвь по умолчанию. Теперь ваши крючки будут работать во время сессий агентов.\n\n## Создание хука на уровне пользователя\n\nХуки пользовательского уровня настроены так же, как и хуки на уровне репозитория, но файлы хуков хранятся локально, под вашей домашней директорией.\n\nСледующие примеры для macOS и Windows показывают, как настроить крючки, которые воспроизводят звук и отображают окно сообщений, когда CLI завершает ответ на запрос и когда вы выходите из Copilot CLI. Крючки для Linux будут похожи на пример с macOS, но используют инструменты Linux для воспроизведения звуков и отображения сообщений.\n\n### Пример на уровне пользователя для macOS\n\n1. Создайте файл с позывом `notification-hooks.json` в `~/.copilot/hooks/`.\n\n   > \\[!NOTE]\n   > Если `COPILOT_HOME` установлено, создайте файл в `$COPILOT_HOME/hooks/`.\n\n2. Скопируйте и вставьте следующий код JSON в файл:\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. Запустить или перезапустить. Copilot CLI\n\n   > \\[!NOTE]\n   > Изменения в конфигурации крюков загружаются при запуске CLI.\n\n4. Введите запрос и проверьте, слышите ли вы звук и видите окно сообщений, когда агент заканчивает ответ и когда вы выходите из CLI.\n\n5. Удалите файл, `notification-hooks.json` чтобы убрать эти крючки.\n\n### Пример на уровне пользователя для Windows\n\n1. Создайте файл с позывом `notification-hooks.json` в `%USERPROFILE%\\.copilot\\hooks\\`.\n\n   > \\[!NOTE]\n   > Если `COPILOT_HOME` установлено, создайте файл в `%COPILOT_HOME%\\hooks\\`.\n\n2. Скопируйте и вставьте следующий код JSON в файл:\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. Запустить или перезапустить. Copilot CLI\n\n   > \\[!NOTE]\n   > Изменения в конфигурации крюков загружаются при запуске CLI.\n\n4. Введите запрос и проверьте, слышите ли вы звук и видите окно сообщений, когда агент заканчивает ответ и когда вы выходите из CLI.\n\n5. Удалите файл, `notification-hooks.json` чтобы убрать эти крючки.\n\n## Устранение неполадок\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/enterprise-cloud@latest/copilot/reference/hooks-reference)\n* [О облачном агенте GitHub Copilot](/ru/enterprise-cloud@latest/copilot/concepts/agents/cloud-agent/about-cloud-agent)\n* [О GitHub Copilot CLI](/ru/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/about-copilot-cli)\n* [Настройка среды разработки](/ru/enterprise-cloud@latest/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment)"}