A single Go binary: create persistent Linux VMs on macOS, Linux or Windows, vibecode inside them with models from Ollama Cloud, and publish any VM port to a real HTTPS subdomain through your Cloudflare Tunnel. macOS uses Virtualization.framework; Linux uses KVM through Firecracker; Windows uses QEMU on the Windows Hypervisor Platform.
phone/laptop ──► exe API (bind to Tailscale IP)
│
├── VMs (Virtualization.framework or Firecracker, cloud-init, SSH)
│ └── agent: Ollama (glm-5.2, …) drives bash/write/read over SSH
│
├── SSH gate :2222 (ssh exe@mac = lobby, ssh <vm>@mac = the VM)
│
└── reverse proxy :8090 ◄── cloudflared tunnel (LAN) ◄── https://app.your.domain
└── Host header ──► VM_IP:PORT
1. Open the desktop. On Linux and macOS, x86-64 or ARM64, one line installs the latest release and starts it; it asks where exe should listen first (what it asks and does):
curl -fsSL https://exe.v2core.com/install.sh | shOn Windows (x86-64), the same from PowerShell:
irm https://exe.v2core.com/install.ps1 | iexexe update moves it to the next release, and CHANGELOG.md
says what each release changed. To work on exe itself, build it instead.
That needs Go 1.25 or newer:
git clone https://github.com/livid/exe.git
cd exe
make build # also builds exe-net-helper on Linux
# Windows: go build -o exe.exe ./cmd/exe
./exe init # writes ~/.exe/config.json
./exe serve # run the daemon; it keeps this terminalOpen http://127.0.0.1:7777: the desktop is the first thing that works, and it needs nothing else. A Linux machine without KVM or Firecracker still gets it, with the apps, the Terminal and the Hub, and an empty VM list; see Running without VMs.
2. A VM, from a second terminal (serve has the first; an installed exe
is exe, not ./exe). Linux and Windows
have
