Emma Lynch — Follow-Up Agent

CEO & cofounder of Q2Med. Raising £1.8m. 3-person team. Pharmacy supply chain search portal.
Tools: Gmail, Granola, Google Calendar. Talks to Toyo on Telegram.

v5 — Follow-ups only

1. Onboarding & Connect Tools

Emma signs up, completes the onboarding flow (name, company, role), then does an onboarding voice call where she tells Toyo about Q2Med. Key things from the call:

After the call, Toyo generates a business analysis. Emma approves it. Her workspace provisions. She lands in chat for the first time.

Web
Toyo
Hey Emma! Good chat on the call — sounds like the post-meeting follow-up emails are killing you. Let's start there.

I can draft a follow-up from your Granola notes right after each meeting. You just review and approve. To set that up I'll need access to your Gmail first — that's how I learn your writing style and create drafts.
Connect Gmail

Emma clicks "Connect Gmail". An OAuth popup opens. She authorises. The popup closes automatically.

Emma
[automatic] I've connected Gmail.
Toyo
Nice. Now I need Google Calendar so I know when your meetings end.
Connect Google Calendar

Emma clicks. OAuth popup. Authorises. Popup closes.

Emma
[automatic] I've connected Google Calendar.
Toyo
Last one — Granola, so I can read your meeting notes.
Connect Granola

Emma clicks. OAuth popup. Authorises. Popup closes.

Emma
[automatic] I've connected Granola.
Toyo
All set. Give me a sec — I'm reading through your sent emails to learn how you write.
Logic
  1. Onboarding call analysed → extract #1 pain: post-meeting follow-ups
  2. First chat message: reference the pain, propose starting there
  3. Request one toolkit at a time via request_toolkit_connection()
  4. Render IntegrationConnect button inline in chat (Composio OAuth)
  5. User clicks → OAuth popup opens → authorises → popup auto-closes
  6. Automatic "I've connected {toolkit}" message appears
  7. Session context rebuilds after each connection
  8. Agent immediately requests the next toolkit
Background (after all connected)
  • gmail.readSentEmails(limit: 50) — build voice profile from real sent emails
  • calendar.getRecentMeetings(14d) — map meeting history
  • granola.indexNotes() — load all available meeting notes
  • Cross-reference: which meetings have follow-ups sent, which don't

2. First Follow-Up — Instant Payoff

Moments later. Toyo has scanned Emma's calendar and emails. It finds an overdue follow-up.

Web
Toyo
I can see you had a call with John Carragher from Boots last week — no follow-up sent. I've got your Granola notes from it. Here's a draft:
Add to Gmail drafts Edit Skip
Emma
Change "great to connect" to "good to chat" and add to drafts.
Toyo
Updated and added to your Gmail drafts. You can send it from there whenever you're ready.

By the way — if you set up Telegram I can ping you right after each meeting with a draft like this. Way easier than opening the web app.
Connect Telegram

Emma sees the value. She clicks Connect Telegram, opens the deep link on her phone, taps Start.

Emma
[automatic] I've connected Telegram.
Toyo
You're connected. From now on I'll message you on Telegram right after each meeting with a draft follow-up ready to go.
Logic
  1. calendar.recentMeetings().filter(noFollowUpInSent)
  2. granola.getNotes(meetingId)
  3. Draft using voice profile from 50 sent emails
  4. "Add to Gmail drafts" → gmail.drafts.create()
  5. saveStyleCorrection("good to chat" > "great to connect")
  6. After first payoff → suggest Telegram (user has seen the value, more likely to connect)
Background (while user reviews draft)
  • Already scanning for more overdue follow-ups
  • Pre-loading Granola notes for next match
  • Pre-drafting with new style correction applied
Sequence matters: Connect tools → immediate payoff (draft a real follow-up) → then Telegram. Emma sees value before being asked to do more setup. The Telegram ask lands after she's already experienced the product working.

3. Post-Meeting Notifications on Telegram

Next day. Emma just finished a call with Sarah Mitchell from Bromley. Her phone buzzes.

Telegram
Wednesday, 11:50am
Toyo
Your call with Sarah Mitchell (Bromley) just ended. Draft ready:
Add to Gmail drafts Edit Skip
Emma
Add to drafts.
Toyo
Done — in your Gmail drafts.

An hour later. Another meeting ends.

