destructive_command_guard
무엇인가
dcg는 AI 코딩 에이전트의 도구 호출과 실제 셸 실행 사이에 끼어드는 검문소다. 프로세스를 격리하지 않고, 실행 직전에 명령 문자열을 판정해 위험한 것만 거부한다. Rust로 작성된 단일 CLI 바이너리이며, 에이전트가 `git reset --hard`, `rm -rf ./src`, `DROP TABLE users` 같은 명령을 그대로 실행하는 경로를 막는 위치에 놓인다.
어떻게 동작하나
각 에이전트의 훅 설정에 등록되어 입력 페이로드를 받는다. Claude Code 훅, Codex CLI의 `~/.codex`, Grok의 `~/.grok/hooks/dcg.json`, Antigravity의 `~/.gemini/config/hooks.json`, Crush의 `crush.json` 내 `hooks.PreToolUse`, OpenCode의 `tool.execute.before` 플러그인, Oh My Pi의 `tool_call` 확장이 대상이다. Codex 페이로드는 비어 있지 않은 `turn_id` 필드로 식별하고, Codex가 문서화한 거부 필드만 출력해 차단이 훅 실패로 보고되지 않게 한다. 규칙 엔진은 카테고리별 모듈 팩으로 나뉘고 3계층 구조, 컨텍스트 분류, 허용 목록, 스캔 모드, 이중 정규식 엔진을 쓴다. SIMD 가속 필터링과 지연 컴파일 정규식으로 서브밀리초 실행을 노리며, 히어독과 인라인 스크립트도 스캔 대상에 넣는다.
무엇과 다른가
OS 샌드박스나 컨테이너가 프로세스를 격리해 파일시스템 접근 자체를 제한하는 것과 달리, dcg는 격리 없이 명령을 판정해 거부한다. git 훅만 걸 수 있는 Aider보다 적용 범위가 넓어 셸 명령까지 포함한다. 에이전트별 프로필로 `extra_packs`/`disabled_packs`를 적용할 수 있지만, `trust_level`은 JSON 출력과 로그에 기록되는 참고 라벨일 뿐 규칙 평가를 바꾸지 않는다.
어떻게 쓰나
설치 스크립트가 플랫폼을 감지해 맞는 바이너리를 내려받고 감지된 에이전트 훅을 설정한다. 네이티브 Windows는 PowerShell 설치기를 쓰며 SHA256 체크섬, minisign 서명, Sigstore/cosign 출처를 검증한다. `-EasyMode`는 User PATH에 추가하고, `-Verify`는 자체 테스트를 돌리고, `-Version vX.Y.Z`는 버전을 고정하며, `-RequireMinisign`은 검증기가 없으면 실패로 끝낸다. `dcg packs`로 팩·카테고리 ID를 확인하고 설정에서 켜고 끈다. Windows에서는 `windows.filesystem`과 `windows.system` 팩이 기본 활성이라 `del /s`, `rd /s`, `Remove-Item -Recurse`, `format`, `vssadmin delete shadows`가 차단된다.
전제와 한계
훅을 노출하는 에이전트에서만 동작하며 Codex CLI는 0.125.0 이상이 필요하다. Aider는 git 훅만 제한적으로 걸리고 Continue는 탐지에 그친다. `DCG_BYPASS=1`을 주면 해당 호출의 보호가 전부 해제된다. 카테고리 ID(`database`)는 하위 팩 전체로 확장되고, `paranoid`는 팩이 아니라 단계 모드이므로 더 엄격한 git 규칙이 필요하면 `strict_git` 팩을 켠다.
관련 논문 1
유사 도구
- claude-code-hooksClaude Code의 모든 도구 호출을 PreToolUse·PostToolUse 훅으로 가로채 비밀 유출·위험 명령·설정 변조를 런타임에 차단하는 설치형 플러그인 마켓플레이스다.
- git-lrcgit commit 훅에 걸려 커밋되는 모든 diff를 AI로 검토하고, 10개 위험 범주와 100여 개 실패 패턴으로 문제를 지적하는 Go 바이너리다.
- rtk명령 출력을 LLM 컨텍스트에 넣기 전에 필터·압축해 토큰을 줄이는 Rust 단일 바이너리 CLI 프록시다. Bash 훅으로 명령을 가로채 필터를 적용한다.
- Codewhale터미널에서 프로젝트를 읽고 파일을 고치고 명령을 실행하는 Rust 기반 코딩 에이전트다. 호스티드·로컬 모델을 골라 붙인다.
- gitleaksgit 저장소·디렉터리·stdin을 스캔해 비밀번호·API 키·토큰을 찾아내는 Go 단일 바이너리 CLI다. 정규식 규칙과 엔트로피 검사로 탐지한다.
- orca여러 코딩 에이전트를 각자의 git worktree에서 병렬로 실행하고 한 화면에서 추적·비교·병합하는 데스크톱·모바일 ADE다.