Skip to content

Checkpoint Protocol

Designed by Winnie 🦁 | Approved by Chris | 2026-02-27

Replaces the 4-line checkpoint block in SOUL.md with a verifiable, receipt-based protocol.

Full Checkpoint (session end, /new, sprint end)

Section titled “Full Checkpoint (session end, /new, sprint end)”

Before any session close, /new, handover request, or end-of-sprint — ALL steps are required:

  1. Write HANDOVER.md — Overwrite using the exact template. Must contain all 5 sections:

    • ## Last Action
    • ## System State
    • ## Scope Rules
    • ## Dev Model
    • ## Next Actions
  2. Append daily log — Add session summary to memory/daily/YYYY-MM-DD.md (today’s date, append-only).

  3. Update HEARTBEAT.md — Refresh Now:, Next:, Blockers: if anything changed this session.

  4. Update MC tasks — Mark completed tasks as done, add new blockers as notes:

    Terminal window
    curl -s -X PATCH "http://127.0.0.1:3001/api/tasks/<ID>" \
    -H "Content-Type: application/json" \
    -d '{"status":"done","agent":"<YourName>"}'
  5. Self-verify — Read back HANDOVER.md. Confirm:

    • All 5 template sections present
    • ## Last Action matches this session’s actual work (not stale from a previous session)
    • Dates and system state are current
    • If any check fails: fix and re-verify (max 2 retries, then flag in receipt)
  6. Emit receipt — Output the checkpoint receipt as your final message:

    ✅ CHECKPOINT @ <ISO-timestamp>
    - HANDOVER: written (Last Action: "<one-line summary>")
    - Daily: appended (memory/daily/<YYYY-MM-DD>.md)
    - HEARTBEAT: updated (Now: "<current>", Next: "<next>")
    - MC: <task updates or "no changes">
    - Verify: PASS|FAIL (<details if fail>)

Quick Checkpoint (mid-session, ~30-min mark on long runs)

Section titled “Quick Checkpoint (mid-session, ~30-min mark on long runs)”
  1. Overwrite HANDOVER.md only (current state)
  2. Append progress note to daily log
  3. No receipt required
  • A checkpoint is NOT complete until the receipt is emitted.
  • If self-verify fails after 2 retries, emit the receipt with Verify: FAIL and describe the issue.
  • Cron sprints MUST run a full checkpoint before session ends, regardless of whether tasks were completed.

Path: /home/winnie/.openclaw/bin/verify-checkpoint.sh

Terminal window
# Usage
verify-checkpoint.sh [max_age_minutes]
# Default: max age = 10 minutes
# Exit: 0 = all pass, 1 = any fail
# Output (JSON):
# {"handover":"pass","daily":"pass","heartbeat":"pass","overall":"pass","errors":[]}

Checks:

  • HANDOVER.md exists, has all 5 sections, was modified within max_age_minutes
  • memory/daily/YYYY-MM-DD.md exists and is non-empty
  • HEARTBEAT.md exists and contains Now:, Next:, Blockers:

Append to all sprint and brief cron prompts:

## Checkpoint (mandatory)
Before session ends, run the full checkpoint protocol (SOUL.md § Session End / Checkpoint).
Output the checkpoint receipt as your final message.
A sprint without a receipt is incomplete.
AgentWorkspaceSOUL.md
main (Winnie)/home/winnie/.openclaw/workspace/SOUL.md
pm-frankel (Frankel)/home/winnie/.openclaw/agents/pm-frankel/workspace/SOUL.md
pm-s1defence (Shield)/home/winnie/.openclaw/agents/pm-s1defence/workspace/SOUL.md
pm-r6records (Vinyl)/home/winnie/.openclaw/agents/pm-r6records/workspace/SOUL.md
dev-frontend (Pixel)/home/winnie/.openclaw/agents/dev-frontend/workspace/SOUL.md
dev-backend (Stack)/home/winnie/.openclaw/agents/dev-backend/workspace/SOUL.md
dev-ops (Pipe)/home/winnie/.openclaw/agents/dev-ops/workspace/SOUL.md
research (Scout)/home/winnie/.openclaw/agents/research/workspace/SOUL.md
monitor (Sentry)/home/winnie/.openclaw/agents/monitor/workspace/SOUL.md

All 9 agents follow the identical checkpoint protocol. The checkpoint section text is the same across all agents.