Skip to main content
커스텀 정책은 트레이스나 감사에서 발견된 장애 패턴을 에이전트가 작동하는 동안 실행되는 결정으로 전환합니다. 정책은 특정 작업을 허용하거나, 에이전트에게 지침을 제공하거나, 또 다른 사고가 발생하기 전에 해당 작업을 차단할 수 있습니다. 커스텀 정책은 도구, 경로, 명령, 환경, 또는 운영 규칙에 따라 동작이 달라지는 경우에 사용하세요. 기존 제어 항목을 중복 생성하지 않도록 먼저 Failproof AI 정책 팩을 확인하세요.

커스텀 정책 작성

  1. Admin → 정책 편집기로 이동하여 새 정책을 선택하고, 방지하려는 장애를 설명합니다.
  2. 정책 소스를 추가한 다음, 편집기에서 예상 일치 항목과 안전한 비일치 항목을 테스트합니다. 모든 유효성 검사 오류를 해결합니다.
  3. 초안을 저장하고 버전 게시를 선택하여 변경 불가능한 버전을 생성합니다.
  4. Admin → 적용으로 이동하여 관찰 모드로 테스트 머신에 버전을 배포하고, 적용하기 전에 Observe → 정책에서 결정 사항을 검증합니다. 커스텀 정책을 작성하고 게시하는 데 사용되는 정책 편집기.

범위가 좁은 규칙으로 시작하기

이 정책은 명령이 프로덕션을 대상으로 할 때만 파괴적인 Kubernetes 명령을 차단합니다. 해당 장애 모드에 해당하지 않는 모든 경우는 allow()를 반환합니다.
좋은 정책은 한 문장으로 설명할 수 있을 만큼 범위가 좁습니다. 에이전트의 의도가 아닌 관찰 가능한 실제 작업을 매칭하고, 규칙이 적용되지 않는 즉시 allow()를 반환하세요.

결정 선택하기

복구해야 하는 에이전트를 위해 이유를 작성하세요. 감지된 내용과 대신 수행해야 할 작업을 설명하세요.
보안 경계에는 instruct()를 사용하지 마세요. 지침 전달은 에이전트 하네스에 따라 다를 수 있습니다. 작업을 반드시 방지해야 할 때는 deny()를 사용하세요.

정책 객체

fn 내부에서 도구를 필터링하세요. match.toolNames는 공개 커스텀 정책 타입의 일부가 아닙니다.

정책 컨텍스트

모든 정책은 PolicyContext를 받습니다. 모든 선택적 값을 실제로 선택적인 것으로 처리하세요. 에이전트 버전과 이벤트 유형이 항상 동일한 필드를 제공하지는 않습니다.

일반적인 도구 입력

Failproof AI는 지원되는 하네스 전반에 걸쳐 일반적인 도구를 정규화하므로, 정책은 보통 하나의 입력 형태를 사용할 수 있습니다. 도구 입력 값은 unknown으로 타입이 지정되므로 방어적인 형변환을 사용하세요:

이벤트 선택하기

이벤트 가용성과 차단 동작은 에이전트 하네스에 따라 다릅니다. 혼합 플릿 전반에서 이벤트에 의존하기 전에 에이전트 하네스를 참조하세요.
SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PermissionRequest, PermissionDenied, PostToolUse, PostToolUseFailure, Notification, SubagentStart, SubagentStop, TaskCreated, TaskCompleted, Stop, StopFailure, TeammateIdle, InstructionsLoaded, ConfigChange, CwdChanged, FileChanged, WorktreeCreate, WorktreeRemove, PreCompact, PostCompact, Elicitation, ElicitationResult, UserPromptExpansion, PostToolBatch, Setup.

일반적인 정책 패턴 작성

보호된 경로에 대한 쓰기 차단

비차단 지침 제공

세션 완료 게이팅

거부된 Stop 이벤트는 에이전트가 재시도하게 만들 수 있습니다. 현재 환경에서 에이전트가 충족할 수 있는 조건에만 게이팅하고, 모든 서브프로세스 또는 네트워크 호출에 제한을 두세요.

정책 파일 로드

컨벤션 파일

컨벤션 파일은 자동으로 로드됩니다:
  • 프로젝트 및 사용자 정책 디렉터리가 모두 로드됩니다.
  • 각 디렉터리 내에서 파일은 알파벳 순서로 로드됩니다.
  • 파일은 반드시 policies.js, policies.mjs, 또는 policies.ts로 끝나야 합니다.
  • 하나의 파일에서 customPolicies.add()를 여러 번 호출하는 것이 지원됩니다.
  • 로컬 모듈에서의 상대적 임포트가 지원됩니다.
  • 프로젝트 정책은 커밋할 수 있으므로 동일한 규칙이 리포지터리를 따라갑니다.

명시적 파일

유효성 검사 또는 구성에서 엔트리 파일을 직접 지정해야 할 때는 명시적 경로를 사용하세요:
명시적 파일이 먼저 로드되고, 그 다음 프로젝트 컨벤션 파일, 마지막으로 사용자 컨벤션 파일이 로드됩니다. 두 경로를 통해 발견된 파일은 한 번만 로드됩니다.

검증 및 테스트

유효성 검사는 프로덕션 로더를 통해 모듈을 실행하고 최소 하나의 정책이 등록되었는지 확인합니다.
유효성 검사는 누락된 파일, 구문 오류, 미해결 임포트, 최상위 예외, 모듈 로드 타임아웃을 감지합니다. 매칭 로직이 올바른지는 증명하지 않습니다. 최소한 다음 케이스들을 테스트하세요:
  • 반드시 일치해야 하며 의도된 정책 이유를 생성하는 작업 하나.
  • 반드시 allow()를 반환해야 하는 유사하지만 안전한 작업 하나.
  • 누락되거나 잘못된 형식의 도구 필드.
  • 대체 명령 구문, 경로, 따옴표, 대소문자, 공백.
  • 사용할 수 없는 서브프로세스 또는 네트워크 의존성.
Observe → 정책에서 결과를 커스텀 정책에 귀속시키세요. 다른 내장 정책이 결정을 내린 경우 차단된 테스트만으로는 충분하지 않습니다.

런타임 동작

  • 내장 정책이 커스텀 정책보다 먼저 평가됩니다.
  • 첫 번째 deny가 추가 정책 평가를 중지시킵니다.
  • 정책이 이벤트를 거부하지 않으면 여러 instruct 결과를 결합할 수 있습니다.
  • 정책 함수의 실행 마감 시간은 10초입니다.
  • 예외가 발생하거나 타임아웃이 발생하면 로그에 기록되고 allow()로 처리됩니다.
  • 로드에 실패한 컨벤션 파일은 건너뜁니다. 다른 커스텀 파일과 내장 정책은 계속 실행됩니다.
  • 최상위 모듈 로딩에도 10초 마감 시간이 있습니다.
  • 클라우드 관찰 모드는 정책을 실행하지만 비허용 결정을 적용하지 않고 기록만 합니다.
정책 모듈은 결정론적이고 빠르게 유지하세요. 최상위 네트워크 호출이나 서버 시작을 피하세요. fn 내부에서 작업을 제한하고, 의존성 실패를 처리하며, 해당 실패가 작업을 허용해야 할지 거부해야 할지 신중하게 선택하세요.

API 내보내기

TypeScript는 PolicyContext, PolicyResult, CustomHook, PolicyDecision, PolicyFunction을 내보냅니다.

커스텀 정책 배포

버전을 게시하고, 관찰 모드로 배포하고, 결정 사항을 검증한 다음, 적용 단계로 이동하세요.