Daily Slack sprint health digest from Linear
Every weekday at 9am, post a Linear cycle health digest into Slack so your team walks into standup already aligned on what shipped and what is at risk.
Build me an agent workflow that posts a Linear sprint health digest into a Slack engineering channel every weekday morning, so the team walks into standup already aligned on what shipped, what is in flight, and what needs attention.
Trigger: cron, every weekday (Monday through Friday) at 9:00am in the team's local timezone. I will configure the channel ID and timezone when I run it.
What the agent should do on each run:
1. Use Linear List Issues to pull every issue in the team's currently active cycle. For each issue, capture identifier, title, state (and state category), assignee (name plus Linear handle), priority, updatedAt, completedAt, cycle dueDate, and URL. Page through results until the cycle is fully covered.
2. Group the issues into four buckets:
- Shipped yesterday: completed or merged in the last 24 hours.
- In progress: state category Started or In Review, with activity in the last 48 hours.
- Blocked or stale: Started or In Review with no update in 48+ hours, or explicitly labeled blocked.
- At risk for the cycle: not done, with priority Urgent or High, or due before the cycle ends with too much remaining work, or already past due.
3. Compose a single Slack message for the configured channel using Slack Bot Send a Message. Keep the tone tight, skim-friendly, and skip any bucket that is empty. Lead with one sentence on what changed since yesterday. Under each non-empty bucket, list issues as `LIN-123 Title (@assignee-handle)` with a link to the Linear issue. For Blocked or stale and At risk, call out the assignee Slack handle so the right person sees it. End with a one-line cycle progress note (X of Y issues done, N days left in the cycle).
4. If nothing meaningful changed and no items are blocked or at risk, post a single short line rather than an empty digest. Never post filler.
The output should answer "what changed since yesterday and what needs attention today" rather than dumping every ticket. Optimize for a 30-second skim before standup.
Additional information
What does this prompt do?
- Pulls every issue in the active Linear cycle each weekday morning, including state, assignee, priority, and last update.
- Buckets the work into shipped yesterday, in progress, blocked or stale, and at risk for the cycle.
- Posts a single tight Slack message that calls out blockers by assignee handle and skips empty buckets.
- Answers what changed since yesterday and what needs attention today, instead of dumping every ticket.
What do I need to use this?
- A Linear workspace with an active cycle on the team you want to report on.
- A Slack workspace and the channel ID where the digest should land.
- Linear OAuth connection with read access to issues and cycles.
- Slack Bot OAuth connection with chat:write for the target channel.
How can I customize it?
- Change the cron from weekdays at 9am to whatever cadence and timezone matches your standup.
- Swap the channel, or post per-team digests to per-team channels by running the workflow once per Linear team.
- Tune the at-risk and stale thresholds (default 48 hours without an update, plus priority and due-date heuristics).
Frequently asked questions
Does this replace our standup?
Will it spam the channel if nothing changed?
Can I run it per team or per project?
Why Linear's active cycle and not all open issues?
How does it decide what is at risk?
Stop reading status updates out loud at standup.
Connect Linear and Slack once, and Geni posts a tight sprint health digest every weekday at 9am.