Distill PR Intent — Orchestrator
Goal
Run distill-pr-intent across a selected PR set, and persist:
- primary memo text (
.txt) - sidecar metadata (
.meta.json)
All outputs go to shared memory on EFS, and are automatically published to the public S3 bucket by the host timer.
Inputs
- repo: fixed
openclaw/openclaw - selection: one of:
last N(e.g. last 500)range <start..end>since <YYYY-MM-DD>
- skill_version: string (default
v1)
Output paths (persisted)
/memory/pr-intent/<skill_version>/openclaw-openclaw/<PR>.txt
/memory/pr-intent/<skill_version>/openclaw-openclaw/<PR>.meta.json
Determinism rule
- NEVER put timing/telemetry/debug into the primary
.txtmemo. - All telemetry goes into
.meta.json.
Workflow
- Determine PR list.
Examples:
# last N merged PR numbers
gh pr list -R openclaw/openclaw --state merged --limit 200 --json number --jq '.[].number'
# range
seq <start> <end>
- For each PR (sequential by default):
- Run
distill-pr-intent <PR>. - Write memo to
/memory/pr-intent/.../<PR>.txt. - Write metadata to
/memory/pr-intent/.../<PR>.meta.json.
Writing files (memory locking)
Use the locking helpers (required on EFS):
# memo
printf '%s\n' "$MEMO" | memory-write "/memory/pr-intent/<skill_version>/openclaw-openclaw/<PR>.txt"
# meta
printf '%s\n' "$META_JSON" | memory-write "/memory/pr-intent/<skill_version>/openclaw-openclaw/<PR>.meta.json"
Suggested metadata schema
{
"pr": 17392,
"repo": "openclaw/openclaw",
"state": "merged",
"skill_version": "v1",
"generated_at": "2026-02-15T19:00:00Z",
"patch_mode": "PATCH_OK",
"patch_bytes": 12345,
"model": "openai/gpt-5.2-codex",
"error": null
}
Failure handling
- On failure, still write
.meta.jsonwitherrorpopulated. - Memo file optional; if written, keep it short and point at
.meta.json.