BitMiracle-AI/Dormice

The SQLite of agent sandboxes — self-hosted, E2B-compatible. One machine, sandboxes that live forever, idle costs nothing.

Dormice – 「エージェントサンドボックス界のSQLite」

概要

  • Dormiceは、AIエージェント向けに設計されたセルフホスト型サンドボックスプラットフォームです。単一のマシンやマシンのフリート上で、秒単位の利用料を支払うことなく、多数の隔離された実行環境(サンドボックス)を運用できます。サンドボックスは永続的であり、ホスト上に保持され、アイドル時間が長いほどコストが低減します。

AIにとっての重要性

  • 現代のLLMベースのエージェントは、コードの実行、ファイルの保存、呼び出し間での状態保持を必要とすることがよくあります。パブリックなサンドボックスサービス(例:E2B)はサンドボックスの存在時間に応じて課金されるため、開発者はそれらを使い捨てとして扱うことを余儀なくされます。Dormifyはそのモデルを覆します。ハードウェアを所有し、サンドボックスは永続的に存在し、アイドル状態のサンドボックスはリソースをほとんど消費しません(凍結後は数MBのRAMのみを消費)。

コアコンセプト

  • acquireSandbox(userKey) – 唯一考えるべき操作です。これは冪等です。同じキーは常に同じサンドボックスを返し、存在しなければ作成し、凍結されていれば復帰させ、必要に応じてアーカイブから復元します。
  • ライフサイクル状態 – active → frozen → stopped → archived。各ステップでリソース使用量が削減されます。凍結されたサンドボックスは約50msで再開でき、アーカイブされたものはS3に保存され、必要に応じて復元されます。
  • シングルバイナリデプロイ – 1つのデーモン(Fastify + SQLite台帳)と、オプションのWebコンソール用ゲートウェイのみ。Kubernetesや外部データベース、複雑なオーケストレーションは不要です。
  • E2B互換API – デーモンは2つのURLプレフィックスでE2Bプロトコルを実装しているため、公式のe2b SDKを使用する既存のコードは、URLとトークンを変更するだけで動作します。

主要コンポーネント (monorepo構成)

パッケージ 役割
packages/server コアデーモン:HTTP API、SQLite台帳、ライフサイクルエンジン
packages/gateway フリートの入り口、設定/テンプレートの保存、Webコンソールの提供
packages/sdk ネイティブTypeScriptクライアント (@dormify/sdk)
packages/cli オペレーター用 dor コマンドラインツール
packages/console ブラウザ経由でサンドボックスを管理するReact SPA
e2e 実際の e2b SDK でデーモンを駆動するブラックボックス型E2Eテストスイート
examples すぐに実行可能なデモ(ネイティブSDK、公式 e2b SDK、常駐エージェント)

インストール (ワンライナー)

curl -fsSL https://raw.githubusercontent.com/BitMiracle-AI/Dormice/main/deploy/install.sh | bash
  • ベアメタルのUbuntu/Debian x86_64ホストで動作します(root権限で実行)。スクリプトはDocker、gVisor (runsc)、zstdをインストールし、スワップを設定してsystemdサービスを作成します。
  • インストーラーは冪等です。再実行するとコードがアップグレードされ、dor doctorでインストールが検証されます。
  • 同じフリートに2台目のノードを追加するには、追加のコマンドを1つ実行するだけです (--role node --gateway http://<first>:80)。

クイック使用例 (TypeScript SDK)

import { Dormice } from '@dormice/sdk';
const client = new Dormice({ endpoint: 'http://127.0.0.1:3677', token: process.env.DORMICE_API_TOKEN! });
await client.acquireSandbox('my-agent', { policy: { stopAfterSeconds: null } });
const res = await client.execCommand('my-agent', 'python3 -c "print(6*7)"');
console.log(res.exitCode, res.stdout); // 0 42
await client.writeFiles('my-agent', [{ path: 'notes.txt', content: 'survives freeze and stop' }]);
await client.destroySandbox('my-agent');
  • 同様の操作は curl や dor CLI (dor sandbox ls, dor exec, dor push など) でも実行可能です。

E2B互換性

  • デーモンは /e2b/api および /e2b/envd でE2B APIを公開します。公式の e2b npmパッケージを使用する既存のコードは、以下のように指定できます:
apiUrl: 'http://127.0.0.1:3677/e2b/api',
sandboxUrl: 'http://127.0.0.1:3677/e2b/envd',
apiKey: `e2b_${process.env.DORMICE_API_TOKEN}`
  • 主要なE2B機能(サンドボックス作成、一時停止/再開、ストリーミングI/O付きコマンド実行、PTY、ファイル操作、署名付きアップロード/ダウンロードURL、ディレクトリ監視、ポートプロキシ、メトリクス)はすべてサポートされています。一部の高度な機能(テンプレートビルド、xattrメタデータ)は意図的に実装されておらず、明示的な unimplemented エラーを返します。

Webコンソール

  • APIトークン(httpOnlyクッキーとしてのみ保存)でログイン後、http://127.0.0.1:3677/console からアクセス可能です。
  • ライブのサンドボックス状態を表示し、作成/取得、破棄、ファイルのプッシュ/プルが可能です。また、SDK、CLI、E2Bクライアント用のコピー&ペースト用スニペットも提供します。
  • SSHトンネルまたはリバースプロキシ(Caddyの例を提供)経由でローカルからアクセスすることを想定しています。ストリーミング出力は、バッファリングを無効にするプロキシ(flush_interval -1)を使用した場合のみ機能します。

コールドアーカイブ (オプションのS3ストレージ)

  • DORMICE_S3_* 環境変数が設定されている場合、設定された期間停止されたサンドボックスはtar-zstd圧縮され、S3互換バケットにアップロードされます。
  • 次回 acquireSandbox が呼び出されると、デーモンは restoring ステータスを返し、アーカイブがダウンロードおよび解凍されるまで進捗をストリーミングします。
  • S3が設定されていない場合、サンドボックスは stopped 状態で停止し、アーカイブはされません。

Dormiceを使用すべきでない場合

  • マシンやリージョン間を移動するサンドボックスが必要な場合 – Dormiceはサンドボックスを作成したノードに固定します。
  • SLA付きのフルマネージドSaaSを好む場合 – それはホスト型のE2B製品です。
  • セキュリティモデルでハードウェアレベルの隔離(KVM/Firecracker)が必要な場合 – DormiceはDocker + gVisor(ユーザースペースカーネル)を使用して高速な凍結を実現しています。
  • ワークロードがLinux以外(例:Windowsバイナリ)の場合。

開発ワークフロー

pnpm install
pnpm build      # デーモン、SDK、CLI、コンソールのビルド
pnpm typecheck
pnpm lint
pnpm test        # ビルドされたデーモンに対してe2eスイートを実行
  • リポジトリはpnpm monorepoを使用しており、すべてのパッケージは packages/shared のプロトコルスキーマ (zod) を共有しています。

コントリビューションモデル

  • コードはコアチームが保守します。外部からのIssue報告は歓迎しますが、プルリクエストは受け付けていません。このポリシーは、すでに本番環境で稼働しているフリートの安定性を保護するためのものです。

ライセンス

  • Apache-2.0。

結論: Dormiceは、永続的な状態と低いアイドルコストを必要とするAIエージェント向けに調整された、低コストでセルフホスト可能なサンドボックス環境を提供します。E2B APIを模倣しているため、既存のエージェントコードは最小限の変更で自社所有のプラットフォームに切り替えることができ、同時に人間が操作するためのWeb UIとCLIも提供します。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト