Session-Hooks
Mithooks können Sie sich in die einzelnen Lebenszyklusphasen einer Copilot-Session einklinken.
Tool-Ausführungssteuerung, Audit-Logs, Prompt-Anreicherung, Fehlerbehandlung usw. lassen sich hinzufügen, ohne die Kernimplementierung zu ändern.
Ablauf der Hooks
Grundlegende Verwendung
Verfügbare Hooks
Wird
null zurückgegeben, läuft das Standardverhalten weiter.
Typische Anwendungsfälle
1) Berechtigungssteuerung (Ausführungskontrolle)
- Zulassene Tools per Allow-List über
onPreToolUse - Destruktive Operationen mit
permissionDecision: 'ask'menschlich freigeben lassen - Über
permissionDecisionReasonden Ablehnungsgrund explizit machen - Kandidaten für
toolNamefinden Sie in der Liste unter Tools (z. B.view,glob,bash)
2) Auditing / Compliance
- Audit-Ereignisse durch Kombination der Lebenszyklus-Hooks sammeln
- Gesammelte Daten pro Session-ID persistieren
3) Prompt-Anreicherung
- In
onSessionStartProjektinformationen (Sprache, Framework, Konventionen) viaadditionalContextergänzen - In
onUserPromptSubmittedShortcuts (/fix,/test) expandieren
4) Ergebnisfilterung
- In
onPostToolUseAPI-Keys / Tokens / Passwörter maskieren - Zu lange Ergebnisse zusammenfassen und Details nur bei Bedarf ausgeben
5) Fehler-Recovery
- In
onErrorOccurrednur beimodel_callundrecoverable=trueeinenretryausführen - Nicht wiederherstellbare Fälle über
userNotificationknapp an den Nutzer melden
6) Session-Metriken
- In
onSessionStartdie Startzeit erfassen - In
onPreToolUse/onUserPromptSubmittedZähler aktualisieren - In
onSessionEndDauer, Anzahl der Tool-Aufrufe und Abschlussgrund ausgeben
Hook-Input-/Output-Typen
Gemeinsame Eingabe (BaseHookInput)
PreToolUseHookInput
PreToolUseHookOutput
PostToolUseHookInput
PostToolUseHookOutput
UserPromptSubmittedHookInput
UserPromptSubmittedHookOutput
SessionStartHookInput
SessionStartHookOutput
SessionEndHookInput
SessionEndHookOutput
ErrorOccurredHookInput
ErrorOccurredHookOutput
ToolResultObject
Standard-Objekt für Tool-Ausführungsergebnisse.Best Practices
- Führen Sie schwere synchrone Verarbeitung nicht direkt im Hook aus. Bei Bedarf asynchron auslagern.
- Wenn keine Änderung nötig ist, geben Sie
nullzurück und überlassen den Standardablauf. - Setzen Sie
permissionDecisionmöglichst explizit. - Unterdrücken Sie kritische Fehler nicht zu stark – halten Sie Log-/Notification-Pfade offen.
- Verwalten Sie Session-bezogenen Zustand auf Basis der Session-ID und räumen Sie ihn in
onSessionEndauf.
Aktuelle Informationen finden Sie im GitHub-Repository.