1:35pm
Toyo
Your call with Mark Sullivan (Investor) just ended. Draft ready:
Add to Gmail drafts Edit Skip
Emma
Edit — change "good to chat" to "really appreciate your time" and add "I'll include the community pharmacy data you asked about."
Toyo
Updated:
Add to Gmail drafts Edit more
Emma
Add to drafts.
Toyo
Done. You've got 2 drafts in Gmail from today's meetings.
Logic
  1. calendar.onMeetingEnd() → trigger for each meeting
  2. granola.getNewNotes(meetingId)
  3. Draft using voice profile + accumulated style corrections
  4. gmail.drafts.create() on approval

4. "Help Me With My Follow-Ups"

A few days later. Emma messages Toyo proactively.

Telegram
Friday, 9:30am
Emma
Help me with my follow ups
Toyo
I'd love to. Let me ask a few things so I get this right:
  1. What kind of follow-ups matter most? (e.g. sales meetings, investor calls, all external meetings)
  2. What's your style — short and direct, or warmer/longer?
  3. How soon after a meeting should I nudge someone if they haven't replied? (e.g. 3 days, a week)
  4. How often should I check your email for follow-ups that need chasing? (e.g. daily, every few days)
Emma
All external meetings. Short and direct. Nudge after 4-5 days. Check every morning.
Toyo
Got it. What time in the morning works best for the follow-up check?
Emma
8am.
Toyo
Perfect. I've read through your last 50 sent emails and your Granola notes. Here's a follow-up guide I've written based on how you actually write:
Emma's Follow-Up Guide
  • Tone: Friendly but direct. No fluff. First-name basis.
  • Openers: "Good to chat", "Great to connect" (for first meetings)
  • Structure: Short recap of what was discussed → clear next steps → close
  • Sign-off: "Speak soon" (never "Best regards" or "Kind regards")
  • Nudge timing: Chase if no reply after 4-5 business days
  • Nudge style: Light touch — "Just bumping this up" or "Checking in on the below"
  • Never over-explain: Keep under 150 words where possible
This is what I'll use for all follow-ups. You can update it any time by telling me.

I'll run a follow-up check every morning at 8am and message you with anything that needs chasing.
Emma
Looks good.
Logic
  1. Detect follow-up setup intent
  2. Clarify: scope, style, nudge timing, check frequency
  3. Ask for preferred check time
  4. Analyse sent emails + Granola notes to build voice template
  5. saveFollowUpGuide(guide)
  6. scheduleFollowUpCheck("08:00", "daily")
Background
  • gmail.sent.analyse(50) — extract patterns, openers, closers, avg length
  • granola.notes.all() — cross-reference with sent emails
  • Build guide from actual writing, not generic templates

5. "What About Old Meetings?"

Toyo proactively asks about historical follow-ups.

Toyo
By the way — I found 4 meetings from the last 2 weeks that don't have follow-up emails:
  1. Kate Williams (Community Pharmacy Group) — 8 days ago
  2. David Chen (MedSupply) — 6 days ago
  3. Fiona Murphy (HSE) — 5 days ago
  4. Tom Bradley (Investor intro) — 4 days ago
Want me to draft follow-ups for any of these?
Emma
Yeah do all of them except Kate — that was an internal thing.
Toyo
Got it — skipping Kate. I'll send you each draft one at a time.
Logic
  1. After follow-up guide is set, proactively check history
  2. calendar.meetings(14d).filter(noFollowUpInSent)
  3. Present list, let user choose which ones to draft
  4. Process one at a time so user can review each individually
Toyo
1/3 — David Chen (MedSupply)
Add to Gmail drafts Edit Skip
Emma
Add to drafts.
Toyo
Done. Next one: 2/3 — Fiona Murphy (HSE)
Add to Gmail drafts Edit Skip
Emma
Add to drafts.
Toyo
Done. Last one: 3/3 — Tom Bradley (Investor intro)
Add to Gmail drafts Edit Skip
Emma
Add to drafts.
Toyo
All 3 done. You've got them in Gmail drafts. I'll start the daily 8am checks from tomorrow.
Logic
  1. Process one by one: draft → wait for user → next
  2. Each uses the follow-up guide for voice + style
  3. granola.getNotes(meetingId) for each
  4. gmail.drafts.create() on approval
  5. Show progress: "1/3", "2/3", "3/3"

6. Daily Follow-Up Check (8am)

Next morning. The scheduled check runs.

