Docs
생태계 및 확장성
후크

Gemini CLI 후크

후크는 Gemini CLI가 에이전트 루프의 특정 지점에서 실행하는 스크립트 또는 프로그램으로, CLI의 소스 코드를 수정하지 않고도 동작을 가로채고 사용자 지정할 수 있습니다.

후크란 무엇인가요?

후크는 에이전트 루프의 일부로 동기적으로 실행됩니다. 후크 이벤트가 발생하면 Gemini CLI는 일치하는 모든 후크가 완료될 때까지 기다렸다가 계속 진행합니다.

후크를 사용하여 다음을 수행할 수 있습니다:

  • 컨텍스트 추가: 모델이 요청을 처리하기 전에 관련 정보(예: git 기록)를 주입합니다.
  • 작업 검증: 도구 인수를 검토하고 위험할 수 있는 작업을 차단합니다.
  • 정책 시행: 보안 스캐너 및 규정 준수 검사를 구현합니다.
  • 상호 작용 기록: 감사를 위해 도구 사용량 및 모델 응답을 추적합니다.
  • 동작 최적화: 사용 가능한 도구를 동적으로 필터링하거나 모델 매개변수를 조정합니다.

시작하기

  • 후크 작성 가이드: 포괄적인 예제와 함께 첫 번째 후크를 만드는 튜토리얼입니다.
  • 모범 사례: 보안, 성능 및 디버깅에 대한 지침입니다.
  • 후크 참조: I/O 스키마 및 종료 코드에 대한 확정적인 기술 사양입니다.

핵심 개념

후크 이벤트

후크는 Gemini CLI 수명 주기의 특정 이벤트에 의해 트리거됩니다.

이벤트발생 시기영향일반적인 사용 사례
SessionStart세션이 시작될 때 (시작, 재개, 지우기)컨텍스트 주입리소스 초기화, 컨텍스트 로드
SessionEnd세션이 종료될 때 (종료, 지우기)권고정리, 상태 저장
BeforeAgent사용자가 프롬프트를 제출한 후, 계획 전에턴 / 컨텍스트 차단컨텍스트 추가, 프롬프트 검증, 턴 차단
AfterAgent에이전트 루프가 끝날 때재시도 / 중단출력 검토, 재시도 강제 또는 실행 중단
BeforeModelLLM에 요청을 보내기 전턴 차단 / 모의(Mock)프롬프트 수정, 모델 교체, 모의 응답
AfterModelLLM 응답을 받은 후턴 차단 / 수정(Redact)응답 필터링/수정, 상호 작용 기록
BeforeToolSelectionLLM이 도구를 선택하기 전도구 필터링사용 가능한 도구 필터링, 선택 최적화
BeforeTool도구가 실행되기 전도구 차단 / 재작성인수 검증, 위험한 작업 차단
AfterTool도구가 실행된 후결과 차단 / 컨텍스트결과 처리, 테스트 실행, 결과 숨기기
PreCompress컨텍스트 압축 전권고상태 저장, 사용자에게 알림
Notification시스템 알림이 발생할 때권고데스크톱 알림으로 전달, 로깅

전역 메커니즘

이러한 핵심 원칙을 이해하는 것은 견고한 후크를 구축하는 데 필수적입니다.

엄격한 JSON 요구 사항 ("황금률")

후크는 stdin(입력) 및 stdout(출력)을 통해 통신합니다.

  1. 침묵은 필수입니다: 스크립트는 최종 JSON 객체 외에 stdout에 어떠한 일반 텍스트도 출력해서는 안 됩니다. JSON 앞에 echoprint 호출이 하나만 있어도 파싱이 중단됩니다.
  2. 오염 = 실패: stdout에 JSON이 아닌 텍스트가 포함되면 파싱이 실패합니다. CLI는 "Allow(허용)"를 기본값으로 설정하고 전체 출력을 systemMessage로 처리합니다.
  3. Stderr를 통한 디버그: 모든 로깅 및 디버깅에는 stderr를 사용하세요(예: echo "debug" >&2). Gemini CLI는 stderr를 캡처하지만 JSON으로 파싱을 시도하지는 않습니다.

