The morning KPI digest that writes itself

Trigger: cron, weekdays 07:00 · Pattern: fetch → narrate → deliver · Sample: examples/use-cases/exec-digest.toml · Status: runs today (intel-remote,tools-http-tls,trigger-cron)

The problem

Every leadership team has a morning ritual: someone opens four dashboards, squints, and types "quick numbers update 🧵" into Slack. The numbers were always available; the narrative — what moved, why it matters, what to watch — is the part that costs a person's morning. And the days it gets skipped are, by Murphy, the days something moved.

What the agent does

At 07:00 on weekdays, with no inbound network surface at all:

  1. GET the KPI snapshot from your metrics API.
  2. One bounded LLM step turns the JSON into a three-section markdown brief: What moved (numbers and direction), Why it matters (one insight each), Watch today (max three items).
  3. Post it to the leadership Slack channel and file a dated copy on disk — the searchable archive of every morning's story.

The model sees data and writes prose. The schedule, the data source, the destination, and the spend are all declared in the workflow, out of its reach.

[[triggers]]
type = "cron"
schedule = "0 7 * * 1-5"
start_node = "morning"

The quiet advantages of the boring architecture

Variations that stay in bounds

Honest limits

Slack's incoming webhooks happily accept the brief; richer Block Kit formatting means shaping the POST body precisely, which template_render handles. What the runtime won't do is be the dashboard — it writes the morning's story; your metrics stack keeps the charts.