
Kubernetes上のAIエージェント向けに、ミリ秒単位でmicroVMサンドボックスをフォークする仕組み。メモリスナップショットからミリ秒単位で復元するFirecracker VMを利用し、実行中のVMをN個のコピーにフォークして、永続的かつバージョン管理されたワークスペースを保持します。セルフホスト可能な宣言的CRD。
AIエージェントのための、分離・フォーク可能なコンピュータ。
Kubernetes上でミリ秒単位のmicroVMサンドボックスフォーク: 実行中のVMを並列試行へフォークし、数十ミリ秒でメモリから復元します。
クイックスタート . ドキュメント . 機能 . 比較 . コントリビューション . コミュニティ
Mitosは、すべてのAIエージェントにそれぞれ独立したコンピュータを与えます。これはハードウェア分離されたFirecracker microVMで、信頼できないコードを安全に実行でき、さらに実行中にフォークできます。ライブのコピーオンライトフォークにより、1つのウォームVMを数十ミリ秒でN個の独立した兄弟VMへ分岐できるため、エージェントは共有された準備済みの状態から多くの試行を並行して探索でき、支払いは各兄弟が変更したページ分だけです。
自前のKubernetesクラスタ上で今すぐ実行でき、エージェントのコード・データ・認証情報がインフラストラクチャの外に出ることはありません。あるいは、ノード管理が不要なホスト型APIを利用することもできます。私たちの知る限り、オープンソースで、セルフホスト可能で、Kubernetesネイティブであり、実行中のVMのライブフォークをすべて同時に実現できるランタイムは、これが唯一です。
pip install mitos-run export MITOS_API_KEY=sk-... # a key from https://mitos.run; no Kubernetes required
SDKはデフォルトでホスト型エンドポイントを使用します。`MITOS_BASE_URL`を設定することで、同じコードを独自のクラスタやスタンドアロンサンドボックスサーバーに対して実行できます。キーは引数または`MITOS_API_KEY`から解決され、ログに記録されることはありません。
### 2. サンドボックスを作成してコードを実行する```python
import mitos
sb = mitos.create("python") # Ready microVM sandbox (~27 ms warm-claim)
print(sb.exec("echo hello").stdout) # hello
# Files and a stateful code interpreter hang off the same flat handle.
sb.files.write("/workspace/plan.txt", "draft")
print(sb.run_code("import math; math.sqrt(144)").text) # 12.0
完全なリファレンス: mitos.run/docs/quickstart.
a, b = sb.fork(2) a.exec("echo conservative > /workspace/plan.txt") b.exec("echo aggressive > /workspace/plan.txt")
sb.terminate()
The async client mirrors the same surface: `await mitos.aio.create("python")` returns an `AsyncDirectSandbox` with the same `exec` / `run_code` / `files` / `create_pty` / `fork` / `terminate`.
Blocking `exec` and `run_code` work on the husk default. Streaming exec (`sb.exec(..., on_stdout=...)`), background processes (`sb.exec_background(...)`), and the interactive PTY (`sb.create_pty()`) run on the engine path today and are being brought to the husk default; `run_code` returns a fail-closed `KernelUnavailable` until the kernel ships in the husk base image.
### 好きな方法で実行する
同じエンジン、同じAPI、より多くの入り口。詳細は[ドキュメント](https://mitos.run/docs)をワンクリックで確認できます。
**すべての言語、2つのモード。** 各SDKは**ダイレクトモード**(スタンドアロンまたはホステッド)で同じサンドボックスサーバーREST APIを話し、各SDKには**クラスターモード**(Kubernetes APIを通じて`mitos.run/v1` CRDを駆動する`AgentRun`)もあります。デフォルトプールの命名は、6つすべてでバイト単位で同一です。
| Language | Install | Direct | Cluster | SDK docs |
|---|---|---|---|---|
| Python | `pip install mitos-run` | sync + async | `AgentRun` | [sdk/python](https://github.com/mitos-run/mitos/blob/HEAD/sdk/python) |
| TypeScript | `npm i @mitos/sdk` | yes | `AgentRun` | [sdk/typescript](https://github.com/mitos-run/mitos/blob/HEAD/sdk/typescript/README.md) |
| Go | `go get github.com/mitos-run/mitos/sdk/go` | typed, `errors.Is`-friendly | `AgentRun` | [sdk/go](https://github.com/mitos-run/mitos/blob/HEAD/sdk/go/README.md) |
| Ruby | gem (stdlib only) | yes | `AgentRun` | [sdk/ruby](https://github.com/mitos-run/mitos/blob/HEAD/sdk/ruby/README.md) |
| Rust | crate (blocking) | yes | `AgentRun` | [sdk/rust](https://github.com/mitos-run/mitos/blob/HEAD/sdk/rust/README.md) |
| Java | JDK 17 (stdlib only) | yes | `AgentRun` | [sdk/java](https://github.com/mitos-run/mitos/blob/HEAD/sdk/java/README.md) |
Go SDKは独自のネストモジュール(`github.com/mitos-run/mitos/sdk/go`)で提供されるため、インポートしてもコントローラーがビルドに取り込まれることはありません。
**セルフホスティング?同じコード。** Helmチャートはホステッドサービスが実行するのと同じゲートウェイをデプロイするため、上記のクイックスタートは自分のクラスターに対してそのまま動作します。`MITOS_BASE_URL`を自分のゲートウェイに向けて、それ以外はすべてそのままにしてください。ホステッドとセルフホストは単一のエクスペリエンスであり、異なるのはURLと誰が運用するかだけです。
**Kubernetesネイティブな制御、必要なときに。** プールを宣言的に管理するプラットフォームチーム(GitOps、RBACスコープの自動化、オペレーター)向けに、2層の`AgentRun`パスはゲートウェイをスキップし、Kubernetes APIを通じて`mitos.run/v1` CRDを直接駆動します:```python
from mitos import AgentRun
c = AgentRun() # kubeconfig or in-cluster; autodetected
sb = c.sandbox("python", ready=True) # claims a warm sandbox, waits Ready
print(sb.exec("python -c 'print(40 + 2)'").stdout) # 42
fork_a, fork_b = sb.fork(2) # fork against shared warmed state
sb.terminate()
c.sandbox("python") は、デフォルトプールが無い場合にそれを遅延作成します。既存のプールを使用するには pool="my-pool" を渡します。エラーは AgentRunError(code, cause, remediation) を発生させます。AsyncAgentRun はホットパスをミラーリングし、WebSocket 上に create_pty() を追加します。
CLI と MCP。
mitos CLI は、ホスト型ゲートウェイ(クラスター不要)または自身の Kubernetes クラスターに対して動作します:```bash
go install mitos.run/mitos/cmd/mitos@latest # requires a Go toolchain
export MITOS_API_KEY=sk-... mitos sandbox create --pool python # create from the python template mitos sandbox exec "python3 -c 'print(42)'" mitos fork --count 2 # fork into 2 independent siblings mitos sandbox ls mitos sandbox terminate
mitos sandbox create --pool dev-default mitos run echo hello --pool dev-default
`mitos dev up` は、モックエンジン上でワンコマンドのローカルコントロールプレーンを起動し、
クラスターモード開発を実現します。MCPサーバー(`mitos-mcp`)はサンドボックスをMCP
ツールとして公開し、MCPに対応した任意のエージェントが利用できます。[Agent Skill](https://github.com/mitos-run/mitos/blob/HEAD/skills/mitos/SKILL.md)
は、スキル対応エージェントにワークフローを教えます。完全なインストールマトリクス(スクリプト、
Homebrew、deb/rpm、scoop/winget、チェックサム)は、
[mitos.run/docs/install](https://mitos.run/docs/install) にあります。
**すでに使っているエージェントにそのまま組み込めます。** 各アダプターは、同じネイティブ操作(`exec`、`run_code`、`files`、`fork`)の上に重ねる薄いシムであり、フレームワークパッケージへのハード依存はありません。対応先は、Claude Code と opencode(MCPサーバー+エージェントスキル)、OpenAI Agents SDK、Claude Agent SDK、LangChain / deepagents、Vercel AI SDK / Pydantic AI / AutoGen / LlamaIndex(標準MCP)、そして [E2B](https://mitos.run/docs/migrating-from-e2b) または [Daytona](https://mitos.run/docs/migrating-from-daytona) クラウドから移行するチーム向けの「インポートを1つ変更する」移行シムです。[統合ハブ](https://github.com/mitos-run/mitos/blob/HEAD/docs/integrations/README.md) にはすべての経路が索引付けされています。
**オペレーターをインストールします。**```bash
kubectl apply -k deploy/
自己完結型のkustomizeベースは、CRD、コントローラ(huskモード)、forkd DaemonSet、/dev/kvm デバイスプラグイン、およびPKIブートストラップをインストールし、手動パッチなしで実際のKVMノードに適用されます。HelmチャートはGHCR上のOCIレジストリに公開されています: helm install mitos oci://ghcr.io/mitos-run/charts/mitos --version 1.42.1; deploy/charts/mitos を参照してください。次に、ウォームプールを宣言し、source.fromSandbox がライブセッションを指す Sandbox を使ってそこからフォークします (テンプレート):```yaml
apiVersion: mitos.run/v1
kind: SandboxPool
metadata:
name: python-agent-pool
spec:
template:
image: python:3.12-slim
init: ["pip install numpy pandas requests"]
resources: { cpu: "1", memory: "512Mi" }
volumes:
- { name: workspace, size: 5Gi, forkPolicy: Snapshot }
warm: { min: 10 }
**動作環境。** 唯一のノード要件は `/dev/kvm` とラベル `mitos.run/kvm=true` だけです。そのためmitosは、ベアメタルまたはネスト仮想化KVMノードを持つ任意のKubernetesクラスターにインストールできます。
| プラットフォーム | KVMノード | ガイド |
|---|---|---|
| ベアメタル(Talos、Hetzner) | ネイティブ `/dev/kvm` | [docs/platforms/talos-hetzner.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/platforms/talos-hetzner.md)(第一級のリファレンス) |
| AWS / EKS | `*.metal` またはネスト仮想化ノードグループ | 現在は汎用チャート。クラウド別ガイドは issue [#919](https://github.com/mitos-run/mitos/issues/919) |
| GKE | ネスト仮想化ノードプール | 現在は汎用チャート。クラウド別ガイドは [#919](https://github.com/mitos-run/mitos/issues/919) |
| Azure / AKS | ネスト仮想化対応VMサイズ | 現在は汎用チャート。クラウド別ガイドは [#919](https://github.com/mitos-run/mitos/issues/919) |
チャートとCRDはすべての環境で同一です。異なるのは `/dev/kvm` を提供するノードプールだけです。
## なぜ Mitos か
エージェントハーネスには、エージェントがファイルの読み書き、パッケージのインストール、信頼できないコードの実行を行うための、高速で分離された環境が必要です。既存の選択肢はすべてトレードオフを強要します。所有権なしの速度、フォークなしの分離、ウォームスタートなしのKubernetesネイティブ、あるいは他社クラウドに閉じ込められた永続性、というように。
- **実行中のVMをライブフォーク。** 稼働中のマイクロVMをN方向コピーオンライトでフォークします。子VMは書き込むまで親のメモリページを共有するため、各フォークはウォームで準備済みの環境に着地します。1つのエージェントを多数の並行試行に分岐させられます。
- **約27msのウォームクレーム有効化。** FirecrackerマイクロVMはメモリスナップショットから数十ミリ秒クラスで復元されます。ベアメタル参照ノードではP50約27msで、[`bench/husk-activate-latency.sh`](https://github.com/mitos-run/mitos/blob/HEAD/bench/husk-activate-latency.sh) から再現できます。
- **オープンソース、セルフホスト可能、Kubernetesネイティブ。** 私たちの知る限り、この3つをすべて兼ね備えた唯一のランタイムです。宣言型CRD(`mitos.run`)を通じてライフサイクル全体を操作します。
実行方法は2つあります。
- **セルフホスト(現在):** KVMノードを持つ任意のKubernetesクラスター。データが自社インフラから出ることはありません。ベアメタル(Talos + Hetzner)が第一級のリファレンスプラットフォームです。
- **ホステッド(進行中):** 私たちが運用する同じエンジンとAPIで、ノード管理なしでミリ秒を求めるチーム向けです。
> 2つのエンジンパスが存在します。**huskポッドネイティブパスがデフォルト**です。各VMは自前の非特権ポッドで実行され、ソースのhuskポッドが実行中のVMをスナップショットするため、N個の子ポッドがCoW経由でそれを復元します。**raw-forkdパス**は、forkdのインプロセスエンジンでフォークを実行します。ここに記載の内容は、明示的に `engine path` と記載されていない限り、すべてhuskデフォルトで動作します。
サンドボックスはポッドではありません。PodスコープのKubernetesメカニズム(NetworkPolicy、ResourceQuota、PSA)が管理するのはhuskポッドであり、マイクロVM内のワークロードではありません。サンドボックスはVMであってhuskポッドではなく、同等の機能を提供する場合は、それを私たちのものとして文書化しています。完全なclaim / execデータパスとコンポーネント図は [mitos.run/docs/architecture](https://mitos.run/docs/architecture) にあります。
## ベンチマーク
ここに記載されているすべての数値は、実際のKVMハードウェア上で [`bench/`](https://github.com/mitos-run/mitos/blob/HEAD/bench/) から再現可能です。読者が再生成できないものは一切公開されていません(このプロジェクトの未検証主張禁止ルール)。各行は、測定対象と、それを再現する正確なコマンドを示しています。実行ごとの完全なデータとハードウェアの詳細は [`bench/results/`](https://github.com/mitos-run/mitos/blob/HEAD/bench/results/) にあります。
### ホステッドのインタラクティブ開始までの時間(ComputeSDKピアセットとの比較)
インタラクティブ開始までの時間(TTI)は、すべてのホステッドサンドボックスベンダーが評価対象とする公開 [ComputeSDKベンチマーク](https://github.com/computesdk/benchmarks) と純粋に比較できる唯一の指標です。計測は `create()` で開始し、サンドボックス内でコマンドが実際に実行され、結果が返った時点で停止します。
| プロバイダ | TTI P50 | 測定値 |
|---|---|---|
| northflank | 95.9 ms | ComputeSDK 公開値 |
| **mitos** | **96.8 ms** | 当社ハーネス、`api.mitos.run` |
| daytona | 136.2 ms | ComputeSDK 公開値 |
| e2b | 365.6 ms | ComputeSDK 公開値 |
当社の数値とピアテーブルを再現する手順は以下の通りです(ピアの数値はComputeSDKが公開したイミュータブルなコミットから読み取ったものであり、当社で再実行したものではありません)。```sh
MITOS_API_KEY=... python3 bench/tti-latency.py 100 # our TTI, N=100
python3 bench/peer-tti.py --date 2026-07-09 \
--ref 3eddee1a972bd49aea56fd6c16d238ca0a45dece # the peer table
完全な記録が述べ、隠していない注意事項を添えて読んでください。これは公開された数値に対する当社のハーネスであって、リーダーボード上の測定順位ではありません。これは逐次実行です(同時バーストは現在のシングルノードのウォームプールを枯渇させるでしょう、issue #586)。実際のリーダーボード順位を主張するには、computesdk/computesdk アダプタを出荷する必要があります(issue #891)。その範囲内で、ホスト型 mitos は Daytona より下、Northflank と同等で、100/100 回の反復が成功しています。
エージェントがクラスタ内で実行され、並行試行に分岐する場合、重要なコストはフォークから最初の実行までの時間、つまりライブVMフォークから子プロセスでコマンドが返るまでの実時間です。これは、forkd が駆動する同じインプロセスエンジンで測定されます:
完全な方法とハードウェアは [bench/README.md](https://github.com/mitos-run/mitos/blob/HEAD/bench/README.md) に、結果は [2026-06-19-bare-metal-fork-exec.md](https://github.com/mitos-run/mitos/blob/HEAD/bench/results/2026-06-19-bare-metal-fork-exec.md) と [2026-06-21-kvm-perf-correctness.md](https://github.com/mitos-run/mitos/blob/HEAD/bench/results/2026-06-21-kvm-perf-correctness.md) にあります。
### ウォームクレームアクティベート(エンジン単位、ラウンドトリップではない)
エンジン自身のウォームサンドボックスアクティベート(スナップショットロード+フォーク整合性ハンドシェイク+ゲスト準備完了)は、ベアメタル参照ノード上でP50約27msであり、[`bench/husk-activate-latency.sh`](https://github.com/mitos-run/mitos/blob/HEAD/bench/husk-activate-latency.sh) から再現可能です。これは上記のエンドツーエンドのホステッドTTIとは異なる、より小さな数値です。エンジンの数値を競合他社のcreate-APIの数値と並べて引用するのはカテゴリーエラーになるため、別々に保っています。
## 機能
huskのポッドネイティブパスがデフォルトです。一部の機能は現在、raw-forkdの `engine path` でのみ動作し、追跡issueへのリンクとともにマークされています。
### 速度
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| ウォームクレームアクティベート | ベアメタル参照ノード上でP50約27ms(スナップショットロード+フォーク整合性ハンドシェイク+ゲスト準備完了); スナップショットリストア約6〜16ms; CoWページ共有によるフォークあたり約3MiBの追加メモリ | [BENCHMARKS.md](https://github.com/mitos-run/mitos/blob/HEAD/BENCHMARKS.md) |
| プリスナップショットプール | OCIイメージをext4 rootfsにフラット化し、スナップショット前に `init` ステップでウォームアップするため、クレーム時のコールドスタートがありません | [docs/templates.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/templates.md) |
| CoWメモリ共有 | フォーク間のユニークなページに対してのみ支払い、コピーに対しては支払いません | [mitos.run/docs/metering](https://mitos.run/docs/metering) |
| コンテンツアドレス配布 | フォークはmTLS経由でホルダーから欠落しているsha256チャンクのみを取得します; リビルドはバージョン互換性契約の下でデルタを配信します | [docs/snapshot-distribution.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/snapshot-distribution.md) |
### 分離
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| セッションごとのハードウェア分離 | サンドボックスごとに専用カーネル(KVM/Firecracker); huskデフォルトでは各VMは独自の非特権・PSA制限付きポッドで実行され、これがVMごとの境界となります | [mitos.run/docs/threat-model](https://mitos.run/docs/threat-model) |
| サイレントなシークレット継承なし | シークレットを保持するサンドボックスのライブフォークは、明示的にオプトインしない限り拒否されます; 認証情報はクレーム時にvsock経由で注入され、スナップショットに焼き込まれることはありません | [mitos.run/docs/threat-model](https://mitos.run/docs/threat-model) |
| デフォルト拒否のエグレス | ポッド自身のネットワーク名前空間内のin-pod nftablesデフォルト拒否フィルター(CNI非依存)、無条件のクラウドメタデータ(169.254.169.254)ブロック、およびin-pod DNSプロキシ経由のIP:ポートと名前によるテンプレートごとの許可リスト。実KVMクラスター上でエンドツーエンドに検証済み; ゲストは強制に影響を与えられません | [mitos.run/docs/networking](https://mitos.run/docs/networking) |
| 保存時の暗号化 | 暗号化シュレッディングとKMSエンベロープラッピングを備えたスコープごとのLUKS2コンテナ(`--enable-encryption` の背後、フェイルクローズ); HSMバックアップのキーとワークスペースごとのスコープは将来の対応項目です | [docs/encryption.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/encryption.md) |
### エージェントDX
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| ブロッキングexec | サンドボックスAPI経由で正しいstdoutと終了コード | [mitos.run/docs/cli](https://mitos.run/docs/cli) |
| ストリーミングexecとPTY | インクリメンタルなstdout/stderr、バックグラウンドプロセス、トークンゲート付きインタラクティブWebSocketターミナル(`engine path`) | [mitos.run/docs/cli](https://mitos.run/docs/cli) |
| コードインタープリタ | ステートフルカーネルとリッチなマルチMIME結果を備えた `run_code` を全SDKとMCPサーバーで提供; カーネルがhuskベースイメージに同梱されるまで `KernelUnavailable` でフェイルクローズ | [mitos.run/docs/mcp](https://mitos.run/docs/mcp) |
| LLMが読み取れるエラー | すべての障害に `{code, cause, remediation}` が含まれ、SDKが構造化された `AgentRunError` にパースします | [docs/api/errors.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/api/errors.md) |
### Kubernetesネイティブ
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| 宣言的CRD | `mitos.run/v1` の `SandboxPool`、`Sandbox`(poolRef/fromSandbox/fromRevisionソース)、`Workspace`/`WorkspaceRevision`。ボリュームトポロジーとフォーク動作を含む | [docs/templates.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/templates.md) |
| ポッドネイティブ実行 | 各サンドボックスVMは非特権ポッドで実行されます(`privileged` ではなくデバイスプラグインからの `/dev/kvm`)。そのためCPU/メモリ要求がスケジューラの真実となり、PSAがポッドを統制します | [mitos.run/docs/threat-model](https://mitos.run/docs/threat-model) |
| 容量を考慮したスケジューリング | ウォームホルダーへのCoWビンパッキング、CoW対応のオーバーコミット予算、アトミックスロット予約付きの `MaxSandboxes` ホストDoS上限、ノードのOOMの代わりに型付きの `NoCapacity` バックプレッシャー | [docs/scheduling.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/scheduling.md) |
| 需要駆動型オートスケーリング | `SandboxPool.spec.autoscale` は、スラッシング防止クールダウンを備えて、休眠中のhuskポッド数を `clamp(inUse + targetSpare, minWarm, maxWarm)` にスケーリングします; 固定プールは単に `minWarm == replicas` です | [docs/scheduling.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/scheduling.md) |
| 障害とGCのセマンティクス | クレームTTL、孤立VMのスイープ、コントローラ再起動時のリコンシリエーション、オンディスクジャーナルによるforkdクラッシュの回収、ノード喪失処理、飽和バックプレッシャー。すべてCIで実証済み | [docs/failure-gc.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/failure-gc.md) |
### 永続状態
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| 永続的なフォーク可能ワークスペース | `Workspace`/`WorkspaceRevision` CRD: サンドボックスから独立した、永続的・バージョン管理・フォーク可能なエージェント状態。 `/workspace` は起動時にハイドレートされ、コミットされたリビジョンは終了時にコンテンツアドレスストア経由でデハイドレートされます。実KVMクラスター上で create -> commit -> fork を検証済み | [mitos.run/docs/workspaces](https://mitos.run/docs/workspaces) |
| 出力と差分 | `spec.lifetime.onTerminate.outputs` はデハイドレートを指定されたサブツリーに限定します; `{diff: true}` は親ヘッドに対するコンテンツハッシュ差分を記録します | [mitos.run/docs/workspaces](https://mitos.run/docs/workspaces) |
| Gitランデブー | `{git}` 出力は試行ごとのブランチをランデブーリモートにプッシュします(エンジンがプッシュし、人間またはCIがマージします)。現在huskではベストエフォート | [mitos.run/docs/workspaces](https://mitos.run/docs/workspaces) |
| 開発環境URL | `mitos workspace serve <ws> --pool P` はワークスペースにバインドされたフォーク済みサンドボックスをウォームクレームし、準備完了の `https://<label>.<expose-domain>/` URLを返します; フォークされた各セッションは独自のURLを取得します | [docs/recipes/dev-environment.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/recipes/dev-environment.md) |
### 運用性
| 機能 | 得られるもの | ドキュメント |
|---|---|---|
| メトリクスとトレーシング | ノードとコントローラのPrometheusメトリクス、クレームごとのOpenTelemetryトレース(`--otlp-endpoint`)、コマンド/パスとバイト数を記録するトグル可能な構造化監査ログ(`--audit-log`)。コンテンツやシークレットは決して記録しません | [mitos.run/docs/observability](https://mitos.run/docs/observability) |
| CoW対応メータリング | 共有テンプレートページセットはフォークごとではなく1回だけカウントされるため、課金とスケジューリングが実際の物理フットプリントを反映します | [mitos.run/docs/metering](https://mitos.run/docs/metering) |
| オペレーターツール | `kubectl mitos` プラグイン(`ls` / `ps`)と運用向け `GET /v1/metering` レポート | [mitos.run/docs/observability](https://mitos.run/docs/observability) |
| ベアメタルをファーストクラスでサポート | Talos + Hetzner が参照プラットフォームです | [docs/platforms/talos-hetzner.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/platforms/talos-hetzner.md) |
| シングルユーザー初回実行 | 1ユーザーログインゲート付きk3sクイックスタート(QAのみ、本番用ではありません) | [docs/platforms/k3s-quickstart.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/platforms/k3s-quickstart.md) |
## 比較
直接対決の数値テーブルは、このリポジトリ内のスクリプトを使って同じハードウェア上で実際の競合他社に対してハーネスを再生成できる場合にのみ、ここに置くべきです。そのハーネスは [#15](https://github.com/mitos-run/mitos/issues/15) です。以下の数値は**他ベンダーが公開した数値であり、異なる操作・異なるハードウェア・異なる方法論に基づくものです**: 当社による測定ではなく、直接対決の主張でもありません。
| ランタイム | 公開された数値(他社のもの) | 彼らが説明する操作 |
|---|---|---|
| Mitos(当社、測定値) | P50約27ms | ベアメタル参照ノードでのウォームクレームアクティベート |
| E2B | 約150ms | サンドボックス作成 |
| Daytona | 90ms未満 | スナップショットからの作成 |
| Modal | 1秒未満 | サンドボックス作成 |
| CodeSandbox SDK | 約863ms / 約495ms | ライブフォーク / メモリ再開 |
| Fly Machines | 1秒未満 | マシン起動 |
今日比較可能で現実的なのは、定性的なパレートマップです: オープンソース、セルフホスト可能、k8sネイティブ、ライブスナップショットフォークの組み合わせこそが、Mitosが単独で存在する軸です。
| | Mitos | E2B | Modal | Daytona | Morph | Cloudflare | Box | Agent Sandbox | Kata/KubeVirt | raw Firecracker |
|---|---|---|---|---|---|---|---|---|---|---|
| セッションごとのハードウェア分離 | KVMマイクロVM | マイクロVM | gVisor | コンテナ/VM | マイクロVM | V8アイソレート | VM | Kataオプション | KVM | KVM |
| 実行中状態のスナップショットフォーク | あり、中核プリミティブ | スナップショット/再開 | メモリスナップショット | なし | あり(Infinibranch) | なし | ディスクフォーク | なし | なし | DIY |
| ウォームプールのミリ秒クレーム | あり(設計の中心) | ウォームプール | ウォームプール | ワークスペース | あり | インスタントアイソレート | 非公開 | 1〜3秒コールド | 数秒 | DIY |
| 永続的なフォーク可能ワークスペース | Workspace CRD | なし | ボリューム | ワークスペース | あり、プロプライエタリ | あり(ディスク) | なし | PVC | PVC | なし |
| KubernetesネイティブAPI | CRD | SaaS API | SaaS API | SaaS/OSS | SaaS API | SaaS API | エージェントネイティブCLI | CRD | CRD | なし |
| セルフホスト可能 | あり、任意のKVMクラスター | 部分的なOSS | なし | OSSコア | なし | なし | なし | あり | あり | あり |
| ホステッドオプション | 計画中(同じエンジン) | あり | あり | あり | あり | あり | あり(のみ) | なし | なし | なし |
| データが自社インフラに留まる | あり(セルフホスト) | なし | なし | 部分的 | なし | なし | なし | あり | あり | あり |
| オープンソース | Apache 2.0 | 部分的 | なし | 部分的 | なし | なし | なし | Apache 2.0 | Apache 2.0 | Apache 2.0 |
SaaSランタイム(E2B、Modal、Daytona、Cloudflare)は高速ですが、エージェントのコード・データ・認証情報は他社のインフラ上で実行され、同等の能力を持つセルフホストパスがありません。Morphは正しい状態モデル(ブランチ/リストア)をプロプライエタリなクラウドとして構築しました; 当社のWorkspaceプリミティブは、同じセマンティクスをオープンソースで、fork(2) の速度で実現することを目指しています。Agent Sandbox(k8s-sigs)はスナップショットフォークエンジンなしでKubernetes API標準を勝ち取りつつあるため、当社はそれと戦うのではなく、その最速のバックエンドとなるための適合ファサード(`cmd/facade`)を提供しています([docs/facade-conformance.md](https://github.com/mitos-run/mitos/blob/HEAD/docs/facade-conformance.md))。Kata、KubeVirt、raw Firecrackerは分離プリミティブを提供しますが、プール、フォーク、配布、エージェントAPIレイヤーはあなた自身の問題として残されます。
気にする軸で代替案が我々を上回っており、それを埋めるロードマップ項目がない場合、それは戦略のバグです: issueを開いてください。
## アーキテクチャ
MitosはFirecrackerマイクロVMを起動し、コピーオンライトスナップショットを通じてフォークし、ライフサイクル全体を `mitos.run/v1` APIグループの宣言的CRD(`SandboxPool`、`Sandbox`、`Workspace`)で公開します。サンドボックスはマイクロVMであり、ポッドではありません: KVMを通じてハードウェア分離を取得し、ポッドスコープのメカニズム(NetworkPolicy、ResourceQuota、PSA)はサンドボックスを統制しません。
構成要素:
- **controller**(Deployment): CRDをリコンサイルし、ノードを選択し、`forkd` を駆動します。ノードごとの容量ハートビートによって供給されるレジストリを通じて、利用可能なフォークノードを追跡します。
- **forkd**(DaemonSet): VMを所有するノードごとのデーモンです。コントローラ向けに `:9090` でgRPC(fork、prepare-pool、heartbeat)を、execとファイルトラフィック向けに `:9091` でHTTPサンドボックスAPIを提供します。`/dev/kvm` が必要なため、KVM対応ノードでのみ実行されます。
- **ゲストエージェント**: 各マイクロVM内のPID 1です。exec、ファイル、環境、フォーク通知のためにvsockプロトコルを使用します。
- **sandbox-server**: 同じフォークエンジンをプレーンなREST APIの背後に置いたもので、Kubernetesを必要とせず、ローカルループや単一ホストでの使用向けです。
- **SDK**(`sdk/python`、`sdk/typescript`、`sdk/go` など): ホステッドサービス、クラスター、または `sandbox-server` 向けのクライアントです。
2つのホットパスがシステムを支えています:
- **クレームパス**: コントローラはレジストリからウォームノードを選択し、gRPC経由で `forkd` の `Fork` を呼び出します; 生成されたサンドボックスは、そのノード上の `forkd` のHTTP APIを通じてReadyを報告します。
- **execパス**: SDKまたはCLIは `:9091` の `forkd` と通信し、`forkd` はvsock経由でVM内部のゲストエージェントにブリッジします。
フォークが中核プリミティブです: ソースVMは1回スナップショットされ、N個の子がコピーオンライトを通じてそのスナップショットからリストアされるため、各兄弟はウォームで独立して起動し、共有テンプレートページは1回だけ保存・メータリングされます。Firecrackerはハードウェア仮想化を必要とするため、ベアメタル(Hetzner上のTalosが参照プラットフォーム)がファーストクラスのターゲットです; クラウドコントロールプレーンは通常のノードに留まり、実行はKVM対応マシンに配置されます。
## プロジェクトステータス
開発初期段階、1.0未満(最新リリース `v0.3.0`)。本番環境で信頼できないコードをまだ実行しないでください: 外部セキュリティレビューはまだ行われておらず、一部の分離制御は未対応のままです(境界ごとの正確なステータスは[脅威モデル](https://mitos.run/docs/threat-model)を参照)。コントロールプレーンはエンドツーエンドで実装済みで、モックエンジンと実Firecracker VMに対するCIで実証され、単一ノードのTalos KVMクラスターで運用テストされています。
**実KVMクラスターで検証済み(huskデフォルト):** ウォームクレームアクティベート、ブロッキングexec、`KernelUnavailable` でフェイルクローズする `run_code`、自己修復 / 再ペンド、プールウォーミングと需要駆動オートスケーリング、ライブサンドボックスフォーク(ソースhuskポッドがVMをスナップショットし、N個の子ポッドがCoW経由でリストアし、それぞれが独立したReady子となる)、永続的なフォーク可能ワークスペース(create -> commit -> fork)、ポッドエグレス分離(デフォルト拒否、クラウドメタデータブロック、テンプレートごとの許可リスト)。
**huskデフォルトにはまだ含まれない追跡中の未対応項目:** ストリーミングexecとインタラクティブPTY; 再開可能なワークスペースヘッドのためのライブVMメモリスナップショットフック; S3/暗号化のライブストア選択; huskの `{git}` ワークスペースプッシュ; マルチノードN>1(設計済み、単一ノードで検証済み)。
[ROADMAP.md](https://github.com/mitos-run/mitos/blob/HEAD/ROADMAP.md) は、完了済み・進行中・ゲート付きの唯一の情報源です。運用ルール: このリポジトリは存在しないシステムを決して説明しません。
## ローカル開発(KVM不要)
`mitos dev up` はモックコントロールプレーン上にローカルkindクラスターを起動し、`mitos` CLIが完全なクレームパスを駆動します; モックエンジンはクレームを `Ready` にリコンサイルし、コントロールプレーンのディスパッチを実行しますが、実際のVM内 `exec` には `/dev/kvm` を持つノードが必要です。クラスターなしのRESTループの場合は、`go run ./cmd/sandbox-server --mock --addr :8080` を実行し、Python SDKをそこに向けてください。kindの完全なチュートリアルは [mitos.run/docs/cli](https://mitos.run/docs/cli) にあります。
## ドキュメント
完全なドキュメントは **[mitos.run/docs](https://mitos.run/docs)** にあります: クイックスタート、アーキテクチャ、SDKとCLIリファレンス、サンドボックスライフサイクル、ワークスペース、ネットワーキング、脅威モデル。すべてこのリポジトリからレンダリングされています。
完全なロングテール(テンプレート、スナップショット形式と配布、暗号化とシークレット、スケジューリングと密度、障害とGC、フォークエンジンの正確性、レシピ、ターゲットv2 API仕様)は、このリポジトリの [`docs/`](https://github.com/mitos-run/mitos/blob/HEAD/docs/) にあります。ベンチマーク方法論は [BENCHMARKS.md](https://github.com/mitos-run/mitos/blob/HEAD/BENCHMARKS.md) にあります。
## コントリビューション
コントリビューションを歓迎します。規約については [CONTRIBUTING.md](https://github.com/mitos-run/mitos/blob/HEAD/CONTRIBUTING.md) と [CLAUDE.md](https://github.com/mitos-run/mitos/blob/HEAD/CLAUDE.md) を、[ROADMAP.md](https://github.com/mitos-run/mitos/blob/HEAD/ROADMAP.md) に対して追跡される作業については [issuesページ](https://github.com/mitos-run/mitos/issues) を参照してください。
## セキュリティ
境界ごとのステータスを含む脅威モデルは [mitos.run/docs/threat-model](https://mitos.run/docs/threat-model) にあります; 外部セキュリティレビューはまだ行われておらず、ドキュメントは何が未対応かを正確に示しています。脆弱性を報告するには、[SECURITY.md](https://github.com/mitos-run/mitos/blob/HEAD/SECURITY.md) を参照してください。
## ライセンス
[Apache 2.0](https://github.com/mitos-run/mitos/blob/HEAD/LICENSE)。
| メトリクス | 数値 | 測定内容 |
|---|
| fork -> 最初の exec | P50 ~104 ms(参照ノード)、reflink + NVMe では ~67 ms | ライブフォークから、実行サービスを提供する準備完了の子まで |
| fork(n) ファンアウト | n=4 および n=16 で子あたり P50 ~56 ms | 1つのウォームベースを N 個の独立した兄弟にファンアウト |
| CoW メモリ密度 | 8フォークで約35 MiB の常駐、約209 MiB ではない | 一意なページのみ支払い、共有ページは一度だけカウント |
| go build -o /tmp/bench ./cmd/bench/ | ||
| /tmp/bench --mode fork-exec --template --data-dir --iterations 100 # fork -> first exec | ||
| /tmp/bench --mode fork-fanout --template --data-dir --fanout-n 1,4,16 # 1-to-N fan-out |