Which Image Runs
An Actions job never runs the standard image, and
image does not apply to it. The runner image and the standard image are separate builds with different tools.
Standard Image
Ubuntu 24.04 onlinux/amd64, with an unprivileged user, passwordless sudo, and a writable /workspace.
Python packages install into a virtual environment that
user owns, and npm install -g installs under the user’s home, so neither needs sudo.
It does not include jq, wget, a C compiler, or Docker. Install them with sudo apt-get install, or bring your own image.
A route can run commands as another user, so read $HOME and id -un instead of hard-coding either.
Agents Image
The standard image plus the ten catalog agents, each installed at a pinned version and checked at build time. A catalog launch starts from it, so the agent is ready in seconds instead of installing at launch.
Agents live in the user’s
~/.local/bin, which leads PATH. A launch that cannot use this image falls back to the agent’s own setup commands, which install the same agent when it starts. A manifest for your own agent sets image like any other sandbox request.
Actions Runner Image
Ubuntu 24.04 onlinux/amd64, running one GitHub runner as the non-root user runner. It is smaller than a GitHub-hosted image, so install what is missing.
The tool cache holds the versions
actions/setup-node, actions/setup-python, and actions/setup-go resolve first, so a loose request such as 3.x needs no download. Other versions download when the job asks. Node.js (default) is the version on PATH before any setup action runs.
The basic image has no Docker, so docker build, container actions, and service containers fail. The -full label adds the tools below on the same size.
The full image also includes
iptables. Until BoxRouter verifies it for your workspace, Actions readiness reports profile_unavailable and jobs that use it stay queued. Runners lists sizes and limits.
Updates and Pinning
An image never changes under a running sandbox. BoxRouter moves to a new build by publishing a new digest, and new sandboxes get it. Each build pins its Ubuntu package snapshot and tool versions. Treat the versions above as the current build, not a promise. When a job needs a tool at a fixed version, pin it yourself:actions/setup-* with an exact version for Actions, or your own image for sandboxes.