Sonar reads your week. Calendar entries, meeting transcripts, the Slack channels you picked, the Notion pages you wrote. Out of that material it pulls the moments you could post about, and it hands them back to you as post ideas.
Your week is full of other people. So the first question anyone sensible asks is whether one of those people is about to appear in a public post with their name attached.
The answer is no. Two separate instructions, at two separate stages, say so, and neither one trusts the other to have done the job. Both are in the codebase and both are quoted below, because a privacy promise you cannot inspect is only a promise.
The rule is applied twice
There are two places a name could leak into something publishable.
The first is extraction. A transcript or a week of calendar entries goes to the model, which returns two to four story shaped moments. If a name survives into a moment's title, the leak is already sitting in your library, and every draft written from that moment inherits it.
The second is drafting. Even a clean moment gets combined with your Intelligence Pack, the conversation you are having, your attached documents and whatever grounding you typed yourself. Names arrive from all of those directions.
Sonar states the rule at both stages, in two separate constants. In the code they are MINER_PRIVACY_RULE in src/lib/signals.ts and the PEOPLE section of the product prompt in src/lib/prompts.ts.
What the miner is told
The miner runs before you see anything. Its instruction opens with the plainest sentence in the file:
OTHER PEOPLE ARE NEVER NAMED. Everyone in the material except the founder is a private individual (a colleague, a client, a candidate, a meeting participant, someone in a channel), and a mined moment is the seed of a PUBLIC post.
It then gives a worked pair, so the model has a target to hit rather than only a prohibition to obey. The name in it is a placeholder, here and everywhere else on this site:
GOOD: "our recruiter's hiring debrief showed where the funnel actually leaks"
BAD: "Priya's hiring debrief showed where the funnel actually leaks"
A second clause covers private circumstances. Someone's health or a family member's, a bereavement, a family emergency, personal leave, pay, a performance review, discipline, a departure in progress. The instruction does something more careful than delete the material. It keeps your own lesson and writes it so the person cannot be identified: never their name, and here not even their role or team, never the diagnosis or the figure or the rating, and never a detail a reader could use to work out who it was.
Pay gets a paragraph of its own, because it is the easiest one to get wrong. A number with the name stripped off still identifies the person on a team of eight. What travels is how you handle a raise ask you cannot fully meet. The figure stays behind.
The clause ends with the rule that makes the rest of it honest. If the only truthful version of a moment would identify the person, the moment gets dropped instead.
What the drafting prompt is told
The PEOPLE section rides in the cached system block that every publishable output is written under. Posts, X versions, captions, scripts you read to camera, comments, carousels. Its first line:
Private individuals are never named in anything publishable.
The line that does the real work is the one after it. The rule holds for names arriving through any context, and the instruction lists them: mined week moments, bracketed provenance labels, meeting or channel names, documents and attached files, recalled past conversations, and your own grounding lines. Then it settles the argument in one sentence. Grounding tells the model what happened. It is not permission to publish who was there.
Instead of the name, the model writes the role or the relationship. Our recruiter. A candidate. A client's CMO. Someone on my team. The instruction's own summary of the job: keep the story, drop the name.
Three groups stay named. Public figures. The credibility anchors your own Pack cites, which means the employers and named clients already in your public story. And any person you name yourself in a request. When in doubt, the role.
What you see is not what the model sees
Every mined moment carries two labels, and this is the part most people find surprising.
The specific one is stored on the moment. It reads like "Meet: Q3 pipeline review" or "Slack: #growth". It is a pointer for you, so you can tell which call a moment came from, and it shows up on Home, on the Moments desk in Settings, and on the seed card when you draft from it.
The generic one is computed. A function called sourceLabel maps the provider slug to a short name: Meet, Slack, Notion, Zoom, Calendar, Granola, Fireflies, Teams. Every prompt that lists your moments to the model renders that one.
So a moment whose specific label names two people in a meeting title reaches the model as the single word Meet. The meeting title is useful to you and is a liability in a prompt, so it stays on your screen and never enters one. The same split runs through the weekly deck, the chat's week context, the reel ideas and the chapter interview.
The honest limit
You can type a name yourself, and Sonar will use it. That is in the rule on purpose: anyone the founder names in their own request stays named. Ask for a post about the conversation you had with Priya about pricing and Priya is in the draft, because you put her there.
Sonar has no way to know whether you asked her first. The rule is built against accidental disclosure, which is the failure mode that actually happens: a name that reached a draft because it was in a transcript nobody thought about. It cannot stop deliberate disclosure and it does not pretend to.
There is one more gate, and it is the one that catches whatever the first two missed. Nothing publishes without you. The publishing job only picks up items whose status is scheduled, and scheduled is a status you set by hand. Every draft passes your eyes first.
If you want the stricter version of all this, you can also set a retention window in Settings under Intelligence and Moments. A daily sweep then deletes moments past that window whether or not you drafted from them, and the same screen deletes one moment, a selection, everything from a single source, or all of it.
Read the rule at both stages and the promise becomes checkable rather than reassuring. A name has to survive an instruction that forbids it during extraction, a second instruction that forbids it during writing, a label split that keeps the meeting title off the model's side of the wall, and then your own eyes before anything is scheduled.
If you want to see what this looks like in practice, the next post walks through what to post on LinkedIn after a client call without identifying anyone in the room. If you publish in two rooms, one voice, two registers covers what changes between them. The rest of the writing is on the Sonar blog, the product is at Sonar and explained on how it works, and there is one plan on pricing.
Questions
Does Sonar keep my meeting transcripts?
No. The miner reads the text, extracts the moments and stores only the moments. The function that writes them says so in its own comment: the raw source text is not stored.
Is the meeting name stored?
Yes, as the moment's source label, and it is shown only on your own screens: Home, the Moments desk in Settings and the seed card you draft from. Every prompt that lists moments to the model gets the generic provider name instead.
What if a name appears in a draft anyway?
Tell the chat and edit it out. A preference you state about how your posts should read can be saved as a standing voice rule, which then rides every future draft.
Does this apply to X as well as LinkedIn?
Yes. The rule names X versions explicitly, along with captions, comments, carousels and scripts read to camera.
Can I delete the moments Sonar mined?
Yes. Settings, then Intelligence, then Moments lists every mined moment, and deletes one, a selection, everything from a single source, everything older than a date, or all of it. You can also set a retention window there, after which a daily sweep removes moments past it whether or not you drafted from them.
