Documentation for automated readers
A curated documentation index is available at: https://grafana.com/llms.txt
A complete documentation index is available at: https://grafana.com/llms-full.txt
These indexes can help with page discovery before fetching individual documents.
This page is also available in Markdown, which may be easier for automated readers and AI tools to parse than HTML. The Markdown version is available at https://grafana.com/docs/grafana-cloud/platform/workflows/reference/blueprints/morning-operations-briefing.md, or by sending Accept: text/markdown to https://grafana.com/docs/grafana-cloud/platform/workflows/reference/blueprints/morning-operations-briefing/. For broader documentation discovery, the curated index is available at https://grafana.com/llms.txt and the complete index is available at https://grafana.com/llms-full.txt.
Morning operations briefing
Note
Grafana Workflows is currently in public preview. Grafana Labs offers limited support, and breaking changes might occur prior to the feature being made generally available.
Every weekday morning, Grafana Assistant posts a short Slack briefing on active incidents, firing alerts, and what happened overnight.
This Grafana Workflows blueprint is in the Reports category of the Blueprints library.
Before you begin
To use this blueprint, you need:
- Slack connected to Grafana IRM. For details, refer to Configure Slack for Grafana IRM.
- Grafana Assistant in use on your stack.
Steps
Steps run in order from first to last. A step inside a switch branch runs only when Workflows chooses that branch.
| Step | ID | Type | Description |
|---|---|---|---|
| Gather the briefing | briefing | assistant.prompt | Asks Grafana Assistant for the morning briefing. Adjust the window or add teams and services to focus on. |
| Post the briefing | post-briefing | slack.message.post | Posts the briefing with Block Kit formatting. Set channelID to your team’s channel. |
For the inputs and outputs of each step type, refer to Step and trigger types reference.
Before you turn on the workflow, customize any steps that need input from you, such as a channel ID or a schedule name. Each step’s description says what to set.
Workflow definition
Save this definition as a YAML file to create the workflow with gcx, the Workflows API, or Terraform, or give it to a coding agent as an example.
Replace FOLDER_UID with the UID of the folder for the workflow.
Blueprints start disabled, so finish customizing the steps before you set enabled to true.
For details, refer to Manage workflows as code.
apiVersion: workflows.ext.grafana.app/v1alpha1
kind: Definition
metadata:
name: morning-operations-briefing
annotations:
grafana.app/folder: <FOLDER_UID>
spec:
name: Morning operations briefing
enabled: false
startWhen:
matchingRules: []
schedules:
- 'CRON_TZ=America/New_York 0 8 * * 1-5'
steps:
- id: briefing
type: assistant.prompt
name: Gather the briefing
description: Asks Grafana Assistant for the morning briefing. Adjust the window or add teams and services to focus on.
inputs:
prompt: |
Prepare a morning operations briefing from Grafana IRM for ${now() - duration('16h')} to ${now()}.
Include:
- Incidents that are active right now, with severity and how long they've been open
- Alert groups that are firing or acknowledged
- Incidents and alert groups that were resolved overnight
- Anything that looks like it needs a human today
headline is one sentence. details is Slack mrkdwn under 2500 characters, with links where you can.
outputSchema: |
{
"type": "object",
"required": ["headline", "activeIncidentCount", "firingAlertGroupCount", "details"],
"properties": {
"headline": { "type": "string" },
"activeIncidentCount": { "type": "integer" },
"firingAlertGroupCount": { "type": "integer" },
"details": { "type": "string" }
}
}
maxRetries: '3'
- id: post-briefing
type: slack.message.post
name: Post the briefing
description: Posts the briefing with Block Kit formatting. Set channelID to your team's channel.
inputs:
channelID: ''
messageText: 'Morning operations briefing: ${steps.briefing.outputs.result.headline}'
blocks: |
[
{
"type": "header",
"text": {
"type": "plain_text",
"text": "Morning operations briefing"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ${json_stringify('*' + steps.briefing.outputs.result.headline + '*')}
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Active incidents*\n${steps.briefing.outputs.result.activeIncidentCount}"
},
{
"type": "mrkdwn",
"text": "*Firing alert groups*\n${steps.briefing.outputs.result.firingAlertGroupCount}"
}
]
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ${json_stringify(steps.briefing.outputs.result.details)}
}
}
]How it works
This section explains when the workflow runs and how its steps work together.
When it runs
This blueprint runs on the schedule CRON_TZ=America/New_York 0 8 * * 1-5.
How the steps fit together
These notes cover how the steps connect and which Workflows behaviors the blueprint relies on.
- Schedule trigger at 8:00 AM New York time on weekdays (
CRON_TZprefix, adjusted for daylight saving time). - The
assistant.promptstep asks Grafana Assistant to summarize the current state from Grafana IRM and return JSON that matchesoutputSchema. - The Slack step sends Block Kit blocks instead of plain text.
- blocks is a JSON string, so assistant output is inserted with
json_stringify(), which quotes and escapes it, to keep the blocks valid whatever the text contains. messageTextis still set, because Slack uses it as the notification fallback.- Customize the schedule and timezone, the time window, the prompt, and the Slack channel.
Next steps
Was this page helpful?
Related resources from Grafana Labs


