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.

zsh — install
$ curl -fsSL https://homemade.dev/install.sh | bash✓ installed → ~/.local/bin/homemade$ homemade login✓ signed in as [email protected]→ ready

or: 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>
zsh — homemade vms
$ 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-auth

A 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
zsh — vms shell
$ homemade vms shell misty-fern-142Choose a terminal session:  1) bash (detached) — sess_01h2…  2) New terminalSelection: 2✓ attached~.detached — session is still running

Keys 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
ci job
$ 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  main

Stable 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
channels
$ 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.