Skip to content

Summary of container images

This project ships ten container images, all hardened by default (non-root user, read-only root filesystem, minimal capability set, deny-all egress unless configured otherwise): eight workload images that each run a different coding/agentic CLI, a network-tunnelling image that lets you move egress enforcement out of a workload entirely, and a read-only volume bridge.

Shared Python-and-Node workload implementation

adal, aider, claude-code, codex, kilo-code, opencode, and qwen-code remain independently buildable images, but share their required Node.js, containment, gateway-client, and cloudflared setup through agent-images/shared/install-workload-base.sh. They also share the root-only network setup and non-root handoff through agent-images/shared/workload-entrypoint.sh. Each image still owns its CLI package, persistent-home layout, unprivileged user, optional package lists, and any agent-specific initialization; this is source-level sharing, not a separately published base image.

Shell shortcuts

The fully spelled-out docker run commands are the reference invocations. For repeat use, set up shell functions that preserve each image's hardened profile while launching an agent from the current project directory.

Custom configuration files

Each agent has a different configuration path inside its persistent home volume. See custom configuration files for the agent-specific configuration guidance for AdaL, Aider, Claude Code, Codex, OpenCode, Kilo Code, Qwen Code, and Hermes.

Network tunnelling

agent-gateway is a small, disposable sibling container that owns the egress allowlist on behalf of a workload container, which tunnels all of its outbound traffic to it over SSH instead of enforcing an allowlist on itself. This means a compromise of the workload gives an attacker no access to the rules governing its own network egress. It runs equally well as a same-host sibling or on a genuinely separate machine — same image, same mechanism, only reachability differs.

Volume bridge

volume-bridge is a read-only WebDAV sidecar for named agent-home volumes. It lets a trusted Docker operator expose selected volume paths to a host reader without placing the agent and consumer on the same Docker network. This supports host-side session-analysis tools as well as interactive inspection.

AdaL

adal packages SylphAI's AdaL terminal coding agent. Its browser-based sign-in, persistent settings/session state, MCP OAuth state, skills, and plugins stay in the mounted AdaL home volume; direct model providers and each optional integration require explicit egress.

Aider

aider packages Aider's git-native terminal pair-programming workflow. It pins the Python CLI, keeps its configuration and optional credential state in a persisted home volume, and disables update checks, analytics, and runtime Playwright installation by default.

Claude Code

claude-code packages the Claude Code CLI in a hardened container, with either an in-container egress allowlist (the default) or opt-in gateway-client mode via agent-gateway (above) for stronger isolation.

Codex

codex packages the OpenAI Codex CLI in the same Python-and-Node workload environment as claude-code. It supports API-key authentication and the CLI's device authorization flow, while keeping its configuration and authenticated state in a persisted home volume.

Hermes

hermes packages Hermes Agent, Nous Research's self-improving, multi-provider agentic CLI, with the same network-containment posture as claude-code — the same in-container allowlist or agent-gateway gateway-client mode, applied to a different workload.

Kilo Code

kilo-code packages Kilo CLI, the open-source, provider-neutral terminal coding agent. Its documentation starts with Kilo's hosted gateway, then explains how to add only the direct model provider, MCP server, source-control host, and package registry a user selects.

OpenCode

opencode packages OpenCode, a provider-agnostic terminal coding agent, with the same standard containment and gateway-client options. Its documentation starts with the OpenCode and model-catalog hosts, then explains how to add only the model-provider endpoints a user configures.

Qwen Code

qwen-code packages Qwen Code, an open-source terminal coding agent that supports Qwen, OpenAI-compatible, Anthropic, Gemini, and local model providers. Its own optional Docker/Podman sandbox is disabled: the hardened outer container is the security boundary, and is deliberately not given access to a container runtime.