Skip to content

On a schedule

Post a daily Jira digest in Slack

Each weekday morning Slack shows yesterday's Jira progress grouped by status, plus blockers and what is due soon.

Runs
On a schedule
Apps
Jira, Slack
AI
Optional
Access
Jira read; Slack chat:write

Send this to your assistant

Create a ClickRuntime automation: every weekday at 9, summarise tickets updated yesterday in Jira project ENG by status, list blocked tickets and anything due in the next 3 days, and post it to #eng.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

A product team of twelve tracks its work in Jira, but only the project manager looks at the board every day. Developers find out a teammate was blocked yesterday when standup comes around, and due dates slip quietly.

A morning digest that groups yesterday's movement, highlights blockers and lists what is due soon gives everyone the same picture before the day starts. Problems get raised earlier, and deadlines are visible to the whole team.

What you get out of it

  • Blockers surface the same day

    Blocked tickets are listed at the top. Someone can help before another day is lost.

  • Deadlines are visible

    Tickets due in the next few days are listed. Nobody is surprised by a due date.

  • Progress at a glance

    Tickets are grouped by status, so the team sees what moved to review or done. It is a quick read over coffee.

  • A short summary if you want it

    With AI turned on, a few sentences sum up the day. Stakeholders get the gist without reading every line.

How it works

What happens, step by step

  1. Every weekday morning, ClickRuntime finds the Jira tickets updated in your project since the previous day.

  2. It groups them by status and picks out blocked tickets and those due in the next 3 days.

  3. If you turn on AI, it adds a short summary.

  4. The digest is posted to your #eng Slack channel.

Before it runs live

  • Connect Jira
  • Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)

What you get

RunsOn a schedule
Post a daily Jira digest in Slacktoday, 9:00Succeeded
Slack · #engIn Review • ENG-388 Add SSO for Northwind Blocked • ENG-391 Payment provider sandbox down

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Run it at a different time, more or less often, or only on weekdays
  • Change what the AI looks for, or how it writes the result
  • Add another app, for example also send it to Google Sheets
  • Combine it with other Jira and Slack steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
daily_engineering_digest_of_jira_activity_in_slack.pyexample
from collections import defaultdict
from datetime import date, timedelta
from clickruntime import on_trigger, credentials, http, notify, ai

JIRA, SITE = "https://api.atlassian.com/ex/jira/your-cloud-id", "https://acme.atlassian.net/browse/"
adf = lambda text: {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": text}]}]}

def jira(method, path, **kw):
    resp = http.request(method, JIRA + path, headers={"Authorization": f"Bearer {credentials.connection('jira', 'work')}", "Accept": "application/json"}, **kw)
    return resp.raise_for_status() or (resp.json() if resp.content else None)

PROJECT = "ENG"

def search(jql):
    return jira("POST", "/rest/api/3/search/jql", json={"jql": jql, "fields": ["summary", "status", "assignee", "duedate"], "maxResults": 100})["issues"]

@on_trigger
def run(event):
    since = date.today() - timedelta(days=3 if date.today().weekday() == 0 else 1)
    moved = search(f"project = {PROJECT} AND updated >= '{since}'")
    blocked = search(f"project = {PROJECT} AND (status = Blocked OR flagged is not EMPTY) AND statusCategory != Done")
    due = search(f"project = {PROJECT} AND duedate <= 3d AND statusCategory != Done")
    groups = defaultdict(list)
    for t in moved:
        groups[t["fields"]["status"]["name"]].append(f"<{SITE}{t['key']}|{t['key']}> {t['fields']['summary']}")
    fmt = lambda ts: "\n".join(f"• <{SITE}{t['key']}|{t['key']}> {t['fields']['summary']}" for t in ts) or "• none"
    text = "\n".join(f"*{s}*\n" + "\n".join(f"• {x}" for x in xs) for s, xs in groups.items())
    text += f"\n*Blocked*\n{fmt(blocked)}\n*Due in 3 days*\n{fmt(due)}"
    try:
        text = ai.generate(text[:10000], system="Summarise this Jira activity in 2 plain sentences, mentioning blockers.", max_output_tokens=120).text + "\n\n" + text
    except (ai.AINotIncluded, ai.AILimitReached):
        pass
    notify.slack(text, channel="#eng")
    return {"moved": len(moved), "blocked": len(blocked), "due": len(due)}

FAQ

Common questions

How does it know a ticket is blocked?
From a Blocked status, a Flagged marker, or a blocked label, whichever your team uses.
Can it cover several projects?
Yes. Name the projects, or give it any Jira filter, and the digest covers all of them.
Does it post on weekends?
No, weekdays only by default. Monday's digest covers the weekend.
What permissions does it need?
Jira read; Slack chat:write. Nothing else in your accounts is used.
Does it need AI?
No, but you can ask for an AI step (for example a summary). It then uses ClickRuntime's built-in AI allowance.
How many runs does it use?
One run each time it runs (on a schedule). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Post a daily Jira digest in Slack” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.