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
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.