/daily-summary
Turn the state that state-sync keeps mirrored across both trackers into a summary you can paste into a discussion โ the daily standup, or a progress review on one task. Because every task carries a current "AI Context" block (GitHub Issue) mirrored to ClickUp, the summary needs no extra digging.
Three modesโ
Default โ daily standup digest (/daily-summary)โ
Aggregate the current actor's open work and produce a short standup note. Pull from both trackers and correlate by CU-id so one work item is one line, not two:
- ClickUp โ the actor's product tasks + their R&D child tasks (
clickup_filter_tasks); read theai_contextmirror field for the gist. - GitHub โ the actor's open Issues (their "AI Context" block) and open/recently-merged PRs.
- Correlate ClickUp โ GitHub by CU-id; prefer the GitHub Issue "AI Context" as the detailed source, the ClickUp task for product framing/priority.
Output (tight โ a few lines per bucket, link each item):
**Daily โ <actor>, <date>**
๐ข Shipped: <merged PRs / closed tasks since yesterday>
๐ In review: <PRs awaiting review> โ who's waiting on whom
๐จ In progress: <task โ current phase + next step, from AI Context>
โ Stuck: <blockers, with the specific ask>
๐ Need help: <where input/review is needed>
Single-task โ progress summary (/daily-summary <task | cu-id | issue>)โ
For a progress discussion on one task: resolve the task, then produce a fuller summary from its AI Context block + every linked GitHub Issue + PR:
- What's done โ completed plan steps + merged PRs.
- Current phase + next step โ from the AI Context block.
- Key decisions โ the load-bearing choices recorded along the way.
- Blockers / risks โ open items and the ask.
- Links โ ClickUp parent + child tasks, GitHub Issues, PRs.
Period โ accomplishments digest (/daily-summary --since 30d | --month | --year)โ
For a 1:1 / monthly / yearly review: "what did I get done this month/year?". Aggregate the actor's completed work over the window โ merged PRs, closed Issues, closed ClickUp tasks โ into an accomplishments digest grouped by theme.
Code before model: the windowing, grouping, counting, and time-bucketing are done by scripts/period-summary.mjs, not tallied in prose. The model only fetches and narrates. Same inputs โ same totals.
-
Fetch the window (resolve the actor first):
- Merged PRs โ
search_issuesis:pr is:merged author:@me merged:>=<since>. - Closed Issues โ
is:issue is:closed assignee:@me closed:>=<since>. - Closed ClickUp tasks โ
clickup_filter_taskswith a closed/done status and a date in range. - For
--month/--yearderive<since>from the calendar; for--since 30dit's relative.
- Merged PRs โ
-
Normalize each to the script's input shape โ set
dateto the merge/close date andthemefrom the item'sdomain:*label (GitHub) or ClickUp list/tag (uncategorizedif none);repofor GitHub items. -
Aggregate in the script โ write the array to a temp file and run it:
node scripts/period-summary.mjs --month --file /tmp/period-items.jsonnode scripts/period-summary.mjs --year --file /tmp/period-items.jsonnode scripts/period-summary.mjs --since 30d --file /tmp/period-items.jsonIt returns
{ window, totals, byTheme[], byPeriod[], skipped[] }โ--yearbuckets by month, shorter windows by week. -
Narrate for the review:
**<window.label> โ <actor>** (<totals.prs> PRs ยท <totals.issuesClosed> issues ยท <totals.tasksClosed> tasks)<per theme, highest-count first>โข <theme> (<count>): <a few headline items, linked>Cadence: <byPeriod sparkline โ e.g. May 4 ยท Jun 7>If
skipped[]is non-empty (items with no close/merge date), say how many were dropped โ don't silently undercount.
Boundariesโ
- Read-only. Produces text; never changes a status, merges, or writes to a tracker. To persist state, that's
state-sync; to act on an item,/continue//pr-review//done. - Reports reality. If a task has no AI Context block (state-sync never ran), say so โ don't invent progress. If a tracker is unreachable, summarize what was reachable and name what was skipped.
- For "what's on my plate right now, grouped by urgency" rather than a postable summary, use
/status.