close
Skip to main content

GitHub Copilot 후크 참조

후크의 이벤트, 구성 형식 및 입력 페이로드를 코파일럿 CLI 및 Copilot 클라우드 에이전트에서 찾습니다.

Introduction

후크는 세션 중에 특정 수명 주기 지점에서 실행되는 외부 명령으로, 사용자 지정 자동화, 보안 제어 및 통합을 사용하도록 설정합니다.

후크는 두 가지 Copilot 표면, 코파일럿 CLI 및 Copilot 클라우드 에이전트에서 지원됩니다. 대부분의 구성 형식 및 이벤트 페이로드는 동일하지만 실행 환경과 실행할 수 있는 이벤트 집합은 다릅니다.

이 문서 전체에서 두 표면 간에 다른 동작은 "CLI 전용" 및 "클라우드 에이전트만" 노트에서 호출됩니다. 표시되지 않은 항목은 둘 다에 적용됩니다.

후크 위치

후크가 실행되는 위치와 후크 구성 파일을 저장할 수 있는 위치는 표면에 따라 달라집니다.

  • **코파일럿 CLI ** — 후크는 CLI와 동일한 셸에 있는 개발자의 로컬 컴퓨터에서 실행됩니다. 이 문서에 설명된 모든 후크 이벤트는 CLI에서 지원됩니다.

    후크는 다음 원본에서 순서대로 로드되고(사용자, 프로젝트, 플러그 인) 결합됩니다. 동일한 이벤트가 여러 원본에 표시되면 모든 원본의 모든 후크 항목이 실행됩니다.

    • 리포지토리 루트의 리포지토리 수준 후크 파일.github/hooks/*.json
    • 사용자 수준 후크 파일 - *.json 사용자 수준 후크 디렉터리의 파일입니다. 기본적으로 macOS 및 Linux에서는 ~/.copilot/hooks/, Windows %USERPROFILE%\.copilot\hooks\. 설정된 경우 COPILOT_HOME 는 다음과 입니다 $COPILOT_HOME/hooks/.
    • 리포지토리 설정의 인라인 hooks 블록 - hooks 리포지토리의 .github/copilot/settings.json 최상위 수준(Git 커밋됨) 또는 .github/copilot/settings.local.json (일반적으로 gitignored 및 사용자별) 필드입니다. 리포지토리의 여러 도구 간 .claude/settings.json.claude/settings.local.json 파일도 읽습니다.
    • 사용자 수준 구성의 인라인 hooks 블록 -hooks 최상위 수준의 ~/.copilot/settings.json필드입니다.
    • 설치된 플러그 인에 의해 기여된 후크 — 각 플러그 인이 자신의 설치 디렉토리 내의 hooks.json (또는 hooks/hooks.json 아래)에 선언합니다.
  • **Copilot 클라우드 에이전트 ** — 후크는 클라우드 에이전트가 각 작업에 대해 프로비전하는 임시 Linux 샌드박스 내에서 실행됩니다. 샌드박스는 비대화형이며, 제한된 네트워크를 가지고 있으며, 작업이 종료되면 제거됩니다. 이벤트의 하위 집합이 실행되며, bash 또는 command 항목만이 적용됩니다.

    후크 구성은 복제된 리포지토리의 파일에서 .github/hooks/*.json 로드됩니다.

클라우드 에이전트 실행 환경

이 섹션은 Copilot 클라우드 에이전트 에만 적용됩니다. 후크 스크립트를 작성하고 클라우드 에이전트 작업에 대한 후크 항목을 구성하는 방법에 영향을 주는 제약 조건을 설명합니다.

재산가치
운영 체제Linux.
          `bash` 명령 후크의 필드만 적용되며 `powershell` 항목은 무시됩니다. 플랫폼 간의 `command` 필드는 대체(fallback)로 활용됩니다. |

| 작업 디렉터리 | /workspace 리포지토리가 복제될 때, 그렇지 않으면 /root. 후크 항목에 cwd을(를) 설정하거나 스크립트에서 파일을 참조할 때 이 경로를 사용합니다. | | Filesystem | 임시. 후크(로그, CSV, 대본)로 작성된 파일은 작업이 종료될 때 삭제됩니다. 후크 출력을 유지하려면 http 후크 엔트리를 통해 보냅니다. | | 아웃바운드 네트워크 | 클라우드 에이전트 방화벽에 의해 제한됩니다. 기본적으로 GitHub 및 Copilot 호스트 이름에만 연결할 수 있습니다. 다른 호스트(예: https://hooks.example.com)에 도달하려면 관리자가 구성한 방화벽 허용 규칙이 필요합니다. | | 사용 가능한 환경 변수 | GITHUB_COPILOT_API_TOKENGITHUB_COPILOT_GIT_TOKEN 샌드박스에 설정됩니다. COPILOT_AGENT_PROMPT 는 작업이 호출된 프롬프트를 보유합니다. HOME/root로 설정되므로 경로를 확인하는 ~/... 모든 후크 스크립트가 임시 샌드박스에 기록됩니다. GITHUB_TOKEN 가 설정되지 않았습니다. | | 상호작용성 | 완전히 비대화형입니다. 에이전트는 모든 도구 권한이 미리 부여된 상태에서 실행되므로 권한 대화 상자가 표시되지 않고 사용자에게 알림이 표시되지 않습니다. | | 구성 발견 | 클라우드 에이전트 작업에서 기본적으로 존재하는 유일한 후크 구성은 .github/hooks/*.json 복제된 리포지토리 내에 있습니다. 샌드박스는 사용자 수준 후크 파일, settings.json``config.json또는 설치된 플러그 인과 함께 제공하지 않습니다. |

후크 구성 형식

후크 구성 파일은 버전 1이 있는 JSON 형식을 사용합니다.

명령 후크

명령 후크는 셸 스크립트를 실행하며 모든 후크 유형에서 지원됩니다.

참고

클라우드 에이전트만 해당합니다. 클라우드 에이전트는 Linux 샌드박스에서 후크를 실행합니다. bash 필드만 적용되며 powershell 항목은 무시됩니다. 플랫폼 command 간 필드는 대체 옵션으로 인정됩니다.

{
  "version": 1,
  "hooks": {
    "preToolUse": [
      {
        "type": "command",
        "bash": "your-bash-command",
        "powershell": "your-powershell-command",
        "cwd": "optional/working/directory",
        "env": { "VAR": "value" },
        "timeoutSec": 30
      }
    ]
  }
}
FieldType필수Description
bashstring
          `bash`, `powershell` 또는 `command` 중 하나입니다. | Unix에 대한 셸 명령입니다. |

| command | string | bash, powershell 또는 command 중 하나입니다. | 현재 플랫폼에 대해 bash 또는 powershell이 설정되지 않은 경우 사용되는 플랫폼 간 폴백입니다. | | cwd | string | No | 명령에 대한 작업 디렉터리입니다(리포지토리 루트 또는 절대를 기준으로). | | env | object | No | 설정할 환경 변수(변수 확장 지원). | | powershell | string | bash, powershell 또는 command 중 하나입니다. | Windows용 셸 명령입니다. | | timeoutSec | number | No | 초 단위의 시간 제한입니다. 기본값: 30. | | type | "command" | 예 | "command"이어야 합니다. |

HTTP 후크

HTTP 후크는 입력 페이로드를 URL에 JSON POST 으로 보냅니다.

참고

클라우드 에이전트만 해당합니다. 샌드박스의 아웃바운드 네트워크는 클라우드 에이전트 방화벽에 의해 제한되므로 url 허용 목록에 있는 호스트를 대상으로 해야 합니다.

{
  "version": 1,
  "hooks": {
    "postToolUse": [
      {
        "type": "http",
        "url": "https://hooks.example.com/copilot",
        "headers": { "X-Source": "copilot-cli" },
        "allowedEnvVars": ["GITHUB_TOKEN"],
        "timeoutSec": 30
      }
    ]
  }
}
FieldType필수Description
allowedEnvVarsstring[]No값 내에서 headers 확장될 수 있는 환경 변수 이름입니다.
          `url`를 설정할 때 `https://`를 사용해야 합니다. |

| headers | object | No | 포함할 헤더를 요청합니다. | | timeoutSec | number | No | 초 단위의 시간 제한입니다. 기본값: 30. | | type | "http" | 예 | "http"이어야 합니다. | | url | string | 예 | 대상 URL입니다. http: 또는 https:을 사용해야 합니다. preToolUsepermissionRequest의 경우 응답이 도구 권한을 부여할 수 있기 때문에 https:// 를 사용해야 합니다. |

프롬프트 후크

사용자가 입력한 것처럼 프롬프트 후크가 텍스트를 자동으로 제출합니다. sessionStart에서만 지원됩니다. 텍스트는 자연어 프롬프트 또는 슬래시 명령일 수 있습니다.

참고

** 코파일럿 CLI 만.** 프롬프트 후크는 새 대화형 세션에 대해서만 작동합니다. 이력서에서 실행되지 않으며 비대화형 프롬프트 모드(-p)에서 실행되지 않습니다.

참고

클라우드 에이전트. 클라우드 에이전트 작업은 비대화형으로 실행되므로 -pprompt크 항목이 실행되지 않을 수 있습니다. 사용자 환경에서 해당 동작을 신뢰하기 전에, 그것을 먼저 확인하십시오.

{
  "version": 1,
  "hooks": {
    "sessionStart": [
      {
        "type": "prompt",
        "prompt": "Your prompt text or /slash-command"
      }
    ]
  }
}
FieldType필수Description
type"prompt"
          `"prompt"`이어야 합니다. |

| prompt | string | 예 | 제출할 텍스트는 자연어 메시지 또는 슬래시 명령일 수 있습니다. |

후크 이벤트

아래 표에서는 지원되는 모든 이벤트를 나열합니다. 클라우드 에이전트 열은 이벤트가 클라우드 에이전트에서 발생하는지 여부를 표시하고 동작 차이점을 설명합니다.

Event발생하는 경우처리된 출력클라우드 에이전트
agentStop주 에이전트가 턴을 완료합니다.예 - 연속을 차단하고 강제 적용할 수 있습니다.화재.
          `decision: "block"` 은 작업의 시간 제한에 여전히 포함되는 추가 턴을 강제합니다. |

| errorOccurred | 실행하는 동안 오류가 발생합니다. | No | 화재. | | notification | CLI가 시스템 알림(셸 완료, 에이전트 완료 또는 유휴 상태, 권한 프롬프트, 유도 대화 상자)을 내보낸 경우 비동기적으로 발생합니다. Fire-and-forget: 세션을 차단하지 않습니다. 에서 regex를 지원합니다 matcher``notification_type. | 선택 사항 - additionalContext를 세션에 삽입할 수 있습니다. | 실행되지 않습니다. 클라우드 에이전트는 사용자에게 알림을 표시하지 않습니다(위의 클라우드 에이전트 실행 환경 테이블의 대화형 작업 행 참조). | | permissionRequest | 권한 서비스가 실행되기 전에 트리거됩니다(규칙 엔진, 세션 승인, 자동 허용/자동 거부 및 사용자 확인). 병합된 후크 출력이 behavior: "allow" 또는 "deny"를 반환할 경우, 해당 결정은 일반 권한 흐름을 단락시킵니다. 에서 regex를 지원합니다 matcher``toolName. | 예 - 프로그래밍 방식으로 허용하거나 거부할 수 있습니다. | 도구 호출은 사전 승인되었으므로 이 후크가 실행되지 않거나 효과가 없습니다. 대신 사용 권한을 결정하는 데 사용합니다 preToolUse . | | postToolUse | 각 도구가 성공적으로 완료된 후 | No | 화재. | | postToolUseFailure | 도구가 실패로 완료된 후 | 예, additionalContext를 통해 복구 지침을 제공할 수 있으며, 명령 후크에 대한 종료 코드는 2입니다. | 화재. | | preCompact | 컨텍스트 압축이 시작됩니다(수동 또는 자동). matcher는 트리거 ("manual" 또는 "auto")에 따라 필터링을 지원합니다. | 아니요 - 알림만 해당합니다. | trigger: "auto" 에서만 작동합니다. 수동 압축을 요청할 사용자가 없습니다. | | preToolUse | 각 도구를 실행하기 전에. | 예 - 허용, 거부 또는 수정할 수 있습니다. | 화재. 의사 결정이 사용자가 응답할 수 없기 때문에 "ask"로 간주되어 "deny" 처리됩니다. | | sessionEnd | 세션이 종료됩니다. | No | 작업당 한 번 발생합니다. reason 는 일반적으로 "complete", "error"또는 "timeout"; "abort" 이며 "user_exit" 사용자가 없기 때문에 예상되지 않습니다. | | sessionStart | 새 세션 또는 다시 시작된 세션이 시작됩니다. | 선택 사항 - additionalContext를 세션에 삽입할 수 있습니다. | 작업당 한 번씩 새 세션(이력서 아님)으로 발생합니다. 클라우드 에이전트 항목의 prompt 동작은 위의 프롬프트 후크를 참조하세요. | | subagentStart | 하위 에이전트가 생성됩니다(실행되기 전에). 에이전트 이름으로 필터링하도록 지원합니다 matcher . | 선택 사항입니다 — 만들기를 차단할 수는 없지만 additionalContext가 하위 에이전트의 프롬프트 앞에 추가됩니다. | 화재. | | subagentStop | 서브에이전트가 완료됩니다. | 예 - 연속을 차단하고 강제 적용할 수 있습니다. | 화재. | | userPromptSubmitted | 사용자가 프롬프트를 제출합니다. | No | 작업에 제공된 프롬프트에 대해 최대 한 번만 발생합니다. 후속 사용자 입력은 없습니다. |

후크 이벤트 페이로드 입력

각 후크 이벤트는 후크 처리기에 JSON 페이로드를 제공합니다. 후크 구성에 사용되는 이벤트 이름으로 선택한 두 개의 페이로드 형식이 지원됩니다.

  • camelCase 형식 - camelCase에서 이벤트 이름을 구성합니다(예: sessionStart). 필드는 camelCase를 사용합니다.
  • VS Code 호환되는 형식 - PascalCase에서 이벤트 이름을 구성합니다(예: SessionStart). 필드는 확장 형식에 일치시키기 위해 snake_case를 사용합니다.

sessionStart / SessionStart

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;      // Unix timestamp in milliseconds
    cwd: string;
    source: "startup" | "resume" | "new";
    initialPrompt?: string;
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "SessionStart";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    source: "startup" | "resume" | "new";
    initial_prompt?: string;
}

sessionEnd / SessionEnd

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    reason: "complete" | "error" | "abort" | "timeout" | "user_exit";
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "SessionEnd";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    reason: "complete" | "error" | "abort" | "timeout" | "user_exit";
}

userPromptSubmitted / UserPromptSubmit

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    prompt: string;
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "UserPromptSubmit";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    prompt: string;
}

preToolUse / PreToolUse

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    toolName: string;
    toolArgs: unknown;
}
          **
          VS Code 호환되는 입력:**

PascalCase 이벤트 이름으로 PreToolUse 구성된 경우, 페이로드는 snake_case 필드 이름을 사용하여 VS CodeCopilot 확장 형식에 일치시킵니다.

{
    hook_event_name: "PreToolUse";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    tool_name: string;
    tool_input: unknown;    // Tool arguments (parsed from JSON string when possible)
}

postToolUse / PostToolUse

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    toolName: string;
    toolArgs: unknown;
    toolResult: {
        resultType: "success";
        textResultForLlm: string;
    }
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "PostToolUse";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    tool_name: string;
    tool_input: unknown;
    tool_result: {
        result_type: "success";
        text_result_for_llm: string;
    }
}

postToolUseFailure / PostToolUseFailure

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    toolName: string;
    toolArgs: unknown;
    error: string;
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "PostToolUseFailure";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    tool_name: string;
    tool_input: unknown;
    error: string;
}

agentStop / Stop

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    transcriptPath: string;
    stopReason: "end_turn";
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "Stop";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    transcript_path: string;
    stop_reason: "end_turn";
}

subagentStart

          **입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    transcriptPath: string;
    agentName: string;
    agentDisplayName?: string;
    agentDescription?: string;
}

subagentStop / SubagentStop

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    transcriptPath: string;
    agentName: string;
    agentDisplayName?: string;
    stopReason: "end_turn";
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "SubagentStop";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    transcript_path: string;
    agent_name: string;
    agent_display_name?: string;
    stop_reason: "end_turn";
}

errorOccurred / ErrorOccurred

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    error: {
        message: string;
        name: string;
        stack?: string;
    };
    errorContext: "model_call" | "tool_execution" | "system" | "user_input";
    recoverable: boolean;
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "ErrorOccurred";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    error: {
        message: string;
        name: string;
        stack?: string;
    };
    error_context: "model_call" | "tool_execution" | "system" | "user_input";
    recoverable: boolean;
}

preCompact / PreCompact

          **camelCase 입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    transcriptPath: string;
    trigger: "manual" | "auto";
    customInstructions: string;
}
          **
          VS Code 호환되는 입력:**
{
    hook_event_name: "PreCompact";
    session_id: string;
    timestamp: string;      // ISO 8601 timestamp
    cwd: string;
    transcript_path: string;
    trigger: "manual" | "auto";
    custom_instructions: string;
}

preToolUse 의사 결정 제어

          `preToolUse` 후크는 stdout에 JSON 개체를 작성하여 도구 실행을 제어할 수 있습니다.
Field가치들Description
permissionDecision
          `"allow"`, `"deny"`, `"ask"` | 도구가 실행되는지 여부입니다. 빈 출력은 기본 동작을 사용합니다. 클라우드 에이전트에서는 응답할 사용자가 없기 때문에 `"ask"`이(가) `"deny"`으로(로) 처리됩니다. |

| permissionDecisionReason | string | 에이전트에게 보여지는 이유. 결정 시 "deny"가 필요합니다. | | modifiedArgs | object | 원본 대신 사용할 대체 도구 인수입니다. |

agentStop

           / 
          `subagentStop` 의사 결정 제어
Field가치들Description
decision
          `"block"`, `"allow"` | 
          `"block"` 는 `reason` 를 프롬프트로 사용하여 다른 에이전트의 차례를 강제합니다. |

| reason | string | decision"block"일 때 다음 턴에 대한 프롬프트. |

permissionRequest 의사 결정 제어

참고

** 코파일럿 CLI 만.** permissionRequest 후크는 Copilot 클라우드 에이전트에서 적용되지 않습니다—그곳의 도구 호출은 이미 사전 승인되었습니다(클라우드 에이전트 실행 환경 테이블의 대화형 인터랙티비티 행 참조). 클라우드 에이전트에서 사용 권한을 결정하는 데 사용합니다 preToolUse .

          `permissionRequest` 사용 권한 서비스가 실행되기 전에 후크가 발생합니다. 규칙 검사, 세션 승인, 자동 허용/자동 거부 및 사용자 프롬프트가 표시되기 전에 발생합니다. 후크가 `behavior: "allow"` 또는 `"deny"`을 반환하는 경우, 해당 결정은 정상적인 권한 흐름을 단락시킵니다. 아무 것도 반환하지 않는 것은 정상적인 권한 처리로 넘어갑니다. 프로그래밍 방식으로 도구 호출을 승인하거나 거부하는 데 사용합니다. 특히 대화형 프롬프트를 사용할 수 없는 CLI 파이프 모드(`-p`) 및 기타 CLI CI 사용에서 유용합니다. 클라우드 에이전트에는 적용되지 않습니다.

구성된 permissionRequest 후크는 (후크 전에 단락하는 사용 권한 종류인 readhook를 제외하고) 각 요청에 대해 실행됩니다. 후크 출력은 나중에 생성된 후크 출력이 이전 출력을 덮어쓰면서 병합됩니다.

          **Matcher:**`toolName`에 대해 테스트하는 선택적 정규식입니다. 
          `^(?:pattern)$`로 고정되며 도구의 전체 이름과 일치해야 합니다. 설정하면 후크는 일치하는 도구 이름에 대해서만 발생합니다.

권한 결정을 제어하기 위해 stdout에 JSON을 출력합니다.

Field가치들Description
behavior
          `"allow"`, `"deny"` | 도구 호출을 승인할지 또는 거부할지 여부입니다. |

| message | string | 거부 시 LLM에 피드백으로 제공되는 이유입니다. | | interrupt | 부울 값 | true"deny"와 결합되면, 에이전트가 완전히 중지됩니다. |

빈 출력을 반환하거나 {} 일반 권한 흐름으로 넘어갈 수 있습니다. 명령 후크의 경우, 종료 코드 2는 거절로 처리되며, stdout JSON(있는 경우)은 {"behavior":"deny"}으로 병합되고 stderr는 무시됩니다.

notification 후크

참고

** 코파일럿 CLI 만.** notification 후크는 Copilot 클라우드 에이전트에서 실행되지 않습니다.

CLI에서 notification 시스템 알림을 내보낸 경우 후크가 비동기적으로 실행됩니다. 이러한 후크는 일단 실행되면 추가 조작이 필요 없는 방식으로 작동합니다. 세션을 차단하지 않으며, 오류는 기록되고 건너뜁니다.

          **입력:**
{
    sessionId: string;
    timestamp: number;
    cwd: string;
    hook_event_name: "Notification";
    message: string;           // Human-readable notification text
    title?: string;            // Short title (e.g., "Permission needed", "Shell completed")
    notification_type: string; // One of the types listed below
}
          **알림 유형:**
Type실행 시
shell_completed백그라운드(비동기) 셸 명령이 완료됨
shell_detached_completed분리된 셸 세션이 완료됨
agent_completed백그라운드 서브에이전트가 완료됨(완료됨 또는 실패됨)
agent_idle백그라운드 에이전트가 턴을 완료하고 유휴 상태로 전환됩니다(대기 중 write_agent).
permission_prompt에이전트가 도구를 실행할 수 있는 권한을 요청합니다.
elicitation_dialog에이전트가 사용자에게 추가 정보를 요청합니다.
          **Output:**
{
    additionalContext?: string; // Injected into the session as a user message
}
          `additionalContext` 반환되면 텍스트가 앞에 추가된 사용자 메시지로 세션에 삽입됩니다. 세션이 유휴 상태인 경우 추가 에이전트 처리를 트리거할 수 있습니다. 작업을 수행하지 않으려면 `{}` 또는 빈 출력을 반환하십시오.

          **Matcher:**`notification_type`에 대한 선택적인 정규식. 패턴은 다음과 같이 `^(?:pattern)$`고정됩니다. 모든 알림 유형을 수신하려면 `matcher`를 생략하십시오.

매처 필터링

여러 이벤트는 각 후크 항목에서 특정 호출을 필터링할 수 있는 선택적 matcher 정규표현식을 사용합니다. 패턴은 다음과 같이 ^(?:matcher)$ 고정되며 전체 값과 일치해야 합니다. 잘못된 정규표현식으로 인해 hook 기능 항목이 건너뛰어집니다.

| Event | matcher 를 비교합니다. | |-------|------------------------------| | notification | notification_type | | permissionRequest | toolName | | preCompact | trigger("manual" 또는 "auto") | | preToolUse | toolName | | subagentStart | agentName |

후크 일치를 위한 도구 이름

도구 이름Description
ask_user사용자에게 명확한 질문을 합니다. 클라우드 에이전트에는 사용자가 없으므로 ask_user 유용한 결과를 생성하지 않습니다.
bash셸 명령 실행(Unix).
create새 파일을 만듭니다.
edit파일 내용을 수정합니다.
glob패턴별로 파일을 찾습니다.
grep파일 콘텐츠를 검색합니다.
powershell셸 명령을 실행합니다(Windows). 클라우드 에이전트(Linux 샌드박스)에 표시되지 않습니다.
task서브에이전트 작업을 실행합니다.
view파일 내용을 읽습니다.
web_fetch웹 페이지를 가져옵니다.

동일한 형식의 여러 후크가 구성된 경우 순서대로 실행됩니다. 의 경우 preToolUse후크가 반환 "deny"되면 도구가 차단됩니다. 후크 오류(2가 아닌 종료 코드 또는 시간 초과)은 로그에 기록되고 무시됩니다. 이는 에이전트 실행을 방해하지 않습니다.

명령 후크에 대한 종료 코드

종료 코드의미
0성공.
          `stdout` 가 있는 경우 후크 출력 JSON으로 구문 분석됩니다. |

| 2 | 기본적으로 경고로 처리됩니다. stderr 는 사용자에게 표시되지만 실행은 계속됩니다. permissionRequest의 경우, 종료 2{"behavior":"deny"}로 처리되며, 모든 stdout JSON이 병합됩니다. postToolUseFailure의 경우, exit 2additionalContext로 간주되며 에이전트에게 표시된 실패에 stdout이(가) 추가됩니다. | | 기타 0이 아닌 값 | 훅 실패로 기록됩니다. 실행이 계속됩니다(장애 시 개방). |

모든 후크 사용 안 함

디스크에 후크 구성을 유지하지만 실행하지 않으려면 사용합니다 disableAllHooks . 예를 들면 다음과 같습니다.

  • 문제를 디버깅하고 구성을 삭제하지 않고 후크가 원인인지 확인하려고 합니다.
  • 설정을 잃지 않고 중요한 작업(코드 검토, 릴리스 분기, 비밀 작업) 중에 자동화를 일시 중지합니다. (코파일럿 CLI만).
  • 참가자가 리포지토리에서 옵션을 설정하여 로컬에서 옵트아웃할 수 있는 후크 파일을 소스 제어에 전달합니다 settings.json. (코파일럿 CLI만).
  • 대화형 세션 중에 느리거나 시끄러운 후크를 일시적으로 비활성화합니다. (코파일럿 CLI만).

파일의 모든 후크를 건너뛰려면 disableAllHookstrue로 최상위 수준에서 설정하세요. 이 때, 파일은 삭제되지 않습니다.

{
  "version": 1,
  "disableAllHooks": false,
  "hooks": {
    "preToolUse": [ /* hook entries */ ]
  }
}

동작은 플래그를 설정하는 위치에 따라 달라집니다.

  • 단일 .github/hooks/*.json 파일 내에서 는 해당 파일에 선언된 후크만 건너뜁니다. 코파일럿 CLI 및 Copilot 클라우드 에이전트에 의해 존경을 받다.
  • 리포지settings.json토리의 최상위 수준에서코파일럿 CLI 만 해당. 모든 소스(리포지토리 파일, 사용자 파일, 플러그인 및 인라인 후크 블록)의 모든 후크는 해당 리포지토리에서의 세션에 대해 건너뜁니다. 클라우드 에이전트가 로드 settings.json되지 않습니다.

추가 읽기