
# 機能ベースのWASMランタイム:CPU、メモリ、時間、I/O、ファイルシステムの制限を強制し、信頼できないAI生成コードを実行するためのもの。サブミリ秒のウォーム実行、署名付き実行記録、統合のためのMCPサーバーを提供します。
明示的なCPU、メモリ、時間、I/O、ファイルシステムの制限を備えた、高速でケイパビリティベースのWASM実行環境 — 署名付き実行記録によるサブミリ秒のウォーム実行。
AIエージェント、MCPツール、プラグイン、コードインタープリター、その他の信頼できないワークロード向けに構築されています。
AIエージェントは、コードの作成と実行、ツールの呼び出し、プラグインの実行をますます必要としています。それが安全かどうかを決定する問いは次のとおりです:
ホスト、認証情報、ネットワーク、または無制限の計算リソースへのアクセスをコードに与えずに、エージェントに信頼できないコードを実行させるにはどうすればよいか?
AI Agent ──▶ Tool / MCP ──▶ Ephemora Cell ──▶ WASM ──▶ bounded result
Ephemora Cell は、まさにその仕事のための、小さなケイパビリティベースのWASM実行ランタイムです。エージェントフレームワークではなく、既存のエージェントスタック、MCPサーバー、プラグインシステム、またはアプリケーションの下に位置する実行プリミティブです。
pip install ephemora-cell
# 最初の分離モジュールを実行(リポジトリのexamplesを取得するか、任意の.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 レポート、そして攻撃モジュール(exploit.wasm)がWASIインポートレイヤーでブロックされる様子。すべてのフレームを検証してください: コマンドはクローンから示されたとおりに実行されます。

同じ8つの攻撃プリミティブを、1回の実行でライブ計測(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 を参照。
1つのエージェントアクション。1つの制限付き実行。1つの制御された結果。
作成者: Michael Soppa
| リソース | デフォルト |
|---|
| WASMメモリ | 128 MB(Store.set_limits) |
| フューエル / CPU予算 | 1,000,000(反復あたり約13フューエル、R² = 1.000) |
| ウォールクロックタイムアウト | 30秒(エポック割り込み) |
| キャプチャされる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は存在しない) |