About sand
sand is a small Go CLI and terminal UI that manages disposable development
VMs for coding agents. Run it with no
arguments for an interactive board of your VMs, or drive it headlessly
(sand create, sand shell) from scripts and CI.
Each VM is a fresh, isolated Debian environment with a specific, opinionated stack: common dev tools, your git identity, and your choice of Claude Code, Codex, OpenCode, and Pi, installed fresh for each VM. You get a disposable place to point an agent at a repository without touching your host machine, and you throw the VM away — or recreate it — when you're done.
Locally or remotely
A VM doesn't have to run on the machine in front of you. sand runs VMs in
three places, and the commands and keybindings are the same in all three:
| Where | What it uses | What you need |
|---|---|---|
| Your own machine | Lima | Nothing beyond installing sand |
| Another machine, over SSH | Lima on that machine | Passwordless SSH and Lima on the far end |
| A Proxmox VE host | The Proxmox REST API | A pool-scoped API token (setup) |
Each place you add is a named Connection Profile, and every enabled profile is live at once — the board shows a laptop's VMs and a server's VMs side by side. See Where VMs Run.
What it is not
sand is not a general-purpose VM manager. It doesn't manage arbitrary
guest OSes, arbitrary provisioning recipes, or long-lived infrastructure. It
manages one kind of thing — a development VM for coding agents — well, and leaves
everything else to the tools underneath it.
sand is the Go successor to what used to be a shell script plus a
standalone Ansible playbook.
Where to go next
- Installation — install
sandand its one prerequisite. - Your First VM — the 30-second path to a running VM.
- How Provisioning Works — the base-image/clone/finalize model that makes each VM fast to create.
- Where VMs Run — putting VMs on another machine.