← All craftbooks

RSS / Feed Digest

Comms and ops automationevalv1.0.0released 2026-06-05workflow: build-loop

Build a recurring digest from RSS/Atom feeds or news sources: fetch the latest items in the window, dedupe and cluster by topic, then write a scannable digest with one-line takes and source links. Scopes the feed list and digest format FIRST (which feeds, the time window, topic sections, item cap, ranking signal), then a developer fetches and normalizes the feed items into a deduped item list, then a copywriter writes the curated digest from those items only. Scoping sources and the window before fetching is what keeps the digest fresh, deduped, and within length instead of an unranked firehose. Use for RSS digests, news roundups, feed summaries, content curation, and recurring reading digests.

Steps

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

  1. Source scopeplannerentry

    lock the feeds, window, sections, and item cap

    Show working prompt
    Define the digest contract before fetching. (1) Lock the feed/source list (the RSS/Atom URLs or named sources). (2) Set the time window (only items published within it) and the topic sections the digest groups into. (3) Set a per-section item cap and an overall cap, plus a ranking signal for which items make the cut (recency, source weight, or keyword relevance to a stated interest). (4) Define the per-item format: a tight one-line take + a source link + publish date. (5) Define the dedupe rule (same story across feeds collapses to one, by URL or title similarity). Write an acceptance-criteria checklist ('only items within the window', 'duplicates across feeds collapsed', 'each item has a working source link + date', 'per-section and overall caps respected', 'every item traces to a fetched feed item — nothing invented', 'scannable in under two minutes') plus the source list + format to notes/source-scope.md via write_task_note AND the produces path.
  2. Gather feed itemsdeveloper

    fetch, normalize, dedupe items into an item list

    Show working prompt
    Fetch and normalize the feeds into notes/gather.md. (1) Retrieve each feed (via the fetch/web tool); parse out item title, link, publish date, and a short excerpt. (2) Drop items outside the locked window. (3) Apply the dedupe rule — collapse the same story appearing in multiple feeds to a single entry, keeping the best source link. (4) Tag each surviving item with its target section and a ranking score per the locked signal. (5) Sort within each section by the ranking signal and keep within the caps; record the dropped count. Capture this as a structured, attributed list — title, link, date, section, score — NOT prose, and verify every link is a real URL from the feed. If a feed is unreachable, note it explicitly. Write the item list via write_task_note and end with per-section counts.
  3. Write the digestcopywriter

    compose the curated digest from gathered items

    Show working prompt
    Write digest.md from notes/gather.md only. (1) Open with a one-line 'what mattered' summary of the period. (2) One section per topic in the locked order; under each, the capped items as a one-line take + linked title + date. Each take is a genuine, specific summary of the item — not a restated headline, not invented detail. (3) Respect the per-section and overall caps; if a section has no in-window items, omit it. (4) Keep the whole thing skimmable in under two minutes. Use only items present in the gather file with their real links — invent nothing. On a loop-back fix only the flagged sections. Write the path and item count to notes via write_task_note.
  4. Evaluatereviewer

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

    Show working prompt
    QA digest.md against the locked criteria. (1) Confirm every item appears in notes/gather.md with a real source link and an in-window date; FAIL on any invented item or out-of-window entry. (2) Confirm duplicates across feeds were collapsed (no two entries for the same story). (3) Confirm per-section and overall caps are respected. (4) Read 3 one-line takes — are they real summaries of the linked item, not just the headline echoed, and accurate? (5) Confirm it is genuinely scannable. Write PASS/FAIL per criterion with specifics.
    
    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: "write" })` 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