Назад к обновлениям
New releaseSep 13, 2026

smolvm v1.15.0

Встраиваемая, портативная виртуальная машина с поддержкой ветвления для безопасного локального запуска агентов.

Поделиться

smol machines

Discord Release License npm PyPI crates.io

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.

Сравнение

Категории