to what’s not said.

The 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

every app on your mac
has a blind spot.

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.

💬 Messages

knows what you said.

can’t see what you did about it.

✉️ Mail

knows what you owe.

can’t see what you’ve been doing instead.

📅 Calendar

knows where you’ll be.

can’t see what you should know before you get there.

📁 Folders

knows what you’ve touched.

can’t see who’s waiting on the result.

✅ Reminders soon

knows what you swore.

can’t see if the world has moved on.

💭 Slack soon

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

this is what your life looks like
scattered across four windows.

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.

Sarah Chen
Monday · 9:42 AM
still need that draft itinerary by friday for my boss to see 🙏
yep on it — will send EOW for sure
read 9:43 AM
Thursday
hey! any update?
boss is asking again 😅
💬 Messages the promise lives here
Inbox · 1 unread
SC
Sarah Chen <sarah@…>
to me · Mon 9:14 AM
re: trip plan?
Just bumping this — any chance I could see what you have so far?

The team meets Wednesday and I’d love to walk them through it.

Thanks!
S
↳ thread of 3 · you owe a reply
✉️ Mail the debt lives here
itinerary-draft.pages

Tokyo — March 18–24

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 · WedHakone overnight? still need to book the ryokan

Day 4 · Thudepart NRT — pick a flight

last saved · Tue 4:24 PM draft
📁 Folders the deliverable lives here
Voice Memos · Mom
Mom
3 days ago
0:00
0:47

unplayed · transcribed: “hi sweetheart, just calling to…”

💬 Messages the unplayed lives here
Reminders · Today
call mom about the house snoozed 4× · first set 17 days ago
email sarah back about tokyo due Friday · added Mon at 9:43 AM
book hakone ryokan no date
refill prescription completed yesterday
✅ Reminders the intention lives here
Calendar · Tomorrow
Tuesday, March 14
9:00
standup
11:00
design review
2:00
Jenna Park · 1:1
jenna@ · you · 4th this Q
4:30
focus block
📅 Calendar the future evidence lives here

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

it doesn’t summarize.
it connects.

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.

01 the promise gap

“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.”

💬 Messages “I’ll send the itinerary by EOW” — tue 9:14pm
📁 Folders ~/Trips/Tokyo last modified mon 4:02pm
✉️ Mail Sarah Chen, yesterday: “any update on the trip plan?”
↳ suggest: send tonight or push the date. She’s checking in — the next email won’t be polite.
02 the cooling thread

“I see you haven’t reached out to David in 11 days. Your last four messages were one-line reactions. The standing 1:1 got cancelled twice. You’re drifting.

💬 Messages 11 days silent · previous 4 msgs averaged 6 words
✉️ Mail 0 emails in 11 days (used to be ~weekly)
📅 Calendar recurring 1:1 cancelled by you twice in a row
↳ suggest: send something specific, not “hey how’s it going.” Reference the move he mentioned three weeks ago. That’s the thread back in.
03 the meeting blind spot

“Tomorrow’s 2pm with Jenna — you should be ready for the fundraising question. She’s emailed twice about it already. The deck you said you’d update for her is untouched.”

📅 Calendar Jenna Park 1:1 · tomorrow, 2:00pm · 4th this quarter
✉️ Mail 2 unanswered from Jenna re: bridge round timing
💬 Messages she vented last thur, ended with “we’ll talk”
📁 Folders fundraise-deck-v2.key untouched 9d
↳ suggest: read both of her emails before the meeting. They’re the actual agenda. Open the deck tonight or be honest that it isn’t ready.
04 the quiet escalation

“Mom is escalating. You probably haven’t noticed because each individual signal is small — but stacked together, something’s going on. Call her tonight.

💬 Messages 2 missed FaceTime calls in 3 days · 1 unread voice memo (47s)
✉️ Mail 3 forwards from her in 6 days (none replied)
📅 Calendar she added “dr. patel followup” to the shared family cal
↳ suggest: she’s not going to ask outright. The doctor appt on the shared calendar is the actual message. Call now — not tomorrow.
05 the pattern you don’t see

“Marcus has invited you to coffee three times in eight months. You’ve said yes every time. You’ve shown up zero times. The pattern is louder than the latest cancel.

📅 Calendar 3 events created with marcus@… · 2 cancelled by you, 1 no-show
✉️ Mail chain of warm reschedule emails · getting shorter each round
💬 Messages last text: “happy to keep trying when it’s easier for you” · 6 wks ago
↳ suggest: don’t reschedule again. Either commit and show up, or send a real note saying not now. He’s being patient, not unaware.
06 the stranger who isn’t

“You’re meeting someone Thursday named ‘Ben K.’ You’ve actually met him before — same person who sent you a long warm intro email two years ago and you never replied.”

📅 Calendar “Coffee w/ Ben K” · thu 11:00am · benk@…
✉️ Mail benk@… sent intro 2yr ago, 412 words, 0 replies from you
💬 Messages mutual: Aaron mentioned him “in the same boat” · jan
↳ suggest: open his old email before the meeting. He pitched something specific you forgot about. Don’t walk in cold — he’s already met you.

