CLI
homemade, right in your terminal.
A single self-contained binary: no Node.js, no runtime to install. Create VMs, attach a persistent shell, and script the whole lifecycle from your laptop or from CI.
$ curl -fsSL https://homemade.dev/install.sh | bash✓ installed → ~/.local/bin/homemade$ homemade login✓ signed in as [email protected]→ readyor: brew install usehomemade/tap/homemade
Create VMs from your terminal
Every action available in the dashboard has a command: create a VM on a branch, wait for it to come up, list what's running, and change its power state, all scriptable.
- homemade vms create --branch <b> [--name <n>] [--linear-issue <id>] [--wait]
- homemade vms list / show / events / url: every VM you can see
- homemade vms stop | suspend | resume | recreate <vm>
$ homemade vms create --branch hm-142-fix-auth --waitvm created: misty-fern-142 (vm_01h9…)misty-fern-142-3000.onhomemade.comvm misty-fern-142: running✓ vm misty-fern-142 is running$ homemade vms listmisty-fern-142 running hm-142-fix-authA real shell, not a web widget
vms shell attaches your real terminal (raw TTY, full escape sequences) to a persistent guest session. Sessions belong to the VM, not the connection, so closing your laptop lid doesn't kill what's running.
- homemade vms shell <vm> [--session <id> | --new]
- Detach with a line-leading ~.; the session keeps running
- A dropped connection reconnects to the same session and replays scrollback
- Run homemade with no arguments for a full-screen TUI dashboard
$ homemade vms shell misty-fern-142Choose a terminal session: 1) bash (detached) — sess_01h2… 2) New terminalSelection: 2✓ attached~.detached — session is still runningKeys for CI, sessions for you
Mint an API key once, drop it in your CI provider's secret store, and every homemade command works headless: no browser, no device-login flow, no shared credentials file.
- homemade keys create --name <name> [--expires-in-days <d>]
- HOMEMADE_API_KEY always wins over a stored browser login
- Pair it with HOMEMADE_API_URL to point the CLI at a different environment
$ homemade keys create --name cistore this key now — it will not be shown again:hmk_live_9f2a…HOMEMADE_API_KEY="$CI_HOMEMADE_API_KEY" \ homemade projects list --org acmestorefront ready mainStable by default, next when you want it
Every request carries the CLI's version, and the API enforces a minimum. Stable tracks production releases; next tracks the development branch and can change between runs.
- homemade upgrade prints the install command for your CLI's own channel
- next builds stay on next, never a silent downgrade to stable
- An out-of-date CLI gets an HTTP 426 with the exact upgrade command
$ homemade upgradecurl -fsSL https://homemade.dev/install.sh | bash$ curl -fsSL https://homemade.dev/install.sh | bash -s -- --next✓ installed homemade (next channel)Get started
Your next VM is one command away.
Connect a repo, and get a full-stack dev environment with Claude Code and Codex already running, before your coffee's done.