active/claw-image-build/SKILL.md
Build, publish, and verify OpenClaw Docker/GHCR images. Use when the user asks to build an OpenClaw image, publish or republish GHCR tags, bundle official plugins such as @openclaw/codex, @openclaw/slack, or @openclaw/diagnostics-otel, make or verify multi-arch linux/amd64 and linux/arm64 images, check GHCR visibility, secret-scan an image, enforce Codex image contract gates, or prove a published OpenClaw Docker image works.
npx skillsauth add kevinslin/skills claw-image-buildInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill for OpenClaw container image work from source checkout to published GHCR proof.
AGENTS.md: do not switch worktrees for git mutations, do not print secrets, do not print Docker auth configuration, and verify live sources when requested.git pull and report the dirty state. If the user asks for a new worktree, create it from the latest upstream default branch and preserve unrelated local changes.docs/install/docker.md and the relevant package manifests before choosing build args or plugin install strategy. Unless the user explicitly narrows or changes the plugin set, require @openclaw/codex, @openclaw/slack, and @openclaw/diagnostics-otel.origin/master but the default branch is different, fetch the default branch, record the exact commit, and state the branch name used.linux/amd64 explicitly for x86_64/amd64 proof unless the user says otherwise.ghcr.io/kevinslin/openclaw for Kevin's registry unless the user explicitly provides a different owner. Verify namespace and visibility with gh api../references/workflow.md before publishing or reporting success.Use the repo Dockerfile and repository-native build pipeline when it can build the requested image directly. Do not rebase onto an unrelated runtime image and do not modify built plugin contents after the final packaging stage.
For self-contained source-bundled images, build OpenClaw and bundled plugins from the same source revision whenever the repository supports it. Do not combine a newer OpenClaw source build with older published plugin packages. The default required plugin set is @openclaw/codex, @openclaw/slack, and @openclaw/diagnostics-otel; use the repository's standard bundled-extension packaging location and build args, for example OPENCLAW_EXTENSIONS=diagnostics-otel,codex,slack, unless the user explicitly mentions a different plugin set. Preserve manifests, runtime dependencies, source maps, assets, and generated output required for plugin discovery and runtime loading.
diagnostics-otel is a first-class packaged plugin for these images. It must not require openclaw plugins install, npm installation, network access, or filesystem mutation at container startup. Do not add runtime installation scripts for it; remove or replace manual diagnostics installation logic with packaged plugin coverage.
If native Docker source compile fails under cross-arch emulation but the local source build passes, use the proven runtime-image assembly pattern from ./references/workflow.md: build dist locally, then assemble per-platform runtime images with BuildKit --build-context built_dist=./dist. Use that fallback only when the repo Dockerfile cannot complete the requested source build.
For @openclaw/codex image work, build from an immutable OpenClaw commit with an OCI revision label, verify packaging and base-image digests inside the artifact, and run the #96872 thread/start behavioral contract from a validation stage or external harness. Do not rely on source Vitest running inside the production image.
For source-bundled plugins, "available" means:
extensions/<id>/package.json;/app/dist/extensions/<id>/;node openclaw.mjs plugins inspect <id> --runtime --json succeeds from the pulled published image;For external npm plugin images, "available" means:
/home/node/.openclaw/npm/projects/.../node_modules/<package>/package.json;node openclaw.mjs plugins inspect <id> --json reports status: "loaded" from the pulled published image.Do not rely on require.resolve("@openclaw/<plugin>/package.json") from /app unless the image intentionally bundles that package as a root/runtime dependency. External official plugins may be plugin-store installs rather than root app dependencies.
git status -sbgit rev-parse HEAD, git rev-parse --short=10 HEAD, and node -p "require('./package.json').version"docs/install/docker.mdDockerfileextensions/<plugin>/package.jsonnpm view @openclaw/<plugin> version dist.tarball --json only for images that intentionally install external npm plugin packages.<baseTag>-amd64<baseTag>-arm64docker buildx imagetools create./healthz returns HTTP 200;--network none startup succeeds after the image has been pulled.docker history --no-trunc keyword count.Read ./references/workflow.md before building or republishing an image. It contains command templates for the runtime assembly fallback, manifest creation, plugin verification, and secret checks.
development
Create, rename, audit, or close a tracked Codex task whose turns and status are persisted in the local thread ledger. Only use when directly invoked.
testing
Manage Git preflight, branch and worktree creation, and completed-work cleanup. Use when explicitly invoked.
databases
Automatically use for durable knowledge, configured project-context lookup, and schema-backed artifact layouts.
content-media
Create, update, or optimize skills and SKILL.md content.