
# 기능 기반 WASM 런타임 강제된 CPU, 메모리, 시간, I/O 및 파일시스템 제한을 통해 신뢰할 수 없는 AI 생성 코드를 실행하기 위한 기능 기반 WASM 런타임입니다. 서브 밀리초 수준의 웜 실행, 서명된 실행 기록, 그리고 통합을 위한 MCP 서버를 제공합니다.
명시적인 CPU, 메모리, 시간, I/O 및 파일시스템 제한을 갖춘 빠르고 기능 기반(capability-based)의 WASM 실행 — 서명된 실행 기록을 포함한 서브 밀리초 웜 실행.
AI 에이전트, MCP 도구, 플러그인, 코드 인터프리터 및 기타 신뢰할 수 없는 워크로드를 위해 설계되었습니다.
AI 에이전트는 점점 더 코드를 작성하고 실행하며, 도구를 호출하고, 플러그인을 실행해야 합니다. 이것이 안전한지 여부를 결정하는 질문은 다음과 같습니다:
호스트, 자격 증명, 네트워크 또는 무제한 컴퓨팅에 대한 접근 권한을 부여하지 않고 에이전트가 신뢰할 수 없는 코드를 실행하도록 하려면 어떻게 해야 합니까?
AI Agent ──▶ Tool / MCP ──▶ Ephemora Cell ──▶ WASM ──▶ bounded result
Ephemora Cell은 바로 그 작업을 위한 작고 기능 기반의 WASM 실행 런타임입니다: 에이전트 프레임워크가 아닌 실행 프리미티브로, 기존 에이전트 스택, MCP 서버, 플러그인 시스템 또는 애플리케이션 아래에 위치합니다.
pip install ephemora-cell
# 첫 번째 격리 모듈 실행 (저장소의 예제를 가져오거나 .wasm 파일을 사용):
git clone https://github.com/MichaelS1011/ephemora-cell.git
ephemora-cell run ephemora-cell/examples/hello.wasm
Hello from Ephemora Cell!
from ephemora_cell import run_wasm
result = run_wasm("my_module.wasm")
print(result.stdout) # 캡처된 출력 (10 KB 제한)
print(result.status.name) # SUCCESS
print(result.elapsed_ms) # 벽시계 시간
print(result.fuel_consumed) # 실제 사용된 컴퓨팅

실제 CLI 세션: 설치, 첫 실행, 보안 기준선이 포함된 기계 판독 가능한 --json 보고서, 그리고 WASI 임포트 계층에서 차단된 공격 모듈(exploit.wasm). 모든 프레임을 확인하세요: 명령은 클론에서 표시된 대로 실행됩니다.

