ops

Daily brief to Slack

  • ops
  • briefing
  • slack
  • reporting

A short daily business update posted to the team's Slack channel, state, what changed, what's blocked on a person, what's next. Ages its own repeats so nothing is restated day after day.

1 Steps in the flow
0 Tools orchestrated
0 Human checkpoints
Daily Run cadence

The objective

What this system is built to do

One short post each morning that tells the team where the business actually stands, what moved, and what is waiting on a named person, then records what it said so tomorrow's brief can age the repeats instead of restating them. Posts through the workspace's own Slack integration. Not doing: a task dump, a metrics wall, or an invented update on a quiet day.

How it runs

The steps your team follows

The workflow, exactly as it runs inside . It plays through step by step, or pick any node on the map.

Start
1

Daily brief

Daily

Post a short daily brief to the team's Slack channel. Terse and scannable, addressed to people by name, links straight to the work, a business update, not a task dump. Headless: never pause; anything needing a person goes into the brief.

## Tune this (safe to edit, the rest is machinery)

- Lead metrics, the three numbers that open the brief. Default: revenue, activation/retention, the top acquisition channel. Change these to whatever this company actually steers by.

- Verdict, one interpretive line under the date. Delete this bullet to make the brief report-only.

- Length, under ~14 lines. If it's longer, you're restating what the links already say.

- Who to address, everyone with an active membership. Narrow it here if only certain people should be named.

- Quiet day, send the one-liner and stop. Never invent work to fill the brief.

## Orient, resolve these at run time, never hardcode

- Workspace id, company name, `app_origin` → `whoami`.

- People → `list_objects({type:'team'})`, resolve owners to first names. Never paste user ids into this method.

- Channel → this node's linked Slack integration. `inspect` it and use what it is: a webhook takes the message body alone (its channel is baked into the URL); a bot token takes `chat.postMessage` with its configured channel.

- Deep links → `${app_origin}/id/<type>:<id>?wid=<workspace_id>`.

## Steps

  1. Read your own history. `list_objects({type:'event', filters:{for_node:'root', kind:'report', limit:3}})`. Each past brief records the items it raised, this is the ONLY way you know what you already said. You cannot age an item you never wrote down.
  2. Sweep. `get_dashboard({since:<last brief ts>})`, then `list_objects({type:'metric'})` and `list_objects({type:'task', filters:{status:'todo'}})`. Skim integrations for expired/disconnected.
  3. Tidy silently. Refresh due metrics, close tasks that are genuinely done, dedupe. Don't narrate housekeeping.
  4. Age every item against step 1, this is what stops the brief repeating itself:

- 1st appearance → normal bullet.

- 2nd–3rd → bullet plus `(3rd day)`.

- 4th+ → drop it out of *Blocked* into the italic Still open footer: one line, comma-separated, with ages.

Nothing appears verbatim two days running.

  1. Compose to the shape below. Omit any empty section.
  2. Post through the linked integration.
  3. Record what you posted, `record({type:'report', on:'system:root', kind:'Briefing', ...})` including the item list. Skipping this silently breaks step 1 for every future run.

## Shape

```

:sunrise: *<Company>, <Weekday D Mon>*

<one-line verdict, the single most important thing today>

*State*

• <metric, value, direction since last brief>

*What changed*

• <what actually moved since the last brief>

*Blocked*

• :red_circle: *<Name>*, <action, one clause>. <link|do it>

*Next up*

• *<Name>*, <queued or due work>. <link|task>

_Still open: <item> (<Name>, <n>d) · <item> (<n>d)_

```

## Style

Each line: who, what to do, one click. A known one-step how-to gets a short bracket, never more than a clause. Let the link carry the detail.

:red_circle: blocked · :large_yellow_circle: needs attention soon

Avoid: saying the same thing twice, multi-sentence explanations, spelling out steps the link already shows, and padding a quiet day.

---

Setup, once per workspace, after adopting this template:

  1. Connect the Slack brief integration (a per-channel incoming webhook) and link it to this node.
  2. Set the trigger: cadence, weekdays, the time the team starts.
  3. Set `runMode: auto` and confirm an owner, the run executes as that person.
1 / 1

Proven in market

Run by 56 teams, verified on real accounts

Daily brief to Slack is built and verified by Growth Division, the GTM team behind 150+ companies.

Built & verified by Growth Division

Get started

How to run this system

Live in an afternoon. Clone it, connect your tools, set your inputs, and turn it on.

  1. 1

    Add to

    Clone the Daily brief to Slack into your workspace, wired end to end.

  2. 2

    Connect your tools

    Plug in your existing accounts.

  3. 3

    Set your inputs

    Your ICP, targets and brand rules, once.

  4. 4

    Turn it on

    It runs daily on autopilot, checking in with you only where it matters.

0 approvals / daily your time on autopilot · the rest runs itself

Early access

Run the Daily brief to Slack in your workspace.

is in stealth with a first cohort of scaleups. Join the waitlist and we’ll open this system, and the full library, to you first.

All systems in the library