Telegram
Saturday, 8:00am
Toyo
Morning. Follow-up check:
Needs chasing (no reply in 4+ days):
  • John Carragher (Boots) — follow-up sent Tuesday, no reply. Workshop scheduling pending.
  • Fiona Murphy (HSE) — follow-up sent yesterday (from backlog), but originally met 5 days ago. Worth a nudge?
On track (reply received or too early to chase):
  • Sarah Mitchell (Bromley) — replied yesterday
  • David Chen (MedSupply) — sent yesterday, too early
  • Tom Bradley (Investor) — sent yesterday, too early
  • Mark Sullivan (Investor) — replied
Want me to draft nudges for John and Fiona?
Emma
Draft one for John. Leave Fiona for now — the original email only went yesterday.
Toyo
Add to Gmail drafts Edit Skip
Emma
Add to drafts.
Toyo
Done. I'll check again tomorrow at 8am.
Logic
  1. scheduledCheck("08:00") → trigger
  2. gmail.sent.getFollowUps() → check for replies
  3. Apply nudge timing from guide (4-5 days)
  4. Categorise: needs chasing vs on track
  5. Nudge draft uses guide style: "Just bumping this up"
  6. User picks which ones to chase — never auto-sends

7. Edit or Cancel a Follow-Up

Later that day, Emma changes her mind about one.

Telegram
Emma
Actually, cancel the follow-up for David Chen. We're not going to work with MedSupply.
Toyo
Done — removed David Chen from follow-up tracking. I won't chase that thread. The draft is still in your Gmail if you want to delete it.
Logic
  1. followUps.cancel("david_chen")
  2. Remove from daily check list
  3. Gmail draft left as-is (user manages their own inbox)

The next morning, Toyo's daily check pings with a nudge for Tom Bradley. Emma wants to tweak it.

Telegram
Sunday, 8:00am
Toyo
Morning. Follow-up check:
Needs chasing:
  • Tom Bradley (Investor) — sent 5 days ago, no reply
On track:
  • John Carragher — nudge sent yesterday
  • Sarah Mitchell — active thread
  • Fiona Murphy — sent 2 days ago, too early
Want me to draft a nudge for Tom?
Emma
Yeah but mention that Mark Sullivan suggested we connect — that might help.
Toyo
Add to Gmail drafts Edit
Emma
Add to drafts.
Logic
  1. User adds context to nudge → incorporate into draft
  2. David Chen no longer appears (cancelled)
  3. Nudge style follows guide: "Checking in on the below"

8. "Don't Follow Up With John"

A week later. The Boots deal fell through.

Telegram
Emma
Don't follow up with John Carragher. Ever.
Toyo
Done. John Carragher is permanently excluded from follow-ups. I won't draft, nudge, or remind you about him. You can reverse this any time.
Logic
  1. followUps.blockContact("john_carragher", permanent: true)
  2. Excluded from all future follow-up checks and post-meeting drafts
  3. If a meeting with John appears on calendar, skip the post-meeting notification entirely
  4. Reversible: "Start following up with John again" removes the block
How blocking works: John won't appear in daily checks, post-meeting drafts, or historical scans. If Emma has a new meeting with John, Toyo stays silent — no notification, no draft. This persists until Emma explicitly reverses it.

9. Turn Off All Follow-Ups

Emma's going on holiday.

Telegram
Emma
Turn off all follow ups.
Toyo
All follow-ups paused. That means:
  • No post-meeting draft notifications
  • No daily 8am follow-up checks
  • No nudge reminders
Everything is saved — your guide, your preferences, your blocked contacts. Just say "turn on follow ups" and I'll pick up where we left off.
Emma
Thanks.
Logic
  1. followUps.pauseAll()
  2. Disable: calendar.onMeetingEnd trigger, scheduledCheck, nudge timers
  3. Preserve all state: guide, style rules, blocked contacts, active threads
  4. Resume: followUps.resumeAll() — re-enables everything, runs a catch-up scan

On resume, Toyo runs a scan of what happened while paused and presents a catch-up list: "You had 3 meetings while follow-ups were off. Want me to draft follow-ups for any of them?"

What Emma Tells Another Founder

"After every meeting my phone buzzes with a follow-up draft. I tap 'add to drafts' and it's in Gmail ready to send. Every morning at 8 it tells me who hasn't replied and drafts the chase. I haven't missed a follow-up in two weeks."