동일한 8가지 공격 프리미티브를 한 번의 실행에서 실시간으로 측정(2026-09-02): 기본 python:3.12-slim 컨테이너는 모든 공격을 통과시키고(0/8 차단), Ephemora Cell 경계는 8개 모두 차단합니다(8/8). 두 열을 재현하려면:
python3 assets/demo_attack_probe.py # 왼쪽 열 -> 0/8 차단 (기본 Docker)
python benchmarks/verify_8_vectors.py # 오른쪽 열 -> 8/8 차단 (Ephemora Cell)
에이전트가 생성한 코드는 애플리케이션 코드와 다릅니다: 버그가 있을 수 있고, 계산적으로 무한할 수 있으며, 예기치 않게 비용이 많이 들거나 — 적대적일 수 있습니다. 런타임은 경계를 문서화하는 것이 아니라 강제해야 합니다. 모든 Cell 실행은 다음을 수행합니다:
모든 실행은 명시적 제한 하에 수행됩니다 — 옵트인 보안 없음:
추가 제어: I/O 예산 (io_cpu_seconds=2.0 / io_budget_bytes=64 MiB — 게스트 컴퓨팅뿐만 아니라 호스트 작업에 대한 벽), 이중 ABI (WASI Preview1 + WASI 0.2 컴포넌트, 옵트인), memory64 옵트인, GC 힙 선언 상한 (보안 기준선에 기록됨; 연료가 유효한 경계로 유지됨), 명명된 상태 (세션당 64개 항목 · 256 KiB · 1 MiB), 및 이그레스 사이드카 참조 중재자 (허용 목록 검증된 호스트 측 API 호출 — docs/egress_patterns.md).
게스트는 명시적으로 제공된 기능만 받습니다. 8가지 공격 클래스의 실시간 검증 (benchmarks/verify_8_vectors.py):
결과: 8/8 공격 벡터 차단 (실시간 검증); Docker 기준선은 실행별로 실시간 측정되며 — 절대 하드코딩되지 않습니다.
이것은 게스트 소프트웨어가 신뢰할 수 있다는 주장이 아닌 실행 경계입니다. Cell은 모듈이 악성인지 올바른지 평가하지 않습니다 — 게스트는 부여된 예산 내에서 여전히 잘못된 동작을 할 수 있습니다. 실행 경로는 실질적으로 다릅니다: 기본값은 게스트를 프로세스 내부에서 실행합니다. run_isolated()은 OS 수준 벽(rlimits, 디스크 할당량, I/O CPU 워치독, 하드 킬)을 추가합니다.
전체 세부 정보: SECURITY.md (정책, 실행 경로 제어 매트릭스, 알려진 제한 사항) · docs/threat-model.md (공격자 모델, 신뢰 경계, 잔여 위험) · docs/security_posture.md (arXiv 2509.11242 평가, 연료 경계, 관련 연구).
컨테이너 규모의 시작 비용 없이 모든 실행을 샌드박싱하세요.
실시간 콜드 스타트 비교 (2026-08-30, 동일 Mac): docker run python:3.12-slim 171 ms vs Cell 0.40 ms = 427× — 이는 이 벤치마크 워크로드에 대한 컨테이너 콜드 스타트 대 호출된 WASM 비교이며, WASM이 항상 Docker보다 빠르다는 일반적인 주장이 아닙니다.
재현: python benchmarks/pool_vs_budget.py · python benchmarks/competitive_benchmark.py (measured:true가 포함된 원시 결과는 benchmarks/results/에 커밋됨). 에이전트 워크로드 및 추가 정보: docs/performance.md.
Cell은 .wasm을 실행합니다 — 소스 언어를 알지 못합니다. 측정된 마찰 매트릭스에서 실행 가능한 오류 힌트가 포함된 원클릭 빌드:
ephemora-cell build tool.rs # → tool.wasm → 실행
5개 컴파일 언어 게이트 모두 모든 푸시에서 검증됩니다 (.github/workflows/ci.yml). 플랫폼: macOS (Apple M5) ✅ · Ubuntu 24.04 ✅ · DGX Spark GB10 ✅
AI 생성 코드 — 명시적 제한으로 에이전트가 생성한 도구 실행:
result = run_wasm(
"llm_generated.wasm",
max_fuel=200_000,
timeout_seconds=5,
allow_dirs=("/input", "/output")
)
플러그인 시스템 — 제한 없는 호스트 접근 권한을 부여하지 않고 사용자 업로드 플러그인 수락:
config = WASIConfig(allow_dirs=("/data",), max_fuel=500_000)
result = WASISandbox(config=config).run("user_plugin.wasm")
추가 문서: 서버리스/엣지 워크로드, 에어갭 검증, WASI 0.2 컴포넌트, FastAPI 통합 — docs/recipes.md. 에이전트 프레임워크 통합 테스트(LangGraph, CrewAI, AutoGen, OpenAI Agents SDK, Semantic Kernel, Hermes, NemoClaw)는 integration/에 있습니다.
Ephemora Cell은 종속성 없는 MCP stdio 서버를 제공하며, 그 도구는 Cell 내부에서 실행되는 WASM 모듈입니다 — 결정성, 연료 계량, 출력 상한, 네트워크 없음, SEP-2787 준비 서명 실행 기록:
pip install ephemora-cell
ephemora-cell-mcp # 번들된 echo 도구 포함; 자체 도구 등록: --tools-dir ./tools
docs/mcp.md 및 docs/comparison-mcp-servers.md 참조.
flowchart TB
guest["Guest WASM Module<br/>(isolated)"]
subgraph sandbox["WASI Sandbox — capability-based isolation"]
fuel["Fuel Meter<br/>~13 fuel/iteration"]
mem["Memory Limit<br/>128 MB max"]
timeout["Timeout Guard<br/>epoch interruption"]
syscalls["WASI Preview1 — capability-based,<br/>preopened dirs only<br/>fd_read · fd_write · path_open · clock_time_get<br/>proc_exit · environ_get · random_get"]
end
blocked["Blocked by design:<br/>exec · fork · socket · /dev · /proc · /sys · threads"]
guest --> syscalls
fuel -.-> sandbox
mem -.-> sandbox
timeout -.-> sandbox
sandbox -.-> blocked기본 API는 의도적으로 단순합니다: execute(wasm) → result. 모든 실행은 구조화되고 감사 가능한 정보를 반환합니다:
result.status # SUCCESS | ERROR | TIMEOUT | FUEL_EXHAUSTED | MEMORY_EXCEEDED
result.exit_code
result.stdout # 10 KB 제한
result.stderr
result.elapsed_ms
result.fuel_consumed
이는 코드 실행뿐만 아니라 감사, 정책 적용 및 리소스 회계에 적합한 실행을 만듭니다. 전체 CLI (run, security_baseline이 포함된 --json, inspect, benchmark, build, --profile analytical 포함 프로필)는 CLI 문서 및 ephemora-cell --help에 있습니다.
Cell은: WASM 실행 프리미티브 · 기능 기반 격리 계층 · 리소스 제한 런타임 · 임베드 가능한 Python 라이브러리 · CLI · MCP 실행 계층입니다.
Cell은 아닙니다: 에이전트 프레임워크 · LLM · 코드 생성 시스템 · 악성코드 탐지기 · 전체 VM · 모든 컨테이너 워크로드의 대체품.
목표는 좁습니다: 신뢰할 수 없는 실행을 충분히 저렴하고 충분히 제어되게 만들어 애플리케이션이 기본적으로 안전하게 수행할 수 있게 하는 것입니다.
379개 테스트 · 85% 문장 커버리지 (Cell + MCP, 게이트 80%) · 8/8 공격 벡터 차단 · 모든 푸시에서 CI 강제 (테스트, 커버리지, pip-audit, SBOM, bandit) — .github/workflows/ci.yml 참조.
SECURITY.md — 보안 정책 및 제어 · docs/threat-model.md — 신뢰 경계 · docs/security_posture.md — 공격 표면 검증 · docs/performance.md — 벤치마크 · docs/mcp.md — MCP 서버 · docs/recipes.md — 사용 패턴 · docs/languages.md — 언어 지원 · CHANGELOG.md — 변경 사항
Ephemora Cell은 오픈소스 격리 계층입니다 (Apache 2.0, 독립형 — Ephemora 종속성 없음). Ephemora 엔터프라이즈 에디션은 프로덕션 및 규제 배포를 위해 Cell의 격리를 기반으로 구축됩니다. Cell은 격리에 완전하며, 엔터프라이즈 에디션은 운영에 완전합니다 — 그 대화가 필요할 때는 docs/enterprise.md를 참조하세요.
Apache 2.0 — LICENSE 참조.
하나의 에이전트 작업. 하나의 제한된 실행. 하나의 제어된 결과.
Michael Soppa 제작.
| 리소스 | 기본값 |
|---|
| WASM 메모리 | 128 MB (Store.set_limits) |
| 연료 / CPU 예산 | 1,000,000 (반복당 ~13 연료, R² = 1.000) |
| 벽시계 시간 초과 | 30 s (epoch 중단) |
| 캡처된 stdout/stderr | 10 KB |
| 네트워크 | 비활성화 — WASI에 소켓 API 없음 |
| 호스트 파일시스템 | 기본적으로 거부됨; 14개의 위험한 디렉터리 차단 (/dev, /proc, /sys, …) |
| 프로세스 exec / fork | WASI에서 사용 불가 |
| 스레딩 | 비활성화 (wasm_threads=False) |
| 공격 클래스 | Docker | Ephemora Cell |
|---|
셸 (os.system) / fork / 네트워크 소켓 | 허용됨 | 차단됨 — API가 WASI에 존재하지 않음 |
fsync (os.fsync) | 허용됨 | 차단됨 — 임포트 수준 거부 |
호스트 파일시스템 (/etc/passwd) | 허용됨 | 차단됨 — preopen 기본 거부 |
| 심볼릭 링크 탈출 | 허용됨 | 차단됨 — 위험한 디렉터리 필터 |
| 멀티스레딩 | 허용됨 | 차단됨 — wasm_threads=False |
| 환경 변수 접근 | 허용됨 | 차단됨 — allow_env로 제어 |
시나리오 (n=1000, hello.wasm, Mac M5, wasmtime 47.0.1) | 벽 중앙값 | 벽 p95 | 게스트 중앙값 |
|---|
풀링 엔진 (io_budget_bytes=None, 신뢰할 수 있는 실행) | 0.46 ms | 0.60 ms | 0.16 ms |
기본 경로 (io_budget_bytes=64 MiB, 실행별 엔진) | 0.92 ms | 1.26 ms | 0.60 ms |
| 언어 | 컴파일러 | 검증됨 |
|---|
| Rust | cargo build --target wasm32-wasip1 | ✅ 컴파일 + 실행 (CI) |
| Go | GOOS=wasip1 GOARCH=wasm go build | ✅ 컴파일 + 실행 (CI) |
| C | wasi-sdk clang --target=wasm32-wasip1 | ✅ 컴파일 + 실행 (CI) |
| AssemblyScript | asc --runtime stub | ✅ 컴파일 + 실행 (CI) |
| Zig | zig build-exe -target wasm32-wasi | ✅ 컴파일 + 실행 (CI) |
| Python | — | 안내: wasi-python 인터프리터에서 실행 (AOT 없음) |