0.3.0
Bunkerbox 0.3.0
The "pinhole" release.
Passthrough — host tooling from inside the VM
The headliner. The VM runs Alpine. Your project needs cargo, make, go,
npm. These aren't in the VM, and baking them into the image ties you to one
distro's toolchain forever.
Passthrough solves this with a tiny static binary (bunkerbox-vscomm) inside
the container and a tokio daemon on the host, connected over virtio-vsock. You
whitelist commands in .bunkerbox/env.conf:
passthrough:
- "cargo *"
- "make *"
- "go *"When the AI agent calls cargo build, the call tunnels through the vsock
channel to the host daemon. The daemon checks the whitelist, spawns the real
command inside the overlay workspace, and streams stdout, stderr, and the exit
code back to the AI. The agent sees real build output. The command runs with
your host's real HOME and caches — .cargo/registry, .cache/go-build,
.npm are shared, not re-downloaded.
The VM always wins: if a command already exists in the container, no symlink is
created. Passthrough only fills gaps. Only whitelisted commands get through.
Everything else stays locked inside the bunker.
Auto-detection — zero-config first run
When .bunkerbox/env.conf is created (or passthrough is empty), Bunkerbox
scans your repository root for build system files and pre-fills the whitelist
automatically. Nine detectors ship out of the box:
| Detects | Whitelists |
|---|---|
Cargo.toml |
cargo * |
Makefile / makefile / GNUmakefile |
make * |
package.json |
npm *, npx * |
pyproject.toml / setup.py / setup.cfg |
python *, pip * |
go.mod |
go * |
CMakeLists.txt |
cmake *, make * |
build.gradle* / settings.gradle* / gradlew |
gradle *, ./gradlew * |
pom.xml |
mvn * |
meson.build |
meson *, ninja * |
If your project has a Cargo.toml and a Makefile, both show up. Edit the
list anytime. Add one command, detection stops helping — you're in charge.
Auto-sync — changes land in your repo when the container exits
Overlay workspace changes are now automatically synced back to your real
repository on container exit. No bunkerbox sync step needed. The AI works,
the container stops, your files are updated. Review the diff, commit, move on.
Bind mounts are gone
Excluded directories (target/, node_modules/, etc.) used to be bind-mounted
to host storage to save quota space. This broke cargo clean and rm -rf —
Linux refuses to delete a bind mount point. They're now normal overlay
directories. Everything lives in the loopback image. If you need more headroom,
bump quota in env.conf. The default auto-quota floor was raised from 1 GB
to 5 GB to match.
Documentation
A full tutorial walks you from git clone to reviewing the AI's Git diff,
explaining why at each step — not just what to type. A dedicated Passthrough
guide covers the vsock architecture, security model, and configuration syntax.
The config schema is updated. All public-facing text now says "Bunkerbox"
instead of the underlying VM runtime name.
Under the hood
| What | Where |
|---|---|
| Host-side vsock daemon (tokio) | src/daemon.rs |
| Guest-side proxy binary (musl static) | src/bin/bunkerbox-vscomm.rs |
| Shared protocol + frame codec | src/vscomm/mod.rs |
| Build system auto-detectors | src/vscomm/buildsys/ (9 files) |
| Passthrough doc | docs/guides/passthrough.md |
| Tutorial | docs/guides/tutorial.md |
New Rust dependencies: tokio, tokio-vsock, libc.
Config change: minion: passthrough: in env.conf is now just passthrough:.
The word "minion" does not appear anywhere in the project.