에이전트에 --dangerously-skip-permissions를 붙이고 싶지만 호스트 파일·SSH 키·API 키가 노출될까 불안한 개발자에게 유용하다. Trail of Bits의 coop은 Claude Code와 Codex를 일회성 마이크로VM(리눅스 Firecracker, macOS Lima) 안에서 실행해 “에이전트가 망쳐도 VM 안에서만 망친다”는 경계를 만들어준다. 기존 유사 도구인 Docker 샌드박스·microsandbox와의 차이는 코딩 에이전트 특화라는 점이다. 프로젝트 디렉터리 동기화, Claude Code/Codex CLI 자동 설치, API 키 게스트 전달(또는 v0.6.0의 프록시 모드로 키 자체를 호스트에 보관), 에디터 SSH 연결까지 한 세트로 묶여 있다. 주의점은 세 가지다. 리눅스는 KVM(/dev/kvm)과 sudo가 필요하고, macOS는 Apple Silicon만 공식 지원한다. 설치 스크립트가 SHA-256 체크섬과 Sigstore 증명을 검증하지만 curl | bash 방식 자체는 신뢰 연결 위에 얹힌 것이다. 그리고 VM 안에서는 권한 프롬프트가 기본 우회되므로 격리 경계가 곧 마지막 방어선이라는 설계 철학을 이해하고 써야 한다.

