v0.1.0
Immutable
release. Only release title and notes can be modified.
0.1.0 (2026-07-12)
Features
- add direnv support and document per-directory GitHub tokens (bf294c4)
- add new-vm.sh to spin up Lima VMs in one command (30676d3)
- add optional Claude Code webhook notification hooks (#13) (728366b)
- add project role to clone an initial repo on provision (62c5789)
- automatically recreate base images (d57f72f)
- base: accept COLORTERM over SSH for truecolor in the VM (a8f39a8)
- base: install ncurses-term for non-xterm terminfo (2d1bb1b)
- claude-code: default the in-VM Claude Code theme to auto (960b8b1)
- claude-code: enable remote control at startup by default (1267958)
- configure direnv to load .env files and update docs (d82bc02)
- drop SSH authorized_keys URL support (2b0f40b)
- dynamically resolve user home directory instead of assuming /home/<username> (#5) (fd7d4e2)
- genericize GitHub org setup with github-org-setup script (#11) (86bdcf8)
- install gh CLI and configure git HTTPS auth via PAT (#4) (cb0f708)
- install jq and yq by default (#9) (763ae03)
- install Node.js from NodeSource instead of Debian repositories (#10) (cc48f89)
- make Docker registry proxy setup optional (off by default) (#12) (0b7e675)
- make primary system user configurable via
user_namevariable (#2) (c59174b) - mark onboarding as completed (4968973)
- new-vm: build a base image once and clone each VM from it (29bc838)
- new-vm: guard against reusing an existing instance's baked config (610ae4d)
- new-vm: prompt for disk size, registry proxy, and initial clone (167ac32)
- new-vm: provision once instead of on every boot (51e6332)
- new-vm: surface provisioning failures instead of failing silently (a16bed7)
- playbook: split provisioning into base/finalize phases (0122371)
- provision CLAUDE_CODE_OAUTH_TOKEN for headless auth (#15) (7824bda)
- registry: move data dir to sandbar with a migrate-then-cleanup (3658fa5)
- release: GoReleaser + Homebrew tap, and migrate CI to the sand binary (5ce56e1)
- remove Claude Code OAuth token support (efe2f69)
- remove GitHub organization support (3e6f37d)
- remove webhook notification support (c2f2df4)
- samba: tune smb.conf for macOS clients via vfs_fruit (#14) (6444a26)
- sand: drop no-op -y/-yes flags, document required flags (a7e03da)
- sand: embed the playbook and add a headless
sand create(8354431) - sand: make --git-name/--git-email optional, fall back to host git config (86019cb)
- secrets: apply on set + source env from profile and bashrc (9344649)
- secrets: edit/delete in TUI, rm auto-applies, role purges on removal (8d20a0a)
- secrets: host secrets store + VM rendering role (plan-11 phase 1) (8b11d10)
- secrets: sand secret CLI + provisioning integration (plan-11 phase 2) (a01a627)
- secrets: sand secret sync for live re-render (plan-11 phase 3) (4f9293b)
- secrets: TUI secrets panel + gated e2e tests (plan-11 phase 4) (06ce9d0)
- skip the Samba role in the Lima flow (df22523)
- strikethroo: right-size per-task model and effort tiers (6c7b060)
- tui: add Bubble Tea CRUD UI and claude-vm entry point (a993f13)
- tui: add file-transfer foundations (Copy, DirLister, dest prompt) (5defe95)
- tui: add limactl client and Runner abstraction (cc813c2)
- tui: add name search and disk-usage helper (plan 05 phase 1) (1055db5)
- tui: add Reset orchestration with optional preserve (phase 2) (d868651)
- tui: add reusable file browser + gated copy e2e test (b471f45)
- tui: cap default memory at half host RAM and warn on disk overflow (6c1c910)
- tui: create-form UX — field nav, info, GitHub labels; mark base image (90a453c)
- tui: directory autocomplete for the transfer destination (9862e2c)
- tui: guard destructive ops against non-managed VMs (2d1e327)
- tui: per-VM sizing + staging helpers for VM reset (phase 1) (003bc09)
- tui: port base/clone/finalize orchestration to Go (23f85b8)
- tui: relabel Disk as Max Disk and add real Disk Used column (plan 05 phase 2) (ccebec5)
- tui: reset flow — pre-filled form, preserve toggles (phase 3) (b7c71b4)
- tui: scaffold Go module and VM domain model (e142765)
- tui: shell into a VM (S) and drop the unused IP field (d940f01)
- tui: show a spinner while VM lifecycle actions run (1b10668)
- tui: show memory/disk as human sizes (GiB) in list and detail (a13d535)
- tui: stream VM lifecycle steps and cancel builds with ctrl+c (2d067d7)
- tui: wire Upload/Download actions and the transfer flow (b6975b7)
Bug Fixes
- add ~/.local/bin to PATH in ~/.bashrc after Claude Code install (#7) (cc8b241)
- add acl package, sort (6a65a7f)
- any-version is now any in cloudflare repo (94a4766)
- ci: drop removed --yes flag from lima-e2e sand create (2b4d8c3)
- deps: update module github.com/charmbracelet/x/ansi to v0.11.7 (#13) (e86c738)
- deps: update module golang.org/x/sys to v0.47.0 (#16) (ebb425e)
- install gh CLI before configuring GitHub PAT (#6) (b97388c)
- install: honor --ref in the curl | bash path (b6fb10d)
- new-vm: clear error when a flag is missing its value (1d10815)
- new-vm: correct ordering of the final summary banner (3794bb2)
- new-vm: don't break apt keyrings with a global umask (6a4ca82)
- new-vm: make --recreate discoverable over curl|bash (08acb67)
- new-vm: restart the VM after first provision (a884224)
- new-vm: simplify language (fd78c73)
- new-vm: stop final-message backticks running as commands (49f52f5)
- new-vm: validate cpus is a positive integer (ceeda8c)
- prevent tmux from overriding SSH_AUTH_SOCK symlink on attach (#1) (39af6be)
- project: strip trailing slash from clone URL before deriving paths (c7bad77)
- provision: sync only the playbook fileset into the guest (8f6c7ee)
- replace PII and internal hostnames with placeholders (0aba978)
- sand: default headless create's user to the host username (9cafced)
- secrets: source global env from ~/.profile; capture guest stdout cleanly (1e88166)
- tui: clear pending selection on back-out; keep browser navigable on load error (3d6d2ee)
- tui: clear the browser filter on navigate and select (92a3215)
- tui: compact the file browser and return to the VM after a transfer (178f604)
- tui: don't merge limactl stderr into parsed stdout (e17647e)
- tui: don't reset the dest autocomplete selection on cursor blink (25235b1)
- tui: let backspace edit form fields instead of navigating back (6058f0c)
- tui: nest a directory transfer under the destination (49afb8d)
- tui: read the guest home from cloud-config.yaml, not /home/<user> (e1bbe5b)
- tui: resolve the guest home from ssh.config, not the host username (a252fad)
- tui: seed create-form defaults and default blank fields like new-vm.sh (f2a308e)
- tui: surface committed search filter and move disk stat off the Update loop (299f787)
- tui: wrap streamed provision output to the viewport width (8c0f2f3)
- user: restore optional SSH authorized_keys for non-Lima users (d81b59e)
- wrong shell for claude code install (c5f83c5)