Closes the gap the user hit running `pnpm work decompose --execute`: sandcastle errored with `Image 'sandcastle:template-vertical' not found locally. Build it first with 'sandcastle docker build-image'`, but neither the README nor the runbook documented this step. README.md: new "Sandcastle setup (one-time)" section after Quick reference. Three commands (docker info, build-image, auth) — the minimum needed to make dispatch work. Links to the runbook for the full lifecycle. docs/guides/runbook.md: Prerequisites in "Using Sandcastle" grow from 4 to 5 items. New step 2 walks through `sandcastle docker build-image`, quotes the exact "Image not found locally" error so agents searching for the string land on the fix, and shows the remove-image + rebuild flow for Dockerfile edits. .sandcastle/README.md: new "Build the sandbox image (one-time)" section parallel to the env section, cross-linking to the runbook. scripts/work/decompose.mjs + scripts/work/dispatch.mjs: when the sandcastle error message matches the "Image '.+' not found locally" pattern, the dispatcher now prints the build-image command inline above the generic "See runbook" line. The error stack itself remains unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
.sandcastle/
This directory holds prompt templates that the future orchestrator
(pnpm work dispatch in the sandcastle-dispatch-v1 epic) feeds to
sandcastle when dispatching
agents.
Prompt templates
| File | Role | Variables |
|---|---|---|
prd-eliciter.prompt.md |
Interview a human to produce a PRD draft | {{INITIAL_BRIEF}} |
adr-eliciter.prompt.md |
Interview a human to produce an ADR draft | {{INITIAL_PROPOSAL}} |
decomposer.prompt.md |
Turn a PRD into epic + story files | {{PRD_FILE_CONTENT}} |
implementer.prompt.md |
Execute a single task | {{TASK_FILE_CONTENT}} |
reviewer.prompt.md |
Review the implementer's diff | {{TASK_FILE_CONTENT}}, {{DIFF}} |
Convention: every prompt enforces "generators first"
Each prompt template starts with the same non-negotiable rule: the agent
must prefer pnpm turbo gen <kind> over hand-rolled scaffolding. This
applies to feature packages, events, jobs, realtime channels, optional
core packages, and atomic-design components. Hand-rolled code is only
acceptable when the generator's output doesn't cover the case — and even
then, the agent runs the generator first and modifies its output rather
than starting from scratch.
Environment
Configure runtime tokens via .env (gitignored). Copy .env.example
and fill values for the providers you use.
Build the sandbox image (one-time)
Sandcastle dispatches into a Docker image tagged sandcastle:<root-package-name>.
Build it once per clone before pnpm work dispatch --execute or
pnpm work decompose <id> --execute will work:
pnpm exec sandcastle docker build-image
# Tags: sandcastle:template-vertical
Rebuild after editing this Dockerfile:
pnpm exec sandcastle docker remove-image
pnpm exec sandcastle docker build-image
See docs/guides/runbook.md → Using Sandcastle → Prerequisites for the full setup.
Manual usage
Until the orchestrator ships, these templates are usable manually: copy
the relevant .prompt.md content into a Claude / Codex / other agent
session, fill the {{VARIABLE}} placeholders by hand, and run.