Slack gives EVE’s fundraising agent, Eve, no screens of her own, only messages, threads, cards, and reactions. I designed the rules that decide which of those an answer becomes, and shipped them into the production agent with tests that grade every reply.
The problem
A single number arrived wrapped in a report, and a real report arrived as a wall of text.
What I shipped
Rules in the production agent that route each answer to the right shape.
How it holds
Every rule can fail a reply from its text alone.
Where an answer goesRules rebuilt for this page
The answer holds
Search Acme
Acme
Channels
#general
#outreach
#pipeline
Direct messages
EveAPP
#outreach
F
Founder
@Eve how did outreach do this week?
EveAPP
Acceptance is up, but replies aren’t following. The opener is the likely cause, and the rewrite is in your queue.
📊 Outreach this week
Invites sent
12
Accepted
4
Replies
3
Calls booked
1
Monday to Friday
Message #outreach
1One answer or a few numbers is a sentence.
2Figures to scan or compare are a card.
3Fired: Figures that need interpreting get one read above the card.
4Three or more subjects become a briefing with short sections.
5The long tail, drafts, and evidence go in the thread. Never more than ten items inline.
Example messages are reconstructions. Names and numbers in them are illustrative.
My work
Founding Product Designer. I wrote Eve’s Slack surface as rules the model follows and the evals can grade, then shipped each one as a change to the production agent. The gateway that renders Block Kit, and the platform under it, are engineering’s; they reviewed every change.
Every reply had the same shape
Early on, every reply took one shape: a paragraph, then whatever figures and detail had come up, in one post. A single number arrived wrapped in a report, and a real report arrived as a wall of text.
I wrote the routing down as a small grammar the model follows. One answer or a few numbers is a sentence. Figures to scan or compare are a card. Figures that need interpreting get one read above the card. Three or more subjects become a briefing with short sections. The long tail, the drafts, and the evidence go in the thread. Some answers fall between two shapes, and Eve picks the wrong one.
The row that says what she’s looking at
While Eve works, Slack shows one working row under the question, and the notification carries one line about it. That line used to say two generic things: "Thinking it through" before anything ran, and "Working on it" over every step after. Neither told the founder the one thing they want to know mid-turn, which of their things Eve went to look at.
Now the notification names the area of the founder’s world the work is in, claimed by the first step that has one: on your campaigns, on your prospects, on what’s waiting on you. Memory, Slack reads, and orientation claim nothing, because a header that names the plumbing is worse than a shrug. A turn that only reads memory or Slack adds no clue to the notification. The first row says what Eve was handed, and the row between tools says she is making sense of what came back, which stays true whichever way the turn goes. Engineering made the row rewrite itself in place; the words are mine.
A turn in flight
The founder can see what Eve went to look at before the answer lands.
Evenow
📣 On your campaigns
#outreach
F
Founder
@Eve how did outreach do this week?
EveAPP
💬Reading your message
💬Reading your message
📣Catching up on what’s happened
📣Counting up the last few weeks
📥Checking what’s waiting on you
🧩Making sense of what came back
The long tail goes in the thread
The scheduled digest landed as one long post in the channel: the read, a card, a breakdown for each item, a numbered list of flags, and a footnote. The room had to scroll past what mattered to reach the rest.
Now the reply keeps the read, the card, and the question. Everything else goes as one message in the thread under it, posted after the reply lands. A second call replaces the tail instead of adding to it, because one message per turn is the contract. The card’s title became a native header, and the divider that used to open it went. Once the detail lives in the thread, it becomes harder to search.
The weekly digest
The channel reads the verdict and the card. The detail is one tap away.
#outreach
EveAPP
Acceptance is up, but replies aren’t following. The opener is the likely cause, and the rewrite is in your queue.
📊 Outreach this week
Invites sent
12
Accepted
4
Replies
3
Calls booked
1
Monday to Friday
Trends get Slack’s native chart
A shape over weeks had no honest home in Slack. The agent drew bars out of block characters or walked through the numbers in prose.
Slack has a native chart block, so the card gained an optional bar or line chart: up to twelve points, and a second series only as a benchmark. A rejected block deletes the whole reply, so there are two protections. A benchmark whose labels don’t line up with the first series is cut before sending. A workspace that refuses the block gets the card again without the chart. That is why the figures that carry the decision live in the card’s sections both ways: the fallback shape preserves the read.
The card carries a chart
The shape of the six weeks, with last quarter as the benchmark.
#outreach
EveAPP
Acceptance has climbed three weeks running.
📈 Acceptance rate, last six weeks
This week
33%
Six-week average
24%
This quarter Last quarter
When a report becomes a file
Eve can answer in a sentence, a card, a picture, or a file. The document rule only fired when someone asked for a PDF, so nothing said when a report should become one on its own, and nothing stopped a scheduled daily from shipping as a file: one more tile in the channel every morning, and a click to read it.
The medium became a ladder with one test for the top rung: a document is for what someone will forward, file, or read away from Slack. The weekly wrap passes, so it ships as a PDF unasked, with the verdict in the message above it and the card beside it, never the file alone. A daily never does. It is a glance, so a one-page report arrives as a picture in the channel, readable on a phone without a click. A report longer than a page never goes out as a picture, since a picture would show page one alone. A direct ask overrides the ladder either way.
What a report becomes
A daily is a glance: one page, inline, no click and no file.
#outreach
EveAPP
Wednesday: acceptance is holding at a third, and replies are still the gap.
Short became a number
"Keep it short" is not something a model can hold to or an eval can check. So I turned each length rule into a number: about 60 words for a reply, two sentences above a card, about 120 words when the answer needs depth, and never more than ten items inline. Detail that once fit inline now goes to the thread.
The emoji went the same way. The check-in used to wear a different set each time; now it wears a fixed one. Every rule here can be checked from the message alone.
Length ceilings
#outreach
EveAPP
Edit the draft or load one. The count comes from the text alone.
77 of 60 words · over the ceiling
What shape fits each answer in Slack
Block Kit is a small vocabulary, and an agent will happily use all of it at once. The design work was deciding which of five shapes an answer takes, and writing that decision down where Eve and her tests could both read it.
Every rule on this page can fail a reply from its string alone. That mattered more than any single layout. Engineers could check a message without asking me whether it looked right.