본문으로 건너뛰기
메뉴
나에게 필요할까?에이전트가 내 컴퓨터에서 닿을 수 있는 것작동 방식에이전트와 시스템 사이에 놓이는 계층비교내장 샌드박스, Docker, VM설정작업에 필요한 것만 열기보안위협 모델과 한계설치
비교

에이전트에 이미 있는 샌드박스는 다른 절반을 맡습니다

내장 샌드박스와 권한 확인 프롬프트는 모델이 실행하는 명령을 지켜봅니다. ai-jail은 에이전트 프로그램 전체가 내 컴퓨터에서 무엇을 볼 수 있는지를 정합니다. 둘은 함께 쓸 수 있습니다.

마지막 검토일 2026년 9월 21일. 다른 제품은 빠르게 바뀌므로, 다른 제품에 관한 서술에는 모두 해당 벤더의 공식 문서 링크를 달았습니다.

벽이 서 있는 위치

이 글을 쓰는 시점에 Claude Code의 샌드박스는 셸 명령과 그 자식 프로세스에 적용됩니다. 파일 도구는 샌드박스 대신 권한 시스템을 쓰고, 문서에는 MCP 서버와 훅이 호스트에서 제약 없이 실행된다고 적혀 있습니다. ai-jail은 에이전트 자체를 벽 안에서 시작하므로 에이전트가 띄우는 것도 전부 안에 있습니다.

패널 두 개. 왼쪽에서는 내장 샌드박스가 셸 명령만 감싸고, 에이전트와 MCP 서버, 훅은 벽 바깥에 있으며 홈 디렉터리까지 선이 닿아 있습니다. 오른쪽에서는 ai-jail이 에이전트, MCP 서버, 훅, 셸 명령, 프로젝트를 한꺼번에 감싸고, 홈 디렉터리는 바깥에서 흐리게 막혀 있습니다.
왼쪽 패널은 Claude Code 문서를 따라 그렸습니다.

Codex도 자신이 실행하는 명령을 샌드박스에 넣고 codex 프로세스는 바깥에 둡니다. 로컬 MCP 서버가 어디서 실행되는지는 문서에 나와 있지 않습니다.

권한 확인 프롬프트는 종류가 다른 보호입니다

프롬프트는 사람에게 묻고, 사람은 서두르거나 속을 수 있습니다. 샌드박스는 커널에 묻고, 커널은 매번 같은 답을 줍니다.

패널 두 개. 왼쪽에서는 에이전트에서 나온 선이 Approve 버튼이 달린 승인 대화 상자 여러 장을 통과해 내 키에 닿습니다. 오른쪽에서는 같은 선이 '커널 규칙'이라고 적힌 벽에서 멈추고, 그 뒤의 키는 흐리게 막혀 있습니다.
프롬프트는 쓸모가 있습니다. 프롬프트는 검토 단계이고 샌드박스는 경계입니다.

사람을 빼는 모드

이 글을 쓰는 시점에 아래 에이전트에는 모두 더 이상 묻지 않는 모드가 있습니다. 프롬프트가 사라지면 남는 보호는 샌드박스뿐이고, 그것도 켜져 있을 때 이야기입니다.

에이전트모드벤더가 설명하는 동작
Claude Codeauto모든 것이 실행되고 두 번째 모델이 나 대신 동작을 검토합니다. 문서는 이 분류기를 격리 경계가 아닌 동작 단위 제어라고 부릅니다.
Claude CodebypassPermissions, 또는 --dangerously-skip-permissions모든 것이 검사 없이 실행됩니다. 문서는 격리된 컨테이너와 VM에서만 쓰라고 안내합니다.
Codex CLI승인 정책 never에이전트가 묻지 않습니다. 샌드박스 모드는 그대로 적용됩니다. 승인과 보안 문서를 참고하세요.
Codex CLIdanger-full-access, 또는 --yolo샌드박스가 꺼집니다. --yolo를 쓰면 승인도 없어집니다.

나란히 비교

아래 내용은 모두 이 글을 쓰는 시점의 각 제품 문서를 기준으로 합니다. 우리가 읽은 문서에서 답을 찾지 못한 항목은 칸에 그렇게 적었습니다.

