Repository navigation
v0.10.0
This release requires a person to approve new VM access, adds GitHub Actions runners on pool VMs, and lets you see and patch VMs whose software is out of date. It also fixes ssh to VMs on remote hosts, which was broken in 0.9.0. Read "Upgrading" first.
Highlights
- New access needs a person.
boxery grant,agent-forward on,new --grant,fork --grants, pi's/vm grantandvm_grantall show what would be granted and ask for approval. The CLI reads the answer only from/dev/tty, defaults to No, and refuses to run without a terminal, so pipingyesdoesn't approve anything. Listing, revoking and re-applying existing grants don't ask. For cron, CI or pool setup, addGRANT_CONFIRM=offto a profile'sconfig(#138, details). - GitHub Actions runners on your own host. Each job runs in a fresh pool VM, which is reset to its clean image afterwards. The GitHub token stays on the host, and the VM only gets a single-use JIT config (#141, docs):
boxery new r1 --headless --layers github-runner && boxery pool add r1 boxery runners token < token.txt
boxery runners onceregisters one runner with your ownghlogin, from wherever you run it. The host never holds a GitHub credential (#145).- See which VMs are out of date, and patch them in place.
boxery lshas a GUEST column:current,outdated(older layers, built more than 30 days ago, or waiting for a reboot) orunknown.boxery patch NAME(or--all) runs the layers again inside a running VM:apt-get full-upgrade, the kernel,playwright-core, the pi and opencode CLIs, and node. It restarts the VM if needed. For pool VMs, it capturesNAME@boxery-cleanagain, so later leases start patched (#137).
Security
- Security updates in every VM, and MPTCP turned off. Every VM, desktop or headless, now runs
apt-get full-upgrade(kernel included) when it's built. Before, VMs kept whatever the cached Ubuntu image had. MPTCP is turned off (net.mptcp.enabled=0) because of CVE-2026-98432, which has no fixed Ubuntu 24.04 kernel yet (#136). - The LLM proxy drops guest OpenAI billing headers. A VM can no longer pick another org or project with
openai-organization/openai-project. Set them on the host withOPENAI_ORG_ID/OPENAI_PROJECT_IDinproxy.env(#147).
Fixes
- ssh to VMs on remote hosts. In 0.9.0, a controller set up with
boxery setup user@hostwrote aKnownHostsCommandthat ssh couldn't run, so every VM failed host key verification. Local hosts were fine. Existing profiles are rewritten the next time you run a command (#149). - Locks that hold on uutils coreutils. Ubuntu 26.04's default
mkdirisn't atomic under a race. As a result, concurrent grants or revokes could lose an entry, and concurrentnews could get the same network slot or port. Both now use anO_EXCLlock (#129, #134). - macOS:
initno longer fails intermittently withBootstrap failed: 5: Input/output errorwhile launchd is still removing the old job (#132). initrefuses aHOMEthat isn't the account's, so it can't install services launchd or systemd would never load. Shell tests can no longer replace the real proxy on macOS (#140).tokens.jsonis parsed again only when it changes, not on every proxied request (#147).
Other changes
e2e.shchecks first that grants can be approved. Without a terminal, it needsGRANT_CONFIRM=offin the profile and otherwise exits before creating a VM (#151).- Agent behaviour evals for the MCP server, under
evals/: whichvm_*tools an agent uses, and whether it follows instructions (#148). - Docs: a new README, tagline, hero diagram and promo video, and a research section that starts with hunk's test suite on macOS vs boxery VMs vs Docker (#128, #130, #131, #133, #135, #139, #142).
Upgrading
- Upgrade the host before the controllers (
boxery upgrade-host). - Scripts that run
boxery grantwithout a terminal now fail. Either have a person run them, or addGRANT_CONFIRM=offto that profile'sconfig. That setting turns off CLI confirmation for the profile, so use it only where an agent adding grants unprompted is acceptable. MCP and pi clients need a confirm dialog or elicitation to grant anything; pi's print mode can't approve. - Rebuild the desktop base, and patch or recreate existing VMs, to get the security updates and MPTCP turned off. Upgrading the host doesn't change the software inside existing VMs.
boxery ls --refreshshows which ones are outdated, andboxery patch --allpatches those that are running. Patching doesn't change the base itself:boxery build-basedoes that, and it refuses while desktop VMs or snapshots still depend on the old base. Desktops built before 0.9.0 also have no VNC password until they're recreated from a new base. - Controllers on 0.9.0 with a remote host get working ssh once they're updated. Nothing else needs to be done.