Dispatch logodispatch
Bablic migration · weekly pipeline

Every number is computed —
never guessed.

Two Slack reports — company totals and a by-rep breakdown — assembled every Friday by a deterministic workflow. MCP tools compute every count, dollar, and week-over-week delta; the agent only writes the words. It runs unattended on your own box for nothing, assembled entirely from primitives the platform already provides.

Steps7 LLM arithmetic0 Cost / run$0 CadenceFri 14:00 ET
SummaryBot APP
Weekly Pipeline by Rep · sample
avery — Converted: 42 · $84,200 · In Trial: 18 · In Contact: 60
jordan — Converted: 9 · $11,400 · In Trial: 6 · In Contact: 33
casey — Converted: 7 · $6,900 · In Trial: 5 · In Contact: 88
morgan — Converted: 3 · $1,900 · In Trial: 4 · In Contact: 40
Sample output — every figure computed by a tool, not the model
Built for your phone

The control room fits in your pocket

Every box, run, and dollar is live on iOS. Watch temperatures and utilization, track spend and power draw, review memory — and build or edit agents, workflows, and schedules from anywhere. This pipeline is monitored and managed from the same app it runs behind.

  • Live vitals — temps, CPU / GPU / MEM, uptime
  • Cost & power, per day and per run
  • Configure agents, workflows & schedules
12:49
dispatch-01 Home
30
UPTIME2d 22h
MEM18%
CPU24%
GPU26%
29
CPU °Ci7-6700 · 8 cores GPU °CTesla · 32 GB
UTILIZATION · 1HNOW
CPU 9%
GPU 26%
MEM 18%
All metrics ›
COST TODAYSAVED ›
$0.16$2.59
LLM $0.00 · POWER $0.1618.5k tok · 8 req
Home Chat Approvals Agents
01

One run, seven steps, one decision to trust

workflow · bablic-migration-summary · DAG (parallel branches, isolated failure)

01

Pull the pipeline

nucleus.get_pipeline_summary(group_by)

Your CRM aggregates the deals server-side — count and ARR per status, rolled up to totals or split by rep. The database does the sum.

deterministic
02

Flatten to a table

utils.json_to_csv

Normalize the response into a flat, keyed table — the shape every downstream step expects.

deterministic
03

Snapshot this week

assets.write · total-{{date}}.csv

Persist the numbers to your box. This file becomes next week's baseline — the pipeline builds its own history.

write · auto
04

Load last week

assets.read · total-{{date-7d}}.csv · if_missing: empty

Read the baseline from exactly seven days ago. Runtime templating resolves the date — no fragile "compute a filename" agent. Missing file? Treated as empty, not a crash.

∥ parallel
05

Compute the deltas

utils.delta_by_key

Join this week to last week on the key, and compute every change — counts, dollars, movement per rep. Deterministic to the cent. No model touches these numbers.

deterministic
06

Write the report

agent · weekly-migration-report-writer · transform

The agent receives finished numbers and does the one thing a language model is good at — turning them into a clean, readable Slack message. It never invents a figure.

generative
07

Post to Slack

nucleus.send_message

Deliver the finished report to the team channel — unattended, no hand on the wheel. These two run on a schedule with zero touches.

write · auto
Nothing in this run is migration-specific. get_pipeline_summary, delta_by_key, assets.write, the {{date-7d}} templating, the DAG engine — all general-purpose primitives. Point the same machinery at any dataset, any cadence, any channel.
02

The whole report hangs on one join

Every sentence in the message is really one question — what changed since last week — and answering it means joining this week's snapshot to last week's on a key, then subtracting. That step is where a report like this is won or lost.

Tools do the work

Correctness lives here. Same input, same output, every time.

  • aggregate the pipeline
  • flatten & snapshot
  • resolve last week's file
  • diff every number

The agent does the judgment

Tone, ordering, emphasis — what language models are actually good at.

  • write the headline
  • lead with what matters
  • phrase the deltas
  • keep it scannable
Ask a model to do that join and you are asking it to hold two tables in its head, match rows by key, subtract pairs of numbers, and not lose one — over dozens of rows. A 30–70B model running locally will get that wrong, confidently, and the report will look perfectly reasonable. delta_by_key does the join and every subtraction before the agent sees anything; what reaches the model is a finished row with the deltas already in it. Move the join into a tool and the model's job shrinks to writing a sentence — which is the job it is actually good at, and small enough to run on your own hardware for nothing.
03

What the platform gives you — and what you wire up

Building this was composing primitives, not writing code. Worth seeing where the line sits when you scope your own.

Dispatch provides

Built-in capability — available to every workflow, on every box.

  • the delta_by_key join tool
  • {{date-7d}} runtime templating
  • snapshot storage on your own box
  • scheduling, approvals, run history

You wire up

A row in your box's database. Live the moment you save it — no deploy, no rebuild.

  • both report workflows
  • the two writer agents & prompts
  • the Friday schedule
  • which channel they post to
Nothing on the left is specific to migration reporting. delta_by_key answers "what changed since last time" for any dataset with a key, and {{date-7d}} resolves a filename for any cadence you like. That is what makes the right-hand column an afternoon rather than a project: the deterministic parts already exist, and the job is deciding how to arrange them.
The takeaway

The join is a tool, so nothing is left to guess.

Shipping today · Fridays 14:00 ET → #migration