Claude Code 샌드박스Codex CLI 샌드박스Gemini CLI 샌드박스ai-jail
에이전트 전체를 감싸는 래퍼가 더해 주는 것
벽 안에 있는 것Bash, PowerShell, Monitor 명령과 그 자식 프로세스. claude 프로세스와 파일 도구, MCP 서버, 훅은 바깥에 있습니다.에이전트가 실행하는 명령. codex 프로세스는 바깥에 있습니다. 로컬 MCP 서버는 문서에 없음.CLI 프로세스 전체. security.toolSandboxing을 쓰면 셸과 쓰기 도구만.프로세스 트리 전체. 에이전트와 파일 도구, MCP 서버, 훅, 모든 명령이 들어갑니다.
기본으로 켜져 있는가아니요. /sandboxsandbox.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는 읽기 전용입니다.문서에 없음내장된 것은 없음. 프로젝트 전체에 쓸 수 있습니다. 경로를 마스킹하거나 거부하려면 --maskdeny_paths를 직접 지정합니다.
시크릿을 에이전트에게 숨긴 채로 사용하기자격 증명 마스킹을 쓰면 프록시에서 실제 시크릿을 주입할 수 있습니다. 실험적 설정이 필요합니다.문서에 없음문서에 없음안 됩니다. 마스킹된 파일은 빈 파일입니다.
플랫폼macOS, Linux, WSL2. 네이티브 Windows와 WSL1은 안 됩니다.macOS, Linux, WSL2, 네이티브 Windows.macOS Seatbelt, Docker 또는 Podman, gVisor, LXC(실험적), 네이티브 Windows.Linux와 macOS. Windows에서는 WSL2만 됩니다.
설치에이전트에 포함. Linux에서는 bubblewrapsocat이 필요합니다.에이전트에 포함.에이전트에 포함. 컨테이너 백엔드에는 Docker나 Podman이 필요합니다.별도 바이너리. Linux에서는 bubblewrap이 필요합니다.

출처: Claude Code 샌드박싱, Claude Code 샌드박스 환경, Codex 승인과 보안, Codex Linux 샌드박스, Gemini CLI 샌드박스.

둘 다 쓰세요

네트워크를 끄면 클라우드 에이전트는 자기 모델 API에 닿지 못합니다. 그래서 실제로는 네트워크와 에이전트 로그인, 두 가지를 열게 됩니다.

감옥 안의 클라우드 에이전트
cd ~/Projects/my-appai-jail --network --agent-state claude
ai-jail이라고 적힌 큰 벽 하나가 에이전트, MCP 서버, 훅, 프로젝트, 셸 명령을 감싸고 있습니다. 에이전트와 셸 명령 사이에는 에이전트 자체의 승인 프롬프트가 있습니다. 선 하나가 문을 통해 벽을 나가 모델 API로 이어집니다. 홈 디렉터리는 벽 바깥에서 흐리게 막혀 있습니다.
바깥벽이 ai-jail입니다. 그 안에서 에이전트의 프롬프트와 규칙은 하던 일을 계속합니다.

에이전트 자체 검사가 계속 하는 일

권한 확인 프롬프트, 허용·거부 규칙, plan 모드는 에이전트 프로그램에 속한 기능이라 감옥 안에서도 바깥과 똑같이 동작합니다. 내가 승인하지 않았을 명령을 여기서 걸러 냅니다.

ai-jail이 그 아래에서 보장하는 것

내가 무엇을 승인하든 에이전트와 MCP 서버, 훅은 홈 디렉터리와 키, 셸에 있는 토큰을 볼 수 없습니다. 에이전트가 읽을 수 있는 것은 여전히 밖으로 보낼 수 있으니 프로젝트 안의 시크릿은 마스킹하세요.

Docker, 개발 컨테이너, 가상 머신

이들도 좋은 답이고, 가상 머신은 더 강한 답입니다. 차이는 무엇을 직접 빌드하고 최신으로 관리해야 하느냐에 있습니다.

