프로젝트 소개

irreversible-command-gate (icg)는 AI 코딩 에이전트의 하네스 훅(harness hook)에 배치되어 비밀 삭제, 히스토리 강제 푸시, 트랜스크립트에 자격 증명 출력, Docker 볼륨 제거 등 되돌릴 수 없는 소수의 작업을 포착하고, 그 외의 모든 도구 호출은 그대로 통과시키는 작은 Rust 가드입니다. 이 도구는 하네스의 PreToolUse 훅에 연결되어 하나의 JSON 문서를 입력받아 하나의 결정 엔벨로프(decision envelope)를 출력합니다. 프로젝트 문서에서는 이를 적대적인 에이전트에 대응하는 보안 경계가 아니라, 정직하지만 실수할 수 있는 에이전트를 위한 안전장치로 설명합니다. 작동 방식은 다음과 같습니다. 도구 호출은 도구 키워드에 따라 규칙 팩으로 전달됩니다. 안전한 패턴이 먼저 시도되어 단락(short-circuit)되며, 가드된 패턴 중에서는 첫 번째 일치 항목이 우선합니다. 이러한 순서 덕분에 일반적인 읽기 전용 작업은 조용히 처리됩니다. 규칙은 안전한 패턴이 주장하지 않은 입력에 대해서만 실행되기 때문입니다. 엔진은 결정론적이며 네트워크 I/O를 수행하지 않습니다. 설계상 'fail-open' 방식을 취합니다. 즉, 팩 디렉토리가 비어 있거나, 인식되지 않는 도구이거나, 체크 중 충돌이 발생하면 모두 명령을 허용합니다. 이는 누락된 위반 사항은 복구 가능하지만, 에이전트 플릿(fleet) 전체가 멈추는 것은 복구 불가능하다는 판단에 따른 것입니다. README에 따르면 웜 캐시(warm cache) 기준 중간 체크 비용은 약 10ms이며, 릴리스가 검증된 후 사용할 수 있는 단계적 'fail-closed' 정책이 존재합니다. 규칙이 선언할 수 있는 리다이렉션 채널당 하나씩 총 네 가지 판결이 있으며, 오직 deny만이 명령을 실제로 중단시킵니다: allow (일치하는 규칙이 없거나 안전한 패턴이 먼저 일치함), warning (규칙이 차단할 만큼 충분히 신뢰할 수 있게 결정하지 못했을 때 허용과 함께 추가 컨텍스트 제공), rewrite (허용과 함께 업데이트된 입력을 제공하여 하네스가 동일한 의도의 안전한 형태로 재시도하게 함), deny (이유와 함께 대안적인 조치 방법을 전달). 제공되는 팩에는 openbao (kv destroy, metadata delete, mount 및 policy 삭제, operator rekey, argv 내 비밀 리터럴, stdout으로의 비밀 읽기), git (bare 자격 증명 채우기, 강제 푸시를 일반 푸시로 재작성, pathspec 없는 커밋, 오래된 원격 헤드 위로 푸시), secrets (GitHub 토큰 및 PAT, AWS 키, Slack 토큰, Anthropic 키, PEM 개인 키 블록을 명령 및 파일 내용에서 매칭), docker (system prune --all, volume rm, image rm --force), image-tag, storage-class, 그리고 플릿 로컬 컨벤션을 인코딩한 beads, misc, tmux, argocd-topology가 포함됩니다. 문서는 각 팩을 일반용 또는 플릿 전용으로 표시하고 모든 규칙 ID를 명시합니다. 팩 스캐폴딩은 팩과 회귀 테스트를 함께 작성하는 new-pack 명령을 통해 제공되며, 릴리스 게이트는 이전에는 차단했으나 현재는 그렇지 않은 규칙을 보고하기 위해 deny-회귀 코퍼스를 구축합니다. 설치 및 사용 방법은 다음과 같습니다. 바이너리는 Rust 툴체인만으로 소스에서 빌드하거나 릴리스 에셋으로 가져올 수 있습니다. 설치 스크립트는 바이너리와 팩을 루트 소유로 배치하고 훅을 등록합니다. 설치 스크립트는 의도적으로 알려진 파괴적 명령을 훅으로 보내어 해당 명령이 deny로 돌아오지 않는 한 성공을 보고하지 않음으로써 강제 적용 여부를 증명합니다. 이는 불완전하게 설치된 경우 작동하는 것과 똑같이 동작하기 때문입니다. 드라이 런(Dry-run) 및 제거 옵션이 제공됩니다. 사용자용 check 명령은 항상 0으로 종료되므로, 상태 코드가 아닌 출력을 파싱해야 합니다. 명시된 제한 사항은 다음과 같습니다. README는 icg가 프롬프트 인젝션이나 악의적인 저장소를 방어하지 않으며, 호출자가 누구인지(ID, TTY 또는 권한 체크 없음) 알지 못하고, ChatGPT 웹, Codex 클라우드 작업, claude.ai와 같은 클라우드 호스팅 에이전트 세션에 도달하지 않으며, kubectl 변조, 워크플로우 파일, Kubernetes Job 및 CronJob 객체를 다루지 않는다고 명시합니다. 이러한 사항은 별도의 조직 수준 강제 적용에 맡깁니다. 환경 변수를 통해 가드를 비활성화할 수 있습니다. 이는 제한되는 것이 아니라 감사(audit) 대상이므로, 에이전트가 사용자만큼 쉽게 설정할 수 있습니다. 업데이트 흐름의 신뢰 포인터 전환(trust-pointer transition)은 엔드 투 엔드로 테스트되지 않았으며 검증되지 않은 것으로 설명됩니다. 상태는 다음과 같습니다. README에 따르면 엔진, 팩, 두 가지 프런트엔드(훅 및 PATH 래퍼), 릴리스 무결성 메커니즘, 그리고 52개 파일에 걸친 526개의 통과 테스트가 작동 중입니다. 이는 약 25,800줄의 Rust 코드로 구성된 crate이며 17개의 의존성이 있고 C 툴체인은 필요하지 않습니다. 현재 릴리스 버전은 v0.1.4이며, v0.1.3에서 업그레이드할 것을 권장합니다. v0.1.3에서는 heredoc 본문의 작은따옴표로 인해 렉서(lexer)가 명령의 나머지 부분을 놓쳐 가드를 우회할 수 있었던 결함을 수정했습니다. 저장소는 자체 호스팅 git 인스턴스의 MIT 라이선스 읽기 전용 미러입니다.