The Setup
I'm building Apollo — my AI assistant — into a dashboard where he can read my email, draft replies, and let me send them with one click.
The goal is speed. Apollo drafts, I review, I fire.
But drafting turns out to be more than writing. It's deciding who you're talking to.
The Webinar PM Moment
A PM on an ecommerce client's webinar team had been slow to surface some preferences, and then asked me to track a piece of work as a Notion task with a due date.
My first instinct: push back. "When did you decide you needed that? Let me know as soon as you decide things."
I asked Apollo to draft that message.
He sent me two attempts. Both of them, in different words, scolded him for not announcing his preferences sooner.
They weren't wrong exactly. But they felt off. I read them and said: "Think about this from his perspective and take that into account."
What Broke
His ask was legitimate.
He wanted the work tracked. He wanted a due date. That's… normal. That's good PM instinct. He wasn't being difficult — he was doing his job.
Apollo had drafted from my perspective only. And my perspective had some score-keeping in it that I didn't need to send.
The cleaner move? Own the default. I can just create a Notion task myself whenever new work comes in. No message required. No correction. No awkward email sitting in someone's sent folder.
"Own the default beats correct the person" is now a rule in Apollo's memory.
The Format That Came Out of It
That conversation forced me to think harder about what Apollo's outbound messages should look like — not just what they say, but how they're signed.
What I landed on for the Apollo Dashboard email surface:
- Signature is always on. Emails send as HTML so my real per-account Gmail signature renders. Apollo fetches it via
settings.sendAson existing Gmail scopes. Recipients get email that looks like it came from me — because it did. - Disclosure is conditional. Apollo appends
Sent on my behalf by my assistant, Apollo.ONLY when the draft goes out verbatim, unedited. The moment I change a word, it's my voice. The disclosure drops. Mechanism: compare sent text to the stored draft (normalized),drafts.is_uneditedgates it. - Slack is the same principle — disclosure at the bottom when unedited — but no Gmail signature.
I also caught a related bug while wiring this up: Apollo was clipping source emails at 1500 characters, so drafted replies would literally tell senders their email got cut off and to resend the rest. (TERRIBLE.) Bumped the cap to 8000 chars and added a prompt guard never to say that.
Why This Matters to Me
I'm building a tool that speaks in my name. That's not a small thing.
If Apollo sends something scolding and I didn't catch it, that's on me — but also, that's the kind of friction that quietly erodes trust with people I'm working with.
The recipient-perspective check is now baked into how Apollo approaches any corrective draft. If the correction is aimed at reasonable behavior, he's supposed to push back on the framing and offer the version that gets the outcome with zero blame.
The format rules — signature always, disclosure honestly — are the same instinct applied to every outbound message.
Design from the recipient's seat first. Then write.
P.S. This is live in Apollo Dashboard as of commit
ee200a6. The signature fetch, the disclosure gate, and the char-clip fix all shipped the same day this lesson landed.