종료 코드

Gemini CLI는 종료 코드를 사용하여 후크 실행의 상위 수준 결과를 결정합니다:

종료 코드레이블행동 영향
0성공stdout이 JSON으로 파싱됩니다. 의도적인 차단(예: {"decision": "deny"})을 포함한 모든 로직에 대해 선호되는 코드입니다.
2시스템 차단중대한 차단. 대상 작업(도구, 턴 또는 중지)이 중단됩니다. stderr가 거부 사유로 사용됩니다. 심각도가 높으며 보안 중지 또는 스크립트 실패에 사용됩니다.
기타경고치명적이지 않은 실패입니다. 경고가 표시되지만 상호 작용은 원래 매개변수를 사용하여 진행됩니다.

매처 (Matchers)

matcher 필드를 사용하여 후크를 실행할 특정 도구 또는 트리거를 필터링할 수 있습니다.

  • 도구 이벤트 (BeforeTool, AfterTool): 매처는 정규 표현식입니다. (예: "write_.*").
  • 수명 주기 이벤트: 매처는 정확한 문자열입니다. (예: "startup").
  • 와일드카드: "*" 또는 "" (빈 문자열)은 모든 발생과 일치합니다.

구성

후크는 settings.json에서 구성됩니다. Gemini CLI는 다음 우선순위 순서(높은 순에서 낮은 순)로 여러 계층의 구성을 병합합니다:

  1. 프로젝트 설정: 현재 디렉터리의 .gemini/settings.json.
  2. 사용자 설정: ~/.gemini/settings.json.
  3. 시스템 설정: /etc/gemini-cli/settings.json.
  4. 확장: 설치된 확장에 의해 정의된 후크.

구성 스키마

{
  "hooks": {
    "BeforeTool": [
      {
        "matcher": "write_file|replace",
        "hooks": [
          {
            "name": "security-check",
            "type": "command",
            "command": "$GEMINI_PROJECT_DIR/.gemini/hooks/security.sh",
            "timeout": 5000
          }
        ]
      }
    ]
  }
}

후크 구성 필드

필드유형필수 여부설명
typestringYes실행 엔진입니다. 현재 "command"만 지원됩니다.
commandstringYes*실행할 셸 명령입니다. (type"command"일 때 필수).
namestringNo로그 및 CLI 명령에서 후크를 식별하기 위한 친절한 이름입니다.
timeoutnumberNo실행 제한 시간(밀리초)입니다 (기본값: 60000).
descriptionstringNo후크의 목적에 대한 간략한 설명입니다.

환경 변수

후크는 정화된 환경에서 실행됩니다.

  • GEMINI_PROJECT_DIR: 프로젝트 루트의 절대 경로입니다.
  • GEMINI_SESSION_ID: 현재 세션의 고유 ID입니다.
  • GEMINI_CWD: 현재 작업 디렉터리입니다.
  • CLAUDE_PROJECT_DIR: (별칭) 호환성을 위해 제공됩니다.

보안 및 위험

경고: 후크는 사용자 권한으로 임의의 코드를 실행합니다. 후크를 구성하면 스크립트가 사용자 머신에서 셸 명령을 실행하도록 허용하는 것입니다.

프로젝트 수준 후크는 신뢰할 수 없는 프로젝트를 열 때 특히 위험합니다. Gemini CLI는 프로젝트 후크를 **지문(fingerprint)**으로 식별합니다. 후크의 이름이나 명령이 변경되면(예: git pull을 통해) 새롭고 신뢰할 수 없는 후크로 취급되며 실행 전에 경고가 표시됩니다.

자세한 위협 모델은 보안 고려 사항을 참조하세요.

후크 관리

JSON을 수동으로 편집하지 않고 CLI 명령을 사용하여 후크를 관리하세요:

  • 후크 보기: /hooks panel
  • 모두 활성화/비활성화: /hooks enable-all 또는 /hooks disable-all
  • 개별 토글: /hooks enable <name> 또는 /hooks disable <name>