Shaping the identity and behaviour of the EVE Slack agent
Eve is EVE's AI revenue teammate, and she lives entirely in Slack. I designed how she talks and behaves, then shipped that behaviour into the production agent myself.
The first message in a channelReal production copy, before and after.
Search Acme
Acme
Channels
#general
#outreach
#pipeline
Direct messages
EveAPP
#outreach
EveAPP
joined #outreach.
I'm in π Mention me here for anything on the outreach, and DM me for anything you'd rather not put in a channel. If we haven't set you up yet, my DM is where that starts.
Message #outreach
Works
She joins the way a colleague would, and setup starts from anything the founder types.
My work17 merged pull requests144 commits to the production agent+9,216 β621 lines merged
Founding Product Designer. I prototyped Eve's behaviour, wrote each change as the Slack message it should produce, and shipped it into the production agent with its evals. The platform, the queue, and the infrastructure belong to the engineering team, who reviewed every change.
Example messages are reconstructions. Names and numbers in them are illustrative.
The first Eve handed the work back
The early agent could draft, research, and run the numbers, and then asked permission to do any of it. Every reply ended on an offer, so the founder got the work back plus a question.
I split her verbs into two lists. Drafting, shortlisting, running numbers, and writing things down are hers, unasked. Sending, approving, activating, enrolling, and holding wait for the founder, every time. The go-ahead gates the send, never the draft.
Who does what
Verb
draft
Eve does it now
draft
shortlist
run the numbers
write it down
Waits for the founder
send
approve
activate
enroll
hold
Fails: Before
Search Acme
F
Founder
step 2 feels long, can you tighten it?
EveAPP
I can shorten step 2 to two sentences. Would you like me to draft that?
Works: After
Search Acme
F
Founder
step 2 feels long, can you tighten it?
EveAPP
Step 2 is down to two sentences, and the version you had is in the thread. It goes out once you approve it.
Identity was losing to the rules
Eve's character was one paragraph competing with several hundred lines of rules for the model's attention. The rules kept winning, so she sounded correct and like nobody in particular.
I wrote a soul: eight lines at the very top, in her first person, saying who she is before any craft. It was additive on purpose. Cutting the rules it made redundant had to wait for a voice regression suite that could catch a bad cut.
The soul restates rules that live further down, and within days one copy drifted. Its list of what belongs to the founder named four things where the rule named five, so the first thing the model read was a narrower gate than the rule it stood in for. Prose review caught it late, so now the build catches it: it fails when the two lists disagree.
Drift check
The soul, line by line. Its words stay private; each line's job is shown.
What I do, in one line
How I show up, and what is genuinely yours
What I notice first
Kind about people, exact about numbers
What I will not make up
What I will not be talked out of
Why I am here
What I want to be for you
The ownership rule
money
own accounts
identity
name on anything sent
commitments to others
The soul's list
money
Missing: own accounts
identity
name on anything sent
commitments to others
Build failed. The soul names 4 of the 5 things the rule gives the founder.
Nothing noticed when the voice got worse
Until someone screenshotted the channel, a regression in Eve's voice was invisible. So the rules that can be checked in code became checks, and the rest became graded cases replayed from the shapes of real conversations, with none of the real people in them.
Three cases hold the line. A recommendation Eve repeats must arrive already done, not offered again. The register at the sixth message must read as the same person as at the first. Every figure on a check-in card must come from the data. Golden anchors prove each grader both ways: it passes an honest reply and fails a violating one.
Below is a smaller version of the idea: a handful of hard rules, checked as you type.
Voice lintRuns in your browser
Search Acme
EveAPP
Edit the reply or load a sample. These checks were written for this page, not taken from EVE's suite.
1 of 8 checks pass
Fails: At most one question2 questions
Fails: No em dashβ
Fails: First person, never "Eve will"Eve has
Fails: No grade as an openerGreat
Fails: Does the work instead of offering itWould you like me to, should I
Fails: No hedgingroughly
Fails: No ad-copy wordsleverage, streamline
Passes: No system words
Silence was the worst thing Eve did
When a founder mentioned Eve, a π€ reaction said she had it. Nothing guaranteed anything would ever take it off. A dropped job or a hung turn left the reaction standing, with no reply and no error anyone could see.
Now every accepted message either gets an answer or says it won't. Accepting writes a marker and arms a check, and delivery clears both. If the check still finds the marker ten minutes later, Eve posts one honest line and the silence is counted as an incident.
The first version still failed exactly when it mattered. An expired marker looked the same as an answered one, so a wedged queue erased its own evidence. A settled turn now leaves a short-lived tombstone, and when neither is there, Eve speaks.
Waiting changed too. A placeholder post had to be taken over or deleted, and each hand-off could leave the room looking at two messages. A π on the founder's own message says the same thing and costs the thread no line at all.
One mention, two outcomes
Search Acme
Acme
Channels
#general
#outreach
#pipeline
Direct messages
EveAPP
#outreach
F
Founder
@Eve can you pull this week's replies?
EveAPP
Something broke on my side picking this up, and I don't want to guess at your question. The team has the details. Ask me again and I'll take it fresh.
π on the founder's message
Marker written, check armed
The job never runs
Ten minutes later, the marker is still there
One honest line, and the incident is counted
The designed line. Wording in production may differ.
Each moment, written as the message
"Eve feels dull" is not something anyone can build. So for each moment I wrote the exact Slack message she should send, rendered as it would appear, and that became the spec the change was built and graded against.
Moments
A long reply leads with its takeawayShipped Aug 23
Search Acme
EveAPP
Short answer: the copy is the problem, not the volume.
Acceptance slid from 31% to 22% in two weeks, and the invite's first line contradicts itself. The rewrite is in your queue.
The morning check-in says lessShipped Aug 18
Search Acme
EveAPP
Morning: 12 invites out, 2 accepted, and the queue is clear. Nothing needs you today.
A preference, named once in the workShipped Aug 18
Search Acme
EveAPP
Morning: 12 invites out, 2 accepted. Kept it short, as you asked yesterday.
The goal reachedDesigned, not built
Search Acme
EveAPP
That's ten π― The goal you set on the 1st is done with four days to spare. Twelve looks reachable next month if you want to raise it.
ππ reaction from 3
Standing permission is the founder's to raise
In my prototype, Eve earned autonomy. After a clean streak of approvals she offered to send follow-ups on her own. In production that went wrong: a founder asking what happens after connecting LinkedIn was told Eve would send every opening message, and was offered standing permission nobody had asked for.
So I reversed it. Connecting an account sends nothing, and outreach goes out as the founder. Standing permission is never Eve's to offer: the founder raises it, first messages to a new prospect always wait, and one line takes it back.
Standing permissionApprovals Every draft waits for you
Search Acme
Acme
Channels
#general
#outreach
#pipeline
Direct messages
EveAPP
#outreach
EveAPP
Follow-up draft to Marco, Tillwise
Following up on the forecast question. Happy to send the two-page version if the long one was too much.
Reply as the founder
What I'd tell the next agent team
I started on Eve's words, and by late August the words were close. The failures founders actually felt were silence, a number said with confidence she didn't have, and a preference promised and then ignored. None of those live in the prompt. They live in the tools she holds, when she wakes, what she remembers, and what she is allowed to do.
The most useful thing I did for the engineers was write each moment down as the exact message, rendered, with a check that could fail it. That turned "Eve feels off" into a change someone could land, argue with, and keep.