“I see you haven’t sent Sarah the Tokyo itinerary you promised in iMessage Tuesday. The folder hasn’t opened since. She emailed yesterday asking.”
~/Trips/Tokyo last modified mon 4:02pmThe apps on your Mac know more about your relationships than you do. LSTN is the Mac app that finally tells you.
● private beta · macOS 14+
i see you haven’t replied to sarah in six days. the file you promised her hasn’t opened since tuesday. she’s emailed twice — the second one was shorter.
”— your Mac, which already knew.
↳ why you keep missing things
You forgot. You ghosted. You missed it. It wasn’t your fault — the signals were scattered across six apps that can’t see each other.
knows what you said.
can’t see what you did about it.
knows what you owe.
can’t see what you’ve been doing instead.
knows where you’ll be.
can’t see what you should know before you get there.
knows what you’ve touched.
can’t see who’s waiting on the result.
knows what you swore.
can’t see if the world has moved on.
knows what you committed to.
can’t see if you’ve actually done it.
One fact — “you said you’d send Sarah the deck Friday” — lives in three different apps. And no single app on your Mac will ever connect them for you.
she said yes eleven days ago.
you haven’t said anything since.
— overheard, last tuesday.
↳ the raw material
You already see all of these every day. Familiar artifacts in familiar apps. Each one a little piece of the same story — and not one of them aware of the others.
Day 1 · Mon — arrive Narita 4pm. Train to Shibuya. Dinner at the place Sarah found.
Day 2 · Tue — Tsukiji morning (early!!). Ginza in the afternoon, walk the back streets.
Day 3 · Wed — Hakone overnight? still need to book the ryokan
Day 4 · Thu — depart NRT — pick a flight
unplayed · transcribed: “hi sweetheart, just calling to…”
Four apps. Four artifacts. Four halves of the same story.
LSTN is the part that finally puts them in one room.
↳ what LSTN actually says
LSTN reads each source continuously, links events to the right person via your Contacts, and surfaces the things that only become visible when you can see across them. These aren’t recaps. They’re the moments worth knowing about, in plain language.
~/Trips/Tokyo last modified mon 4:02pmfundraise-deck-v2.key untouched 9d↳ how it builds the picture
The fundamental object in LSTN is not a message or an email or a meeting. It’s a person — with hundreds of incoming events from every channel they’ve ever touched you in. Here’s how we get there.
LSTN reads Contacts.app once and builds a map: every
email address, every phone number, every alias, every nickname
— all linked back to one Person. Phone numbers are
digit-normalized so +1 (415) 555-1234,
4155551234, and (415) 555.1234
all collapse into the same node.
why it matters: without an identity bridge, your dad’s cell, your dad’s gmail, and the “Dad <3” in your iMessage are three different people to your computer. Contacts is how they become one.
As each source streams in, LSTN attributes the event to the right humans. A message: sender + recipients. An email: from + to + cc, with all your alias addresses recognized as you. A calendar event: organizer + attendees. A file: any name in the path that matches a contact.
why it matters: a person stops being a phone number or a Slack handle and becomes a node with a stream of attributed events flowing into them — sortable, queryable, summarizable.
Periodically — debounced, never on demand — the insight engine asks: “what’s true about this person right now?” It feeds a window of their recent events (across every source, in chronological order) to Claude and gets back a tight profile: current state, sentiment, intensity 0–10, the one sentence about what changed since last regeneration.
why it matters: the picture is always fresh because it’s rebuilt from raw events every time. Nothing is cached as “true,” so as new context arrives, the picture quietly updates.
You don’t browse 400 person-profiles. The home view shows the small set of people who have meaningful change or pending action. Cards rebuild themselves silently as new context arrives. There is no refresh button anywhere in the app.
why it matters: attention is a budget. LSTN’s job is to tell you the three things that matter today, not show you a feed.
↳ watch it happen, in real time
Here’s exactly what happens, in order, when one promise gets made in iMessage, touched once on disk, then asked about by email. Each event flows into LSTN tagged with the same person. Watch the picture form.
“You promised her the itinerary by Friday in iMessage. The file hasn’t opened since Tuesday. She’s emailed twice. The second email was shorter — it’s getting tense.”
Three apps. One person. One picture. That’s the entire product.
you keep saying you’ll…
and the file keeps sitting there.
— said with love, by your laptop.
↳ what LSTN actually shows you
This is what shows up when you open LSTN. A single card per person who needs your attention — built fresh from raw events across every source you’ve connected, every time something changes.
“You promised her the itinerary by Friday. The file hasn’t opened since Tuesday. She’s emailed twice — the second one was shorter.”
“Each signal is small, but stacked together — two missed calls, an unread voice memo, three forwards, and a doctor appt she added to the shared calendar — something’s going on.”
“She’s emailed twice about the bridge round. Last text ended with ‘we’ll talk.’ The deck you said you’d update for her hasn’t been touched in 9 days. Tomorrow is the conversation.”
No feed. No badge count. No notifications begging for attention. Just the three things you should know today.
↳ each connection
Each source isn’t just a data feed — it answers a specific question about the people in your life that no other source can. Here’s the breakdown.
the truest mirror of where things stand
What it does: reads
~/Library/Messages/chat.db directly through a
file-system observer. Every iMessage thread, group chat, SMS,
and reaction back to the day you turned on your Mac. Updates
in milliseconds when a new message lands.
Why we listen: iMessage is the lowest-noise, highest-signal channel you have. Tone, frequency, who initiates, who reacts — text patterns are the truest mirror of where things actually stand with someone. Your inbox is performative. iMessage is honest.
the formal record of what you owe
What it does: backfills via the AppleScript bridge to Mail.app — 24h, then 7d, 30d, 90d, 365d, then three years deep — then keeps up with a 60-second incremental poll per mailbox. Every account you have in Mail, including Gmail and Exchange.
Why we listen: nobody types “I owe Sarah a reply.” They have an email from Sarah waiting nine days. Mail is the objective ledger of your debts — what you promised, what’s overdue, the gap between your intent and your follow-through.
past meetings = relationship evidence
What it does: subscribes to EventKit’s
EKEventStoreChanged notifications. Reads attendees,
recurrence, history, cancellations, no-shows. Updates the moment
an event is created, moved, or accepted.
Why we listen: the calendar isn’t a future-only artifact. Past meetings are the densest evidence of who you actually invest time in. A standing 1:1 that quietly disappeared is a relationship in trouble. A meeting tomorrow with no prep is a problem about to happen.
where your promises live as files
What it does: FSEvents push notifications on any folders you choose — a project directory, your Desktop, that one screenshot dump. Watches modification times, renames, new files, and the names in file paths.
Why we listen: every relationship has a deliverable somewhere on disk. The deck you owe a partner. The brief stuck in Drafts. The folder that’s been “in progress” since March. Folders convert “I should do that” into “the file is cold and they’re waiting.”
the gap between intention and action
What it’ll do: read your local Reminders database (with permission) and fuse each reminder with the actual person it’s about — so “remind me to call mom” lives next to your real call/text history with mom, not in isolation.
Why we’ll listen: reminders are the gap between intention and action. LSTN cross-references them against the actual world — was the thing you swore you’d remember actually done? Or is it “snoozed × 4” while the person you’d remind yourself to call has been calling you?
where work happens in the open
What it’ll do: with your user token, listen via Socket Mode across every workspace you’re in — channels, group DMs, threads, mentions, reactions. Bridge Slack handles back to real people via Contacts so a coworker’s DM and their email become the same conversation.
Why we’ll listen: work happens publicly in Slack. Public commitments, threads you ducked, mentions during deep-work hours. Slack is where “I’ll get to it” becomes a record. Coming once we ship the Slack source.
↳ the vault
Local-first isn’t marketing language. Your messages, your mail,
your calendar — they never leave the machine they’re
already on. LSTN reads them in place and stores derived events in a
tiny SQLite file at ~/.story_layer/ you could delete
with one drag.
you already said it.
you already heard it.
now something finally remembers it. you.
↳ things people whisper at us