
smolvm v1.15.0
ローカルでAgentを安全に実行するための、埋め込み可能でポータブル、分岐可能な仮想マシン。
smolvm
AIエージェント向けのブランチ可能なmicroVM。 軽量な仮想マシンをソフトウェアに組み込み、ポータブルな開発環境やローカルサンドボックスを実現します。
インストール
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: windows-x86_64 リリースを解凍してsmolvm.exeを実行します(Windows Hypervisor Platformが必要です)。コーディングエージェント: インストール後にsmolvm --helpを実行すると、すべてのコマンドを確認できます。
クイックスタート
smolvm machine run --net --image alpine -- uname -a # 使い捨てVM、終了時に削除
smolvm machine run --net -it --image alpine -- /bin/sh # インタラクティブシェル
ローカル
独自のカーネルを持つ本物のVMを、ノートPCや自前のサーバーで無料で利用できます。起動は1秒未満で、メモリは伸縮自在なため、ホストはゲストが実際に使用した分だけをコミットします。マシンは再起動後も永続化され、ローカルでビルドしたものを含め、あらゆるOCIイメージが動作します。
smolvm machine create --net --name dev && smolvm machine start --name dev
smolvm machine exec --name dev -- apk add git
docker save myapp | smolvm machine run --image - -- ./app # ローカルイメージ、レジストリ不要
Smolfileでマシンを宣言できます: イメージ、リソース、ポート、マウント、ネットワークポリシーを1つのファイルにまとめてチェックインできます。
組み込み可能
単一のMachine APIで、自分のコードからマシンを操作できます。SDKはデーモンなしでプロセス内で動作し、ローカルでもsmol cloudでも利用できます。
npm install smolmachines # Node / TypeScript
pip install smolmachines # Python
cargo add smolmachines # Rust
import { Machine } from 'smolmachines';
const m = await Machine.create({ image: 'python:3.12-alpine', network: true });
const r = await m.exec(['python3', '-c', 'print(2 ** 10)']);
console.log(r.stdout); // 1024
await m.delete();
ソースとドキュメント: smol-machines/smol · smolmachines.com/docs/sdk
ブランチ可能
実行中のマシンを実行途中で保存し、巻き戻したり、同じ地点から実行を継続するコピーにブランチできます。チェックポイントはRAM、CPU状態、ディスクをキャプチャし、ブランチは稼働中マシンのコピーオンライトの子です。
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # 稼働中のコピーオンライトの子
smolvm machine checkpoint --name agent -o agent.checkpoint # プロセスごと保存
smolvm machine create --name agent2 --from agent.checkpoint # 後で、または別の場所で再開
--from <checkpoint> --at '~N'で以前の世代に巻き戻し(machine checkpoint-logを参照)、pause and resumeで実行を失わずに停止できます。詳細はBranchingとincremental checkpointsを参照してください。
ポータブル
どのようにセットアップしたマシンでも、単一の.smolmachineファイルにパッケージ化できます。任意のOCIレジストリにプッシュしたり、何もインストールせずに200ms未満で起動する自己完結型の実行ファイルとして実行できます。
smolvm machine stop --name dev && smolvm pack create --from-vm dev -o dev
smolvm pack push --file dev.smolmachine ghcr.io/you/dev:v1
smolvm pack create --image python:3.12-alpine -o ./python312
./python312 run -- python3 --version
チェックポイントもポータブルです: 別のホストやsmol cloud上で復元できます。
安全
各ワークロードは、独自のカーネルを持つハードウェア分離されたVMで実行されます。ネットワークはデフォルトで無効で、外向き通信は指定したホストに制限でき、コードは資格情報を読むことなく使用できます。
安全性は共同の責任です。smolvmは境界を提供します: ワークロードごとに別々のVMとカーネルを持ち、許可しない限りホストには何も到達しません。その境界を越えるものを決めるのはあなたです。マウントするフォルダ、開くポート、許可するホスト、転送するシークレットやSSHエージェントはすべて、ワークロードが利用できるものになるため、信頼できないワークロードには必要なものだけを与えてください。
smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -qO- https://google.com # ブロックされる
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org # 完全一致ホストのみ
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
--credential [email protected] -- sh -c 'echo $NOTION_API_KEY' # プレースホルダー
credential substitutionとsecurity modelを参照してください。
--allow-host-pattern '*.example.com'を使うとサブドメインのみを許可できます。従来の
--allow-host example.comは引き続きapexとサブドメインの両方を許可します。
停止したマシンの許可リストはsmolvm machine updateで変更できます
(--allow-host、--allow-host-pattern、--allow-cidrおよびそれぞれの--remove-形式)。
仕組み
各ワークロードは、Hypervisor.framework(macOS)、KVM(Linux)、またはWindows Hypervisor Platform(Windows)上で、独自のゲストカーネルを持つハードウェア仮想化VMで実行されます。libkrunがVMMで、libkrunfwがゲストカーネルを提供します。イメージはOCI形式を使用するため、Docker Hub、ghcr.io、その他のレジストリにあるものはDockerデーモンなしでmicroVMとして起動します。
デフォルト: 4 vCPU、8 GiB RAM。メモリはvirtio balloonにより伸縮自在で、アイドル状態のvCPUはハイパーバイザー内でスリープするため、過剰なプロビジョニングのコストはほとんどかかりません。--cpusと--memで上書きできます。
比較
| smolvm | コンテナ | Colima | QEMU | Firecracker | Kata | |
|---|---|---|---|---|---|---|
| ワークロード境界 | VM + ゲストカーネル | 名前空間 + 共有カーネル | 共有VM内の名前空間 | VM + ゲストカーネル | VM + ゲストカーネル | コンテナごとのVM |
| 起動時間 | <200ms | ~100ms | ~秒 | ~15-30s | <125ms | ~500ms |
| アーキテクチャ | ライブラリ (libkrun) | デーモン | デーモン (VM内) | プロセス | プロセス | ランタイムスタック |
| ワークロードごとのVM | はい | いいえ | いいえ (共有) | はい | はい | はい |
| macOSネイティブ | はい | Docker VM経由 | はい (krunkit) | はい | いいえ | いいえ |
| 組み込み可能SDK | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| ポータブル成果物 | .smolmachine | イメージ (デーモンが必要) | いいえ | いいえ | いいえ | いいえ |
プラットフォームサポート
| ホスト | ゲスト | 要件 |
|---|---|---|
| macOS Apple Silicon | arm64 Linux | macOS 11+ |
| macOS Intel | x86_64 Linux | macOS 11+ (未検証) |
| Linux x86_64 | x86_64 Linux | KVM (/dev/kvm) |
| Linux aarch64 | aarch64 Linux | KVM (/dev/kvm) |
| Windows x86_64 | x86_64 Linux | Windows Hypervisor Platform (WHP) 有効 |
Windowsはポータブルチェックポイント、pause/resume、--freeze-sourceによるブランチをサポートします。GPUアクセラレーションは引き続き利用できません。既知の制限を参照してください。
その他
- Kubernetes:
RuntimeClassを通じてポッドをmicroVMとして実行します。 - GPUとCUDA: virtio-gpu / Venus経由のVulkan、およびCUDA APIリモーティング。
- Examples: python、node、docker-in-vm、local-llm、headless-browser、doom。
- Development · ユーザードキュメントはsmolmachines.com/docsにあり、smol-machines/docsで執筆されています(修正はそちらへ、ランタイムのバグはこちらへ)。