CI runners with a whole VM
Run tests that need Docker, systemd or KVM on a fresh VM per job, from GitHub Actions or any CI, billed by the second.
For Platform and DevOps engineers
Why it pays
- Tests that need a real machine Docker Compose stacks, systemd services, kernel modules and emulators work as they do in production.
- Fresh every time Each job starts from a template and is deleted afterwards. Nothing leaks between runs.
- Per-second billing A four-minute job pays for four minutes, with no per-minute rounding.
Step by step
Build a CI template
Install toolchains and warm caches once.
CLI
harebox new --name ci-base harebox exec current -- ./install-ci-tools.sh harebox template save current --name ci-baseFrom any CI: run one job in a fresh VM
One command starts a sandbox from your template, runs the job, deletes the sandbox and exits with the job's own code.
--keep-on-failurekeeps a failed job's machine for inspection, and a cancelled job still cleans up.CLI
harebox run --from ci-base --size large --keep-on-failure -- make testPython
box = hb.create(template="ci-base", ttl_seconds=1800, name="ci-job") try: result = box.run("make test") raise SystemExit(result["exit_code"]) finally: box.delete()TypeScript
const box = await hb.create({ template: "ci-base", ttl_seconds: 1800, name: "ci-job" }); try { const r = await box.run("make test"); process.exitCode = r.exit_code ?? 1; } finally { await hb.deleteSandbox(box.id); }Later: GitHub Actions labels
Planned: once the HareBox GitHub App is connected, a
runs-onlabel picks the machine size. It isn't connected yet, so useharebox runfrom any CI today.GitHub Actions
# .github/workflows/test.yml jobs: test: runs-on: harebox-large steps: - uses: actions/checkout@v4 - run: docker compose up -d && make test
Tips
- Keep deployments on Shared. Spot costs the same and can be preempted with two minutes' notice.
- Use
--ttlon every CI sandbox so a crashed pipeline can't leave one running. - Nested KVM lets a job boot an Android emulator or a Firecracker microVM.
Related use cases
Long-running autonomous agents
Let an agent work on a task for days, with its files, tools and browser intact, waking on a schedule or a webhook.
See the stepsUntrusted and agent-written code
Run code you didn't write behind its own kernel, with secrets kept out of the machine and a firewall the code can't remove.
See the stepsHybrid local and cloud agents
Keep your coding agent on your laptop and send heavy builds, Docker stacks and parallel tests to HareBox, so the laptop stays quiet.
See the steps