이미지: 직접 제작 (coop 구조 기반)
핵심 요약
- 문제: Claude Code/Codex에 자율 권한을 주면 호스트 전체가 폭발 반경이 된다. 프롬프트 인젝션 한 번에
~/.ssh, 브라우저 프로필,.env가 노출될 수 있다. - 해결: coop은 에이전트를 일회성 VM에 넣는다. VM마다 독립 파일시스템·네트워크·Docker 데몬이 있고 생성/삭제가 저렴하다.
- 차별점: 범용 샌드박스가 아니라 Claude Code·Codex 실행에 필요한 것(프로젝트 동기화, CLI 설치, 자격 증명 전달, 프록시 모드)을 모아둔 에이전트 전용 도구다.
- 검증: 2026-09-10 격리 HOME에서 v0.6.0 실제 설치·진단·제거를 수행했다. 실제 사용자 환경 파일은 변경 없음을 해시로 확인했다.
- 비용: 오픈소스(Apache-2.0) 무료. 에이전트 사용료(Anthropic/OpenAI API 또는 구독)는 별개다. 텔레메트리 없음, 업데이트 확인만 GitHub API 호출.
coop이 무엇인가: 이름·생김새·상태
| 항목 | 내용 (2026-09-10 기준) |
|---|---|
| 이름·유형 | coop — Rust CLI, 에이전트 격리 실행기 |
| 발음 | “쿱”(/kuːp/), 닭장 co+op. “코옵”이 아니다 |
| 공식 저장소 | github.com/trailofbits/coop |
| 제작 | Trail of Bits (보안 컨설팅 회사, 2002년 창립) |
| 첫 커밋 | 2026-04-02 |
| 최신 릴리스 | v0.6.0 (2026-09-09) |
| stars / forks | 208 / 10 — 총량은 작지만 2026-09-07 HN 프론트페이지(70점·토론 16건) 직후 |
| 라이선스 | Apache-2.0 |
| 기여자 | 10명 |
| 지원 플랫폼 | macOS arm64(Apple Silicon, Lima 백엔드), 리눅스 x86_64(Firecracker 백엔드), 리눅스 arm64는 빌드만 제공(미테스트) |
총 stars가 208개로 적어 보이지만, 이 글의 판단 기준은 총량이 아니라 최근 활동과 외부 수요다. v0.6.0이 전날(09-09) 나왔고, 커밋·이슈 대응·문서가 매일 갱신된다. 반면 경쟁 후보로 검토한 다른 신규 도구들은 한국어 가이드가 이미 많거나(ponytail), 이 블로그 최근 글과 검색 의도가 겹치거나(memory 계열), 독립 수요 신호가 없어 탈락시켰다.
왜 필요한가: 권한 우회와 격리는 세트다
Claude Code나 Codex를 자율적으로 쓰다 보면 권한 프롬프트가 반복돼 --dangerously-skip-permissions 같은 플래그에 손이 간다. 이 순간 에이전트는 호스트 셸에서 사실상 무제한 권한을 갖는다. Anthropic 공식 문서도 이 위험을 인정해 샌드박스 환경 선택 문서에서 “명령별 샌드박스 Bash부터 개발 컨테이너, VM까지” 계층적 격리를 안내한다. 공식 문서 표에서 VM은 “전체 운영 체제 격리, 설정 노력 높음”으로 분류된다.
coop의 주장은 이 “노력 높음”을 대신 해주겠다는 것이다. coop up 한 번으로:
- 프로젝트 디렉터리를 VM의
/workspace에 복사/동기화한다. - 게스트에 Claude Code·Codex CLI, git, Docker, 빌드 도구가 담긴 템플릿 이미지로 VM을 띄운다.
coop claude/coop codex로 게스트 안에서 에이전트를 실행한다. 이때 게스트의~/.claude/settings.json은defaultMode: bypassPermissions로 coop이 직접 작성한다. VM 자체가 격리 경계이므로 안에서는 프롬프트를 없애는 게 설계상 의도다. 프롬프트를 유지하려면coop claude --ask를 쓴다.
즉 “권한 프롬프트 피로도 ↔ 호스트 노출”이라는 트레이드오프를 “VM 안에서는 전부 허용, 밖으로는 못 나감”으로 치환한다. 이 접근은 Trail of Bits가 문서화한 트러스트 모델에서 명시적으로 선언된다. 게스트 내부에는 보호할 권한 경계가 없고, 폭발 반경이 곧 VM이다.
누구에게 유용한가, 아닌가
유용한 경우
- Claude Code/Codex를 무인(autonomous)으로 오래 돌리는 개발자. 프롬프트 인젝션이나 에이전트 실수로 호스트가 오염되는 것을 구조적으로 차단한다.
- 한 대의 머신에서 여러 클라이언트 프로젝트를 다룬다. VM마다 파일시스템이 분리되므로 프로젝트 간 침범이 없다(HN 댓글에서 실사용자가 언급하는 대표 사례).
- 신뢰할 수 없는 저장소의 코드를 에이전트에게 분석·실행시켜야 할 때. 검사 대상을 VM 안에 가둔다.
- CI가 아니라 로컬에서 격리가 필요할 때. E2B 같은 클라우드 샌드박스와 달리 로컬 리소스로 돈다.
추천하지 않는 경우
- 리눅스에서
/dev/kvm이 없는 VPS/컨테이너 환경. Firecracker 백엔드가 뜨지 않는다. - Apple Silicon이 아닌 맥(Intel). Lima 백엔드 공식 지원 밖이다.
- 리눅스 arm64(예: 라즈베이 파이·ARM VPS). 바이너리는 있지만 “untested”라고 공식 문서가 명시한다. 이번 검증 환경도 arm64라 설치·진단까지만 확인했다.
- 가벼운 파일 질의·대화형 편집이 전부라면 OS 수준 샌드박스(예: Claude Code 내장 샌드박스 Bash, macOS Seatbelt)가 더 저렴하다.
- 윈도우는 지원하지 않는다.
기존 유명 도구와 비교: 무엇이 다르고 무엇을 대체하나
coop은 부분 대체 + 상황별 보완 관계다. 비교 대상은 세 층위로 나뉜다.
| 구분 | coop (Trail of Bits) | Claude Code 내장 샌드박스 | Docker 개발 컨테이너 | microsandbox | E2B |
|---|---|---|---|---|---|
| 분류 | 에이전트 전용 로컬 microVM | OS 수준 샌드박스 | 컨테이너 | 범용 microVM 라이브러리 | 클라우드 샌드박스 |
| 격리 강도 | VM(하드웨어 가상화) | 프로세스/파일·네트워크 제한 | 커널 공유(네임스페이스) | VM(Firecracker 계열) | 원격 VM |
| 입력 | 프로젝트 디렉터리 | Bash 명령·프로세스 전체 | devcontainer.json | 라이브러리 API | 코드 실행 요청 |
| 출력 | 동기화된 /workspace + 게스트 상태 | 그대로 호스트 | 컨테이너 내 결과 | 라이브러리 결과 | API 응답 |
| 에이전트 통합 | Claude Code·Codex CLI 내장 실행·자격 증명 전달·프록시 모드 | 자체 기능이라 통합 불필요 | 수동 설치 필요 | 수동 연결 필요 | 별도 SDK |
| API 키 처리 | 게스트 전달 또는 v0.6.0 프록시 모드(키는 호스트에만) | 호스트에 그대로 | 컨테이너 env | 사용자 구성 | 클라우드 측 |
| 비용 | 무료(로컬 리소스) | 무료 | 무료 | 무료(로컬) | 사용량 과금 |
| 데이터 경계 | 로컬(모델 API 호출 제외) | 로컬 | 로컬 | 로컬 | 클라우드 업체에 전송 |
관계를 정리하면:
- Claude Code 내장 샌드박스 → 부분 대체. 일상적인 권한 프롬프트 감소 목적이라면 내장 기능이 충분하다. coop은 “전 OS를 통째로 가두고 그 안에서 완전 자율”이 필요할 때 선택한다. Anthropic 문서도 VM을 가장 강한 계층으로 분류한다.
- Docker 개발 컨테이너 → 직접 대체 후보. 컨테이너는 커널을 공유하므로 VM 탈출 경로가 이론상 더 많다. coop은 이미지에 에이전트 CLI와 자격 증명 파이프라인이 들어 있어 설정이 짧다. 이미 devcontainer를 쓰고 있다면 coop은
coop devcontainer로 기존 정의를 일부 해석한다. - microsandbox(8,149 stars) / E2B(13,723 stars) → 다른 범주에 가깝다. 둘 다 범용 샌드박스 런타임/플랫폼이다. coop은 코딩 에이전트 워크플로(동기화·CLI·키)에 특화된 얇은 오케스트레이터다. HN 토론에서도 “docker sbx·microsandbox와 겹치지만 오픈소스 완전 공개가 차별점”이라는 반응이 있었다. Docker의 sbx는 라이선스가 독점적이라는 지적도 달렸다.
Claude Code·Codex에서 설치하고 제거하기 (직접 검증함)
이하는 2026-09-10 임시 홈(/tmp)에서 실제로 실행한 절차다. 실제 사용자 홈의 ~/.claude.json, ~/.claude/settings.json, ~/.codex/config.toml은 설치 전후 SHA-256 해시가 동일했다(변경 0건). 이 검증 환경은 리눅스 arm64라 VM 부팅(coop setup의 커널 내려받기)은 진행하지 않았다. 설치·목록·설정 생성·검증·제거까지가 직접 확인 범위다.
1단계: 설치 (v0.6.0 고정)
curl -fsSL https://raw.githubusercontent.com/trailofbits/coop/main/install.sh | VERSION=v0.6.0 bash
스크립트 동작을 요약하면: GitHub 릴리스에서 tarball과 SHA256SUMS를 내려받고, 체크섬이 일치해야 하며, gh CLI가 있으면 Sigstore 빌드 증명(attestation)까지 검증한다. 실패하면 설치를 거부한다. 실험 중 시스템 gh가 증명 명령을 지원하지 않는 구버전이라 “Attestation verification failed — refusing to install”로 중단됐는데, 이는 실패 폐쇄(fail closed) 동작이므로 정상이다. 이 경우 최신 gh를 설치하거나, 체크섬 검증 단계만으로 진행된다(스크립트가 안내문을 출력한다).
바이너리는 ~/.local/bin/coop과 ~/.local/bin/coop-proxy 두 개가 설치된다. v0.6.0부터 프록시 모드에 필요한 짝 바이너리다.
2단계: 무해한 진단 (VM 없이)
coop init # ~/.coop/config.toml 기본 설정 파일 생성 (모두 주석, 비어도 유효)
coop validate # 구성·사전요건 점검. KVM/Firecracker 부재는 경고만
coop list # 인스턴스 목록. "No instances found"
검증 결과 validate는 “Config OK”와 함께 firecracker 바이너리 부재 경고를 냈다. VM을 만들지 않는 한 시스템 변경은 ~/.coop/config.toml 하나다.
3단계: 실제 사용 흐름 (요약)
coop setup # Firecracker·커널 설치 + 템플릿 이미지 빌드 (sudo 필요)
cd ~/code/my-project
coop up # 프로젝트 VM 생성·기동
coop claude # VM 안에서 Claude Code 실행 (권한 프롬프트 기본 우회)
coop codex # VM 안에서 Codex 실행
coop push / coop pull # 호스트↔게스트 파일 동기화
coop editor # VS Code/Zed를 SSH로 게스트에 연결
API 키는 ANTHROPIC_API_KEY/OPENAI_API_KEY 환경 변수에서 자동으로 감지해 게스트에 전달한다. GitHub 토큰은 기본 꺼짐이고 github = "auto" 명시적으로 켜야 한다. v0.6.0의 프록시 모드([proxy] 설정)를 켜면 API 키를 게스트에 넘기지 않고 호스트의 coop-proxy가 자격 증명을 주입한다. 게스트는 기능 토큰만 갖는다.
4단계: 제거·원상복구
coop uninstall --keep-data # 바이너리만 제거, ~/.coop 유지
coop uninstall --purge -y # 바이너리 + ~/.coop 전부 제거
검증에서 --purge -y는 ~/.coop(설정·이미지·인스턴스)을 삭제하고 네트워크 브리지(br0) 정리를 시도했다(이 환경에서는 sudo 터미널이 없어 실패 메시지가 났지만 VM을 만든 적 없으므로 정리할 브리지도 없었다). 한 가지 발견: 제거 후 coop-proxy 바이너리는 남아 있었다. 완전한 제거를 원하면 rm ~/.local/bin/coop-proxy를 추가하면 된다. 호스트의 Claude Code/Codex 설정은 coop이 건드리지 않으므로 원상복구 대상도 없다.
격리된 검증을 원한다면 (붙여넣기용 프롬프트)
이 글의 URL을 코딩 에이전트에 붙여 넣고 아래처럼 요청할 수 있다. 운영 환경 변경 없이 임시 홈에서 안전하게 검증하는 프롬프트다.
블로그 글 https://blog.kwt.co.kr/coop-claude-code-codex-vm-isolation-install-security/ 을 읽고
trailofbits/coop v0.6.0을 임시 홈(/tmp/coop-test)에만 설치해 줘.
절차: 1) /tmp/coop-test 홈으로 HOME을 바꿔서 install.sh 실행(VERSION=v0.6.0 고정)
2) coop init && coop validate && coop list 출력 확인
3) coop uninstall --purge -y로 완전 제거, ~/.local/bin/coop-proxy도 삭제
4) 실제 홈(~/.claude, ~/.codex)의 파일 해시가 변하지 않았는지 전후 비교 보고
금지사항: 실제 API 키·토큰 입력 금지, coop setup(VM 생성) 금지, 실제 사용자 설정 변경 금지.
보안·권한·공급망: 숨기지 않고 정리
잘 설계된 부분
- 설치 스크립트가 체크섬을 강제하고 Sigstore 증명 검증을 지원한다. 증명 검증 실패 시 설치 거부(fail closed)를 직접 확인했다.
- 트러스트 모델 문서가 예외적으로 상세하다. 비밀을 argv가 아닌 SSH env 채널/stdin으로만 전달한다는 규칙, 게스트를 불신 대상으로 명시한 티오트 맵, 풀(pull)로 호스트에 오는 게스트 산출물의 오염 경로 정리까지 공개돼 있다.
- GitHub 토큰 전달 기본값이 꺼짐이고, 프록시 모드에서는 모델 API 키가 게스트에 상주하지 않는다. 프록시 프로세스는 Landlock(리눅스)/Seatbelt(macOS)로 자기감금한다.
- 텔레메트리 없음. 백그라운드 네트워크 호출은 업데이트 확인을 위한 GitHub API, DNS(8.8.8.8) 조회뿐이다(공식 문서 기준).
updates.mode = "off"로 끌 수 있다.
알아야 할 위험·한계
- 게스트 내부는 무방비 상태로 돈다.
bypassPermissions와--dangerously-bypass-approvals-and-sandbox가 기본 적용된다. 격리 경계를 뚫는 버그(예: workspace 풀의 경로 탐색)가 있으면 의미가 훼손된다. 프로젝트는 이 경로들의 검증 규칙을 문서로 유지보수한다. - 네트워크 송신은 기본 제한되지 않는다. 이슈 #2(게스트 egress 화이트리스트·오프라인 모드)는 아직 열려 있다. VM 안 에이전트가 외부로 데이터를 보내는 것 자체는 VM이 막아주지 않는다. 민감 데이터가 있는 프로젝트에서는 키 전달·마운트 범위를 최소화해야 한다.
- coop 설치·운영에 sudo가 쓰인다. Firecracker jailer와 TAP 네트워크 때문이다. 설치 스크립트 자체는 sudo를 요구하지 않지만
coop setup이 시스템 수준 도구를 설치한다. config.toml의cmd:값은 호스트에서sh -c로 실행된다. 공식 트러스트 모델이 “config 파일은 호스트 코드 실행 표면”이라고 명시한다. 남의 config 파일을 함부로 가져다 쓰지 말아야 한다.- 이번 검증에서는 VM 부팅·에이전트 실사용까지 가지 않았다(arm64 미테스트 환경). 실사용 성능·안정성 소감은 본 글의 검증 범위가 아니다.
실측 데이터: 관심 추이와 검증 로그

