
smolvm v1.15.0
Una macchina virtuale incorporabile, portatile e ramificabile per eseguire in sicurezza gli Agenti in locale.
smolvm
microVM diramabili per agenti AI. Integra macchine virtuali leggere nel tuo software, ambienti di sviluppo portatili e sandboxing locale.
Installazione
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: decomprimi la release windows-x86_64 ed esegui smolvm.exe (richiede la Windows Hypervisor Platform). Agenti di coding: esegui smolvm --help dopo l'installazione per scoprire tutti i comandi.
Avvio Rapido
smolvm machine run --net --image alpine -- uname -a # VM usa e getta, rimossa all'uscita
smolvm machine run --net -it --image alpine -- /bin/sh # shell interattiva
Locale
VM reali con kernel proprio, gratuite sul tuo laptop o sui tuoi server. Si avviano in meno di un secondo e la memoria è elastica, quindi l'host impegna solo ciò che il guest utilizza. Le macchine persistono tra i riavvii e qualsiasi immagine OCI funziona, incluse quelle che costruisci localmente.
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 # immagine locale, nessun registry
Dichiara una macchina in un Smolfile: immagine, risorse, porte, mount e policy di rete in un unico file versionato.
Integrabile
Pilota le macchine dal tuo codice con una sola API Machine. Gli SDK girano nel tuo processo senza daemon, in locale o su 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();
Sorgenti e documentazione: smol-machines/smol · smolmachines.com/docs/sdk
Diramabile
Salva una macchina in esecuzione a metà esecuzione, riavvolgila o diramala in copie che continuano a girare dallo stesso punto. I checkpoint catturano RAM, stato della CPU e dischi; i rami sono figli copy-on-write di una macchina viva.
smolvm machine create --net --name agent --image alpine
smolvm machine start --name agent --branchable
smolvm machine branch --from agent --name try-1 # figlio copy-on-write live
smolvm machine checkpoint --name agent -o agent.checkpoint # salvala, processi inclusi
smolvm machine create --name agent2 --from agent.checkpoint # riprendi dopo o altrove
Riavvolgi a una generazione precedente con --from <checkpoint> --at '~N' (vedi machine checkpoint-log) e fermati senza perdere l'esecuzione con pause e resume. Altro in Branching e checkpoint incrementali.
Portabile
Impacchetta una macchina, comunque tu l'abbia configurata, in un singolo file .smolmachine. Pubblicala su qualsiasi registry OCI, oppure eseguila come eseguibile autonomo che si avvia in meno di 200 ms senza nulla da installare.
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
Anche i checkpoint sono portabili: ripristinane uno su un altro host o su smol cloud.
Sicuro
Ogni workload riceve una VM isolata a livello hardware con kernel proprio. La rete è disattivata per impostazione predefinita, l'egress può essere limitato a host specifici e il codice può usare una credenziale senza mai leggerla.
La sicurezza è una responsabilità condivisa. smolvm fornisce il confine: una VM e un kernel separati per ogni workload, senza nulla che raggiunga l'host se non lo consenti. Sei tu a decidere cosa attraversa quel confine. Ogni cartella che monti, porta che apri, host che autorizzi e segreto o SSH agent che inoltri diventa qualcosa che il workload può usare, quindi concedi a un workload non attendibile solo ciò di cui ha bisogno.
smolvm machine run --net --image alpine --allow-host registry.npmjs.org -- wget -qO- https://google.com # bloccato
smolvm machine run --net --image alpine --allow-host-pattern registry.npmjs.org -- wget -qO- https://registry.npmjs.org # solo host esatto
NOTION_API_KEY=secret_… smolvm machine run --net --image alpine \
--credential [email protected] -- sh -c 'echo $NOTION_API_KEY' # un placeholder
Vedi sostituzione delle credenziali e il modello di sicurezza.
Usa --allow-host-pattern '*.example.com' per consentire solo i sottodomini. Il vecchio
--allow-host example.com continua a consentire sia l'apex che i sottodomini.
La allow list di una macchina ferma può essere modificata con smolvm machine update
(--allow-host, --allow-host-pattern, --allow-cidr e le loro forme --remove-).
Come Funziona
Ogni workload gira in una VM virtualizzata a livello hardware con kernel guest proprio su Hypervisor.framework (macOS), KVM (Linux) o la Windows Hypervisor Platform (Windows). libkrun è il VMM e libkrunfw fornisce il kernel guest. Le immagini usano il formato OCI, quindi qualsiasi cosa su Docker Hub, ghcr.io o un altro registry si avvia come microVM, senza daemon Docker.
Valori predefiniti: 4 vCPU, 8 GiB di RAM. La memoria è elastica tramite virtio balloon e le vCPU inattive dormono nell'hypervisor, quindi il sovradimensionamento costa quasi nulla. Sovrascrivi con --cpus e --mem.