Pre-meeting recall briefs from Mem0 in Slack
Every 30 minutes, get a Slack DM with what you already know about the people you're about to meet, pulled straight from your Mem0 memory.
Build me an agent workflow that gives me just-in-time recall before every meeting, using Mem0 as my long-term memory layer.
Trigger: cron, every 30 minutes during my working hours. Google Calendar is not a poll provider in this platform, so cron is the right shape here.
On each tick, the agent should:
1. Call List Events (google-calendar) on my primary calendar with timeMin = now and timeMax = now + 90 minutes, singleEvents = true, orderBy = startTime. Filter out cancelled events, all-day events, and personal holds with no other attendees.
2. For each remaining event, build the external attendee list: drop my own address, drop anyone whose email is on my own domain or on a configurable internal-domain allowlist, and drop obvious internal addresses like room resources or distribution lists. If after that filter no external attendees remain, skip the event.
3. For each external attendee, call Search Memories (mem0) with user_id set to that attendee's email (or a stable identifier you've been storing them under) and a natural-language query like "key facts, preferences, recent context, and open threads about this person". Pull the top semantic hits. If every attendee on the meeting returns zero hits, skip the meeting entirely. No signal, no spam, that's the whole point.
4. Synthesize one consolidated brief per qualifying meeting. Format: meeting title and local start time at the top, then the external attendee list, then a short block per attendee with three to five "what you already know" bullets pulled straight from the Mem0 hits (do not invent context, only cite what the memories actually say), then a final "watch-outs and suggested talking points" section that synthesizes across the memories (open commitments, sensitivities, follow-ups you owe, threads worth re-opening). Use Slack mrkdwn formatting: single asterisks for bold, hyphens for bullets.
5. Post each brief as a Slack DM to me. Use Open a Conversation (slack) with my own Slack user id to get the DM channel, then Send a Message (slack) to that channel. Sequence the messages so the next-soonest meeting lands last (and therefore sits on top of my DM history). Include a clear header line with the meeting time so I can scan.
6. Dedupe. The same 30-minute cron will see the same upcoming meeting on several consecutive runs, so the agent must brief each event exactly once. Use Add Memories (mem0) to write a small marker memory keyed to the event id (e.g. user_id = "meeting-briefs", content = the event id and the timestamp it was briefed at), and check that marker first with Search Memories at the start of each event. Alternatively, the agent can scan recent Slack DM history for the event id before posting. Either works, pick one and stick to it.
Guardrails: never fabricate a fact that isn't in the memories. If Mem0 returns thin context for an attendee, say so honestly in their block rather than padding. Do not brief meetings that have been cancelled or declined by me. Do not run for events outside the 90-minute window.
Context for why this exists: my Granola call notes already flow into Mem0 via a separate capture workflow, so my memory layer is full of durable facts about the people I work with. This workflow is the recall counterpart. It closes the loop by turning that stored memory into a brief that lands right before I actually need it.
Additional information
What does this prompt do?
- Scans the next 90 minutes of your primary Google Calendar every half hour and picks out meetings with at least one external attendee.
- For each external attendee, pulls every durable fact, preference, prior commitment, and open thread you've ever stored about them in Mem0.
- Writes one tight brief per meeting with the time, the attendee list, three to five 'what you already know' bullets per person, and a short watch-outs and talking points section.
- Drops each brief in your Slack DMs in order, next meeting on top, and stays silent on meetings where there's no real signal in memory so you never get spammed.
What do I need to use this?
- A Google account with the calendar you want briefed (typically your work calendar)
- A Mem0 account with an API key, ideally already populated by your call notes or capture workflow
- A Slack workspace where the brief can land in your DMs
How can I customize it?
- Change how often it runs and how far ahead it looks, like every 15 minutes for the next hour, or every hour for the next afternoon.
- Adjust what counts as external by adding or removing internal email domains so the right meetings get briefed.
- Send the brief to a private Slack channel instead of a DM, or change the layout to lead with talking points if that's what you read first.
Frequently asked questions
What if I don't have any Mem0 memories about the people I'm meeting?
Where do the Mem0 memories come from in the first place?
Will I get the same brief twice if the workflow keeps running every 30 minutes?
Does this work for internal meetings too?
Can the brief land somewhere other than my Slack DMs?
Walk into every meeting already remembering.
Connect Google Calendar, Mem0, and Slack once, and Geni turns your stored memory into a just-in-time brief before each call.