ERA 소개
ERA Agent는 AI 에이전트가 생성한 코드를 안전하게 실행할 수 있도록 지원하는 오픈 소스 로컬 샌드박스 도구입니다. 최근 LLM(Large Language Model)의 발전으로 AI가 코드를 작성하고 실행하여 복잡한 작업을 수행하는 '에이전트(Agent)' 활용이 늘어나고 있습니다. 하지만 AI가 생성한 코드를 로컬 머신에서 직접 실행하는 것은 보안상 매우 위험하며, 의존성 충돌이나 시스템 손상을 유발할 수 있습니다. ERA Agent는 이러한 문제를 해결하기 위해 격리된 마이크로 VM(MicroVM) 환경을 제공하여, 개발자가 안심하고 AI 생성 코드를 실행하고 테스트할 수 있게 합니다.
Claude 3.5 Sonnet이나 GPT-4o와 같은 고성능 모델은 복잡한 Python 스크립트를 작성하여 데이터 분석이나 파일 조작을 수행할 수 있습니다. 그러나 rm -rf와 같은 위험한 명령어가 포함되거나, 호스트 시스템의 환경 변수를 덮어쓰는 등의 사고를 방지하기 위해 안전한 실행 환경(Sandbox)이 필수적입니다. 기존의 Docker 컨테이너보다 더 가볍고 빠르며, 상태(State)를 유지할 수 있는 샌드박스 솔루션이 요구되고 있습니다.
flowchart LR
subgraph Local["Local Runner (macOS / Linux)"]
direction TB
Repo["Git / local source"]
CLI["agent CLI (Go binary)"]
Storage["Case-sensitive volume\n(AGENT_STATE_DIR, Buildah, krunvm)"]
VM["MicroVMs via krunvm\n(buildah-backed images)"]
Repo --> CLI
CLI --> VM
CLI --> Storage
Storage --- VM
end
subgraph Remote["Cloudflare Worker/API (optional)"]
direction TB
Worker["ERA Worker + Durable Objects"]
API["REST + WebSocket endpoints"]
Worker --> API
end
CLI <-->|Session control| API
Worker -->|Dispatch jobs / fetch artifacts| VM
일반적으로 개발자들은 격리된 환경을 위해 Docker를 많이 사용합니다. 하지만 Docker는 컨테이너 기반으로, 커널을 공유하기 때문에 악성 코드가 커널 취약점을 통해 호스트로 탈출할(Container Escape) 이론적 위험이 존재합니다. 반면 ERA는 krunvm을 활용한 MicroVM 기술을 사용합니다. 이는 경량화된 가상머신으로, 호스트와 커널 수준에서 완벽하게 격리되면서도 기존 VM보다 훨씬 빠른 부팅 속도를 제공합니다. 또한, ERA는 AI 에이전트의 워크플로우에 최적화되어 있어, 세션 간 패키지 설치 상태를 유지하거나(Persistence) 빠르게 스냅샷을 복원하는 기능에 특화되어 있습니다.
ERA Agent의 주요 기능
ERA Agent는 단순한 격리 환경을 넘어, AI 에이전트 개발 및 배포를 위한 다양한 편의 기능을 제공합니다:
-
강력한 격리 환경 (Isolation): ERA Agent는 krunvm과 buildah를 기반으로 작동합니다. 각 샌드박스 세션은 독립된 MicroVM에서 실행되므로, AI가 악성 코드를 실행하더라도 호스트 시스템(Mac 또는 Linux)에는 아무런 영향을 주지 않습니다.
-
영속성 및 패키지 캐싱 (Persistence): 일반적인 일회용 컨테이너는 실행이 끝나면 설치된 라이브러리가 모두 사라집니다. 하지만 ERA Agent는 특정 세션 내에서 설치된
pip패키지나 파일 시스템의 변경 사항을 유지할 수 있습니다. 이는 AI 에이전트가 "numpy를 설치해줘"라고 요청한 뒤, 다음 대화 턴에서 해당 라이브러리를 계속 사용할 수 있게 하여 대화형 작업의 효율성을 크게 높여줍니다. -
유연한 배포 옵션 (Local & Cloudflare):
-
로컬 실행: 개발 단계에서는 로컬 CLI 도구를 통해 빠르게 샌드박스를 생성하고 테스트할 수 있습니다.
-
Cloudflare Workers 통합: ERA Agent는 Cloudflare Workers와 통합하여 배포할 수 있도록 설계되었습니다. 이를 통해 서버리스 환경에서도 상태가 유지되는(Durable Objects) 샌드박스 환경을 구축할 수 있으며, 엣지(Edge)에서 AI 코드를 안전하게 실행하는 백엔드를 구성할 수 있습니다.
-
ERA Agent 설치
ERA Agent는 복잡한 VM 설정 없이 macOS에서 brew 명령어로 간단하게 설치하고, 직관적인 CLI 명령어로 VM을 제어할 수 있습니다.
# homebrew tap 추가
brew tap binsquare/era-agent-cli
# ERA Agent 설치
brew install binsquare/era-agent-cli/era-agent
# 필수 의존성 설치 (krunvm, buildah)
brew install krunvm buildah
# 설정 스크립트 실행
$(brew --prefix era-agent)/libexec/setup/setup.sh
이 외에도 소스코드로부터 빌드하거나 Cloudflare에 배포할 수 있습니다. 관련 내용은 GitHub 저장소의 문서를 참고해주세요.
ERA Agent 사용법
ERA Agent는 AI 모델이 생성한 코드를 안전하게 실행하기 위한 샌드박스 환경을 제공하며, 이를 제어하는 핵심 도구가 바로 era-agent CLI(Command Line Interface)입니다. 이 도구는 개발자가 로컬 환경에서 손쉽게 MicroVM을 생성하고, 코드를 실행하며, 파일 시스템을 격리된 상태로 관리할 수 있도록 돕습니다. 특히, 복잡한 설정 없이 명령어 몇 줄만으로 Python, Node.js 등의 런타임 환경을 구축할 수 있어 AI 에이전트 개발 워크플로우를 크게 단축시킵니다.
ERA Agent 가 제공하는 기능들은 다음과 같습니다:
VM 수명 주기 관리 (Core Commands)
ERA는 목적에 따라 계속 실행되는 장기 실행 VM(Long-runningVM)과 작업을 마치면 사라지는 임시 VM을 구분하여 사용할 수 있습니다:
-
장기 실행 VM 생성 (Long-running VM): 상태를 유지해야 하는 대화형 에이전트나, 연속적인 작업을 수행해야 할 때 사용합니다. CPU와 메모리 리소스를 명시적으로 제한할 수 있습니다:
# Python 환경, CPU 1코어, 메모리 256MB, 네트워크 허용으로 VM 생성 agent vm create --language python --cpu 1 --mem 256 --network allow_all이후, 생성된 VM의 ID를 이용해 특정 코드를 실행할 수 있습니다:
# 특정 VM(ID) 내부에서 Python 코드 실행 agent vm exec --vm <id> --cmd "python -c 'print(\"hi\")'" -
일회성 임시 작업 실행 (Ephemeral Execution): 간단한 계산이나 로직 검증을 위해 임시 VM을 생성하고, 실행 후 즉시 폐기할 수 있습니다:
# Node.js 환경에서 일회성으로 코드 실행 후 종료 agent vm temp --language javascript --cmd "node -e 'console.log(42)'"
실행 중인 VM 목록을 확인하거나, 리소스를 정리하기 위해서는 다음과 같은 명령어를 사용합니다:
# VM 목록 확인
agent vm list
# 모든 VM 중지
agent vm stop --all
# 모든 VM 및 관련 리소스 정리 (Clean up)
agent vm clean --all
지원 언어 및 커스텀 런타임
ERA는 주요 프로그래밍 언어에 대한 기본 이미지를 제공하며, 필요에 따라 커스텀 이미지를 사용할 수도 있습니다:
-
지원 언어 (
--language):pythonjavascript(Node.js) /typescriptgoruby
-
커스텀 이미지:
--image플래그를 사용하여 사용자가 정의한 베이스 이미지를 지정할 수 있습니다. 이를 통해 특정 라이브러리가 미리 설치된 환경을 구축할 수 있습니다.
고급 설정 (Configuration Highlights)
ERA는 환경 변수를 통해 동작 방식을 세밀하게 제어할 수 있습니다. setup.sh 스크립트 실행 시 적절한 경로가 설정되지만, 수동으로 조정할 수도 있습니다:
-
데이터 저장소 (
AGENT_STATE_DIR): VM의 메타데이터, krunvm 상태 정보, Buildah 스토리지 등이 저장되는 쓰기 가능한 디렉토리입니다. -
로깅 설정 (
AGENT_LOG_LEVEL,AGENT_LOG_FILE): 디버깅을 위해 로그 레벨(debug,info,warn,error)을 조정하고 로그 파일 경로를 지정할 수 있습니다. -
볼륨 마운트 (
AGENT_ENABLE_GUEST_VOLUMES=1): 이 옵션을 활성화하면/in(입력),/out(출력),/persist(영속 데이터)와 같은 디렉토리를 VM에 마운트할 수 있습니다. 이는 AI가 생성한 결과 파일(이미지, CSV 등)을 호스트로 가져오거나, 호스트의 데이터를 VM에 주입하는 고급 워크플로우에 필수적입니다.
더 상세한 CLI 사용법에 대한 내용은 GitHub 저장소의 가이드 문서를 참고해주세요.
ERA 프로젝트 GitHub 저장소
더 읽어보기
-
ScreenEnv: 데스크탑 에이전트를 위한 Docker 기반 풀스택 자동화 환경 (feat. Hugging Face)
-
CodeRunner: LLM의 코드를 안전하게 로컬에서 처리하는 프로젝트 (feat. Apple Container)
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()
