Handoffs
What you'll learn
- What a handoff is and what it's deliberately not.
- The fields every handoff carries and how they ground the next run.
- How structured handoffs and Markdown rendering coexist.
- What the self-audit checklist tells you about a finished run.
Handoff
A durable, structured run summary for the next agent or human reviewer. It records what happened, what was validated, what remains uncertain, and where to resume.
A handoff is not a transcript and not a chat log. It's the concise continuity record that lets the next actor pick up without re-deriving everything from scratch.
The contract
Every handoff carries:
completed · paused · failed · requires_review.capability_receipt records.Structured and Markdown
Craik persists handoffs as craik.handoff records in the local SQLite store.
The structured handoff is the durable source of truth. The Markdown
rendering is a readable view of the same record — useful for code review,
release notes, and "tell me what just happened" inspection.
craik handoff create task_review_docs \
--summary "Updated docs and recorded current state." \
--test-run pytest
craik handoff show task_review_docs --markdown
craik handoff show task_review_docs
The self-audit
Every handoff includes a self-audit checklist that asks explicit questions about the run:
schema_validated
Did the runtime check that produced records match their declared schemas?
redaction_reviewed
Did someone (human or runtime) confirm receipts and handoffs are free of unredacted secrets?
receipts_reviewed
Were the produced receipts inspected and joined back to the actions they describe?
assumptions_reviewed
Were open assumptions promoted, refuted, or explicitly carried forward?
validation_recorded
Are the commands run and their outcomes captured in commands_and_validation?
policy_exceptions_disclosed
Are all fail-open paths and policy boundary hits called out in policy_exceptions?
Incomplete handoffs are valid — a run that crashed mid-stream still writes one. What's not valid is hiding that incompleteness. The self-audit makes missing validation or unresolved context visible to whoever picks up the work next.
How the next agent uses a handoff
When craik onboard runs for the next task, it pulls in the most recent
handoffs for the project (recent_handoffs in the onboarding payload).
The next agent's case file inherits:
- The
summaryso context isn't reconstructed from scratch. - Open
assumptionsandcontext_debtas carryovers. policy_exceptionsso the new runner knows where the system was running hot.next_stepsas a starting menu of actions.
That is the loop. Each handoff is a node in the work graph. Receipts are the edges that explain how the run got from case file to handoff.