Крючки позволяют расширять и настраивать поведение агентов GitHub Copilot, выполняя пользовательские команды shell в ключевых точках во время выполнения агента. Для концептуального обзора крючков см. О крючках.
Создание крючка в репозитории на GitHub
-
Создайте новый
hooks.jsonфайл с выбранным именем в.github/hooks/папке вашего репозитория. Конфигурационный файл hooks должен находиться на стандартной ветке вашего репозитория, чтобы использовать Агент кодирования Copilot. Для GitHub Copilot CLI хуки загружаются из текущей рабочей директории. -
В вашем текстовом редакторе скопируйте и вставьте следующий шаблон крючка. Уберите все крючки, которые не планируете использовать, из массива
hooks.JSON { "version": 1, "hooks": { "sessionStart": [...], "sessionEnd": [...], "userPromptSubmitted": [...], "preToolUse": [...], "postToolUse": [...], "errorOccurred": [...] } }{ "version": 1, "hooks": { "sessionStart": [...], "sessionEnd": [...], "userPromptSubmitted": [...], "preToolUse": [...], "postToolUse": [...], "errorOccurred": [...] } } -
Настройте синтаксис хука под
bashклавишами илиpowershellнапрямую ссылайтесь на созданные вами скрипт-файлы.-
В этом примере запускается скрипт, который выводит дату начала сессии в файл журнала с помощью хука
sessionStart:JSON "sessionStart": [ { "type": "command", "bash": "echo \"Session started: $(date)\" >> logs/session.log", "powershell": "Add-Content -Path logs/session.log -Value \"Session started: $(Get-Date)\"", "cwd": ".", "timeoutSec": 10 } ],"sessionStart": [ { "type": "command", "bash": "echo \"Session started: $(date)\" >> logs/session.log", "powershell": "Add-Content -Path logs/session.log -Value \"Session started: $(Get-Date)\"", "cwd": ".", "timeoutSec": 10 } ], -
Этот пример вызывает внешний
log-promptскрипт:JSON "userPromptSubmitted": [ { "type": "command", "bash": "./scripts/log-prompt.sh", "powershell": "./scripts/log-prompt.ps1", "cwd": "scripts", "env": { "LOG_LEVEL": "INFO" } } ],"userPromptSubmitted": [ { "type": "command", "bash": "./scripts/log-prompt.sh", "powershell": "./scripts/log-prompt.ps1", "cwd": "scripts", "env": { "LOG_LEVEL": "INFO" } } ],Для полной информации о входном JSON из сессий агентов вместе с примерами скриптов см. Конфигурация крючков.
-
-
Зафиксируйте файл в репозитории и объедините его в ветвь по умолчанию. Теперь ваши крючки будут работать во время сессий агентов.
Устранение неполадок
Если возникнут проблемы с крючками, используйте следующую таблицу для устранения неполадок.
| Проблема | Действие |
|---|---|
| Крючки не выполняются |
|
| Зацепки заканчиваются |
|
| Некорректный вывод JSON |
|
Отладка
Вы можете отладить хуки следующими методами:
-
**Включите подробное логирование** скрипта для проверки входных данных и трассировки выполнения скрипта.Shell #!/bin/bash set -x # Enable bash debug mode INPUT=$(cat) echo "DEBUG: Received input" >&2 echo "$INPUT" >&2 # ... rest of script
#!/bin/bash set -x # Enable bash debug mode INPUT=$(cat) echo "DEBUG: Received input" >&2 echo "$INPUT" >&2 # ... rest of script -
**Тестируйте хуки локально** , проводя тестовый вход в ваш хук для проверки его поведения:Shell # Create test input echo '{"timestamp":1704614400000,"cwd":"/tmp","toolName":"bash","toolArgs":"{\"command\":\"ls\"}"}' | ./my-hook.sh # Check exit code echo $? # Validate output is valid JSON ./my-hook.sh | jq .# Create test input echo '{"timestamp":1704614400000,"cwd":"/tmp","toolName":"bash","toolArgs":"{\"command\":\"ls\"}"}' | ./my-hook.sh # Check exit code echo $? # Validate output is valid JSON ./my-hook.sh | jq .
Дополнительные материалы
- Для получения дополнительной информации о настройке крючков смотрите АВТОЗАГОЛОВОК
- Для получения дополнительной информации о Агент кодирования Copilot см. АВТОЗАГОЛОВОК
- Для получения дополнительной информации о GitHub Copilot CLI см. АВТОЗАГОЛОВОК
- Для получения информации о настройке среды агента см. Настройка среды разработки для агента программирования GitHub Copilot.