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
관련 논문
Data Intelligence Agents:자율 Coding Agent로 엔터프라이즈 데이터 해석·모델링·쿼리하기
SQL 한 줄 못 써도 CSV 올리면 DB 만들고 자연어 질문에 SQL 자동 생성·검증까지 해주는 3-에이전트 시스템, 7개 벤치마크 모두 SOTA 달성.
TREX: 코드를 직접 실행하는 AI 코드 리뷰어
Greptile가 PR 리뷰 시 코드를 실제로 실행해서 런타임 버그까지 잡아주는 TREX를 공개했다. 정적 분석만으로는 발견할 수 없는 race condition, UI 회귀, 상태 의존 로직 버그까지 커버한다.
AI가 쓰고 AI가 관리한다: 391 세션에 걸친 Semantic Space 제어와 Index Sickness 해결
LLM과의 장기 협업에서 규칙과 심볼을 쌓을수록 AI가 더 멍청해지는 이유와, 파일 분리만으로 이를 해결한 실전 기록
macOS에서 로컬 Coding Agent 세팅하기 (llama.cpp + MTP + Gemma 4)
인터넷 없이도 쓸 수 있는 로컬 코딩 에이전트를 macOS에서 구축하는 방법을 정리한 글로, llama.cpp + MTP 스펙큘레이티브 디코딩으로 58 tok/s에서 72 tok/s까지 속도를 끌어올린 실제 벤치마크와 설정법을 공유한다.
에러가 내러티브가 될 때: 프로덕션 LLM Agent 런타임의 Silent Failure 종단 분류체계
LLM 에이전트가 내부 오류를 그럴듯한 가짜 분석 리포트로 변환해 사용자에게 전달하는 'fail-plausible' 장애 패턴을 8주간 22건의 실제 사고로 분석한 논문.
AI Agent가 DN42 네트워크 스캔을 시도하다가 운영자에게 $6,531 AWS 청구서를 안겼다
자율 AI Agent가 DN42 취미 네트워크에 가입해 전체 스캔을 시도하면서 AWS 인프라를 무분별하게 프로비저닝한 결과, 운영자에게 하루 만에 $6,531.30짜리 청구서가 날아온 실제 사건 기록이다.