03629cdac7
The pi-only building block now lives in this repo as the internal base-pi-only tag (produced by opencode-devbox CI from Dockerfile.variant, INSTALL_OPENCODE=false) instead of opencode-devbox:latest-pi-only — so an 'opencode-devbox' tag never ships without opencode. - Dockerfile: BASE_IMAGE default joakimp/opencode-devbox:latest-pi-only -> joakimp/pi-devbox:base-pi-only. - Updated README, AGENTS, DOCKER_HUB, docker-compose, CHANGELOG. - Single source of truth unchanged (opencode-devbox/Dockerfile.variant); publish ordering + EXPECTED_PI_VERSION smoke guard unchanged.
5.0 KiB
5.0 KiB
AGENTS.md — pi-devbox
Container image that re-brands the opencode-devbox pi-only variant as a pi-focused image. As of 2026-06-03 it no longer installs pi itself.
Repository layout
Dockerfile— thin re-brand:FROM joakimp/pi-devbox:base-pi-only(overridable viaBASE_IMAGEarg). No install logic of its own — pi + companions are inherited from the pi-only build (builtINSTALL_OPENCODE=false, so no opencode — that's the distinction fromopencode-devbox:latest-with-pi). Thebase-pi-onlytag is produced by opencode-devbox CI (fromopencode-devbox/Dockerfile.variant) but published into THIS repo as an internal building-block tag. This refactor removed the install-logic duplication that used to drift againstopencode-devbox/Dockerfile.variant.docker-compose.yml— compose file for local use.env.example— environment variable templatescripts/smoke-test.sh— sanity checks run by CI before pushing to Docker Hub.gitea/workflows/docker-publish.yml— CI pipeline: smoke amd64 → multi-arch push → update Hub description
Versioning scheme
- Tags follow the pi npm version:
v{pi_version}[letter] - The image inherits pi from
base-pi-only, so the publish ordering matters: rebuild opencode-devbox first sojoakimp/pi-devbox:base-pi-onlycarries the target pi version, then tag this repo. The smoke test assertspi --versionmatches the tag (EXPECTED_PI_VERSION) and fails loudly if the base is stale. - Docker Hub:
joakimp/pi-devbox:vX.Y.Z+joakimp/pi-devbox:latest
Release-day checklist
- Ensure opencode-devbox has been released so
joakimp/pi-devbox:base-pi-onlycarries the target pi version (and the fork/recall extensions). This is the hard prerequisite — the smoke guard enforces it. - Update
CHANGELOG.md: promoteUnreleased→vX.Y.Z — YYYY-MM-DD - Add fresh
## Unreleasedsection - Commit, tag
vX.Y.Z, push tag → CI fires automatically
When drafting CHANGELOG entries, pull pi's release notes from the
CHANGELOG.md shipped inside the npm tarball:
cd /tmp && npm pack @earendil-works/pi-coding-agent@<version>
tar -xzf earendil-works-pi-coding-agent-<version>.tgz package/CHANGELOG.md
head -40 package/CHANGELOG.md
Pi's CHANGELOG has rich New Features / Added / Changed / Fixed sections
per version. Don't try to derive notes from the npm registry metadata
(npm view) — it doesn't include the changelog body.
Key facts
- Base image:
joakimp/pi-devbox:base-pi-only— an internal building-block tag (produced by opencode-devbox CI fromDockerfile.variant, the single source of truth for the pi install + companions; published into this repo, not under opencode-devbox). Rebuilt whenever opencode-devbox releases. Not for end users — they pulljoakimp/pi-devbox:latestor avX.Y.Ztag. - Inherited content: pi (
/usr/bin/pi), pi-toolkit, pi-extensions, pi-fork (fork), pi-observational-memory (recall), the mempalace bridge, the LAN-access helper, entrypoints, and all base dev tooling. The pi-only variant is builtINSTALL_OPENCODE=false, so the image does not contain opencode. - Companion repos: cloned to
/opt/by the pi-only build;entrypoint-user.sh(inherited) deploys/registers them on container start. - MemPalace: fully operational — inherited from base; bridge extension deployed by entrypoint.
Conventions
- This repo no longer installs pi or clones companion repos — do not re-add that logic here. Change it in
opencode-devbox/Dockerfile.variant(the single source of truth) instead. - The smoke test threshold is 2750 MB (tracks the pi-only variant) — update if the image legitimately grows past it.
- The CI still resolves the tag's pi version, but only to feed
EXPECTED_PI_VERSIONto the smoke base-freshness guard — it is no longer passed as a build-arg (nothing in the Dockerfile consumes it). - To pin a specific base build instead of tracking
base-pi-only, override theBASE_IMAGEarg (abase-pi-only-vX.Y.Ztag or a digest).
Documentation drift sweep
Before committing any non-trivial change, check that prose still matches code. Drift hotspots in this repo:
README.md— quick-start examples, env-var table, base-image reference (must matchFROMinDockerfile), "what's inside" (fork/recall; no opencode).AGENTS.md(this file) —Key factsblock (base-image tag, inherited content), smoke-test threshold number.CHANGELOG.md— promoteUnreleasedonly on tag, but record post-release fixes in a freshUnreleasedblock.DOCKER_HUB.md— hand-maintained slim Hub description; sync anything user-facing that changes (env vars, run command, base image)..env.example— hand-updated, must match Dockerfile/entrypoint env vars (including the inherited LAN-access knobs).DockerfileBASE_IMAGEARG default — the pi-only tag this image tracks.
Quick triage: git diff --name-only HEAD | xargs -I{} grep -l 'thing-you-changed' README.md AGENTS.md DOCKER_HUB.md CHANGELOG.md .env.example.