
smolvm v1.15.0
Встраиваемая, портативная виртуальная машина с поддержкой ветвления для безопасного локального запуска агентов.
smolvm
Ветвящиеся microVM для AI-агентов. Встраивайте лёгкие виртуальные машины в своё ПО, портативные среды разработки и локальную изоляцию.
Установка
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 # интерактивная оболочка
Локально
Настоящие VM с собственным ядром, бесплатно на вашем ноутбуке или собственных серверах. Они загружаются менее чем за секунду, а память эластична, поэтому хост выделяет только то, что использует гость. Машины сохраняются между перезапусками, и подходит любой 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: образ, ресурсы, порты, монтирования и сетевые политики в одном файле под контролем версий.
Встраиваемость
Управляйте машинами из своего кода через единый API Machine. 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 и диски; ветки — это copy-on-write потомки живой машины.
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # живой copy-on-write потомок
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-реестр или запустите как самодостаточный исполняемый файл, который загружается менее чем за 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 по-прежнему разрешает и apex, и поддомены.
Список разрешённых хостов остановленной машины можно изменить с помощью 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 или другом реестре, загружается как microVM без демона Docker.
По умолчанию: 4 vCPU, 8 GiB RAM. Память эластична благодаря virtio balloon, а простаивающие vCPU спят в гипервизоре, поэтому избыточное выделение почти ничего не стоит. Переопределите с помощью --cpus и --mem.