
Social Digest
The overnight read of your social feeds. Scans the synced Bluesky, X, and Instagram corpus records since the last look plus your own post index, then leaves a morning digest: what happened on each feed, notable mentions and replies with the people who wrote them, which posts moved on likes, reposts, and replies, and suggested next moves — each carrying a one-click action to draft the follow-up post or a reply task. Covers social media monitoring, engagement tracking, mention triage, and a nightly social summary grounded entirely in real synced records. No connected feed? It still runs, reports what the workspace knows, and names the gap instead of inventing activity.
Steps
Entry step: scan. Each step names the specialist role it wants; the full working prompt is expandable.
- Scan the feedsomroeperentry
Collect raw notes from every synced corpus record in the window — the only numbers the digest may cite.
Show working prompt
You are collecting the raw material for the overnight social digest. Look back {{lookbackHours}} hours (if that value reads as a raw {{...}} placeholder, use the default: 24). 1. Call `list_artifacts` on `data/` in the project artifacts. Each subfolder there is one synced feed corpus (Bluesky, X, Instagram, ...); its `_meta.json` names the feed and the last sync. If there is no `data/` folder, nothing is synced: still write the notes artifact, open it with the line "no synced corpus this run", record what `posts/index.json` says we published lately, and never invent feed activity. 2. Read every record inside the window with `read_artifact` — records are markdown files with frontmatter under each corpus, organized newest-first by folder. Collect per feed: posts by us, mentions and replies (author handle plus a short verbatim quote), and each record's engagement counts (`likes`, `reposts`, `replies`) together with its `metrics_updated_at` stamp. 3. Read `posts/index.json` in the workspace with `read_file` so the digest can match feed records to the posts we shipped. 4. Write your raw notes to the artifact `{{workPath}}/reports/social-digest-notes.md` with `write_artifact`: one section per feed, and every count copied verbatim next to the record path it came from (for example `data/bluesky/posts/2026-08/2026-08-02-meet-the-makers.md`). These notes are the only source of numbers the digest step may cite. When the notes artifact is written, call `advance_task_step` to move to compose. - Compose the digestomroeper
Write the morning digest from the scan notes, ending with 1-3 one-click actions.
Show working prompt
Write the digest from `{{workPath}}/reports/social-digest-notes.md` (read it with `read_artifact` first). Every number you cite must appear in those notes — no other source of numbers is allowed. Write the digest to the artifact `{{workPath}}/reports/social-digest-<today YYYY-MM-DD>.md` with `write_artifact` (use today's real date in the filename), then write the exact same content to `{{workPath}}/reports/social-digest-latest.md` — the stable path the completion gate reads. Write the latest file last. Sections, in order: - `## What happened on each feed` — one short block per synced feed; when a feed has no corpus or no new activity, say so in one line. - `## Notable mentions & replies` — who said what: name each author, quote them briefly, and say whether the mention deserves a reply. - `## Engagement movers` — which of our posts moved: compare the engagement counts and their `metrics_updated_at` stamps from the notes, and call out over- and under-performers. Never invent a number. - `## Suggested next moves` — 1-3 concrete suggestions. When a suggestion is directly actionable, follow it with a ```gezel-action fenced YAML block so the user can fire it with one click in the morning. Rules for these blocks: one block per action; flat YAML keys (only `params` nests one level); each block carries a unique, stable `id` slug that stays the same when tomorrow's digest repeats the suggestion; keep `title` short and `reason` to a sentence or two; never invent craftbook ids — the only craftbook you may reference is `draft-social-post`, which ships alongside this workflow. Two kinds: To suggest drafting a post (prefill the topic): ```gezel-action kind: fire-craftbook id: draft-<short-topic-slug> title: Draft a post about <thing> reason: <why, one sentence grounded in the notes> craftbookId: draft-social-post params: topic: <the suggested topic> ``` To suggest replying to a mention (a bespoke task with a concrete prompt): ```gezel-action kind: create-task id: reply-<author-slug> title: Reply to <author> reason: <why this mention matters, one sentence> prompt: Read <record path> in the project artifacts and draft a reply in our voice for the user to approve. Do not post it. role: omroeper ``` When both digest files are written, call `advance_task_step` to move to evaluate. - Evaluatereviewer
Grade the digest against every criterion. All pass — finish; any fail — loop back to compose with the named gaps.
Show working prompt
Open `{{workPath}}/reports/social-digest-latest.md` and `{{workPath}}/reports/social-digest-notes.md` with `read_artifact` and grade the digest. Check EACH criterion and write PASS/FAIL with a one-line reason: 1. Every number in the digest appears in the notes (spot-check at least three). 2. Each feed present in the notes is covered — or its silence is stated in one line. 3. Mentions name their authors and quote them accurately. 4. The engagement-movers section compares real counts from the notes, not impressions. 5. There are 1-3 suggested next moves, and every ```gezel-action block is valid flat YAML with `kind`, `id`, `title`, `reason`, and — for fire-craftbook — `craftbookId: draft-social-post` only. 6. The digest is tight enough to read over coffee: no padding, no repeated sections. 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 task notes with `write_task_note`, then call `advance_task_step({ ref, stepId: "evaluate", next: "compose" })` to loop back. The compose step fixes exactly those gaps. Never route to finish while a criterion is unmet. After ~3 unproductive loops, stop and report DONE_WITH_CONCERNS so the user can step in. - Finishomroeper
Stamp the summary note and stop.
Show working prompt
Write a one-paragraph DONE summary with `write_task_note`: the digest artifact paths (the dated file and `{{workPath}}/reports/social-digest-latest.md`), the headline in one line, how many mentions deserve a reply, and how many one-click actions the digest carries. Report DONE.
Triggers
Phrases that suggest this craftbook to a crew.
- social digest
- what happened on our feeds
- engagement digest
- overnight social summary
Source
View this craftbook on GitHub · MIT license