allow, deny, instruct 결정 방식을 사용합니다.
빠른 예시
커스텀 정책을 불러오는 두 가지 방법
방법 1: 컨벤션 기반 (권장)
.failproofai/policies/ 디렉터리에 *policies.{js,mjs,ts} 파일을 넣으면 자동으로 불러옵니다 — 별도 플래그나 설정 변경이 필요 없습니다. git hooks처럼 파일만 넣으면 바로 동작합니다.
- 프로젝트 디렉터리와 사용자 디렉터리를 모두 스캔합니다 (합집합 — 첫 번째 스코프 우선이 아님)
- 각 디렉터리 내에서 파일은 알파벳 순서로 불러옵니다. 순서를 제어하려면
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 경로로 재작성하고 ESM 호환성을 위해 임시 .mjs 파일을 생성하는 방식으로 구현됩니다.
이벤트 타입 필터링
match.events를 사용해 정책이 발동하는 시점을 제한할 수 있습니다:
match를 완전히 생략하면 모든 이벤트 타입에서 발동합니다.
오류 처리 및 실패 동작
커스텀 정책은 fail-open 방식입니다. 오류가 발생해도 내장 정책을 차단하거나 훅 핸들러를 중단시키지 않습니다.전체 예시: 여러 정책
예시 파일
examples/ 디렉터리에는 바로 실행 가능한 정책 파일들이 포함되어 있습니다:

