The repository has two explicit image paths.
Dockerfile installs a pinned published pi package and intentionally uses the JSONL session backend:
1 2 3 4docker build \ --build-arg PI_PACKAGE_SPEC=@earendil-works/pi-coding-agent@0.80.3 \ --build-arg PI_PACKAGE_VERSION=0.80.3 \ -t oyster:published .
Run it with a persistent workspace and an explicit UI token:
1 2 3 4docker run --rm -p 4000:4000 \ -e PI_UI_TOKEN='<strong-random-token>' \ -v "$PWD:/workspace" \ oyster:published
Mount pi's credential files or provide supported provider environment variables when real model access is needed. Do not bake credentials into an image.
Dockerfile.local-pi requires a named BuildKit context and has no package-registry fallback:
1 2 3 4 5docker build -f Dockerfile.local-pi \ --build-context pi-source=./pi \ --build-arg PI_LOCAL_REV="$(git -C pi rev-parse HEAD)" \ --build-arg PI_LOCAL_VERSION=0.80.7 \ -t oyster:sqlite .
This image builds pi from that exact context, enables SQLite, and runs the process-level SQLite contract test during the image build.
Both images run npm test while building. Port 4000 is exposed by default.