← All craftbooks

Thank-You Note Batch

Home and everyday lifeevalv1.0.0released 2026-06-05workflow: build-loop

Clear the owed-thanks list with notes that sound like you: read who is owed and for what from the correspondence roster, draft one note per person that names the actual gift or kindness — no template smell — then log every note so nobody who mattered goes unanswered. Locks the household voice and the coverage rules FIRST, then drafts the batch, then records it in the roster with a short run summary. Use for thank-you notes, clearing the owed-thanks list, 'we owe thank yous from the party', and post-holiday gratitude sweeps.

Steps

Entry step: scope. Each step names the specialist role it wants; the full working prompt is expandable.

  1. Scope the batchletter-writerentry

    owed list from the roster, voice guide, coverage rules

    Show working prompt
    Define the batch before drafting a word. Step 1: read correspondents.json from the workspace — who is owed thanks, for what gift or kindness, and how long each has been owed. Step 2: read the household's voice notes if they exist (notes/voice.md or a voice field on the roster) — the phrases this family actually uses, how they open and sign off, and what they would never say. Step 3: confirm with the owner anyone to add or defer, and how the notes go out (card, email, hand-delivered) since that shapes length. Step 4: write an acceptance-criteria checklist ('every owed person gets a note or an explicit deferral with a reason', 'every note names the actual gift or kindness — a generic thanks is a miss', 'the voice guide is respected and no two notes are interchangeable', 'every drafted note is logged against the roster'). Call write_task_note with the owed count + checklist and write notes/scope.md.
  2. Draft the notescopywriter

    one personal note per owed person, in the household voice

    Show working prompt
    Draft the whole batch against the locked rules. Step 1: write one section per person in letters/thank-you.md — a heading with their name, then the note. Step 2: open each note with the specific gift or kindness from the roster in the first two sentences — the detail IS the thanks; 'thank you for the lovely gift' is a rejection. Step 3: vary the shape — if two notes could swap recipients without anyone noticing, rewrite one of them. Step 4: keep the household's voice throughout — warm, theirs, sized for how each note will be sent. Step 5: call write_task_note with the note count and anyone you had to defer.
  3. Log the batcharchivist

    record each note in the roster, write the run summary

    Show working prompt
    Close the batch. Step 1: for each drafted note, record it against the person's entry through the project's correspondence capabilities (or note the exact roster update) so the owed-thanks tracking clears. Step 2: write the run summary — who got a note and what it names, who was deferred and why, and what still has to physically happen (addresses to find, stamps to buy). Step 3: keep it short and factual — this is a household ritual, not paperwork. Write report.md and call write_task_note with the drafted and deferred counts.
  4. Evaluatereviewer

    Grade the deliverable against every acceptance criterion. All pass → finish; any fail → loop back and fix the gap.

    Show working prompt
    Open letters/thank-you.md and report.md and verify every criterion from notes/scope.md: every owed person in correspondents.json has a note or an explicit deferral with a reason, every note names the actual gift or kindness from the roster — spot-check each against the record, a note that thanks someone for the wrong thing is worse than none — no two notes are interchangeable, the voice matches the household's guide, and every drafted note is logged. Write PASS/FAIL per criterion; on any failure, name the person and the gap and loop back to draft.
    
    Then route — this is the whole point of the loop:
    
    - **Every criterion PASSES →** call `advance_task_step({ ref, stepId: "evaluate", next: "finish" })`.
    - **Any criterion FAILS →** write the specific gaps to notes, then call `advance_task_step({ ref, stepId: "evaluate", next: "draft" })` to loop back. The builder fixes exactly those gaps.
    
    Never route to `finish` while any criterion is unmet. The build phase's completion gate already blocked a grossly-incomplete deliverable; your job is the judgment an automated check cannot make (does it actually work, read well, look right). After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in.
  5. Finishdeveloper

    All acceptance criteria met. Stamp a short summary and report DONE.

    Show working prompt
    Every acceptance criterion passed. Write a one-paragraph DONE summary to task notes via `write_task_note`: what was built, the deliverable path(s), and a one-line confirmation that each criterion is met. Then report DONE.

Triggers

Phrases that suggest this craftbook to a crew.

Source

View this craftbook on GitHub · MIT license