Skip to main content

세션 훅

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

도구 실행 결과의 표준 객체입니다.

베스트 프랙티스

  1. 무거운 동기 처리를 훅 내에서 직접 너무 많이 실행하지 마세요. 필요하다면 비동기화합니다.
  2. 변경이 불필요한 경우 null을 반환해 기본 동작에 맡깁니다.
  3. permissionDecision은 가능한 한 명시합니다.
  4. 크리티컬 에러는 너무 억제하지 말고 로그/통지 경로를 확보합니다.
  5. 세션 단위의 상태는 session id 기반으로 관리하고 onSessionEnd에서 정리합니다.
최신 정보는 GitHub 저장소를 참고하세요.
마지막 수정일 2026년 7월 13일