allow, deny, instruct 결정 방식을 사용합니다.
빠른 예시
커스텀 정책을 로드하는 두 가지 방법
방법 1: 컨벤션 기반 (권장)
*policies.{js,mjs,ts} 파일을 .failproofai/policies/ 디렉토리에 넣으면 별도의 플래그나 설정 변경 없이 자동으로 로드됩니다. git 훅처럼 파일만 넣으면 바로 동작합니다.
- 프로젝트와 사용자 디렉토리 모두 스캔됩니다 (합집합 방식 — 첫 번째 스코프 우선 방식이 아님)
- 각 디렉토리 내에서 파일은 알파벳 순으로 로드됩니다.
01-,02-접두사를 붙여 순서를 제어할 수 있습니다 *policies.{js,mjs,ts}패턴에 맞는 파일만 로드되며, 그 외 파일은 무시됩니다- 각 파일은 독립적으로 로드됩니다 (파일 단위로 fail-open)
- 명시적
--custom및 내장 정책과 함께 동작합니다
방법 2: 명시적 파일 경로
policies-config.json의 customPoliciesPath에 저장됩니다. 파일은 매 훅 이벤트마다 새로 로드되며, 이벤트 간 캐싱은 없습니다.
두 방법을 함께 사용하기
컨벤션 정책과 명시적--custom 파일은 함께 사용할 수 있습니다. 로드 순서:
- 명시적
customPoliciesPath파일 (설정된 경우) - 프로젝트 컨벤션 파일 (
{cwd}/.failproofai/policies/, 알파벳 순) - 사용자 컨벤션 파일 (
~/.failproofai/policies/, 알파벳 순)
API
임포트
customPolicies.add(hook)
정책을 등록합니다. 하나의 파일에 여러 정책을 등록하려면 필요한 만큼 반복 호출하세요.
결정 헬퍼 함수
deny(message) - 메시지는 "Blocked by failproofai:" 접두사와 함께 Claude에게 표시됩니다. 하나의 deny가 발생하면 이후 모든 평가가 단락됩니다.
instruct(message) - 메시지는 현재 도구 호출에 대한 Claude의 컨텍스트에 추가됩니다. 모든 instruct 메시지는 누적되어 함께 전달됩니다.
정보성 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 필드
이벤트 타입
평가 순서
정책은 다음 순서로 평가됩니다:- 내장 정책 (정의된 순서)
customPoliciesPath의 명시적 커스텀 정책 (.add()호출 순서)- 프로젝트
.failproofai/policies/의 컨벤션 정책 (파일은 알파벳 순, 파일 내에서는.add()순서) - 사용자
~/.failproofai/policies/의 컨벤션 정책 (파일은 알파벳 순, 파일 내에서는.add()순서)
첫 번째
deny가 발생하면 이후 모든 정책 평가가 단락됩니다. 모든 instruct 메시지는 누적되어 함께 전달됩니다.전이적 임포트
커스텀 정책 파일은 상대 경로를 사용해 로컬 모듈을 임포트할 수 있습니다:from "failproofai" 임포트를 실제 dist 경로로 재작성하고 임시 .mjs 파일을 생성하여 ESM 호환성을 보장하는 방식으로 구현되어 있습니다.
이벤트 타입 필터링
match.events를 사용해 정책이 발동되는 시점을 제한할 수 있습니다:
match를 완전히 생략하면 모든 이벤트 타입에서 발동됩니다.
오류 처리 및 실패 모드
커스텀 정책은 fail-open 방식입니다. 오류가 발생해도 내장 정책을 차단하거나 훅 핸들러를 중단시키지 않습니다.전체 예시: 다중 정책
예시 파일
examples/ 디렉토리에는 바로 실행 가능한 정책 파일이 포함되어 있습니다:

