Hooks ermöglichen es Ihnen, das Verhalten von GitHub Copilot Agents zu erweitern und anzupassen, indem Sie benutzerdefinierte Shellbefehle an wichtigen Stellen während der Agentausführung ausführen. Eine konzeptionelle Übersicht über Hooks – einschließlich Details zu den verfügbaren Hook-Triggern – finden Sie unter Informationen zu Hooks für GitHub Copilot.
Voraussetzung
For Windows only: Die Beispiele in diesem Artikel verwenden PowerShell. Wenn Sie Windows verwenden, müssen Sie PowerShell 7.0 oder höher und in Ihrem PATH installiert haben. Sie können Ihre PowerShell-Version überprüfen, indem Sie pwsh --version in einem Terminal ausführen. Um PowerShell zu installieren, führen Sie winget install Microsoft.PowerShell aus, und starten Sie das Terminal neu.
Erstellen eines Hooks auf Repositoryebene
-
Erstellen Sie eine neue
NAME.json-Datei (wobeiNAMEden Zweck der Datei beschreibt) im Ordner.github/hooks/Ihres Repositorys. -
Kopieren Sie in Ihrem Text-Editor die folgende Hook-Vorlage, und fügen Sie sie ein. Entfernen Sie alle Hooks, die Sie nicht aus dem
hooksArray verwenden möchten.JSON { "version": 1, "hooks": { "sessionStart": [...], "sessionEnd": [...], "userPromptSubmitted": [...], "preToolUse": [...], "postToolUse": [...], "errorOccurred": [...] } }{ "version": 1, "hooks": { "sessionStart": [...], "sessionEnd": [...], "userPromptSubmitted": [...], "preToolUse": [...], "postToolUse": [...], "errorOccurred": [...] } } -
Konfigurieren Sie Ihre Hook-Syntax unter den Schlüsseln
bashundpowershell, oder referenzieren Sie direkt Skriptdateien, die Sie erstellt haben.Hinweis
Schließen Sie sowohl einen
bash-Schlüssel (mit einem Skript für Linux und macOS) als auch einenpowershell-Schlüssel (für ein Skript für Windows) ein, damit die Hooks auf allen drei Betriebssystemen ausgeführt werden können. Copilot verwendet den entsprechenden Schlüssel basierend auf dem Betriebssystem des Benutzers.-
In diesem Beispiel wird ein Skript ausgeführt, das das Startdatum der Sitzung mithilfe des
sessionStartHooks in eine Protokolldatei ausgibt: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 } ], -
In diesem Beispiel wird ein externes
log-promptSkript aufgerufen: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" } } ],Eine vollständige Referenz zu den Eingabe-JSON aus Agentsitzungen sowie Beispielskripts finden Sie unter Referenz zu GitHub Copilot Hooks.
-
-
Commit die Datei in das Repository und füge sie in den Standard Branch ein. Ihre Hooks werden jetzt während Agentsitzungen ausgeführt.
Erstellen eines Hooks auf Benutzerebene
Hooks auf Benutzerebene werden wie Hooks auf Repositoryebene konfiguriert, aber die Hookdateien werden lokal unter Ihrem Heimverzeichnis gespeichert.
Die folgenden Beispiele für macOS und Windows zeigen, wie Hooks konfiguriert werden, die einen Sound wiedergeben und ein Meldungsfeld anzeigen, wenn die CLI die Antwort auf eine Eingabeaufforderung beendet hat und wenn Sie Copilot CLI beenden. Hooks für Linux wären dem macOS-Beispiel ähnlich, würden aber Linux-Tools zum Wiedergeben von Sounds und anzeigen von Nachrichten verwenden.
Beispiel für MacOS auf Benutzerebene
-
Erstellen Sie eine Datei namens
notification-hooks.jsonin~/.copilot/hooks/.Hinweis
Falls
COPILOT_HOMEfestgelegt ist, erstellen Sie die Datei in$COPILOT_HOME/hooks/. -
Kopieren Sie den folgenden JSON-Code, und fügen Sie ihn in die Datei ein:
JSON { "version": 1, "hooks": { "agentStop": [ { "type": "command", "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\"'", "timeoutSec": 5 } ], "sessionEnd": [ { "type": "command", "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\"'", "timeoutSec": 5 } ] } }{ "version": 1, "hooks": { "agentStop": [ { "type": "command", "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\"'", "timeoutSec": 5 } ], "sessionEnd": [ { "type": "command", "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\"'", "timeoutSec": 5 } ] } } -
Starten Sie, oder starten Sie neu Copilot CLI.
Hinweis
Änderungen an Hook-Konfigurationen werden geladen, wenn die CLI gestartet wird.
-
Geben Sie eine Eingabeaufforderung ein, und überprüfen Sie, ob Sie einen Sound hören, und sehen Sie ein Meldungsfeld, wenn der Agent fertig ist, und wenn Sie die CLI beenden.
-
Löschen Sie die
notification-hooks.jsonDatei, um diese Hooks zu entfernen.
Beispiel für Windows auf Benutzerebene
-
Erstellen Sie in
%USERPROFILE%\.copilot\hooks\eine Datei mit dem Namennotification-hooks.json.Hinweis
Wenn
COPILOT_HOMEfestgelegt ist, erstellen Sie die Datei in%COPILOT_HOME%\hooks\. -
Kopieren Sie den folgenden JSON-Code, und fügen Sie ihn in die Datei ein:
JSON { "version": 1, "hooks": { "agentStop": [ { "type": "command", "powershell": "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Agent stopped.', 'Hook-generated message') | Out-Null", "timeoutSec": 5 } ], "sessionEnd": [ { "type": "command", "powershell": "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Session ended.', 'Hook-generated message') | Out-Null", "timeoutSec": 5 } ] } }{ "version": 1, "hooks": { "agentStop": [ { "type": "command", "powershell": "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Agent stopped.', 'Hook-generated message') | Out-Null", "timeoutSec": 5 } ], "sessionEnd": [ { "type": "command", "powershell": "Add-Type -AssemblyName System.Windows.Forms; [System.Media.SystemSounds]::Asterisk.Play(); [System.Windows.Forms.MessageBox]::Show('Session ended.', 'Hook-generated message') | Out-Null", "timeoutSec": 5 } ] } } -
Starten Sie, oder starten Sie neu Copilot CLI.
Hinweis
Änderungen an Hook-Konfigurationen werden geladen, wenn die CLI gestartet wird.
-
Geben Sie eine Eingabeaufforderung ein, und überprüfen Sie, ob Sie einen Sound hören, und sehen Sie ein Meldungsfeld, wenn der Agent fertig ist, und wenn Sie die CLI beenden.
-
Löschen Sie die
notification-hooks.jsonDatei, um diese Hooks zu entfernen.
Problembehandlung
Wenn Probleme bei der Verwendung von Hooks auftreten, verwenden Sie die folgende Tabelle, um Probleme zu beheben.
| Thema | Action |
|---|---|
| Hooks werden nicht ausgeführt |
|
| Hooks laufen ab |
|
| Ungültige JSON-Ausgabe |
|
Fehlersuche
Sie können Hooks mit den folgenden Methoden debuggen:
-
Aktivieren Sie die ausführliche Protokollierung im Skript, um die Eingabedaten zu überprüfen und die Skriptausführung nachzuverfolgen.
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 -
Testen Sie Hooks lokal, indem Sie die Testeingaben in Ihre Hooks weiterleiten, um ihr Verhalten zu überprüfen.
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 .