返回更新列表
新发布Sep 13, 2026

smolvm v1.15.0

一个可嵌入、可移植、可分支的虚拟机,用于在本地安全运行 Agents。

分享

smol machines

Discord Release License npm PyPI crates.io

smolvm

面向 AI 智能体的可分支 microVM。 将轻量级虚拟机嵌入你的软件、便携式开发环境和本地沙箱中。

安装

curl -sSL https://smolmachines.com/install.sh | bash   # macOS + Linux

Windows:解压 windows-x86_64 release 并运行 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       # 交互式 shell

本地

真正的虚拟机,拥有自己的内核,在你的笔记本电脑或你自己的服务器上免费使用。它们在一秒内启动,内存是弹性的,因此宿主机只提交客户机实际使用的部分。机器在重启后仍然存在,任何 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    # 本地镜像,无需 registry

在 Smolfile 中声明机器:镜像、资源、端口、挂载和网络策略都在一个签入的文件中。

可嵌入

使用一个 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),并使用暂停和恢复在不丢失执行的情况下停止。更多内容见分支和增量检查点。

可移植

将机器(无论你如何设置)打包成一个 .smolmachine 文件。将其推送到任何 OCI registry,或将其作为自包含可执行文件运行,在 200 毫秒内启动,无需安装任何东西。

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'   # 一个占位符

参见凭据替换和安全模型。 使用 --allow-host-pattern '*.example.com' 仅允许子域名。较旧的 --allow-host example.com 继续允许顶级域名和子域名。 已停止机器的允许列表可以通过 smolvm machine update 更改 (--allow-host、--allow-host-pattern、--allow-cidr 及其 --remove- 形式)。

工作原理

每个工作负载都在一个硬件虚拟化的 VM 中运行,拥有自己的客户机内核,基于 Hypervisor.framework(macOS)、KVM(Linux)或 Windows Hypervisor Platform(Windows)。libkrun 是 VMM,libkrunfw 提供客户机内核。镜像使用 OCI 格式,因此 Docker Hub、ghcr.io 或其他 registry 上的任何内容都可以作为 microVM 启动,无需 Docker 守护进程。

默认值:4 个 vCPU,8 GiB RAM。内存通过 virtio balloon 弹性伸缩,空闲 vCPU 在 hypervisor 中休眠,因此过度配置几乎没有成本。使用 --cpus 和 --mem 覆盖。

对比

smolvm容器ColimaQEMUFirecrackerKata
工作负载边界VM + 客户机内核命名空间 + 共享内核共享 VM 内的命名空间VM + 客户机内核VM + 客户机内核每个容器一个 VM
启动时间<200ms~100ms~秒~15-30s<125ms~500ms
架构库 (libkrun)守护进程守护进程(在 VM 中)进程进程运行时栈
每个工作负载的 VM是否否(共享)是是是
macOS 原生是通过 Docker VM是(krunkit)是否否
可嵌入 SDK是否否否否否
可移植产物.smolmachine镜像(需要守护进程)否否否否

平台支持

宿主机客户机要求
macOS Apple Siliconarm64 LinuxmacOS 11+
macOS Intelx86_64 LinuxmacOS 11+(未测试)
Linux x86_64x86_64 LinuxKVM (/dev/kvm)
Linux aarch64aarch64 LinuxKVM (/dev/kvm)
Windows x86_64x86_64 Linux启用 Windows Hypervisor Platform (WHP)

Windows 支持可移植检查点、暂停/恢复,以及使用 --freeze-source 的分支。GPU 加速仍然不可用;参见已知限制。

更多

  • Kubernetes:通过 RuntimeClass 将 pod 作为 microVM 运行。
  • GPU 和 CUDA:通过 virtio-gpu / Venus 使用 Vulkan,以及 CUDA API 远程调用。
  • 示例:python、node、docker-in-vm、local-llm、headless-browser、doom。
  • 开发 · 用户文档位于 smolmachines.com/docs,用 smol-machines/docs 编写(欢迎在那里提出更正;运行时 bug 留在这里)。

Apache-2.0 · 由 @binsquare 制作 · twitter · github

分类