
smolvm v1.30.1
Встраиваемая, портативная виртуальная машина с поддержкой ветвления для безопасного локального запуска агентов.
smolvm
Ветвящиеся microVM для ИИ-агентов. Встраивайте лёгкие виртуальные машины в своё программное обеспечение, портативные среды разработки и локальную изоляцию.
Установка
brew install smol-machines/tap/smolvm # macOS (Homebrew)
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: распакуйте windows-x86_64 release и запустите smolvm.exe (требуется Windows Hypervisor Platform). Для кодирующих агентов: после установки выполните smolvm --help, чтобы узнать все команды.
Документация для людей и агентов находится в docs/, по одной папке на задачу: 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
Локальные
Настоящие виртуальные машины с собственным ядром, бесплатные на вашем ноутбуке или собственных серверах. Они загружаются менее чем за секунду, а память эластична, поэтому хост выделяет только то, что использует гость. Машины сохраняются между перезапусками, и подходит любой 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: образ, ресурсы, порты, монтирования и сетевую политику в одном файле, хранящемся в репозитории.
Встраиваемость
Управляйте машинами из собственного кода через единый 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
Branchable
Сохраните работающую машину в середине выполнения, откатите её назад или создайте её ветвления в виде копий, которые продолжают работу с той же точки. Контрольные точки фиксируют 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 # 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) и остановитесь без потери выполнения с помощью паузы и возобновления. Контрольная точка, созданная на arm64 Mac, возобновляется на arm64 Linux, см. Перенос работающей машины с Mac на Linux. Подробнее в разделах Ветвление и инкрементальные контрольные точки.
Портативность
Упакуйте машину, какой бы вы её ни настроили, в один файл .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.
Безопасность
Каждая рабочая нагрузка получает аппаратно изолированную ВМ с собственным ядром. Сеть по умолчанию отключена, исходящий трафик можно ограничить именованными хостами, а код может использовать учётные данные, никогда их не читая.
Безопасность — это общая ответственность. smolvm обеспечивает границу: отдельная ВМ и ядро для каждой рабочей нагрузки, и ничего не достигает хоста, если вы это не разрешите. Вы решаете, что пересекает эту границу. Каждая монтируемая папка, открываемый порт, разрешаемый хост, а также секрет или 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 разрешает apex-домен и
его поддомены. smolvm machine update добавляет (--allow-host, --allow-host-pattern, --allow-cidr) и удаляет
(--remove-allow-host — хост или шаблон в том виде, в каком он был добавлен; --remove-allow-cidr) записи, в том числе на работающей машине,
запущенной со списком разрешений: разрешение применяется к следующему соединению или разрешению имени, а изученные адреса удалённого хоста удаляются вместе с ним.