출처: GitHub REST API (2026-09-10 조회)
수요 신호를 정리하면:
- HN 독립 신호: 2026-09-07 프론트페이지 70점·토론 16건. “매일 쓴다”, “프로젝트 간 침범 차단이 핵심”, “docker sbx는 독점 라이선스라 여기로 갔다” 등 실사용·비교 중심의 댓글이 달렸다.
- 자동완성 신호: Google 자동완성에
claude code coop이 등장한다(2026-09-10 확인). 이는 특정 도구 조합 검색이 형성 중이라는 독립 신호다. - 활동 신호: v0.5.4(07-14)에서 v0.6.0(09-09)까지 8개 릴리스. 최근 일주일 커밋 최신 2026-09-09. 이슈 #456 등 사용자 보고에 당일 문서 수정으로 대응했다.
- 증가율의 한계: 이 리포는 이번 실행에서 첫 스냅숏을 찍었으므로(provisional), 24시간·7일 실측 증가량은 아직 없다. 8분 간격 관측에서 +0이었고, 스냅숏 누적은 다음 실행부터 증분 계산이 가능하다. 총 stars 208은 E2B(13,723)·microsandbox(8,149) 대비 작다. 다만 2026-04-02 생성 후 최근 급등의 계기는 HN 노출과 v0.6.0 릴리스로 보인다.
절차 체크리스트: 도입 전 10가지
- CPU 가상화 지원 확인: 리눅스
ls -l /dev/kvm, 맥은 Apple Silicon인지. - 사전 요건 설치: 맥
brew install lima, 리눅스는curl tar e2fsprogs등. gh최신 버전 설치(증명 검증용) — 선택이지만 권장.VERSION=v0.6.0고정 설치. 무분별한 latest 대신 버전을 명시한다.coop init후~/.coop/config.toml에서github기본값(off) 확인.- 첫 프로젝트는 중요하지 않은 저장소로
coop up테스트. coop claude --ask로 프롬프트 동작을 먼저 확인한 뒤 자율 모드로 전환.- API 키 노출이 걱정되면
[proxy]모드 검토(v0.6.0+). - 정기적
coop update(체크섬·증명 자동 검증) 또는updates.mode="off"명시적 선택. - 제거 예행연습:
coop destroy --all→coop uninstall --purge -y→coop-proxy잔존 확인.
FAQ
Hermes에서도 쓸 수 있나?
Hermes 에이전트 자체를 격리하는 통합 기능은 없다. Hermes가 Claude Code/Codex CLI를 감싸서 쓰는 구성이라면 그 CLI를 coop VM 안에 두는 우회가 가능하다. 이 글의 검증 범위는 Claude Code/Codex 공식 대상이므로 Hermes 연동은 미확정으로 둔다.
Docker 컨테이너로 같은 효과를 낼 수 없나?
부분적으로는 가능하다. 하지만 컨테이너는 커널을 공유하므로 격리 강도가 VM보다 낮고, Claude Code/Codex CLI 설치·자격 증명 전달·프로젝트 동기화를 직접 스크립팅해야 한다. coop은 그 마찰을 없애는 것이 본체다. 반대로 격리 요구가 낮으면 컨테이너가 더 가볍다.
VM 안에서 인터넷 접속은 되나?
된다. 이것이 현재의 명시적 한계다. egress 화이트리스트는 이슈 #2로 열려 있다. 데이터 유출 우려가 크다면 프록시 모드로 키를 호스트에 두고, 마운트 디렉터리를 최소화한다.
윈도우에서 쓸 수 있나?
지원하지 않는다. WSL2에서 KVM 중첩이 되는 환경이라면 리눅스 백엔드 시도는 가능하지만 공식 지원이 아니며 이 글에서 검증하지 않았다.
설치했을 때 호스트에 무엇이 생기나?
~/.local/bin/coop, ~/.local/bin/coop-proxy, ~/.coop/(설정·이미지·키), 선택적으로 firecracker 바이너리가 ~/.coop 안에 생긴다. coop setup을 실행하면 시스템에 firecracker·커널·브리지 설정이 추가된다(제거 시 --purge가 정리). 셸 설정 파일은 건드리지 않는다. PATH에 ~/.local/bin 추가는 사용자가 직접 한다.
기존에 쓰던 Claude Code 설정(plugins, CLAUDE.md)은?
[claude] config_dir이 가리키는 ~/.claude에서 CLAUDE.md·rules·commands를 게스트로 복사하는 기능이 있다. 마켓플레이스·플러그인 자동 재설치도 config의 marketplaces/plugins 항목으로 지정한다.
함께 읽으면 좋은 글
- Agent Skill 설치 전 보안 검사: SkillSpector vs Snyk Agent Scan — 설치형 확장을 검사하는 다른 각도
- Claude Code가 매번 코드를 다시 읽는 문제, Graft로 끊기 — 토큰 절감 계열 확장
- Claude Code가 지난달의 나를 기억하게 만들기: deja-vu 설치·보안 검증 — 에이전트 확장 설치·보안 검증 시리즈
참고 자료
- 공식 저장소: github.com/trailofbits/coop
- 시작 안내: docs/getting-started.md
- Claude Code 통합: docs/claude-integration.md
- Codex 통합: docs/codex-integration.md
- 트러스트 모델: docs/trust-model.md
- v0.6.0 릴리스 노트: releases/tag/v0.6.0
- Anthropic 공식 샌드박스 문서: 샌드박스 환경 선택
- HN 토론: Coop – Isolated VM Environments (2026-09-07)