Home-Network

agent-runner (sha-ddd04d460ef6)

Published 2026-10-31 15:50:35 +00:00 by ci-registry

Installation

docker pull gitea.home.keithjackson.dev/home-network/agent-runner:sha-ddd04d460ef6
sha256:df36d9b7fef56d141220a387f64fb864cede8e5af30513ebfeb3ab566d3f771d

About this package

pinned dev toolbox + Claude Code CLI: the PM dispatcher and the per-assignment worker agent

Image Layers

KIWI 11.1.1
ARG OPENTOFU_VERSION=1.9.0
ARG AGE_VERSION=1.2.1
ARG SOPS_VERSION=3.9.4
ARG FLUX_VERSION=2.4.0
ARG KUBECTL_VERSION=1.36.4
ARG HELM_VERSION=3.16.0
ARG KYVERNO_VERSION=1.19.0
ARG KYVERNO_JSON_VERSION=0.0.3
ARG CHAINSAW_VERSION=0.2.12
ARG YAMLLINT_VERSION=1.35.1
ARG YQ_VERSION=4.44.6
ARG CHECK_JSONSCHEMA_VERSION=0.29.4
ARG PROMTOOL_VERSION=3.14.0
ARG TARGETARCH=amd64
RUN |14 OPENTOFU_VERSION=1.9.0 AGE_VERSION=1.2.1 SOPS_VERSION=3.9.4 FLUX_VERSION=2.4.0 KUBECTL_VERSION=1.36.4 HELM_VERSION=3.16.0 KYVERNO_VERSION=1.19.0 KYVERNO_JSON_VERSION=0.0.3 CHAINSAW_VERSION=0.2.12 YAMLLINT_VERSION=1.35.1 YQ_VERSION=4.44.6 CHECK_JSONSCHEMA_VERSION=0.29.4 PROMTOOL_VERSION=3.14.0 TARGETARCH=amd64 /bin/sh -c dnf -y install --setopt=install_weak_deps=False libvirt-client qemu-img cloud-utils genisoimage openssh-clients ansible-core python3-libvirt python3-pip diffutils wireguard-tools qrencode git make jq unzip tar gzip xz which ca-certificates curl && dnf clean all # buildkit
RUN |14 OPENTOFU_VERSION=1.9.0 AGE_VERSION=1.2.1 SOPS_VERSION=3.9.4 FLUX_VERSION=2.4.0 KUBECTL_VERSION=1.36.4 HELM_VERSION=3.16.0 KYVERNO_VERSION=1.19.0 KYVERNO_JSON_VERSION=0.0.3 CHAINSAW_VERSION=0.2.12 YAMLLINT_VERSION=1.35.1 YQ_VERSION=4.44.6 CHECK_JSONSCHEMA_VERSION=0.29.4 PROMTOOL_VERSION=3.14.0 TARGETARCH=amd64 /bin/sh -c set -eux; curl -fsSL "https://github.com/opentofu/opentofu/releases/download/v${OPENTOFU_VERSION}/tofu_${OPENTOFU_VERSION}_linux_${TARGETARCH}.zip" -o /tmp/tofu.zip; unzip -d /usr/local/bin /tmp/tofu.zip tofu; chmod +x /usr/local/bin/tofu; curl -fsSL "https://github.com/FiloSottile/age/releases/download/v${AGE_VERSION}/age-v${AGE_VERSION}-linux-${TARGETARCH}.tar.gz" | tar -xz -C /tmp; install -m0755 /tmp/age/age /tmp/age/age-keygen /usr/local/bin/; curl -fsSL "https://github.com/getsops/sops/releases/download/v${SOPS_VERSION}/sops-v${SOPS_VERSION}.linux.${TARGETARCH}" -o /usr/local/bin/sops; chmod +x /usr/local/bin/sops; curl -fsSL "https://github.com/fluxcd/flux2/releases/download/v${FLUX_VERSION}/flux_${FLUX_VERSION}_linux_${TARGETARCH}.tar.gz" | tar -xz -C /usr/local/bin flux; curl -fsSL "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/${TARGETARCH}/kubectl" -o /usr/local/bin/kubectl; chmod +x /usr/local/bin/kubectl; curl -fsSL "https://get.helm.sh/helm-v${HELM_VERSION}-linux-${TARGETARCH}.tar.gz" | tar -xz -C /tmp; install -m0755 "/tmp/linux-${TARGETARCH}/helm" /usr/local/bin/helm; rm -rf /tmp/* # buildkit
RUN |14 OPENTOFU_VERSION=1.9.0 AGE_VERSION=1.2.1 SOPS_VERSION=3.9.4 FLUX_VERSION=2.4.0 KUBECTL_VERSION=1.36.4 HELM_VERSION=3.16.0 KYVERNO_VERSION=1.19.0 KYVERNO_JSON_VERSION=0.0.3 CHAINSAW_VERSION=0.2.12 YAMLLINT_VERSION=1.35.1 YQ_VERSION=4.44.6 CHECK_JSONSCHEMA_VERSION=0.29.4 PROMTOOL_VERSION=3.14.0 TARGETARCH=amd64 /bin/sh -c set -eux; python3 -m pip install --no-cache-dir --break-system-packages "yamllint==${YAMLLINT_VERSION}" "check-jsonschema==${CHECK_JSONSCHEMA_VERSION}"; curl -fsSL "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_${TARGETARCH}" -o /usr/local/bin/yq; chmod +x /usr/local/bin/yq; curl -fsSL "https://github.com/kyverno/chainsaw/releases/download/v${CHAINSAW_VERSION}/chainsaw_linux_${TARGETARCH}.tar.gz" | tar -xz -C /usr/local/bin chainsaw; KYVERNO_CLI_ARCH="$([ "${TARGETARCH}" = amd64 ] && echo x86_64 || echo "${TARGETARCH}")"; curl -fsSL "https://github.com/kyverno/kyverno/releases/download/v${KYVERNO_VERSION}/kyverno-cli_v${KYVERNO_VERSION}_linux_${KYVERNO_CLI_ARCH}.tar.gz" | tar -xz -C /usr/local/bin kyverno; curl -fsSL "https://github.com/kyverno/kyverno-json/releases/download/v${KYVERNO_JSON_VERSION}/kyverno-json_linux_${TARGETARCH}.tar.gz" | tar -xz -C /usr/local/bin kyverno-json; PROM_TARBALL="prometheus-${PROMTOOL_VERSION}.linux-${TARGETARCH}"; curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${PROMTOOL_VERSION}/${PROM_TARBALL}.tar.gz" | tar -xz -C /usr/local/bin --strip-components=1 "${PROM_TARBALL}/promtool"; chmod +x /usr/local/bin/yq /usr/local/bin/chainsaw /usr/local/bin/kyverno /usr/local/bin/kyverno-json /usr/local/bin/promtool; rm -rf /tmp/* # buildkit
RUN |14 OPENTOFU_VERSION=1.9.0 AGE_VERSION=1.2.1 SOPS_VERSION=3.9.4 FLUX_VERSION=2.4.0 KUBECTL_VERSION=1.36.4 HELM_VERSION=3.16.0 KYVERNO_VERSION=1.19.0 KYVERNO_JSON_VERSION=0.0.3 CHAINSAW_VERSION=0.2.12 YAMLLINT_VERSION=1.35.1 YQ_VERSION=4.44.6 CHECK_JSONSCHEMA_VERSION=0.29.4 PROMTOOL_VERSION=3.14.0 TARGETARCH=amd64 /bin/sh -c { echo "opentofu=${OPENTOFU_VERSION}"; echo "age=${AGE_VERSION}"; echo "sops=${SOPS_VERSION}"; echo "flux=${FLUX_VERSION}"; echo "kubectl=${KUBECTL_VERSION}"; echo "helm=${HELM_VERSION}"; echo "kyverno=${KYVERNO_VERSION}"; echo "kyverno-json=${KYVERNO_JSON_VERSION}"; echo "chainsaw=${CHAINSAW_VERSION}"; echo "yamllint=${YAMLLINT_VERSION}"; echo "yq=${YQ_VERSION}"; echo "check-jsonschema=${CHECK_JSONSCHEMA_VERSION}"; echo "promtool=${PROMTOOL_VERSION}"; } > /etc/dev-toolchain-versions # buildkit
WORKDIR /work
CMD ["/bin/bash"]
ARG AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a
ARG NODEJS_MAJOR=22
ARG CLAUDE_CODE_VERSION=2.1.285
ARG CLAUDE_CODE_MIN_VERSION=2.1.259
ARG AGENT_MODEL=claude-opus-5
ARG RUNNER_UID=65532
ARG RUNNER_GID=65532
LABEL org.opencontainers.image.title=agent-runner org.opencontainers.image.description=pinned dev toolbox + Claude Code CLI: the PM dispatcher and the per-assignment worker agent org.opencontainers.image.source=https://gitea.home.keithjackson.dev/Home-Network/home-network-k3s-impl org.opencontainers.image.documentation=platform/pm-agent/README.md homelab.keithjackson.dev/requirements=R-SEC-02,R-GITOPS-02
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; : "${NODEJS_MAJOR:?pass --build-arg NODEJS_MAJOR from infra/agent/versions.env}"; : "${CLAUDE_CODE_VERSION:?pass --build-arg CLAUDE_CODE_VERSION from infra/agent/versions.env}"; : "${AGENT_MODEL:?pass --build-arg AGENT_MODEL from infra/agent/versions.env}" # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; dnf -y module enable "nodejs:${NODEJS_MAJOR}" || true; dnf -y install --setopt=install_weak_deps=False nodejs npm; dnf clean all; npm install -g --no-fund --no-audit "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}"; npm cache clean --force; claude --version; installed="$(claude --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)"; [ -n "${installed}" ] || { echo "cannot read claude --version" >&2; exit 1; }; lowest="$(printf '%s\n%s\n' "${installed}" "${CLAUDE_CODE_MIN_VERSION}" | sort -V | head -1)"; [ "${lowest}" = "${CLAUDE_CODE_MIN_VERSION}" ] || { echo "claude ${installed} is below the ${CLAUDE_CODE_MIN_VERSION} floor needed for --permission-prompts none" >&2; exit 1; } # buildkit
COPY pm-dispatch.py /usr/local/bin/pm-dispatch # buildkit
COPY pm-worker /usr/local/bin/pm-worker # buildkit
COPY worker-job-template.yaml /etc/pm-agent/worker-job-template.yaml # buildkit
COPY pm-persona.md /etc/pm-agent/pm-persona.md # buildkit
COPY worker-rules.md /etc/pm-agent/worker-rules.md # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; chown root:root /usr/local/bin/pm-dispatch /usr/local/bin/pm-worker; chmod 0755 /usr/local/bin/pm-dispatch /usr/local/bin/pm-worker; chown -R root:root /etc/pm-agent; chmod 0644 /etc/pm-agent/*; python3 -c 'import ast,sys; ast.parse(open("/usr/local/bin/pm-dispatch").read())'; bash -n /usr/local/bin/pm-worker; test "$(stat -c '%U:%G %a' /usr/local/bin/pm-worker)" = 'root:root 755'; test "$(stat -c '%U:%G %a' /usr/local/bin/pm-dispatch)" = 'root:root 755' # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; /usr/local/bin/pm-worker --anything 2>&1 | grep -q 'takes no arguments'; /usr/local/bin/pm-dispatch --anything 2>&1 | grep -q 'takes no arguments' # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; echo "agent:x:${RUNNER_UID}:${RUNNER_GID}:pm agent:/workspace:/bin/bash" >> /etc/passwd; echo "agent:x:${RUNNER_GID}:" >> /etc/group; install -d -m 0775 -o "${RUNNER_UID}" -g "${RUNNER_GID}" /workspace # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; printf '%s\n' '[safe]' ' directory = *' '[advice]' ' detachedHead = false' '[init]' ' defaultBranch = main' > /etc/gitconfig; chmod 0644 /etc/gitconfig # buildkit
RUN |7 AGENT_BASE_IMAGE=gitea.home.keithjackson.dev/home-network/toolbox@sha256:d435fabd6fc43bf5bb4de0c1ea8c4b19d8cea5c858679bd1675ccbed471b528a NODEJS_MAJOR=22 CLAUDE_CODE_VERSION=2.1.285 CLAUDE_CODE_MIN_VERSION=2.1.259 AGENT_MODEL=claude-opus-5 RUNNER_UID=65532 RUNNER_GID=65532 /bin/sh -c set -eux; { echo "base=${AGENT_BASE_IMAGE}"; echo "nodejs=$(node --version)"; echo "npm=$(npm --version)"; echo "claude-code=$(claude --version)"; echo "claude-code-pin=${CLAUDE_CODE_VERSION}"; echo "model-default=${AGENT_MODEL}"; echo "python3=$(python3 --version)"; echo "git=$(git --version)"; echo "pm-dispatch=$(sha256sum /usr/local/bin/pm-dispatch | cut -d' ' -f1)"; echo "pm-worker=$(sha256sum /usr/local/bin/pm-worker | cut -d' ' -f1)"; } > /etc/agent-runner-versions; chmod 0444 /etc/agent-runner-versions # buildkit
ENV HOME=/workspace XDG_CACHE_HOME=/workspace/.cache XDG_CONFIG_HOME=/workspace/.config TMPDIR=/workspace/.tmp CLAUDE_CONFIG_DIR=/workspace/.claude CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 NPM_CONFIG_CACHE=/workspace/.cache/npm PYTHONDONTWRITEBYTECODE=1 PM_AGENT_MODEL=claude-opus-5 PM_WORKER_JOB_TEMPLATE=/etc/pm-agent/worker-job-template.yaml PM_PERSONA_FILE=/etc/pm-agent/pm-persona.md PM_WORKER_RULES_FILE=/etc/pm-agent/worker-rules.md
USER 65532:65532
WORKDIR /workspace
CMD ["/bin/bash"]

Labels

Key Value
homelab.keithjackson.dev/requirements R-SEC-02,R-GITOPS-02
io.buildah.version 1.43.5
org.opencontainers.image.description pinned dev toolbox + Claude Code CLI: the PM dispatcher and the per-assignment worker agent
org.opencontainers.image.documentation platform/pm-agent/README.md
org.opencontainers.image.licenses MIT
org.opencontainers.image.revision ddd04d460ef66e2339cb3387db16e7e2beb9c959
org.opencontainers.image.source https://gitea.home.keithjackson.dev/Home-Network/home-network-k3s-impl
org.opencontainers.image.title agent-runner
org.opencontainers.image.url https://fedoraproject.org/
org.opencontainers.image.vendor Fedora Project
org.opencontainers.image.version 44
Details
Container
2026-10-31 15:50:35 +00:00
2
OCI / Docker
linux/amd64
MIT
529 MiB
Versions (6) View all
sha-d7317606e7e3 2026-11-07
main 2026-11-07
sha-466f63ec3c3d 2026-10-31
sha-ddd04d460ef6 2026-10-31
sha-862773f31b25 2026-10-31