
smolvm v1.30.1
ローカルでAgentを安全に実行するための、埋め込み可能でポータブル、分岐可能な仮想マシン。
smolvm
AIエージェント向けのブランチ可能なmicroVM。 軽量な仮想マシンをソフトウェアに組み込み、ポータブルな開発環境やローカルサンドボックスを実現します。
インストール
brew install smol-machines/tap/smolvm # macOS (Homebrew)
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: windows-x86_64 のリリースを解凍し、smolvm.exe を実行します(Windows Hypervisor Platform が必要です)。コーディングエージェントの場合: インストール後に smolvm --help を実行すると、すべてのコマンドを確認できます。
人間とエージェント向けのドキュメントは docs/ にあり、タスクごとに1つのフォルダがあります。各フォルダには事実をまとめた README.md と、エージェントが従える SKILL.md がそのスクリプトとともに含まれ、各機能のリファレンスページの隣に置かれています。
クイックスタート
smolvm machine run --net --image alpine -- uname -a # one-off VM, removed on exit
smolvm machine run --net -it --image alpine -- /bin/sh # interactive shell
ローカル
独自のカーネルを持つ実際の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 # local image, no registry
Smolfile でマシンを宣言します。イメージ、リソース、ポート、マウント、ネットワークポリシーを 1 つのチェックイン済みファイルに記述します。
組み込み可能
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
Branchable
実行中のマシンを途中で保存し、巻き戻したり、同じ地点から実行を継続するコピーへ分岐させたりできます。チェックポイントはRAM、CPU状態、ディスクをキャプチャします。ブランチは、稼働中のマシンからコピーオンライト方式で派生した子マシンです。
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # live copy-on-write child
smolvm machine checkpoint --name agent -o agent.checkpoint # save it, processes and all
smolvm machine create --name agent2 --from agent.checkpoint # resume later or elsewhere
--from <checkpoint> --at '~N' で以前の世代に巻き戻し(machine checkpoint-log を参照)、pause and resume で実行を失うことなく停止できます。arm64 Mac で取得したチェックポイントは arm64 Linux で再開できます。詳細は Moving a running machine from a Mac to Linux を参照してください。詳しくは Branching と incremental checkpoints にあります。
ポータブル
どのようにセットアップしたマシンでも、単一の .smolmachine ファイルにパッケージ化できます。任意の OCI レジストリにプッシュするか、何もインストールせずに 200 ms 未満で起動する自己完結型の実行ファイルとして実行できます。
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 # blocked
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org # exact host only
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
--credential [email protected] -- sh -c 'echo $NOTION_API_KEY' # a placeholder
認証情報の置換とセキュリティモデルを参照してください。
サブドメインのみを許可するには --allow-host-pattern '*.example.com' を使用します。--allow-host example.com はアペックスと
そのサブドメインを許可します。smolvm machine update はエントリを追加(--allow-host、--allow-host-pattern、--allow-cidr)および削除
(--remove-allow-host、追加時と同じホストまたはパターン、--remove-allow-cidr)します。これは許可リスト付きで起動された
実行中のマシンにも適用されます。許可は次の接続またはルックアップに適用され、削除されたホストの学習済みアドレスもそれに伴って削除されます。
仕組み
各ワークロードは、Hypervisor.framework(macOS)、KVM(Linux)、または Windows Hypervisor Platform(Windows)上で独自のゲストカーネルを持つハードウェア仮想化 VM 内で実行されます。libkrun が VMM であり、libkrunfw がゲストカーネルを提供します。イメージは OCI 形式を使用するため、Docker Hub、ghcr.io、その他のレジストリ上のあらゆるものが Docker デーモンなしでマイクロ VM として起動します。
デフォルト: 4 vCPU、8 GiB RAM。メモリは virtio balloon により伸縮自在で、アイドル状態の vCPU はハイパーバイザー内でスリープするため、過剰なプロビジョニングによるコストはほとんどありません。--cpus と --mem で上書きできます。
比較
| smolvm | コンテナ | Colima | QEMU | Firecracker | Kata | |
|---|---|---|---|---|---|---|
| ワークロード境界 | VM + ゲストカーネル | 名前空間 + 共有カーネル | 共有 VM 内の名前空間 | VM + ゲストカーネル | VM + ゲストカーネル | コンテナごとの VM |
| 起動時間 | エージェント準備完了まで <200ms | 約100ms | 約数秒 | 約15〜30秒 | <125ms | 約500ms |
| アーキテクチャ | ライブラリ (libkrun) | デーモン | デーモン (VM 内) | プロセス | プロセス | ランタイムスタック |
| ワークロードごとの VM | あり | なし | なし (共有) | あり | あり | あり |
| macOS ネイティブ | あり | Docker VM 経由 | あり (krunkit) | あり | なし | なし |
| 組み込み可能 SDK | あり | なし | なし | なし | なし | なし |
| ポータブルな成果物 | .smolmachine | イメージ (デーモンが必要) | なし | なし | なし | なし |
プラットフォームサポート
| ホスト | ゲスト | 要件 |
|---|---|---|
| macOS Apple Silicon | arm64 Linux | macOS 11+ |
| macOS Intel | x86_64 Linux | リリースビルドは公開されていません。未テスト |
| 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) が有効 |