Files
agentic-dev/.sandcastle
Danijel Martinek eadbb7ebd9 fix(work): emit completion signal to stop sandcastle agent loops
Sandcastle re-invokes agents up to maxIterations even when the work is
already done — the decomposer was looping 4x re-writing the same epic
on every dispatch. Two halves to the fix:

- Pass completionSignal: "<promise>COMPLETE</promise>" explicitly on
  all three run() calls (decompose, implementer, reviewer). Makes the
  contract visible alongside maxIterations instead of relying on
  sandcastle's default.
- Append a "Signal completion (required)" section to each prompt
  telling the agent to emit the literal marker as its final line when
  the work is genuinely done, plus a "do NOT emit if..." list to
  discourage premature signaling.
2026-05-13 19:11:44 +02:00
..

.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.