Skip to content

Runtime

Every command that executes work — goga pipeline and goga build — launches the same project image as an isolated Docker container. This page documents the container contract shared by both: the image requirement, the pre-launch version check, proxy and host networking, and credential mounts.

The host side of goga is a thin launcher: it assembles one docker run invocation, forwards the resolved configuration, and propagates the container's exit code. Everything that interprets pipelines, drives agents, and executes plans ships inside the image — the host needs only Docker and the goga package itself.

The image

The top-level image field in .goga/config.yml selects the image both commands launch. A project Dockerfile may additionally be declared for --update to build the image from source. When the field is unset, the command exits with an error naming image before any container is started.

Prerequisite on the host — a working Docker daemon:

docker info

Pre-launch version check

Before any launch, the goga version installed on the host and the goga version inside the project image must agree at the (major, minor) level. The image side is measured by one short-lived probe container (roughly a second) that asks the image for its installed goga version — captured silently, with no mounts, env-file, or credentials. The host side is read from the installed distribution metadata. A patch-level difference agrees; only a major or minor difference counts as a mismatch.

Situation Behavior
Host and image agree at (major, minor) Launch proceeds, silently
Host and image differ at (major, minor) Message on stderr, exit 1 — the container is not started
Image cannot answer the probe (no python3 or no goga inside the image) Message on stderr, exit 1 — the container is not started
Host version undeterminable (goga not installed for this interpreter, or broken metadata) Message on stderr, exit 1 — the container is not started
Image reports version 0.0.0 (a locally built image without a stamped version) Warning on stderr, launch continues

Every refusal message names the remedy. To skip the check entirely, set GOGA_SKIP_VERSION_CHECK=1 — both the probe and the comparison are bypassed (zero extra containers, zero overhead), and the launch behaves exactly as before the check existed:

GOGA_SKIP_VERSION_CHECK=1 goga pipeline deploy

Proxy and hosts

--proxy URL (and pipeline.proxy / build.proxy in .goga/config.yml) route the container's traffic through a corporate proxy. When a proxy is resolved, three variables are written to the container env-file: HTTP_PROXY, HTTPS_PROXY, and NO_PROXY=localhost,127.0.0.1 (fixed; cannot be overridden).

--add-host HOST:IP (and pipeline.hosts / build.hosts in .goga/config.yml) translate to docker run --add-host HOST:IP flags; CLI entries merge on top of config with the CLI winning on key conflict.

Credential mounts

Credential files for claude (~/.claude/.credentials.json), codex (~/.codex/auth.json), and opencode (~/.local/share/opencode/auth.json) are detected on the host and bind-mounted read-only into the container automatically (no flag) — for goga pipeline in the run form only, for goga build on every launch. Detection is agent-agnostic; only files that exist are mounted. The pipeline info forms mount no credentials (they execute nothing).