
smolvm v1.30.1
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.
Installa
brew install smol-machines/tap/smolvm # macOS (Homebrew)
curl -sSL https://smolmachines.com/install.sh | bash # macOS + Linux
Windows: decomprimere la release windows-x86_64 release ed eseguire smolvm.exe (richiede la Windows Hypervisor Platform). Agenti di coding: eseguire smolvm --help dopo l'installazione per scoprire tutti i comandi.
La documentazione per umani e agenti si trova in docs/, una cartella per attività: un README.md con i fatti e un SKILL.md che un agente può seguire, con i relativi script, accanto alla pagina di riferimento per ciascuna funzionalità.
Avvio rapido
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
Locale
VM reali con il proprio kernel, gratuiti 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, comprese 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 # local image, no registry
Dichiara una macchina in un Smolfile: immagine, risorse, porte, mount e policy di rete in un unico file versionato.
Integrabile
Gestisci le macchine dal tuo codice con un'unica API Machine. Gli SDK vengono eseguiti 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();
Origine e documentazione: smol-machines/smol · smolmachines.com/docs/sdk
Branchable
Salva una macchina in esecuzione a metà dell'esecuzione, riavvolgila o crea dei rami in copie che continuano a funzionare dallo stesso punto. I checkpoint catturano RAM, stato della CPU e dischi; i rami sono figli copy-on-write di una macchina attiva.
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
Torna a una generazione precedente con --from <checkpoint> --at '~N' (vedi machine checkpoint-log), e fermati senza perdere l'esecuzione con pause and resume. Un checkpoint creato su un Mac arm64 riprende su Linux arm64, vedi Moving a running machine from a Mac to Linux. Maggiori dettagli in Branching e incremental checkpoints.
Portable
Impacchetta una macchina, indipendentemente da come l'hai configurata, in un singolo file .smolmachine. Caricalo su qualsiasi registry OCI, oppure eseguilo 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
I checkpoint sono portabili: ripristinane uno su un altro host o su smol cloud.
Sicuro
Ogni workload ottiene una VM isolata a livello hardware con il proprio kernel. Il networking è disattivato per impostazione predefinita, l'egress può essere limitato a host specifici e il codice può utilizzare una credenziale senza mai leggerla.
La sicurezza è una responsabilità condivisa. smolvm fornisce il confine: una VM e un kernel separati per ogni workload, senza che nulla raggiunga l'host a meno che tu non lo consenta. Sei tu a decidere cosa attraversa quel confine. Ogni cartella che monti, porta che apri, host che consenti e secret o SSH agent che inoltri diventa qualcosa che il workload può utilizzare, quindi assegna 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 # 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
Vedi sostituzione delle credenziali e il modello di sicurezza.
Usa --allow-host-pattern '*.example.com' per consentire solo i sottodomini; --allow-host example.com consente l'apex e
i suoi sottodomini. smolvm machine update aggiunge (--allow-host, --allow-host-pattern, --allow-cidr) e rimuove
(--remove-allow-host, un host o pattern così come è stato aggiunto; --remove-allow-cidr) voci, anche su una macchina in esecuzione
avviata con una allow list: un'autorizzazione si applica alla connessione o alla risoluzione successiva, e gli indirizzi appresi di un host rimosso vengono rimossi con esso.