Agent runtime containers for coding harnesses (Cursor first; more later).
Most agent images ship a language toolchain or a thin OS layer. This project is different: every image installs Docker, mise, and direnv, and wires them into the default shell profile so agents land in a working environment without extra setup.
That means:
- Docker — docker-in-docker ready (fuse-overlayfs + iptables-legacy), so agents can build and run containers
- zsh — default shell for the
ubuntuuser (Justfiles and agent sessions expect it) - mise — language/tool version management with shell activation by default;
/workspacepre-trusted - direnv — per-directory env loading, hooked after mise so PATH stays consistent;
/workspacewhitelisted
.cursor/
environment.json # Cursor Cloud Agent install/start hooks
cursor/ # Cursor cloud-agent style image
Dockerfile # Ubuntu 24.04 LTS base
install.sh # Docker, zsh, ubuntu user, mise, direnv (+ /workspace trust)
start.sh # Start dockerd + open docker.sock for the session
Justfile # local build recipes
On a fresh Ubuntu host (as root), run:
curl -fsSL https://raw.githubusercontent.com/iloveitaly/agent-containers/master/cursor/install.sh | bashRequires curl, gnupg, and ca-certificates.
This repo ships .cursor/environment.json, which curls cursor/install.sh on install and cursor/start.sh on start. Copy that file into other repos to reuse this environment without vendoring the scripts.
install only packages and configures Docker — it does not start the daemon. Cursor expects long-lived services in start; without it, docker fails with a missing daemon.
start.sh starts dockerd and opens /var/run/docker.sock for the current session. usermod -aG docker ubuntu from install.sh does not take effect until a new login, so without the chmod agents still hit socket permission errors.
install.sh also installs zsh as the ubuntu user's default shell, and writes global mise/direnv config so anything under /workspace is trusted without mise trust or direnv allow.
Prebuilt multi-arch image (linux/amd64, linux/arm64) on GHCR:
docker pull ghcr.io/iloveitaly/ubuntu-docker-mise-direnv:latest
docker run --rm -it ghcr.io/iloveitaly/ubuntu-docker-mise-direnv:latest bash -ljust build-cursorProduces ubuntu-docker-mise-direnv:local.
just testBuilds the image (if needed), then clones railpack inside the container and runs mise install + mise run build.