Skip to content

On a schedule

Collect daily standups by Mattermost DM

Everyone gets the standup questions privately each morning, and their answers are posted together in one place.

Runs
On a schedule
Apps
Mattermost
AI
Not needed
Access
bot/PAT that can DM users and post in channel

Send this to your assistant

Create a ClickRuntime automation: each weekday at 9am, DM everyone on our Mattermost 'engineering' team: what did you do yesterday, what's next, anything blocking? At 10am post all answers in the 'standup' channel.

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

Daily standups for a distributed team are hard to schedule. People work across time zones, some are in meetings at 9:30, and a fifteen-minute call turns into forty when one person goes into detail. Yet skipping the standup means a blocker sits unnoticed for two days, and a manager has no idea what the team is working on until the status meeting.

On the schedule you choose, ClickRuntime sends each team member a direct message in Mattermost with your standup questions. Their replies in that DM are collected from the time of the prompt and combined into a single report posted in the team channel, so everyone can read the updates in one place.

It suits engineering teams, support groups and remote companies that want the information of a standup without the meeting.

What you get out of it

  • Blockers surface the same morning

    When a person writes that they are waiting on a review or an access request, everyone sees it in the combined post. A teammate can pick it up before the day is lost.

  • No meeting across time zones

    Team members answer when they start work, whether that is in Berlin or in Bangalore. Nobody has to join a call at an awkward hour just to say what they did yesterday.

  • Answers are written, so they are searchable

    Weeks later you can search the channel for a project name and find who said what. Spoken standups leave no record, and written ones are useful for retrospectives and handovers.

  • Managers read one post, not ten chats

    Instead of chasing individual replies, a lead reads a single summary and sees at a glance who has not responded. That saves the time of nudging people one by one.

  • Quiet people are heard

    In a live call, the person who talks last gets rushed. In a written format, everyone gets the same space, which gives introverted or newer team members an equal voice.

How it works

What happens, step by step

  1. Each weekday at 9am ClickRuntime sends every member of your engineering channel a private Mattermost message with the standup questions: what they did yesterday, what's next and anything blocking.

  2. People answer in that private chat whenever suits them.

  3. Later that morning the automation collects each person's replies.

  4. It posts one combined standup in your standup channel, with each person's answers under their name and "no answer" for anyone who didn't reply.

Before it runs live

  • Connect Mattermost

What you get

RunsOn a schedule
Collect daily standups by Mattermost DMtoday, 9:00Succeeded
Mattermost · standup**@maya** Shipped the export fix; next: billing tests; no blockers. **@theo** _no answer_

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
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other Mattermost 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.
async_standup_bot.pyexample
import time
from datetime import datetime
from clickruntime import on_trigger, credentials, http, state

BASE = "https://chat.acme.com/api/v4"
TEAM_ID, ENG_CHANNEL_ID, STANDUP_CHANNEL_ID = "teamid123", "engchannel123", "standupchannel123"
QUESTIONS = "Standup: what did you do yesterday, what's next, anything blocking?"

@on_trigger
def run(event):
    h = {"Authorization": f"Bearer {credentials.secret('MATTERMOST_TOKEN')}"}
    me = http.get(f"{BASE}/users/me", headers=h).json()["id"]
    if datetime.utcnow().hour < 10:  # 9am run: send the questions
        members = http.get(f"{BASE}/channels/{ENG_CHANNEL_ID}/members", params={"per_page": 200}, headers=h).json()
        dms = {}
        for m in members:
            if m["user_id"] == me:
                continue
            dm = http.post(f"{BASE}/channels/direct", json=[me, m["user_id"]], headers=h).json()["id"]
            http.post(f"{BASE}/posts", json={"channel_id": dm, "message": QUESTIONS}, headers=h)
            dms[m["user_id"]] = dm
        state.set("standup", {"asked_at": int(time.time() * 1000), "dms": dms})
        return {"asked": len(dms)}
    s = state.get("standup") or {"dms": {}}
    report = []
    for user_id, dm in s["dms"].items():
        posts = http.get(f"{BASE}/channels/{dm}/posts", params={"since": s["asked_at"]}, headers=h).json()["posts"]
        answers = [p["message"] for p in posts.values() if p["user_id"] == user_id]
        name = http.get(f"{BASE}/users/{user_id}", headers=h).json()["username"]
        report.append(f"**@{name}**\n" + ("\n".join(answers) or "_no answer_"))
    http.post(f"{BASE}/posts", json={"channel_id": STANDUP_CHANNEL_ID, "message": "\n\n".join(report)}, headers=h)
    return {"answered": len(report)}

FAQ

Common questions

What happens if someone does not reply?
The combined report includes the people who answered. Anyone without a reply since the prompt time is simply missing from the update, which makes it easy for the team lead to notice and follow up in person.
Can I change the standup questions?
Yes. The questions are plain text, so you can use the classic three, such as what you did, what you plan and what blocks you, or replace them with your own. Ask your AI assistant for the wording and approve the change.
Does the bot read other messages in the DM?
It only reads replies in the DM since the prompt was sent, in order to build the report. It does not read other conversations. ClickRuntime keeps your Mattermost access token as a secret and never shows it in the logs.
What permissions does it need?
bot/PAT that can DM users and post in channel. Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's 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 “Collect daily standups by Mattermost DM” from your assistant

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