요약
devvm은 프로젝트 폴더마다 격리된 VM을 만들어 사람이나 코딩 에이전트가 바로 작업하게 합니다.
devvm은 MIT 라이선스로 공개된 무료 오픈소스 도구로, macOS와 리눅스에서 돌아갑니다. 프로젝트 폴더에서 명령 하나를 실행하면 맞춤 VM이 생깁니다. Claude Code, Codex, opencode 같은 에이전트를 내 컴퓨터가 아닌 그 VM 안에서 돌릴 수 있습니다.
왜 중요한가
- 코딩 에이전트를 내 컴퓨터에서 바로 돌릴 때의 위험을 VM 경계로 줄이려는 시도입니다.
- API 토큰은 VM에 들어가지 않고 내 컴퓨터의 프록시(요청을 중계하는 서버)가 대신 붙여 주므로, 에이전트가 실제 비밀 값을 보지 못합니다.
- 제작진은 어떤 샌드박스도 모든 틈을 막지 못한다고 밝히고, 남은 공격 경로를 따로 정리해 공개했습니다.
핵심 내용
- 프로젝트 폴더만 같은 경로로 마운트하고,
~/.ssh,~/.aws,~/Documents는 VM에 들어가지 않습니다. - 네트워크는 기본적으로 허용 목록에 있는 곳만 나가며, 더 느슨한 단계나 아예 끊는 단계도 고를 수 있습니다.
package.json이나pyproject.toml을 읽어 도구 체인(언어 런타임 같은 개발 도구 묶음)을 자동으로 고릅니다.- VM은 Lima(가상 머신 실행 도구)로 띄우며, 첫 VM이 만든 기본 이미지를 복사해 이후 VM은 몇 초 만에 뜹니다.
- macOS에서는 VM이
.git훅(git이 자동 실행하는 스크립트)과 설정을 못 바꾸지만, 리눅스에는 이 보호가 없습니다.
HN 반응
- 비슷한 도구를 만들고 있다는 댓글이 줄을 이었고, smolvm 같은 기존 프로젝트와 무엇이 다르냐는 질문도 나왔습니다.
- 격리보다 사내 저장소나 GitHub에 안전하게 접근시키는 일이 더 어렵다는 지적이 여러 번 나왔습니다.
이런 프로젝트는 계속 나오는데 하나도 제대로 만들어 낸 적이 없더라고요.
저는 격리도 필요하지만, 에이전트가 사내 패키지 레지스트리, 로그, 내부 인프라, 디자인, 에뮬레이터, 브라우저, 문서 같은 것에 안전하게 접근하게 해 주는 것도 필요합니다. 큰 회사에서는 작업 하나가 수십 개 저장소에 걸치기도 하고요. 게다가 이런 환경이 수십 개씩 필요합니다.
저는 회사에서 이걸 직접 만들었습니다. 엔지니어들은 제대로 된 메모리 벌루닝과 GPU 가속을 갖춘 krunkit VM을 쓰고, Retina RDP와 자격 증명을 주입해 주는 프록시 같은 것도 있습니다.
이건 프로젝트 하나를 개발할 때 쓰기엔 재미있는 장난감 같지만, 기업 환경에서 엔지니어에게 필요한 것과는 거리가 멉니다.
LLM이 우리에게 주는 힘에는 계속 감탄하게 됩니다. 저는 6개월쯤 자기 개선형 에이전트를 만들고 있는데, 최근 몇 주 동안은 거버넌스 계층을 격리하려고 VM을 썼습니다. 가상화는 저에게 완전히 미지의 영역인데도 deepseek flash 4.1 모델로 에이전트가 직접 OSX용 가상 머신 실행기/관리자를 만들었고, 심지어 윈도로 포팅까지 해냈습니다(윈도 Home은 VM 지원이 아주 제한적입니다). LLM을 두고 부정적인 반응이 많지만, 저는 엔지니어로서 우리의 역량이 이렇게 넓어지고 가능한 일이 늘어나는 게 그저 놀랍습니다.
안녕하세요! 정말 조언을 듣고 싶은 프로젝트가 있습니다. https://GitHub.com/nillebco/varda 입니다.
단순한 VM이 아니라 자격 증명 주입, 외부로 나가는 트래픽 제어, 볼륨, 에이전트 선택 정책까지 훨씬 많은 걸 다루거든요. 메모리 벌루닝과 GPU 가속도 충분히 세밀하게 조정할 수 있을 거라고 확신합니다.
미리 피드백 감사드립니다!
기반은 잘 잡으셨는데, 프로젝트나 티켓 하나를 다루는 작업에 맞춰져 있는 것 같습니다.
저와 동료 엔지니어들이 하는 일은 몇 주, 길게는 몇 달에 걸치고 코드베이스와 티켓도 수십 개입니다. 여러 저장소를 아우르는 오래 가는 샌드박스를 두고 실험 결과물과 계획 같은 걸 그냥 놔둘 수 있으면 엄청난 무기가 됩니다.
"Retina RDP"가 뭔가요?
윈도 앱(마이크로소프트 자체 RDP 클라이언트)에 있는 옵션입니다. 레티나 해상도 그대로 접속하면서 호스트의 UI 배율을 200%로 설정해서, 글자와 UI가 선명하게 나옵니다.
네, 맞아요.
이게 smolvm machines보다 나은 점이 하나도 안 보이네요. lima / krunkit은 colima 말고는 써 본 적이 없는데, colima에서는 느리고 개발자 경험도 낡았고, 임베디드 VM 라이브러리로 세부 사항을 전부 직접 제어하는 것에 비하면 불안정했습니다.
저도 smolvm으로 갈아탔습니다.
저평가된 프로젝트예요.
저는 smolvm을 중심으로 에이전트 하네스를 만들었는데 아주 잘 돌아가고 있습니다.
지금까지 버그는 딱 하나 봤는데(기억이 맞다면 팩에서 복원한 머신에서는 스냅샷을 못 뜹니다), 우회 방법을 찾았습니다.
딱 하나 해결됐으면 하는 건 tailscale을 쓸 때도 자격 증명을 바인딩할 수 있는 기능입니다. 지금은 트래픽이 tailscale 인터페이스를 통해 나가기 때문에 안 됩니다.
어쨌든 smolvm은 정말 대단합니다.
저자들이 원한다면 Lima/QEMU 대신 smolvm 위에서 이걸 돌릴 수도 있을 겁니다. 이 프로젝트는 가상 머신을 만들어 주는 데서 그치지 않고 그 안에 들어갈 것까지 구성해 주고, 툴체인과 코딩 에이전트도 고르게 해 줍니다. smolvm은 VM 안의 개발 도구 설정은 제공하지 않습니다. 툴체인과 에이전트가 이미 설치된 이미지를 안내해 주기는 하지만요.
smol은 도커를 지원하니까 새로 나온 마이너한 프로젝트에 묶이지 않고 도커 기반 툴체인 설정을 원하는 대로 쓸 수 있어요.
맞습니다. 다만 이 새 프로젝트는 매끄러운 설정을 제공하려는 거죠. Node, Rust, Go, Python 툴체인을 자세히 보면 자동으로 구성해 주려고 한다는 걸 알 수 있습니다.
이렇게 VM 설정을 상위 프로젝트로 감싸는 방식은 smol machines를 만든 BinSquare가 권장하는 것이기도 합니다. 최근 X에서 임베드해서 쓸 수 있다는 점을 계속 내세우고 있거든요.
가짜 리크루터 중 한 명이 LikedIN으로 Solidity 개발자 자리를 제안하며 연락해 왔는데, 과제 저장소를 DM으로 zip 파일로 보냈습니다. Finder에는 .sol 파일만 보여서 다 멀쩡해 보였는데, Finder는 기본적으로 .git 같은 숨김 폴더를 보여 주지 않습니다. 그런데 .git이 있었고, 커밋/푸시할 때 원격 주소를 대상으로 eval()을 실행하는 훅이 들어 있었습니다.
제가 이해한 바로는 .git 보호 기능이 VM이 훅을 바꾸지 못하게 막아 주고, --clone은 클론이 훅을 복사하지 않으니 훅이 남지 않습니다. 하지만 훅은 호스트의 폴더에 여전히 그대로 있습니다. devvm은 시작하기 전에 폴더에 훅이 이미 있는지 검사하고 경고해 주나요?
zip은 절대 로컬에서 풀면 안 됩니다. VM 안에서 풀어야 합니다.
아, 저도 지난 몇 주 동안 아주 비슷한 걸 만들고 있었는데 아직 공개 릴리스까지는 못 갔네요.
제 건 libvirt 기반이고 이미지를 만들 때 cloud-init을 쓰며, 프로젝트끼리 공유하는 골든 이미지를 둡니다.
문서를 훑어봤는데 이미지가 프로젝트마다 따로 빌드되는지, 아니면 공유 툴체인에서 COW로 만들어지는지 분명하지 않았습니다.
그래도 프록시 기능처럼 영감을 얻을 만한 기능이 몇 가지 있어 보이네요.
요즘 다들 같은 문제를 풀려고 하는 게 참 재미있습니다.
여기서 물어보는 김에, 지금 막혀 있는 부분이 하나 있습니다.
제 프로젝트 상당수가 pnpm을 쓰는데, pnpm은 공유 의존성 저장소에서 하드 링크를 가져다 쓰는 게 이상적입니다.
VM 기반 격리의 디스크 부담을 줄이는 게 제 목표 중 하나라서, 프로젝트끼리 공유하는 pnpm 저장소를 두고 싶습니다(maven 등도 마찬가지고요).
https://virtio-fs.gitlab.io/ 마운트를 쓰면 VM 안에서 마운트마다 파일 시스템이 따로 잡혀서 그 사이에서는 하드 링크를 걸 수 없습니다. 호스트의 디렉터리 구조를 폴더 하나에 바인드 마운트해서 VM 안에서 virtio-fs 마운트를 하나만 쓰는 방법도 시도해 봤는데, 바인드 마운트한 곳 너머로도 하드 링크는 안 되는 것 같았습니다.
제가 뭔가 놓치고 있는 건지, 아니면 애초에 불가능한 걸 하려는 건지 궁금합니다.
호스트 폴더는 전부 같은 파일 시스템에 있지만, VM 마운트 때문에 호스트 시스템 구성을 바꾸고 싶지는 않고 불필요한 디렉터리를 VM에 마운트하고 싶지도 않습니다(예를 들어 ~/projects만 마운트하면 간단하겠지만 그러면 격리하는 의미가 없죠).
(Fedora 워크스테이션 호스트입니다)
CoW를 지원하는 호스트 파일 시스템을 쓰세요.
저도 끼워 주세요. 한 달 전쯤 HN에서 incus를 알게 됐고, "개발용 베이스 이미지"를 만들어 볼까 생각하고 있었습니다. 컨테이너와 비교한 장점은 실행 중인 인스턴스에 마운트, 시크릿 같은 장치를 핫플러그할 수 있다는 점입니다. incus는 --vm 모드와 컨테이너 모드도 모두 지원하고, CLI 명령어 차이도 거의 없습니다.
https://linuxcontainers.org/incus/
제 가장 큰 병목은 딱 사용성이었어요. 용도별로 띄우는 수고를 최소화하면서 운영 스크립트 수를 적게 유지하는 방법이요. 앱을 새로 만들 생각은 없었고, 기존 앱을 쓰는 단축 명령만 두고 싶었거든요.
저도 명단에 올려 주세요. 저는 podman 컨테이너를 쓰지만요( https://github.com/evertheylen/probox ). 어려운 건 컨테이너/VM을 제한하는 게 아니라, 보호된 것이 필요한 작업을 컨테이너 안에서 "쉽게" 하게 만드는 거라고 생각합니다. 커밋은 어떻게 할 건가요? 에이전트는 어디서 돌아가고 GitHub에 접근할 수 있나요? 배포는 어떻게 하죠? 서버에는 어떻게 SSH로 접속하나요?
다른 분들은 어떻게 생각하는지 듣고 싶네요. 다른 프로젝트에서도 가로채는 HTTP 프록시를 두는 방식이 인기를 얻는 것 같습니다.
저는 보통 커밋을 샌드박스 밖에서 합니다. 에이전트는 git 히스토리를 보고 그 방식을 흉내 내지만 커밋에 서명은 못 합니다. 제가 커밋 몇 개를 승인하면
git rebase -i HEAD~N으로 메시지를 고치면서 한 번에 다시 서명하면 됩니다. git 훅이 위협 경로가 될 수 있어서.git은 읽기 전용으로만 접근하게 하는 방안을 고려하고 있어요. 그러지 않으면 샌드박스 없이는 그 안에 안전하게 다시 들어갈 수 없으니까요.GH에는 접근 권한을 주지 않습니다. API나 웹 스크래핑으로 대부분 충분히 빨리 읽을 수 있고, 필요한 명령은 제가 샌드박스 밖에서 직접 실행합니다.
로컬에서 돌아가니 SSH는 필요 없습니다.
컨테이너에 구멍을 그렇게 많이 뚫는다면 진짜 VM이 더 낫겠습니다.
근본적인 문제 같아요. 에이전트를 제한할수록 쓸모가 줄고, 덜 제한할수록 위험해집니다.
맞는 말이지만, "이 VM에 앞으로 4시간 동안 저장소 X의 브랜치 Y와 서버 Z에 접근 권한을 줘"라고 말하면서도 VM에 시크릿이 하나도 새 나가지 않는 좋은 시스템이 있다면 그것만으로도 엄청난 개선일 겁니다.
사람 개발자나 시스템 관리자도 치명적인 실수를 흔히 저지르니까, 완전히 새로운 문제를 맞닥뜨린 것도 아니에요.
git 접근의 경우, 저는 지금 에이전트 VM에 GitHub 쓰기 권한을 주지 않습니다. 직접 운영하는 gitea 인스턴스에 전용 사용자를 만들어 주고, 브랜치 보호 같은 걸로 피해 범위를 관리합니다.
큰 틀에서는 에이전트를 주니어/인턴 직원처럼 대하려고 합니다. 맡은 역할을 해낼 만큼의 권한은 주되, 스스로 목을 맬 만큼의 밧줄은 주지 않는 거죠.
그렇군요. 그런데 실패하는 CI 파이프라인을 디버깅해야 할 때 에이전트가 로그를 정말 잘 훑어서, 결국 못 이기는 척
gh auth login을 해 주게 되더라고요...그걸 하려고 전체 권한을 줄 필요는 없다고 확신합니다. 범위를 제한한 PAT 등을 만들 수 있고, 별도 계정을 쓰는 방법도 있어요. 결국 어디까지 위험을 감수할지는 본인이 정하는 거죠.
저도 이런 식으로 일렉트론 앱을 개발해 보려 했습니다. macOS를 호스트로 두고 qemu/multipass로 우분투 VM을 띄운 다음 Intellij IDEA를 썼어요. 제대로 동작하게 만들지 못했습니다. VM에 툴체인을 전부 설치할 수 있고 Intellij도 그걸 인식하긴 하지만("remote dev" 설정이 있습니다), 예를 들어 일렉트론 앱은 헤드리스 VM으로는 돌릴 수 없고, 맥에서 수정한 내용을 VM에서 핫 리로드하면서 맥에서 일렉트론 앱을 조작할 편리한 방법이 없습니다.
프로젝트 자체는 괜찮을 수도 있지만, 설치 안내가 "이걸 믿고 로그인 정보를 넘겨 달라"는 식이라 머릿속에서 경보가 꽤 빨리 울립니다.
비슷한 기존 제품들과 비교하면 어떤가요?
sbx, safehouse 같은 것들이요.vibe coding용 프로젝트 격리를 찾아보기 시작하니 프로젝트가 정말 많더라고요. https://github.com/smol-machines/smolvm 도 있고 https://github.com/clawkwork/clawk 도 있습니다.
이 프로젝트들을 서로 어떻게 구분해야 할지 모르겠어요.