Agent Safehouse – macOS 네이티브 샌드박싱으로 로컬 AI 에이전트 안전하게 돌리기
Agent Safehouse – macOS-native sandboxing for local agents
TL;DR Highlight
macOS sandbox-exec 격리 도구가 Claude Code, Codex 등 로컬 AI 에이전트를 격리하여 프로젝트 디렉토리 밖의 SSH 키, AWS 인증정보 등 민감 파일 접근을 차단한다.
Who Should Read
Claude Code, Codex, Cursor 같은 로컬 AI 에이전트를 --yolo 모드로 풀 자동화 돌리고 싶은데, SSH 키나 다른 레포가 날아갈까 불안한 개발자. 특히 macOS에서 컨테이너 없이 네이티브로 에이전트를 돌리는 사람.
Core Mechanics
- Agent Safehouse는 macOS 내장 sandbox-exec 위에 올린 정책 생성기(wrapper)다. 별도 의존성이나 가상화 없이 Bash 스크립트 하나로 동작하고, Homebrew로 설치하거나 curl로 단일 스크립트를 받으면 끝이다.
- 기본 동작은 deny-first 모델이다. 에이전트는 현재 프로젝트 디렉토리(git root)에만 읽기/쓰기 권한을 갖고, ~/.ssh, ~/.aws, 다른 레포 등 나머지 홈 디렉토리는 커널 레벨에서 접근이 차단된다.
- Claude Code, Codex, OpenCode, Amp, Copilot CLI, Gemini CLI, Aider, Cursor Agent, Cline 등 주요 에이전트 CLI를 모두 테스트했고, 각 에이전트가 정상 동작하는 데 필요한 최소 권한을 조사해서 프리셋으로 제공한다.
- shell 함수로 감싸면 에이전트 실행 시 자동으로 샌드박스가 적용된다. 예를 들어 `claude() { safe claude --dangerously-skip-permissions "$@"; }` 같이 zshrc에 넣으면 매번 safehouse를 명시적으로 호출할 필요가 없다.
- Policy Builder라는 웹 도구도 제공해서, GUI로 sandbox-exec 정책 파일을 생성한 뒤 dotfiles에 넣어 쓸 수도 있다. 프로젝트 전체를 안 써도 정책 파일 하나만 뽑아쓰는 게 가능하다.
- sandbox-exec는 Apple이 macOS Sierra(2016년)에서 공식 deprecated했지만, 실제로 macOS 내부 서비스들도 아직 의존하고 있어서 10년째 잘 동작하고 있다. 다만 언제 완전히 제거될지는 불확실하다.
- LLM 에이전트는 확률적으로 동작하기 때문에 1%의 재앙 확률이라도 장기적으로는 반드시 발생한다는 것이 핵심 전제다. 커널 레벨에서 syscall 자체를 차단하므로 에이전트가 아무리 똑똑해도 우회할 수 없다.
Evidence
- 제작자가 직접 댓글로 설명하길, 로컬 머신에서 에이전트를 풀 자동화로 돌리고 싶어서 만들었고, 각 에이전트가 auto-update, 키체인 통합, 이미지 붙여넣기 등을 정상적으로 하려면 어떤 최소 권한이 필요한지 수많은 시간을 투자해 조사했다고 한다.
- sandbox-exec를 직접 쓰면 되지 않냐는 반론이 있었다. 하지만 다른 댓글에서 'sandbox-exec 다루는 일의 90%는 내부 환경에 맞게 스코핑하는 것이고, 또 다른 90%는 sandbox-exec 자체가 어떻게 동작하는지 파악하는 것'이라며 프리셋의 가치를 인정했다.
- 파일시스템 샌드박싱은 절반일 뿐이라는 의견이 많았다. 에이전트가 프로덕션 DB에 접속하거나, 이메일/DM을 보내거나, 클라우드 리소스를 생성하는 등 외부 시스템에 대한 blast radius는 이 도구로 막을 수 없다. 에이전트별로 별도 인증 컨텍스트와 감사 로그가 필요하다는 주장이 나왔다.
- 2025년 여름에 Claude Code가 단일 파일 복원하려고 git hard revert를 해서 1000줄이 날아간 경험담이 공유됐다. 다만 2026년 3월 현재 에이전트 안정성이 많이 좋아져서 3개월간 큰 사고가 없었다고 하면서도, 다층 방어는 여전히 권장한다고 했다.
- 대안으로 Sandvault(sandbox-exec + Unix 유저 격리), nono.sh(프록시 기반 credential 격리), Apple Container(리눅스 VM에서 에이전트 실행) 등이 언급됐다. macOS용 네이티브 Docker가 없는 게 근본 문제라는 의견도 있었다.
How to Apply
- Claude Code나 Codex를 --dangerously-skip-permissions 모드로 쓰고 있다면, `brew install eugene1g/safehouse/agent-safehouse` 후 zshrc에 shell 함수를 등록해서 모든 에이전트 실행에 자동 샌드박싱을 걸 수 있다. SSH 키나 다른 레포가 보호된다.
- 여러 프로젝트를 오가며 에이전트를 쓰는 경우, `--add-dirs-ro=~/mywork` 옵션으로 읽기 전용 공유 디렉토리를 추가 지정하면 공통 라이브러리는 읽되 쓰기는 현재 프로젝트에만 허용할 수 있다.
- 팀에 에이전트 도입을 검토 중이라면, Policy Builder 웹 도구로 회사 환경에 맞는 최소 권한 정책 파일을 생성해서 팀 dotfiles에 표준으로 배포하는 것이 현실적인 첫 단계다.
- 파일시스템 샌드박싱만으로는 프로덕션 DB나 클라우드 API 접근을 막을 수 없으므로, 네트워크 레벨 격리가 필요하면 nono.sh 같은 프록시 기반 도구를 함께 쓰는 것을 고려하라.
Code Example
# 1. 설치
brew install eugene1g/safehouse/agent-safehouse
# 2. 샌드박스 안에서 에이전트 실행
cd ~/projects/my-app
safehouse claude --dangerously-skip-permissions
# 3. zshrc에 자동 적용 함수 등록
safe() { safehouse --add-dirs-ro=~/mywork "$@"; }
claude() { safe claude --dangerously-skip-permissions "$@"; }
codex() { safe codex --dangerously-bypass-approvals-and-sandbox "$@"; }
# 4. 샌드박스 테스트 (SSH 키 접근 차단 확인)
safehouse cat ~/.ssh/id_ed25519
# cat: /Users/you/.ssh/id_ed25519: Operation not permittedTerminology
관련 논문
adamsreview: Claude Code용 멀티 에이전트 PR 코드 리뷰 파이프라인
Claude Code에서 최대 7개의 병렬 서브 에이전트가 각각 다른 관점으로 PR을 리뷰하고, 자동 수정까지 해주는 오픈소스 플러그인이다. 기존 /review나 CodeRabbit보다 실제 버그를 더 많이 잡는다고 주장하지만 커뮤니티에서는 복잡도와 실효성에 대한 회의론도 나왔다.
Claude를 User Space IP Stack으로 써서 Ping에 응답시키면 얼마나 빠를까?
Claude Code에게 IP 패킷을 직접 파싱하고 ICMP echo reply를 구성하도록 시켜서 실제로 ping에 응답하게 만든 실험으로, 'Markdown이 곧 코드이고 LLM이 프로세서'라는 아이디어를 네트워크 스택 수준까지 밀어붙인 재미있는 사례다.
AI Agent를 위한 Git: re_gent
AI 코딩 에이전트(Claude Code 등)가 수행한 모든 툴 호출을 자동으로 추적하고, 어떤 프롬프트가 어느 코드 줄을 작성했는지 blame까지 가능한 버전 관리 도구다.
Agent-Native CLI를 위한 설계 원칙 10가지
AI 에이전트가 CLI 도구를 더 잘 사용할 수 있도록 설계하는 원칙들을 정리한 글로, 에이전트가 CLI를 도구로 활용하는 빈도가 높아지면서 이 설계 방식이 실용적으로 중요해지고 있다.
Agent-harness-kit: MCP 기반 멀티 에이전트 워크플로우 오케스트레이션 프레임워크
여러 AI 에이전트가 서로 역할을 나눠 협업할 수 있도록 조율하는 scaffolding 도구로, Vite처럼 설정 없이 빠르게 멀티 에이전트 파이프라인을 구성할 수 있다.
Tilde.run – AI Agent를 위한 트랜잭션 기반 버전 관리 파일시스템 샌드박스
AI 에이전트가 실제 프로덕션 데이터를 건드려도 롤백할 수 있는 격리된 샌드박스 환경을 제공하는 도구로, GitHub/S3/Google Drive를 하나의 버전 관리 파일시스템으로 묶어준다.