Daily Slack digest of open GitLab merge requests

Get a prioritized 9am summary in Slack of which GitLab merge requests are ready to ship, waiting on review, or stalled, with reviewers tagged so nudges land.

Agentic Task
GitLabSlack BotEngineeringOperationsDaily DigestsNotifications & Alerts

Every weekday at 9am, post a prioritized digest of open GitLab merge requests that need attention to a Slack engineering channel.

This is a recurring agent-based workflow on a cron trigger. The user configures the list of GitLab projects to watch and the Slack channel to post into.

On each run, the agent should:

1. For each configured GitLab project, call the GitLab List Project Merge Requests operation with state=opened to get every currently open merge request.

2. Filter out drafts (work_in_progress / draft flag) and merge requests authored by known dependency bots (for example dependabot, renovate, gitlab-bot). These should never appear in the digest.

3. For each remaining candidate, call GitLab Get a Single Merge Request to pull last_activity_at, assignee, reviewers, draft flag, approvals, and the head pipeline reference. If a richer pipeline status is needed, call GitLab Get Latest Pipeline for that project and ref to confirm whether the pipeline is green.

4. Group merge requests into three buckets:

- Ready to merge: approved, latest pipeline is success, not a draft.

- Waiting on review longer than 24h: has assigned reviewers and no activity in the last 24 hours.

- Stalled, no movement in 5+ days: any open merge request with no activity for 5 or more days, regardless of approval state.

A merge request should only appear in one bucket. Ready to merge wins over waiting on review, which wins over stalled.

5. Compose one Slack message with three sections, one per bucket, in the order above. For each merge request show: title, author, days idle since last activity, and a direct link to the merge request in GitLab. Keep one line per merge request. In the waiting on review bucket, @mention the assigned reviewer so they actually get a notification.

6. Keep the digest under ~15 items total. If there are more candidates, trim the lowest priority entries first (oldest stalled items beat low-signal waiting items, etc.) and add a short trailing line like "+ 7 more open MRs not shown".

7. Send the final message to the configured Slack channel using the Slack Bot Send a Message operation. Use Slack mrkdwn formatting (single asterisks for bold, <url|text> link syntax). If there are zero items across all three buckets, post a short "No open MRs need attention today" message instead of skipping the run.

Use the Slack Bot integration (slackbot) for posting, not the user-token Slack integration, because the digest should be attributed to the workspace bot and the channel may not include the connecting user.

Additional information

What does this prompt do?
  • Runs every weekday morning and pulls every open merge request from the GitLab projects you care about.
  • Groups merge requests into three clear buckets: ready to merge, waiting on review longer than a day, and stalled with no movement in five plus days.
  • Posts one clean message to your chosen Slack channel with the title, author, days idle, and a direct link for each merge request.
  • Tags the assigned reviewer on items that are waiting on review so the nudge lands on a real person.
What do I need to use this?
  • A GitLab account with access to the projects you want included in the digest.
  • A Slack workspace and a channel where the daily summary should be posted.
  • The list of GitLab projects to watch and the Slack channel name to post into.
How can I customize it?
  • Change when the digest runs, for example earlier in the morning or only on Mondays.
  • Pick which projects are included and which Slack channel receives the post.
  • Adjust the thresholds for what counts as waiting on review or stalled, and cap how many items the digest will list.

Frequently asked questions

Will draft merge requests show up in the digest?
No. Drafts are skipped automatically so the message only highlights merge requests that are actually ready for a human to act on.
Will bot dependency updates clutter the list?
No. Merge requests authored by automated bots, like dependency update bots, are filtered out so the digest stays focused on team work.
What if there are too many open merge requests on a given day?
The digest caps itself at around fifteen items and trims the lowest priority entries first, so the message stays scannable instead of becoming a wall of text.
Can I change which Slack channel receives the digest?
Yes. Picking the channel is a one line tweak after the workflow is built, and you can also point it at a private channel as long as the bot has been added.
How are reviewers tagged so they actually see the nudge?
For the waiting on review bucket, the assigned reviewer is at-mentioned in the Slack message, which sends them a notification instead of letting the post quietly slide by.

Stop chasing stale merge requests one DM at a time.

Connect GitLab and Slack once, and Geni posts a prioritized merge request digest to your engineering channel every weekday at 9am.