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
관련 논문
OpenKnowledge – Obsidian/Notion의 오픈소스 AI-first 대안
Git 기반 동기화와 Claude/Codex/Cursor 연동을 내장한 로컬 우선 마크다운 에디터로, AI 에이전트의 두 번째 뇌(LLM Wiki)로 활용할 수 있는 오픈소스 도구다.
Unfireable Safety Kernel: AI 에이전트를 위한 Execution-Time AI Alignment
AI 에이전트가 자신의 안전장치를 우회할 수 없도록, 에이전트 프로세스 바깥에 수학적으로 증명된 강제 통제 게이트를 배치하는 아키텍처
RubyLLM: 주요 AI 프로바이더를 모두 지원하는 Ruby 프레임워크
OpenAI, Claude, Gemini 등 주요 AI 프로바이더를 단일 인터페이스로 통합한 Ruby 프레임워크로, Rails 통합과 에이전트 기능까지 지원해 Ruby 개발자가 AI 기능을 빠르게 붙일 수 있다.
Qwen-AgentWorld: 범용 에이전트를 위한 Language World Model
Alibaba Qwen 팀이 AI 에이전트가 행동 결과를 미리 시뮬레이션할 수 있는 'Language World Model'을 공개했다. 에이전트 훈련과 실행 경로 검증에 새로운 패러다임을 제시하는 연구다.
SHERLOC: Code Repair Agent를 위한 구조화된 Diagnostic Localization 프레임워크
버그 위치만 알려주는 게 아니라 '왜, 어떻게 고쳐야 하는지'까지 진단 리포트를 생성해서 코드 수정 에이전트의 성능을 높이는 training-free 프레임워크
peerd – 브라우저에서 완전히 실행되는 AI Agent Harness
백엔드 서버 없이 Chrome/Firefox 확장 프로그램으로만 동작하는 AI 에이전트 실행 환경으로, 브라우저 탭을 직접 조작하고 WASM Linux VM까지 구동할 수 있어 프라이버시와 보안을 동시에 챙길 수 있다.