얻는 것치르는 비용
Docker 컨테이너전용 파일시스템, 프로세스 목록, 네트워크. 에이전트는 내가 마운트한 것만 봅니다.빌드하고 유지보수할 이미지가 생기고, 툴체인을 한 번 더 설치해야 합니다. Docker 소켓을 마운트하면 컨테이너는 호스트에서 root와 동등해집니다.
개발 컨테이너컨테이너와 같은 격리를, 에디터가 이해하고 팀이 공유할 수 있는 파일 하나로 기술합니다.이미지 관리 부담은 같고, 이 형식을 이해하는 에디터나 도구가 추가로 필요합니다.
가상 머신전용 커널. 여기 나온 것 중 가장 강한 경계이고, 악의적이라고 판단되는 코드에 맞는 선택입니다.가장 무거운 선택지입니다. 게스트 시스템을 설치하고 업데이트하고 메모리를 떼어 주고 프로젝트를 복사해 넣어야 합니다.
ai-jail명령 하나를 감싸는 샌드박스. 내 컴퓨터에 이미 있는 컴파일러와 런타임을 씁니다. 이미지도 데몬도 root도 필요 없습니다.호스트와 커널을 공유하므로 커널이나 드라이버 익스플로잇은 경계 밖에 있습니다. 가상 머신보다 약합니다.

ai-jail 문서는 스스로를 일회용 VM을 대체하지 못하는 유용한 계층 하나라고 설명합니다. 위협 모델 읽기.

함께 쓸 때 나오는 질문

에이전트 자체 샌드박스와 프롬프트는 꺼야 하나요?
프롬프트와 규칙은 그대로 두세요. 이들은 명령을 하나씩 검토하는데, ai-jail은 그 일을 하지 않습니다. Linux에서 에이전트의 OS 샌드박스는 사정이 다릅니다. ai-jail은 중첩된 bubblewrap 샌드박스에 필요한 시스템 콜을 막고, 문서에도 이 조합이 동작한다는 말이 없습니다. 에이전트가 감옥 안에서 자기 샌드박스를 쓸 수 없다고 알려도 감옥은 그대로 있습니다.
ai-jail이 Docker보다 안전한가요?
둘은 같은 부류의 경계입니다. 둘 다 호스트와 커널을 공유하고 가상 머신이 아닙니다. ai-jail은 전부 닫힌 상태에서 시작하고 이미지, 데몬, root가 필요 없습니다. 컨테이너는 내가 지정한 것을 마운트하며, Docker 소켓을 마운트하면 호스트에서 root와 동등해집니다. 악의적이라고 판단되는 코드에는 일회용 VM을 쓰세요.
도메인별 네트워크 허용 목록은 왜 없나요?
샌드박스 안에 있는 필터는 에이전트가 쓰지 않기로 하면 그만입니다. 메인테이너는 해당 요청을 범위 밖이라며 닫았습니다. root 없이 구현하려면 유저스페이스 네트워크 스택이 필요하고, 여기에 SNI 검사나 TLS 가로채기가 있어야 합니다. SNI 검사는 SNI가 없거나 암호화되어 있으면 통하지 않고, TLS 가로채기는 자격 증명이 실린 에이전트의 API 트래픽을 열어 봐야 합니다. 필터링은 이미 권한이 있는 곳에서 하세요. 에이전트 uid에 거는 nftables 규칙, IPAddressAllow=를 쓰는 systemd slice, 네트워크 네임스페이스를 소유한 컨테이너나 VM이 있습니다.
Claude Code만 쓰는데 그래도 ai-jail이 필요한가요?
이 글을 쓰는 시점에 선택지는 세 가지입니다. 내장 샌드박스는 셸 명령을 막아 줍니다. Anthropic의 @anthropic-ai/sandbox-runtime은 베타 리서치 프리뷰이고 프로세스 전체를 감쌉니다. ai-jail도 프로세스 전체를 감싸며, 홈 디렉터리와 환경 변수를 닫은 상태에서 시작하고, 나중에 써 볼 다른 에이전트에도 같은 정책을 씁니다. Anthropic의 샌드박스 환경 비교를 참고하세요.

에이전트를 철창 안에 넣으세요

ai-jail은 바이너리 하나입니다. 데몬도 root 권한도 필요 없습니다. 평소 실행하던 명령 앞에 단어 하나만 붙이면 됩니다.

terminal
brew tap akitaonrails/tap && brew install ai-jailai-jail claude