마지막 검토일 2026년 9월 21일. 다른 제품은 빠르게 바뀌므로, 다른 제품에 관한 서술에는 모두 해당 벤더의 공식 문서 링크를 달았습니다.
벽이 서 있는 위치
이 글을 쓰는 시점에 Claude Code의 샌드박스는 셸 명령과 그 자식 프로세스에 적용됩니다. 파일 도구는 샌드박스 대신 권한 시스템을 쓰고, 문서에는 MCP 서버와 훅이 호스트에서 제약 없이 실행된다고 적혀 있습니다. ai-jail은 에이전트 자체를 벽 안에서 시작하므로 에이전트가 띄우는 것도 전부 안에 있습니다.

Codex도 자신이 실행하는 명령을 샌드박스에 넣고 codex 프로세스는 바깥에 둡니다. 로컬 MCP 서버가 어디서 실행되는지는 문서에 나와 있지 않습니다.
권한 확인 프롬프트는 종류가 다른 보호입니다
프롬프트는 사람에게 묻고, 사람은 서두르거나 속을 수 있습니다. 샌드박스는 커널에 묻고, 커널은 매번 같은 답을 줍니다.

사람을 빼는 모드
이 글을 쓰는 시점에 아래 에이전트에는 모두 더 이상 묻지 않는 모드가 있습니다. 프롬프트가 사라지면 남는 보호는 샌드박스뿐이고, 그것도 켜져 있을 때 이야기입니다.
| 에이전트 | 모드 | 벤더가 설명하는 동작 |
|---|---|---|
| Claude Code | auto | 모든 것이 실행되고 두 번째 모델이 나 대신 동작을 검토합니다. 문서는 이 분류기를 격리 경계가 아닌 동작 단위 제어라고 부릅니다. |
| Claude Code | bypassPermissions, 또는 --dangerously-skip-permissions | 모든 것이 검사 없이 실행됩니다. 문서는 격리된 컨테이너와 VM에서만 쓰라고 안내합니다. |
| Codex CLI | 승인 정책 never | 에이전트가 묻지 않습니다. 샌드박스 모드는 그대로 적용됩니다. 승인과 보안 문서를 참고하세요. |
| Codex CLI | danger-full-access, 또는 --yolo | 샌드박스가 꺼집니다. --yolo를 쓰면 승인도 없어집니다. |
나란히 비교
아래 내용은 모두 이 글을 쓰는 시점의 각 제품 문서를 기준으로 합니다. 우리가 읽은 문서에서 답을 찾지 못한 항목은 칸에 그렇게 적었습니다.
| Claude Code 샌드박스 | Codex CLI 샌드박스 | Gemini CLI 샌드박스 | ai-jail | |
|---|---|---|---|---|
| 에이전트 전체를 감싸는 래퍼가 더해 주는 것 | ||||
| 벽 안에 있는 것 | Bash, PowerShell, Monitor 명령과 그 자식 프로세스. claude 프로세스와 파일 도구, MCP 서버, 훅은 바깥에 있습니다. | 에이전트가 실행하는 명령. codex 프로세스는 바깥에 있습니다. 로컬 MCP 서버는 문서에 없음. | CLI 프로세스 전체. security.toolSandboxing을 쓰면 셸과 쓰기 도구만. | 프로세스 트리 전체. 에이전트와 파일 도구, MCP 서버, 훅, 모든 명령이 들어갑니다. |
| 기본으로 켜져 있는가 | 아니요. /sandbox나 sandbox.enabled로 켭니다. 의존성이 없으면 경고만 하고 명령을 샌드박스 없이 실행합니다. sandbox.failIfUnavailable을 설정하면 그러지 않습니다. | 네. workspace-write가 기본 모드입니다. | -s, GEMINI_SANDBOX, tools.sandbox 중 하나로 켭니다. | ai-jail을 거쳐 에이전트를 시작하면 항상 켜져 있습니다. 설정이 잘못되었으면 시작을 거부합니다. |
샌드박스 안의 코드가 기본 설정에서 ~/.ssh를 읽을 수 있는가 | 네. 문서에 따르면 기본 설정에서는 ~/.aws/credentials, ~/.ssh/ 같은 자격 증명 파일을 여전히 읽을 수 있습니다. 거부 규칙은 옵트인입니다. | Linux에서는 네. 파일시스템 전체가 읽기 전용으로 마운트됩니다. 거부 항목은 옵트인입니다. macOS 기본값은 문서에 없음. | macOS 기본 프로파일인 permissive-open은 파일 읽기를 폭넓게 허용합니다. 더 엄격한 프로파일은 옵트인입니다. | 아니요. 에이전트는 새로 만든 빈 홈 디렉터리를 받습니다. --ssh는 옵트인입니다. |
| 환경 변수 | 샌드박스 안의 명령은 기본적으로 부모 환경을 자격 증명까지 그대로 물려받습니다. sandbox.credentials로 거부하거나 마스킹할 수 있습니다. | 문서에 없음 | 문서에 없음 | 터미널, 로케일, 툴체인 변수로 이루어진 최소한의 허용 목록. 다른 변수는 --env에 이름을 지정해 추가합니다. |
| 모델이 쓸 수 있는 탈출구 | 모델이 dangerouslyDisableSandbox로 명령을 다시 시도할 수 있고, 이때는 일반 권한 확인 절차를 거칩니다. allowUnsandboxedCommands: false로 끌 수 있습니다. | on-request 정책에서는 워크스페이스 바깥을 수정하거나 네트워크를 쓸 때 에이전트가 샌드박스를 벗어나도 되는지 묻습니다. | 문서에 없음 | 없음. 정책은 에이전트가 시작되기 전에 내가 정하고, 프로젝트의 .ai-jail 파일은 정책을 더 조일 수만 있고 열 수는 없습니다. |
| 모든 에이전트에서 동작하는가 | Claude Code 전용 | Codex 전용 | Gemini CLI 전용 | 어떤 명령이든 됩니다. 정책 파일 하나를 모든 에이전트에 씁니다. |
| 내장 샌드박스가 더 잘하는 것 | ||||
| 네트워크 모델 | 도메인별 허용 목록이 있는 프록시. 새 도메인이 나오면 프롬프트로 묻습니다. 문서는 도메인 프런팅으로 우회할 수 있다고 밝힙니다. | workspace-write에서는 기본으로 꺼져 있습니다. 설정 하나로 켜고, 선택 사항인 프록시로 도메인별 허용·거부 규칙을 추가합니다. | 기본 프로파일은 네트워크를 허용합니다. 더 엄격한 프로파일과 프록시 프로파일은 옵트인입니다. | 전부 아니면 전무입니다. 기본으로 꺼져 있고 --network를 주면 전부 열립니다. 도메인별 필터는 의도적으로 넣지 않았습니다. |
| 명령별 승인 | 있음. 권한 모드, plan 모드, 분류기 모델, 조직 관리 정책. | 있음. 승인 정책, 범주별 규칙, 선택 사항인 리뷰어 에이전트. | 문서에 없음 | 없음. ai-jail은 개별 명령을 보지 않고 묻지도 않습니다. |
| 프로젝트 안의 보호 경로 | 있음. .git/hooks, .git/config, .claude 설정, .mcp.json, 셸 rc 파일 등이 읽기 전용으로 유지됩니다. | 있음. 쓰기 가능한 루트 아래의 .git, .agents, .codex는 읽기 전용입니다. | 문서에 없음 | 내장된 것은 없음. 프로젝트 전체에 쓸 수 있습니다. 경로를 마스킹하거나 거부하려면 --mask와 deny_paths를 직접 지정합니다. |
| 시크릿을 에이전트에게 숨긴 채로 사용하기 | 자격 증명 마스킹을 쓰면 프록시에서 실제 시크릿을 주입할 수 있습니다. 실험적 설정이 필요합니다. | 문서에 없음 | 문서에 없음 | 안 됩니다. 마스킹된 파일은 빈 파일입니다. |
| 플랫폼 | macOS, Linux, WSL2. 네이티브 Windows와 WSL1은 안 됩니다. | macOS, Linux, WSL2, 네이티브 Windows. | macOS Seatbelt, Docker 또는 Podman, gVisor, LXC(실험적), 네이티브 Windows. | Linux와 macOS. Windows에서는 WSL2만 됩니다. |
| 설치 | 에이전트에 포함. Linux에서는 bubblewrap과 socat이 필요합니다. | 에이전트에 포함. | 에이전트에 포함. 컨테이너 백엔드에는 Docker나 Podman이 필요합니다. | 별도 바이너리. Linux에서는 bubblewrap이 필요합니다. |
출처: Claude Code 샌드박싱, Claude Code 샌드박스 환경, Codex 승인과 보안, Codex Linux 샌드박스, Gemini CLI 샌드박스.
둘 다 쓰세요
네트워크를 끄면 클라우드 에이전트는 자기 모델 API에 닿지 못합니다. 그래서 실제로는 네트워크와 에이전트 로그인, 두 가지를 열게 됩니다.
cd ~/Projects/my-appai-jail --network --agent-state claude
에이전트 자체 검사가 계속 하는 일
권한 확인 프롬프트, 허용·거부 규칙, plan 모드는 에이전트 프로그램에 속한 기능이라 감옥 안에서도 바깥과 똑같이 동작합니다. 내가 승인하지 않았을 명령을 여기서 걸러 냅니다.
ai-jail이 그 아래에서 보장하는 것
내가 무엇을 승인하든 에이전트와 MCP 서버, 훅은 홈 디렉터리와 키, 셸에 있는 토큰을 볼 수 없습니다. 에이전트가 읽을 수 있는 것은 여전히 밖으로 보낼 수 있으니 프로젝트 안의 시크릿은 마스킹하세요.
Docker, 개발 컨테이너, 가상 머신
이들도 좋은 답이고, 가상 머신은 더 강한 답입니다. 차이는 무엇을 직접 빌드하고 최신으로 관리해야 하느냐에 있습니다.
| 얻는 것 | 치르는 비용 | |
|---|---|---|
| Docker 컨테이너 | 전용 파일시스템, 프로세스 목록, 네트워크. 에이전트는 내가 마운트한 것만 봅니다. | 빌드하고 유지보수할 이미지가 생기고, 툴체인을 한 번 더 설치해야 합니다. Docker 소켓을 마운트하면 컨테이너는 호스트에서 root와 동등해집니다. |
| 개발 컨테이너 | 컨테이너와 같은 격리를, 에디터가 이해하고 팀이 공유할 수 있는 파일 하나로 기술합니다. | 이미지 관리 부담은 같고, 이 형식을 이해하는 에디터나 도구가 추가로 필요합니다. |
| 가상 머신 | 전용 커널. 여기 나온 것 중 가장 강한 경계이고, 악의적이라고 판단되는 코드에 맞는 선택입니다. | 가장 무거운 선택지입니다. 게스트 시스템을 설치하고 업데이트하고 메모리를 떼어 주고 프로젝트를 복사해 넣어야 합니다. |
| ai-jail | 명령 하나를 감싸는 샌드박스. 내 컴퓨터에 이미 있는 컴파일러와 런타임을 씁니다. 이미지도 데몬도 root도 필요 없습니다. | 호스트와 커널을 공유하므로 커널이나 드라이버 익스플로잇은 경계 밖에 있습니다. 가상 머신보다 약합니다. |
ai-jail 문서는 스스로를 일회용 VM을 대체하지 못하는 유용한 계층 하나라고 설명합니다. 위협 모델 읽기.
함께 쓸 때 나오는 질문
에이전트 자체 샌드박스와 프롬프트는 꺼야 하나요?
ai-jail이 Docker보다 안전한가요?
도메인별 네트워크 허용 목록은 왜 없나요?
IPAddressAllow=를 쓰는 systemd slice, 네트워크 네임스페이스를 소유한 컨테이너나 VM이 있습니다.Claude Code만 쓰는데 그래도 ai-jail이 필요한가요?
@anthropic-ai/sandbox-runtime은 베타 리서치 프리뷰이고 프로세스 전체를 감쌉니다. ai-jail도 프로세스 전체를 감싸며, 홈 디렉터리와 환경 변수를 닫은 상태에서 시작하고, 나중에 써 볼 다른 에이전트에도 같은 정책을 씁니다. Anthropic의 샌드박스 환경 비교를 참고하세요.에이전트를 철창 안에 넣으세요
ai-jail은 바이너리 하나입니다. 데몬도 root 권한도 필요 없습니다. 평소 실행하던 명령 앞에 단어 하나만 붙이면 됩니다.
brew tap akitaonrails/tap && brew install ai-jailai-jail claude