세션 훅
hooks를 사용하면 Copilot 세션의 각 라이프사이클에 처리를 끼워 넣을 수 있습니다.
도구 실행 제어, 감사 로그, 프롬프트 보강, 에러 처리 등을 코어 구현을 변경하지 않고 추가할 수 있습니다.
훅의 흐름
기본 사용법
사용 가능한 훅
null을 반환하면 기본 동작이 계속됩니다.
대표적인 사용 사례
1) Permission control(실행 제어)
onPreToolUse에서 허용 도구를 allow-list 방식으로 설정- 파괴적 조작은
permissionDecision: 'ask'로 사람에게 승인 요청 permissionDecisionReason으로 거부 이유를 명시toolName의 후보는 Tools의 목록에서 확인(예:view,glob,bash)
2) Auditing / compliance(감사)
- 라이프사이클 훅을 조합해 감사 이벤트를 수집
- 수집 데이터는 세션 ID 단위로 영속화
3) Prompt enrichment(입력 보강)
onSessionStart에서 프로젝트 정보(언어, FW, 규약)를additionalContext에 추가onUserPromptSubmitted에서 단축키(/fix,/test)를 확장
4) Result filtering(결과 정형화)
onPostToolUse에서 API key / token / password 등을 마스킹- 너무 긴 결과는 요약하고 필요 시에만 상세를 반환
5) Error recovery(장애 복구)
onErrorOccurred에서model_call이면서recoverable=true일 때만retry- 비복구 계열은
userNotification으로 사용자에게 간결하게 알림
6) Session metrics(계측)
onSessionStart에서 시작 시각을 기록onPreToolUse/onUserPromptSubmitted에서 카운터 업데이트onSessionEnd에서 소요 시간, 도구 횟수, 종료 이유를 출력
Hook input / output 타입
공통 입력(BaseHookInput)
PreToolUseHookInput
PreToolUseHookOutput
PostToolUseHookInput
PostToolUseHookOutput
UserPromptSubmittedHookInput
UserPromptSubmittedHookOutput
SessionStartHookInput
SessionStartHookOutput
SessionEndHookInput
SessionEndHookOutput
ErrorOccurredHookInput
ErrorOccurredHookOutput
ToolResultObject
도구 실행 결과의 표준 객체입니다.베스트 프랙티스
- 무거운 동기 처리를 훅 내에서 직접 너무 많이 실행하지 마세요. 필요하다면 비동기화합니다.
- 변경이 불필요한 경우
null을 반환해 기본 동작에 맡깁니다. permissionDecision은 가능한 한 명시합니다.- 크리티컬 에러는 너무 억제하지 말고 로그/통지 경로를 확보합니다.
- 세션 단위의 상태는 session id 기반으로 관리하고
onSessionEnd에서 정리합니다.
최신 정보는 GitHub 저장소를 참고하세요.