
Возможностно-ориентированная WASM-среда выполнения для запуска непроверенного кода, сгенерированного ИИ, с принудительными ограничениями на CPU, память, время, ввод-вывод и файловую систему. Обеспечивает тёплый запуск за доли миллисекунды, подписанные записи выполнения и MCP-сервер для интеграции.
Быстрое исполнение WASM на основе возможностей с явными ограничениями CPU, памяти, времени, ввода-вывода и файловой системы — тёплое исполнение за субмиллисекунды с подписанными записями исполнения.
Создан для ИИ-агентов, MCP-инструментов, плагинов, интерпретаторов кода и других недоверенных рабочих нагрузок.
ИИ-агентам всё чаще требуется писать и исполнять код, вызывать инструменты и запускать плагины. Вопрос, который определяет, безопасно ли это:
Как позволить агенту исполнять недоверенный код, не давая этому коду доступа к вашему хосту, вашим учётным данным, вашей сети или неограниченным вычислительным ресурсам?
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 КБ)
print(result.status.name) # SUCCESS
print(result.elapsed_ms) # время выполнения
print(result.fuel_consumed) # фактически использованные вычисления

Реальная сессия CLI: установка, первый запуск, машиночитаемый отчёт --json с базовым уровнем безопасности и атакующий модуль (exploit.wasm), заблокированный на уровне импорта WASI. Проверьте каждый кадр: команды выполняются так, как показано, из клона.

Те же восемь атакующих примитивов, измеренные в реальном времени за один запуск (2026-09-02): стандартный контейнер python:3.12-slim пропускает каждый из них (0/8 заблокировано), граница Ephemora Cell блокирует все восемь (8/8). Воспроизведите обе колонки:
python3 assets/demo_attack_probe.py # левая колонка -> 0/8 заблокировано (стандартный Docker)
python benchmarks/verify_8_vectors.py # правая колонка -> 8/8 заблокировано (Ephemora Cell)
Код, сгенерированный агентом, отличается от кода приложения: он может содержать ошибки, быть вычислительно неограниченным, неожиданно дорогим — или враждебным. Среда исполнения должна принудительно обеспечивать границы, а не документировать их. Каждый запуск Cell гарантирует:
Каждое исполнение выполняется с явными ограничениями — безопасность не по желанию:
Дополнительные средства управления: бюджеты ввода-вывода (io_cpu_seconds=2.0 / io_budget_bytes=64 МиБ — стены для работы хоста, а не только гостевых вычислений), двойной ABI (WASI Preview1 + компоненты WASI 0.2, по желанию), memory64 по желанию, объявленный лимит GC-кучи (записывается в базовый уровень безопасности; топливо остаётся эффективной границей), именованное состояние (64 записи · 256 КиБ · 1 МиБ на сессию) и sidecar-медиатор исходящего трафика (проверяемый по белому списку посредник для API-вызовов на стороне хоста — docs/egress_patterns.md).
Гость получает только те возможности, которые явно ему предоставлены. Живая проверка восьми классов атак (benchmarks/verify_8_vectors.py):
Результат: 8/8 векторов атак заблокированы (проверено в реальном времени); базовые показатели Docker измеряются в реальном времени при каждом запуске — никогда не захардкожены.
Это граница исполнения, а не утверждение, что гостевому ПО можно доверять. Cell не оценивает, является ли модуль вредоносным или корректным — гость всё равно может вести себя некорректно в пределах предоставленных ему бюджетов. Пути исполнения существенно различаются: по умолчанию гость выполняется внутри вашего процесса; run_isolated() добавляет стены на уровне ОС (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 мс против Cell 0.40 мс = 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 → запустить его
Все пять шлюзов компилируемых языков проверяются при каждом push (.github/workflows/ci.yml). Платформы: macOS (Apple M5) ✅ · Ubuntu 24.04 ✅ · DGX Spark GB10 ✅
Код, сгенерированный ИИ — запуск инструментов, созданных агентом, с явными ограничениями:
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")
Также задокументировано: serverless/edge-нагрузки, проверка в изолированной среде, компоненты WASI 0.2, интеграция с FastAPI — docs/recipes.md. Интеграционные тесты агентных фреймворков (LangGraph, CrewAI, AutoGen, OpenAI Agents SDK, Semantic Kernel, Hermes, NemoClaw) находятся в integration/.
Ephemora Cell поставляется с MCP stdio-сервером без зависимостей, чьи инструменты представляют собой WASM-модули, исполняемые внутри Cell — детерминизм, учёт топлива, ограничение вывода, отсутствие сети, готовые к 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 КБ
result.stderr
result.elapsed_ms
result.fuel_consumed
Это делает исполнение пригодным для аудита, обеспечения соблюдения политик и учёта ресурсов — а не только для запуска кода. Полный CLI (run, --json с security_baseline, 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 при каждом push (тесты, покрытие, 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 МБ (Store.set_limits) |
| Бюджет топлива / CPU | 1 000 000 (~13 топлива/итерация, R² = 1.000) |
| Тайм-аут по настенным часам | 30 с (прерывание по эпохе) |
| Захваченные stdout/stderr | 10 КБ |
| Сеть | отключена — нет socket API в WASI |
| Файловая система хоста | запрещена по умолчанию; 14 опасных каталогов заблокированы (/dev, /proc, /sys, …) |
| Exec / fork процессов | недоступны в WASI |
| Потоки | отключены (wasm_threads=False) |
| Класс атаки | Docker | Ephemora Cell |
|---|
Shell (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 мс | 0.60 мс | 0.16 мс |
Путь по умолчанию (io_budget_bytes=64 МиБ, движок на запуск) | 0.92 мс | 1.26 мс | 0.60 мс |
| Язык | Компилятор | Проверено |
|---|
| 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 не существует) |