BoxCI

GitHub Actions runners on your own InstaBox VMs. They wake up for CI and pause again when idle.

npm install -g @balasivagn/boxci

What it is

BoxCI turns InstaBox VMs into dedicated GitHub Actions runners for your repository. One command plans the setup, a local workflow diff wires up CI, and your jobs run on machines you control.

Already have CI? boxci migrate moves your existing jobs onto the pool, Blacksmith or ubuntu-latest alike, as a local diff you review. It ships with an agent skill, so your coding agent can do the migration with you.

Pick jobs that run on Linux x64 and whose steps work on both the InstaBox VM and the hosted Ubuntu fallback.

Get started

  1. Install the CLI with npm install -g @balasivagn/boxci, then run boxci --help to list commands.
  2. Initialize from your app's checkout with boxci init. It reuses your GitHub and InstaBox sign-ins, shows the plan for your approval, then sets up the runner. Workflow changes stay local.
  3. Migrate existing CI with boxci migrate. Select the workflow jobs to move onto the pool, then review and approve the local diff.
cd /path/to/your-app
boxci init --dry-run
boxci init
boxci migrate

Then review, commit, and push the workflow changes through your usual process. BoxCI creates no branch or PR.

Why BoxCI

How it works

BoxCI architecture: local setup, hosted wake routing, and passive monitoring
  1. Wake. A hosted Ubuntu job reads the pool variable and CI secret. For a trusted event it wakes every pool VM at once and checks their runner services. This privileged step never checks out PR code.
  2. Route. If the whole pool is ready, the build targets your dedicated self-hosted label. Otherwise, and always for fork PRs, it falls back to hosted ubuntu-24.04.
  3. Run. GitHub assigns the build to an idle runner with matching labels. Afterwards the VMs keep InstaBox's normal idle suspension.

Commands

Command What it does
boxci --version Show the installed CLI version
boxci init Set up runners, secret and pool variable; write only the wake helper
boxci init --dry-run Preview setup without creating anything
boxci migrate Move existing workflow jobs onto the pool
boxci ci run Dispatch a connected application workflow; use --workflow file.yml to select one
boxci status VM and runner states plus recent jobs (passive)
boxci doctor Check account, quota, mapping, merge state, key expiry
boxci dashboard Start or reopen the background, read-only dashboard
boxci wake Explicitly wake the pool
boxci pool add --count 1 Add a VM to the pool, within your quota
boxci auth renew Rotate the 30-day CI credential

Run boxci --help to see every command and flag in your installed version.

Requirements

Good to know

Docs