↳ how it builds the picture

one person.
every channel.

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.

  1. 01

    your Contacts is the spine.

    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.

  2. 02

    every event gets tagged with people.

    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.

  3. 03

    profiles are synthesized, not stored.

    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.

  4. 04

    only what’s actually relevant surfaces.

    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

follow one thread
across three apps.

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.

  1. mon
    9:42 am
    💬 Messages · thread w/ Sarah Chen
    still need that draft itinerary by friday for my boss to see 🙏
    yep on it — will send EOW for sure
    ↳ LSTN logs: promise made · deliverable: “itinerary” · deadline: friday · person: Sarah Chen
  2. tue
    4:02 pm
    📁 Folders · ~/Trips/Tokyo/
    📄
    itinerary-draft.numbers
    opened · edited 22 min · closed
    ↳ LSTN logs: file activity · matches outstanding promise to Sarah · progress: started, not finished
  3. wed–thu
    silent
    no activity related to Sarah, no edits to the file
    ↳ LSTN logs: two days of silence · promise aging · no new evidence of progress
  4. thu
    11:18 am
    ✉️ Mail · from Sarah Chen <sarah@…>
    ↳ LSTN connects: this email is the same thread as the iMessage promise (matched by Person + topic) · checking-in tone detected
  5. fri
    6:00 pm
    deadline passes · no file activity, no reply sent, no message sent
    ↳ LSTN logs: promise broken · no acknowledgment to Sarah · escalation likely
  6. mon
    9:14 am
    ✉️ Mail · from Sarah Chen <sarah@…>
    ↳ LSTN connects: second email, shorter · tone tightening · insight engine triggers a regeneration of Sarah’s card
  7. mon
    10:30 am
    LSTN · a card appears on your home view
    Sarah Chen · needs reply · promise broken

    “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.

    💬 Mon promise 📁 Tue, 22min, then cold ✉️ Thu & Mon, 2× check-in
    ↳ suggest: send what you have tonight or push the date honestly. Don’t ghost — the third email won’t be polite.

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

one card.
one person.
everything that matters.

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.

LSTN
Today Diagnostics Settings
live · 3 need attention
SC
Sarah Chen friend · tokyo trip
needs reply 7d

“You promised her the itinerary by Friday. The file hasn’t opened since Tuesday. She’s emailed twice — the second one was shorter.

💬 mon · “will send EOW for sure”
📁 tue · itinerary-draft · 22 min then cold
✉️ thu & mon · “just bumping this…”
↳ suggest: reply tonight or push the date honestly.
M
Mom family · escalating
call her live

“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.

💬 2 missed FaceTime · 1 voice memo (47s, unplayed)
✉️ 3 forwards in 6d · none replied
📅 “dr. patel followup” · she added it
↳ suggest: call her tonight, not tomorrow.
JP
Jenna Park investor · 1:1 tomorrow 2pm
prep needed tmrw

“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.

📅 1:1 tomorrow 2pm · 4th this Q
✉️ 2 unanswered re: bridge round timing
📁 fundraise-deck-v2.key · untouched 9d
↳ suggest: read both her emails before the meeting. open the deck tonight.
updated 14s ago · nothing to refresh

No feed. No badge count. No notifications begging for attention. Just the three things you should know today.

↳ each connection

what each ear hears,
and why it matters.

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.

💬

Messages

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.

✉️

Mail

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.

📅

Calendar

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.

📁

Folders

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.”

Reminders soon

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?

💭

Slack soon

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

your life stays on your laptop.

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.

  • no cloud sync. not even a little.
  • no telemetry. we do not know who you talk to.
  • your key, your bill. the model runs on your Anthropic API key.
  • nothing leaves the machine except synthesis prompts you opted into.
  • uninstall = gone. drag to trash and it really is.

you already said it.
you already heard it.
now something finally remembers it.  you.

↳ things people whisper at us

quiet questions, quiet answers.

Is this just an AI summary tool?
No. The point isn’t summarization — it’s connection. Anything can summarize one app. LSTN tells you things that only become visible when you can see across many.
What sources are live today?
Messages, Mail, Calendar, and Folders are live in beta. Reminders and Slack are next on the build queue.
Does it work on Windows?
No. macOS only, on purpose — the magic comes from being inside macOS’s actual data layer (chat.db, EventKit, Mail.app). 14+.
Do I need an API key?
Yes — an Anthropic API key. Synthesis runs on your account, on your key. We never see your data and we never see the bill.
What about Gmail?
If your Gmail is set up in macOS Mail, LSTN reads it. If you only use Gmail in the browser, not yet.
Will it message people for me?
No. LSTN only listens. It tells you when you owe a reply — you write it. The drafts surface is intentionally not in v1.
How much does it cost?
Beta is free. After that, pay-once for the app. The model bill is whatever your Anthropic usage is — usually a few dollars a month for a steady listener.

come closer.

we’re letting people in a few at a time. join the whisper list.

→ slip me on the list