Reads your tracker each week and posts everything still open to Slack, with a short note on what stands out.

UsesClaudeGoogle SheetsSlack

Weekly open items digest to Slack

Once a week, your tracker spreadsheet is read, every row not marked done is gathered up, and the lot is posted to a Slack channel as a single digest. Above the list sit two or three sentences from the AI on what stands out: what is blocked, what is overdue and who is carrying the most.

You get a message headed with the number of open items, each listed with its owner and status. It posts even when there is nothing open, because a digest that goes quiet looks the same as one that has broken, so an empty week gets an explicit nothing open message. If the summary cannot be written, the digest still goes out with the list intact and a note that the summary was unavailable. A row with a missing task or status is skipped and logged rather than quietly shortening the list.

Your tracker tab needs 'Task', 'Owner' and 'Status' columns, and you need a Slack channel for the digest.

ScheduleRun every 7 days.Run every 7 days.
ValuesSet spreadsheetUrl to blank.Set spreadsheetUrl to blank.
ValuesSet slackChannelId to blank.Set slackChannelId to blank.
ValuesSet trackerTab to Tasks.Set trackerTab to Tasks.
ValuesSet maxRows to 300.Set maxRows to 300.
ValuesSet doneValue to done.Set doneValue to done.
Google SheetsGoogle SheetsRead the rows of spreadsheetUrl. Save it as sheet.Read the rows of spreadsheetUrl. Save it as sheet.
ValuesSet openItems to an empty list.Set openItems to an empty list.
Decisions & LoopsFor each row in sheet.rows:For each row in sheet.rows:
Decisions & LoopsIf a step below fails, save the error as rowErrorIf a step below fails, save the error as rowError
Try
TextMake row.Status lowercase and save it as status.Make row.Status lowercase and save it as status.
Decisions & LoopsIf status is not doneValueIf status is not doneValue
Yes
ListsAdd - row.Task (owner: row.Owner, status: row.Status) to the end of openItems and save it as openItems.Add - row.Task (owner: row.Owner, status: row.Status) to the end of openItems and save it as openItems.
No
No steps
On error
ValuesShow in the output: Skipped a tracker row: rowError as text.Show in the output: Skipped a tracker row: rowError as text.
Decisions & LoopsIf openItems is emptyIf openItems is empty
Yes
SlackSlackSend a message to slackChannelId.Send a message to slackChannelId.*Weekly open items* Nothing open - every tracked item is done.
No
TextJoin openItems with a new line and save it as itemList.Join openItems with a new line and save it as itemList.
Decisions & LoopsIf a step below fails, save the error as summaryErrorIf a step below fails, save the error as summaryError
Try
ClaudeClaudeAsk Claude: 'Below is a list of open items from a team tracker. Write a short Slack digest: two or three sentences on what stands out - what is blocked, what is overdue, who is carrying the most - then leave the list itself out, it is posted separately. Use only what is in the list; do not invent status or deadlines.Ask Claude: 'Below is a list of open items from a team tracker. Write a short Slack digest: two or three sentences on what stands out - what is blocked, what is overdue, who is carrying the most - then leave the list itself out, it is posted separately. Use only what is in the list; do not invent status or deadlines. itemList'. Save it as written. Maximum response length: 400
TextTrim written.response_text and save it as summary.Trim written.response_text and save it as summary.
SlackSlackSend a message to slackChannelId.Send a message to slackChannelId.*Weekly open items* (the length of openItems as text) summary itemList
On error
SlackSlackSend a message to slackChannelId.Send a message to slackChannelId.*Weekly open items* (the length of openItems as text) _Summary unavailable this week._ itemList