Files
pi-devbox/AGENTS.md
T
pi c139be326f refactor: re-brand the opencode-devbox with-pi variant (single source of truth)
pi-devbox no longer installs pi itself. The Dockerfile is now a thin
FROM joakimp/opencode-devbox:latest-with-pi (overridable via BASE_IMAGE),
inheriting pi + pi-toolkit + pi-extensions + pi-fork (fork) +
pi-observational-memory (recall) + the LAN-access helper + all base tooling
from the single source of truth. Eliminates the install-logic duplication
that drifted against opencode-devbox/Dockerfile.variant (decision #3).

Consequences (documented in CHANGELOG/AGENTS):
- The image now ALSO contains opencode (with-pi has INSTALL_OPENCODE=true).
  A leaner pi-only image would need a dedicated pi-only variant upstream.
- Publish ordering: release opencode-devbox first so latest-with-pi carries
  the target pi version, THEN tag this repo. The smoke test asserts
  pi --version matches the tag (EXPECTED_PI_VERSION) and fails loudly if the
  base is stale — turning the version coupling into an enforced ordering guard.

CI: drop PI_VERSION build-arg (Dockerfile installs nothing); keep tag->version
resolution to feed the smoke base-freshness guard. Smoke adds fork/recall
clone + node_modules + settings.json registration checks; size threshold
2200 -> 2900 MB (now tracks with-pi). Docs updated across README, AGENTS,
DOCKER_HUB, .env.example, docker-compose.
2026-06-03 15:51:41 +02:00

4.4 KiB

AGENTS.md — pi-devbox

Container image that re-brands the opencode-devbox with-pi variant as a pi-focused image. As of 2026-06-03 it no longer installs pi itself.

Repository layout

  • Dockerfile — thin re-brand: FROM opencode-devbox:latest-with-pi (overridable via BASE_IMAGE arg). No install logic of its own — pi + companions are inherited from the with-pi variant. This refactor removed the install-logic duplication that used to drift against opencode-devbox/Dockerfile.variant.
  • docker-compose.yml — compose file for local use
  • .env.example — environment variable template
  • scripts/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 latest-with-pi, so the publish ordering matters: rebuild opencode-devbox first so latest-with-pi carries the target pi version, then tag this repo. The smoke test asserts pi --version matches 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

  1. Ensure opencode-devbox has been released so joakimp/opencode-devbox:latest-with-pi carries the target pi version (and the fork/recall extensions). This is the hard prerequisite — the smoke guard enforces it.
  2. Update CHANGELOG.md: promote UnreleasedvX.Y.Z — YYYY-MM-DD
  3. Add fresh ## Unreleased section
  4. 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/opencode-devbox:latest-with-pi — the single source of truth for the pi install + companions. Rebuilt whenever opencode-devbox releases.
  • 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. Because it FROMs with-pi, the image also contains opencode.
  • Companion repos: cloned to /opt/ by the with-pi 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 2900 MB (tracks the with-pi variant) — update if the image legitimately grows past it.
  • The CI still resolves the tag's pi version, but only to feed EXPECTED_PI_VERSION to 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 latest-with-pi, override the BASE_IMAGE arg (a version tag 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 match FROM in Dockerfile), "what's inside" (now includes opencode + fork/recall).
  • AGENTS.md (this file) — Key facts block (base-image tag, inherited content), smoke-test threshold number.
  • CHANGELOG.md — promote Unreleased only on tag, but record post-release fixes in a fresh Unreleased block.
  • 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).
  • Dockerfile BASE_IMAGE ARG default — the with-pi 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.