Recipes

Morning brief to Slack

Post a weekday morning brief by running Scout on a schedule and sending the brief to #eng with slack.message.post.

What you'll build

  • A schedule trigger at 7:00 AM on weekdays.
  • One agent step that writes a concise brief.
  • One action step that posts the brief to Slack.

Prerequisites

  • A connected Slack integration with access to #eng.
  • An agent named Scout (agt_scout).
  • Permission to run Slack message actions.

Build it

  1. In the app, open Build > Loops.
  2. Create a loop named Morning brief.
  3. Add a Schedule trigger for weekdays at 07:00.
  4. Add an agent step and select Scout.
  5. Ask Scout for a markdown brief with project status, risks, and next actions.
  6. Add an action step and select slack.message.post.
  7. Set channel to #eng.
  8. Set text to the saved brief output.
  9. Create the loop as active.

Your loop now runs on the schedule and can also be started manually from the loop page.

Finished spec

schema_version: "1"
name: morning-brief
description: Write a weekday engineering brief and post it to Slack.
concurrency: queue
triggers:
  - key: weekday-brief
    name: Weekday brief
    kind: schedule
    enabled: true
    config:
      cron: "0 7 * * MON-FRI"
      timezone: "America/New_York"
steps:
  - key: write-brief
    name: Write brief
    kind: agent
    config:
      agent_id: agt_scout
      instructions: |
        Write a concise markdown morning brief for Acme's platform team.
        Include project status, risks to watch, and the next three actions.
    save_as: brief
  - key: post-to-slack
    name: Post to Slack
    kind: action
    config:
      action_name: slack.message.post
      parameters:
        channel: "#eng"
        text: "{{ .context.brief }}"

Run it

Click Run on the loop page. A completed run should look like this:

run.started
step.started     step=write-brief kind=agent
step.completed   step=write-brief
step.started     step=post-to-slack kind=action
action.called    action_name=slack.message.post
action.completed action_name=slack.message.post
step.completed   step=post-to-slack
run.completed

The Slack action returns the channel and timestamp:

{
  "post-to-slack": {
    "channel": "C0123ENG",
    "timestamp": "1781190000.000100"
  }
}

If the run reaches failed, check whether Slack is connected and whether the bot can post to #eng. The action error on the Timeline tab is the fastest place to see the provider response.

Variations

  • Use slack.message.schedule if Slack should schedule the post instead of Mobius scheduling the run.
  • Add github.actions.list_runs before the agent step to include CI status.
  • Add an interaction step before posting if a lead should approve the brief.

Next