Docker Image Planned
Planned
Neither the base image nor the CLI build command exists yet. The sandbox image does.
Base image
A base runtime image, planned as ghcr.io/chamvi/node: Node 24, slim or distroless, running as a non-root user. It is built for several architectures and referenced by digest from the template repository.
Agent images
Agent repositories use a two-stage Dockerfile from the template:
- Build stage: install dependencies and bundle the app entry with
chamvi build. - Runtime stage: copy the bundle onto the base image and start it with an exec-form
CMD, soSIGTERMreaches Node directly and the engine can drain.
The same image serves every mode: the long-running app, and a one-shot chamvi run-job <agent> <trigger> for clusters that prefer Kubernetes CronJobs over in-process scheduling.
Tags for Flux
The template's CI pushes images tagged main-<sha>-<unix timestamp> for every push to the main branch, plus semver tags for releases. Flux image automation picks the newest tag and updates the HelmRelease. See Kubernetes & Flux.
Sandbox image
Agents that run untrusted code (reproducing a bug, running tests) do it in workspaces from a separate image, ghcr.io/chamvi/sandbox-node, built from images/sandbox-node. It runs as its own container (@chamvi/sandbox-docker) or pod (@chamvi/sandbox-k8s), never inside the agent's container.
- Contents:
node:24-trixie-slim(Node.js 24, npm, corepack), git, ca-certificates,tinias the entrypoint, GNU coreutilstimeout;/workspaceowned by uid 1000,USER 1000:1000. npm's cache, global prefix and corepack live under/tmp, so everything works on the read-only root filesystem the providers enforce. - Platforms:
linux/amd64andlinux/arm64. - Tags:
24, rebuilt on every change underimages/onmasterand weekly for base image security updates, and24-<short sha>, pushed once per commit that changes the image (the weekly rebuild moves only24). Pull requests that touch the image build and smoke-test it without pushing. - Pinning: reference a digest in production (
ghcr.io/chamvi/sandbox-node@sha256:...), or follow the mutable24tag withpull: 'always'(Docker) orimagePullPolicy: 'Always'(Kubernetes). - Extending: build
FROM ghcr.io/chamvi/sandbox-node:24, install packages as root, switch back toUSER 1000:1000and pass the image asimageto the provider. The providers needsh,cat,head,mkdir,dirname,cp,mv,rm, GNUtimeoutandgit.
On a Docker host, the agent needs access to the Docker API to start sandbox containers. That access is root on the host: give the agent a socket proxy that allows only containers, exec and images, or run rootless Docker. See @chamvi/sandbox-docker.