Skip to main content
커스텀 정책을 사용하면 에이전트 동작에 관한 규칙을 직접 작성할 수 있습니다. 프로젝트 컨벤션 적용, 드리프트 방지, 위험 작업 차단, 멈춘 에이전트 감지, Slack이나 승인 워크플로 연동 등 다양하게 활용할 수 있습니다. 내장 정책과 동일한 훅 이벤트 시스템과 allow, deny, instruct 결정 방식을 사용합니다.

빠른 예시

설치:

커스텀 정책을 불러오는 두 가지 방법

방법 1: 컨벤션 기반 (권장)

.failproofai/policies/ 디렉터리에 *policies.{js,mjs,ts} 파일을 넣으면 자동으로 불러옵니다 — 별도 플래그나 설정 변경이 필요 없습니다. git hooks처럼 파일만 넣으면 바로 동작합니다.
동작 방식:
  • 프로젝트 디렉터리와 사용자 디렉터리를 모두 스캔합니다 (합집합 — 첫 번째 스코프 우선이 아님)
  • 각 디렉터리 내에서 파일은 알파벳 순서로 불러옵니다. 순서를 제어하려면 01-, 02- 접두사를 사용하세요
  • *policies.{js,mjs,ts} 패턴에 맞는 파일만 불러오며, 나머지 파일은 무시됩니다
  • 각 파일은 독립적으로 불러옵니다 (파일 단위 fail-open)
  • 명시적 --custom 옵션 및 내장 정책과 함께 동작합니다
컨벤션 정책은 조직의 품질 기준을 세우는 가장 쉬운 방법입니다. .failproofai/policies/를 git에 커밋하면 모든 팀원이 별도 설정 없이 동일한 규칙을 자동으로 적용받습니다. 새로운 실패 패턴을 발견할 때마다 정책을 추가하고 푸시하세요. 시간이 지날수록 기여가 쌓이며 살아있는 품질 기준이 만들어집니다.

방법 2: 명시적 파일 경로

변환된 절대 경로는 policies-config.jsoncustomPoliciesPath에 저장됩니다. 파일은 매 훅 이벤트마다 새로 불러오며 이벤트 간 캐싱은 없습니다.

두 방법을 함께 사용하기

컨벤션 정책과 명시적 --custom 파일은 공존할 수 있습니다. 불러오는 순서:
  1. 명시적 customPoliciesPath 파일 (설정된 경우)
  2. 프로젝트 컨벤션 파일 ({cwd}/.failproofai/policies/, 알파벳 순)
  3. 사용자 컨벤션 파일 (~/.failproofai/policies/, 알파벳 순)

API

가져오기

customPolicies.add(hook)

정책을 등록합니다. 같은 파일 내에 여러 정책을 등록하려면 원하는 만큼 호출하세요.

결정 헬퍼 함수

deny(message) - 메시지는 "Blocked by failproofai:" 접두사와 함께 Claude에 표시됩니다. 하나의 deny가 발생하면 이후 평가는 모두 생략됩니다. instruct(message) - 메시지는 현재 도구 호출에 대한 Claude의 컨텍스트에 추가됩니다. 모든 instruct 메시지는 누적되어 함께 전달됩니다.
policyParamshint 필드를 추가하면 코드 변경 없이 denyinstruct 메시지에 추가 안내를 붙일 수 있습니다. 커스텀(custom/), 프로젝트 컨벤션(.failproofai-project/), 사용자 컨벤션(.failproofai-user/) 정책 모두에서 동작합니다. 자세한 내용은 설정 → hint를 참고하세요.

정보성 allow 메시지

allow(message)는 작업을 허용하면서 동시에 Claude에 정보성 메시지를 전송합니다. 메시지는 훅 핸들러의 stdout 응답에서 additionalContext로 전달됩니다 — instruct와 동일한 메커니즘이지만 의미가 다릅니다. 경고가 아닌 상태 업데이트입니다. 사용 사례:
  • 상태 확인: allow("All CI checks passed.") — 모든 것이 정상임을 Claude에 알림
  • Fail-open 설명: allow("GitHub CLI not installed, skipping CI check.") — 검사를 건너뛴 이유를 Claude에 알려 완전한 컨텍스트 제공
  • 메시지 누적: 여러 정책이 각각 allow(message)를 반환하면, 모든 메시지가 줄바꿈으로 합쳐져 함께 전달됩니다

PolicyContext 필드

SessionMetadata 필드

이벤트 타입


평가 순서

정책은 다음 순서로 평가됩니다:
  1. 내장 정책 (정의된 순서)
  2. customPoliciesPath의 명시적 커스텀 정책 (.add() 호출 순서)
  3. 프로젝트 .failproofai/policies/의 컨벤션 정책 (파일 알파벳 순, 파일 내 .add() 순서)
  4. 사용자 ~/.failproofai/policies/의 컨벤션 정책 (파일 알파벳 순, 파일 내 .add() 순서)
첫 번째 deny가 발생하면 이후 모든 정책 평가가 생략됩니다. 모든 instruct 메시지는 누적되어 함께 전달됩니다.

전이적 임포트

커스텀 정책 파일은 상대 경로를 사용해 로컬 모듈을 임포트할 수 있습니다:
엔트리 파일에서 도달 가능한 모든 상대 임포트가 처리됩니다. 내부적으로 from "failproofai" 임포트를 실제 dist 경로로 재작성하고 ESM 호환성을 위해 임시 .mjs 파일을 생성하는 방식으로 구현됩니다.

이벤트 타입 필터링

match.events를 사용해 정책이 발동하는 시점을 제한할 수 있습니다:
match를 완전히 생략하면 모든 이벤트 타입에서 발동합니다.

오류 처리 및 실패 동작

커스텀 정책은 fail-open 방식입니다. 오류가 발생해도 내장 정책을 차단하거나 훅 핸들러를 중단시키지 않습니다.
커스텀 정책 오류를 디버깅하려면 로그 파일을 실시간으로 확인하세요:

전체 예시: 여러 정책


예시 파일

examples/ 디렉터리에는 바로 실행 가능한 정책 파일들이 포함되어 있습니다:

명시적 파일 예시 사용

컨벤션 기반 예시 사용

별도 설치 명령이 필요 없습니다 — 다음 훅 이벤트 시 파일이 자동으로 인식됩니다.