dredozubov/hazmat
요약
Hazmat은 macOS 환경에서 자율 코딩 에이전트를 안전하게 실행할 수 있도록 OS 레벨의 격리 기능을 제공하는 도구입니다. 전용 사용자 생성 및 방화벽 설정을 통해 에이전트의 권한 범위를 제한함으로써 보안 사고 발생 시 피해를 최소화합니다.
핵심 포인트
- macOS 전용 사용자 및 OS 레벨 격리를 통한 에이전트 실행 환경 구축
- 세션 계약(Session Contract)을 통한 실행 권한 및 범위 사전 정의
- 방화벽(pf) 및 DNS 강화를 통한 네트워크 보안 강화
- Claude, Cursor, Gemini 등 다양한 AI 에이전트와 호환 가능
실제 계정을 제공하지 않고도 Mac에서 완전 자율 코딩 에이전트(full-autonomy coding agents)를 실행하세요.
가시적인 세션 계약(Visible session contract) + 전용 macOS 사용자 + OS 레벨 격리(OS-level containment)
Hazmat은 세션 계약을 먼저 보여준 다음, OS 레벨 격리 내에서 전용 macOS 사용자로 에이전트를 실행합니다.
승인 프롬프트(Approval prompts)는 에이전트의 속도를 늦추지만, 실행 중인 프로세스가 접근할 수 있는 범위를 바꾸지는 못합니다. 만약 에이전트가 프롬프트 인젝션(prompt-injected)을 당하거나, 오염된 의존성(poisoned dependency)을 실행하거나, 악성 저장소(malicious repo)의 지침을 따른다면, 중요한 질문은 에이전트가 정중하게 요청했느냐가 아닙니다. 중요한 질문은 에이전트가 어디까지 접근할 수 있느냐입니다.
Hazmat은 그 폭발 반경(blast radius)을 변화시킵니다. 이 도구는 임의의 에이전트 자율성을 안전하게 만드는 것이 아니라, 호스트 권한 경계(host authority boundary)를 명시적으로 만들고 이를 실제 계정보다 낮게 설정합니다.
최단 경로로 첫 번째 격리된 세션을 시작하고 싶다면:
brew install dredozubov/tap/hazmat
hazmat init --bootstrap-agent claude
cd your-project
...
Mac을 변경하기 전에 미리 보기:
hazmat init --dry-run # 설정 미리 보기
hazmat explain # 이 프로젝트에 대한 세션 계약(session-contract) 미리 보기
Claude 대신 Codex, OpenCode, Gemini, Hermes, Qwen 또는 Cursor Agent를 사용하는 경우, docs/harnesses.md부터 시작하세요.
현재 상태 (관련 주의사항은 근처에 링크되어 있음):
- 전용
agentmacOS 사용자 - 세션별 안전벨트 정책 - 자격 증명 거부 하한선(credential deny floor) 및 호스트 소유 비밀 저장소(host-owned secret store)
pf방화벽 및 DNS 강화(hardening)- 세션 전 스냅샷, 차이점(diff) 및 복구 명령
- 7개의 문서화된 하네스(harness) 경로
- 프라이빗 데몬(private-daemon) Docker 워크플로우를 위한 Docker 샌드박스(Sandbox) 라우팅
무엇이 자동화되었는지, 무엇이 승인 게이트(approval-gated)를 거치는지, 무엇이 공식적으로 모델링되었는지 확인하려면 docs/testing.md를 읽으세요. 네이티브 격리 기능을 Docker 중심 또는 적대적 저장소(hostile-repo) 워크플로우로 확장하기 전에 docs/overview.md를 읽으십시오.
첫 번째 증명 경로는 의도적으로 작게 설계되었습니다: 설정을 미리 보고, 세션 계약을 미리 보고, 하나의 격리된 세션을 실행한 다음, 복구 증거를 검사합니다.
hazmat init --dry-run
PROJECT=/tmp/hazmat-proof-demo
mkdir -p "$PROJECT"
...
라이브 README 스모크 테스트 (smoke test)는 비밀 바이트 (secret bytes)를 출력하지 않고도 동일한 형태를 포착합니다. 격리된 세션 (contained session) 내에서 프로젝트 쓰기는 성공하며, 호스트 비밀 정보 탐색 (host secret probe)은 실패하며 차단됩니다 (fails closed):
proof-stack: project write ok
proof-stack: host secret unreadable from contained session: <host-secret-fixture>
복구 포인터 (recovery pointer)는 동일한 데모 저장소 (demo repo)에서 가져옵니다:
Comparing <scratch-project> against snapshot from <timestamp>
Only in <scratch-project>: proof.txt
저장된 비식별화된 스니펫 (redacted snippets)은 docs/proofs에 있습니다. 만약 Claude를 하네스 (harness)로 사용하지 않는다면, docs/harnesses.md를 통해 동일한 격리 경로를 사용하십시오. 프로젝트의 상태와 범위에 대해서는 docs/compatibility.md, docs/recipes/README.md, docs/public-roadmap.md, 그리고 docs/testing.md를 참조하십시오.
모든 세션은 계약 (contract)과 함께 시작됩니다. 숨겨진 확장이나 모호한 "보안 모드 (secure mode)" 라벨은 없습니다.
hazmat: session
Mode: Native containment
Why this mode: using native containment by default (Docker routing: none)
...
그 계약이 바로 제품입니다. 실행 전 hazmat explain 명령어로 이를 검사할 수 있으며, 세션에서 무엇이 변경되었는지 한눈에 파악할 수 있습니다.
--dangerously-skip-permissions
이곳에 진정한 생산성이 있습니다. 또한 진정한 폭발 반경 (blast radius)이 존재하는 곳이기도 합니다.
이 카테고리는 계속해서 핵심을 증명하고 있습니다:
에이전트 (Agents)는 탈출에 대해 능동적으로 추론합니다. Ona는 Claude Code가 /proc/self/root를 통해 자체 차단 목록 (denylist)을 우회한 후, 해당 경로가 차단되자 bubblewrap을 비활성화하려 시도하는 것을 보여주었습니다.
CVE는 가설이 아닙니다. Hazmat은 CVE-2025-59536 및 CVE-2026-21852를 포함하여 16개의 Claude Code CVE를 추적합니다.
공급망 공격 (Supply chain attacks)은 인간의 감독을 앞지를 만큼 빠릅니다. 2026년 axios 침해 사고는 postinstall 훅 (hook)을 통해 약 2초 만에 RAT (원격 액세스 트로이목마)를 전달했습니다.
따라서 설계 목표는 "에이전트가 행동하게 만드는 것"이 아닙니다. 설계 목표는 "자율적인 실패 (autonomous failure)가 덜 파괴적이게 만드는 것"입니다.
hazmat claude
hazmat codex
hazmat opencode
...
| 계층 (Layer) | 역할 (What it does) |
|---|---|
| 사용자 격리 (User isolation) | 에이전트를 전용 agent macOS 사용자로 실행하여, 실제 홈 디렉토리에 구조적으로 접근할 수 없게 만듭니다. |
| 커널 샌드박스 (Kernel sandbox) | 명시적인 읽기-쓰기(read-write) 및 읽기 전용(read-only) 범위를 가진 세션별 seatbelt 정책을 생성합니다. |
| 자격 증명 차단 (Credential deny) | 에이전트 홈 내부의 자격 증명(credential) 경로를 포함하여, 커널 수준에서 일반적인 비밀 경로를 차단합니다. |
| 네트워크 방화벽 (Network firewall) | pf를 사용하여 일반적인 데이터 유출(exfiltration) 및 터널링(tunneling) 프로토콜을 차단합니다. |
| DNS 차단 목록 (DNS blocklist) | 알려진 터널링, 페이스트(paste), 캡처 도메인을 localhost로 리다이렉트합니다. |
| 공급망 강화 (Supply chain hardening) | npm ignore-scripts=true와 같은 보수적인 기본 설정을 적용합니다. |
| 스냅샷 및 복구 (Snapshots and restore) | 세션 시작 전 Kopia 스냅샷을 찍어 차이점(diff)을 확인하거나 롤백할 수 있게 합니다. |
현재 상태 (지향하는 상태가 아닌 현재 구현된 상태):
macOS 네이티브 격리가 기본 경로입니다. Hazmat은 darwin/arm64 및 darwin/amd64용 릴리스 아티팩트(release artifacts)를 제공합니다.
격리 환경에서 7개의 하네스(harness)를 지원합니다. Claude Code, Codex, OpenCode, Gemini, Hermes, Qwen Code, 그리고 Cursor Agent가 포함됩니다. 상세 내용, 테스트된 버전, 인증 흐름(auth flows) 및 Phase 1 제한 사항은 docs/harnesses.md에서 확인할 수 있습니다.
하네스 라이프사이클이 관리됩니다. hazmat harness status|update|uninstall 명령은 에이전트 소유의 하네스 코드를 검사하고, 부트스트랩(bootstrap) 경로를 통해 이를 갱신하며, 기본적으로 인증/프로필/세션 상태를 삭제하지 않고 Hazmat 소유의 코드 아티팩트만 제거합니다.
Docker 지원은 실제적이지만 선택적입니다. 프라이빗 데몬(Private-daemon) Docker 워크플로우는 모든 하네스 엔트리포인트(entrypoint)를 통해 Docker Sandbox 모드를 사용할 수 있으며, hazmat shell 및 hazmat exec를 지원합니다. 공유 호스트 데몬(Shared host-daemon) 워크플로우는 기본적으로 코드 전용(code-only)으로 유지됩니다. 자세한 내용은 docs/tier3-docker-sandboxes.md 및 docs/shared-daemon-projects.md를 참조하세요.
27개의 내장 스택 통합을 제공합니다. 전체 표는 docs/STACKS.md에 있으며, 스키마 및 신뢰 모델(trust-model) 규칙은 docs/integrations.md에 있습니다. 주요 그룹은 다음과 같습니다:
- Python:
python-uv,python-pip,python-poetry. - JS/TS:
node,pnpm,yarn,bun,deno. - JVM 및 모바일:
java-gradle,java-maven,tla-java,android-gradle,swift,flutter.
. - 시스템 (Systems):
go
, rust
, cmake
, haskell-cabal
, elixir-mix
, ruby-bundler
, php-composer
, dotnet
.
. - 인프라 및 빌드 (Infra and build):
docker
, kubernetes-render (render/lint 전용), terraform-plan
, opentofu-plan
, beads
.
- Python:
레포지토리 로컬 Git hooks는 Hazmat이 관리하는 승인 경로를 가집니다. 레포지토리는.hazmat/hooks/hooks.yaml에pre-commit,commit-msg, 그리고pre-push를 선언할 수 있습니다; 승인(approval), 설치(install), 드리프트 검토(drift review), 그리고 삭제(uninstall) 프로세스는hazmat hooks ...를 통해 진행됩니다.
핵심 동작은 테스트되었으며 부분적으로 형식 검증 (formally verified) 되었습니다. 정확한 증명 경계(proof boundary)는 tla/VERIFIED.md에 명시되어 있습니다. 그곳에 나열되지 않은 사항에 대해 증명이 존재한다고 가정하지 마십시오.
Hazmat이 유용한 이유는 경계가 구체적이기 때문입니다. 이는 또한 한계점 또한 구체적이어야 함을 의미합니다.
현재는 macOS 전용입니다. Linux는 설정 및 롤백 리소스가 모델링되고 구현될 때까지 의도적으로 컴파일 전용(compile-only)으로 유지됩니다. docs/testing.md를 참조하십시오. 이것은 완전한 네트워크 허용 목록 (allowlist)이 아닙니다. 완전히 새로운 도메인으로의 HTTPS 데이터 유출(exfiltration)은 Tier 2에서 아직 완전히 해결되지 않았습니다. docs/threat-matrix.md를 참조하십시오. DNS 차단 목록 (blocklist)은 와일드카드 방식이 아닌 정확한 도메인 방식입니다. 이는 전체 DNS 필터링 스택이 아닌 /etc/hosts를 기반으로 합니다. docs/design-assumptions.md를 참조하십시오. 공유 (Shared) Hazmat은 macOS의 임시 공간이 갑자기 프라이빗해진 것처럼 가장하지 않습니다. /tmp는 공유 상태로 유지됩니다. MCP 환경 상속 (env inheritance) 및 이 분야의 가장 어려운 문제 중 일부는 단순히 아키텍처적인 것이 아니라 운영적인 문제입니다. 이들은 docs/threat-matrix.md에 직접 명시되어 있습니다. 만약 적대적인 레포지토리(hostile repos), 장시간 방치된 실행, 또는 공유 데몬 Docker 워크플로우를 다루고 있다면, Tier 2를 잘 수행하는 범위를 넘어서 확장하기보다는 Tier 4가 정직한 답변일 수 있습니다. docs/overview.md부터 시작하십시오. SSH_AUTH_SOCK 오용은 여전히 카테고리 전반의 문제입니다.
저는 커뮤니티의 도움을 원하지만, Hazmat의 모든 부분이 크라우드소싱하기에 똑같이 쉽거나 똑같이 안전한 것처럼 가장하고 싶지는 않습니다.
통합 및 스택 범위 (Integrations and stack coverage)
- 새로운 매니페스트 (manifests), 탐지 수정 (detection fixes), 개선된 스냅샷 제외 (snapshot excludes), 호환성 보고서 (compatibility reports)
하네스 사용성 (Harness usability) - 부트스트랩 마찰 (bootstrap friction), 인증/가져오기 버그 (auth/import bugs), 첫 실행 UX, 실제 설정에 대한 문서 (docs)
문서 및 온보딩 (Docs and onboarding) - 퀵스타트 명확성 (quickstart clarity), 설명 모드 예시 (explain-mode examples), 스크린샷, 다이어그램, 트러블슈팅 (troubleshooting)
연구 및 증거 (Research and evidence) - CVE 추적 (CVE tracking), 사고 보고서 (incident writeups), 비교 분석 (comparative analysis), 드리프트 체크 (drift checks)
테스트 매트릭스 확장 (Test matrix expansion) - 실제 리포지토리 검증 (real repo validation), macOS 버전 범위, 하네스 회귀 재현 (harness regression repros)
안전벨트 정책 변경 (Seatbelt policy changes)
pf
방화벽 동작 (firewall behavior)
설정 / 롤백 순서 (setup / rollback ordering)
자격 증명 전달 및 권한 중개 (credential delivery and capability brokering)
TLA+ 거버넌스 규칙에 의해 다뤄지는 모든 것 (anything covered by the TLA+ governance rules)
기여하고 싶다면 CONTRIBUTING.md가 시작점입니다. 어떤 주장이 모델링되었는지 아니면 단순히 테스트되었는지를 이해하고 싶다면, 먼저 tla/VERIFIED.md와 docs/design-assumptions.md를 읽으십시오.
# Claude Code
hazmat claude
hazmat claude -p "refactor the auth module"
...
필요할 때 더 많은 경로를 명시적으로 노출할 수 있습니다:
hazmat claude -R ~/reference-docs
hazmat claude -W ~/.venvs/my-app
hazmat config access add -C ~/workspace/my-app --read ~/reference-docs --write ~/.venvs/my-app
그리고 리포지토리에 통합 힌트 (integration hints)가 필요한 경우:
hazmat integration list
hazmat integration show node
hazmat claude --integration node
...
전체 모듈 그래프 (module graph), 불변량 (invariants), 데이터/사용자 흐름 다이어그램 (data/user-flow diagrams)에 대해서는 docs/architecture.md를 읽으십시오.
You (dr) Agent (agent)
-------- -------------
~/ /Users/agent/
...
중요한 속성은 구조적 분리 (structural separation)입니다. 에이전트는 "사용자로서 실행되는 동안 사용자의 SSH 키를 읽는 것이 금지되는 것"이 아닙니다. 에이전트는 완전히 다른 사용자로 실행됩니다.
| 문서 | 읽어야 하는 이유 |
|---|---|
| docs/usage.md | 첫 세션을 마친 후의 전체 사용자 가이드 |
| ... |
만약 격리 우회 (containment bypass), 자격 증명 유출 (credential leak), 샌드박스 탈출 (sandbox escape) 또는 기타 보안 문제를 발견한다면, SECURITY.md에 명시된 비공개 보고 경로를 사용해 주세요.
MIT
The Simpsons 및 모든 관련 캐릭터는 20th Television과 The Walt Disney Company의 자산입니다. Claude 로고는 Anthropic의 자산입니다. 당사는 이러한 자산에 대한 어떠한 권리도 주장하지 않습니다. 이곳에서의 사용은 순수하게 엔터테인먼트 목적으로만 이루어집니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기