Every Mac comes with an (undocumented) family member classifier

Hacker News by 21 min read 503x views
Every Mac comes with an (undocumented) family member classifier

Share Post

What if I told you that all Mac since 2022 ships a brace of daemons whose lone intent in existence is to build a chart concerning you and the group about you: who you are, who you know, how those group are connected to you and to all other, how you communicate alongside them, anywhere you go, alongside whom, what you do and when. This chart is built on equipment by cross-referencing beautiful much everything on the machine: Contacts, Calendar, Photos, Messages, Mail, location, Screen Time and a lengthy rear of behavioral signals. And, additional importantly, it is held as a queryable shop that LLMs recover from (allegedly). Would you accept me?

Well, that's what is happening, and interestingly enough, there is small records of how this entire scheme plant on your Mac. The closest item to an authoritative clarification is the man leaf (man 8 knowledgeconstructiond), and this is all you get:

man 8 knowledgeconstructiondmacOS 26.6.2, build 25G83
NAME knowledgeconstructiond – A daemon that analyzes satisfied on the equipment to build a broad intent cognition graph. DESCRIPTION  knowledgeconstructiond analyzes the satisfied on this equipment to help  build a cognition chart representing the equipment and the user. It plant together alongside intelligenceplatformd, performing several of the dense handling tasks, to create the cognition graph.

Previous work: To be fair, Apple's own researchers did publish a paper on the techniques rearward this chart construction, rear in 2023. But there is next to nothing on how it is unified into macOS: which versions run it, and the exact catalog of what is collected and inferred. And not a term concerning the "kinship" conclusion discussed below. Also, we personally ran into it during doing several safety investigation on the Apple Intelligence bundle in macOS 26 in August 2026; but a few months before, Nic Lydon came throughout the identical repository and wrote it up in I Built a Personal Knowledge Graph. Apple Had Already Built One on My Laptop.

But we go a bit deeper.

This blog article is an document of several inspection activity we carried out on what the cognition chart really does, so that you (the user) can get a improved understanding of how this scheme works, and several clarity on what the chart holds concerning you and your family and friends. Everything in it was collected on macOS 26 (26.6.2 at the period of writing).

To this end, we open-source a local dashboard (iKnow) you can use to peruse the satisfied of your individual cognition chart on your Mac.

Finally, we derail a bit and appearance into what we do best: weaponizing and exploiting. We run a idea test (one that applies to any specified personalized system) and display what happens if specified a cognition basis ends up in the incorrect hands, and how a "privacy sole item of failure" can be exploited to endanger you in ways you may not have considered before (when blended alongside an abliterated LLM).

What's in the individual cognition graph?

The two daemons keep their activity in ~/Library/IntelligencePlatform, a directory of SQLite databases (fifty-one databases) stored in plaintext but located in a area protected by TCC Full Disk Access.

Likely, the most engaging is graph.db. It is a triple shop written in a vocabulary of 181 being classes and 278 predicates: all row is a subject, a predicate and an object. The topic is an being (a person, an app, an event); the entity is either a plain value (a name, a handle, a date) or another entity, which is anywhere the chart gets its edges. The predicate is the engaging part: it says what benevolent of association the scheme believes holds between the two.

an edge, and the rows it is stored as

(Me) the owner of this Mac 9100000000007919 PS500 employer CS165 employment association type PS45 associate of Halden Labs an organization 9100000000013724 STABLE_GRAPH · THE SAME EDGE, AS THE TWO ROWS IT IS subject predicate relationshipId relationshipPredicate object 9100000000007919 PS500 4412 PS1 CS165 9100000000007919 PS500 4412 PS45 9100000000013724 all row additionally carries confidence, sources, sourceDuplicates and timestamp

One border of the chart (synthetic data): a individual and the institution the shop holds as their employer. PS500 is the id predicate.json gives employer, and its range is not an institution but a relationship type — so one border is two rows sharing a relationshipId, one naming the benevolent of association and one pointing at the another entity. The forty-six relationship type classes in the array below be to transport exactly that, which is what lets an border clasp a confidence of its own and be retracted later.

Most of what the two daemons do is populate those predicates, and the tables kept beside them, from everything the OS volition let them read. Into the chart go Contacts; Photos (faces); Calendar (titles and attendees); Family Sharing (including the age of all member); the Medical ID emergency communication in Health; events and contacts Siri Suggestions finds in Mail and Messages; group donated by apps through App Intents; and installed apps. Beside it, in tables of their own, sit who appears alongside whom in your photos; the communication log (who, when, which app, which direction; no content), which additionally pulls from your another devices; location and movement; and a lengthy rear of equipment signals (screen locked, Wi-Fi, Bluetooth, charging, ambient light, and a stream named ContextualUnderstanding.PhysicalSocial whose document format lists group by name, phone and email, all alongside a commencement and an end time; it says akin a log of who was physically about you, although we never saw it filled in).

What is inferred

The complete catalog of the 181 being classes:

the 181 being classes in class.json

Every category the shipped ontology declares, grouped fairly than remaining in document order: the center types, afterward people, attributes, places and events, afterward the action block, and final the forty-six relationship types, which are not things at all — all one reifies an border so that the border can transport facets of its own, a confidence among them. The ids and labels are Apple's; the grouping is ours. intValue runs 1 to 185 alongside four numbers missing — 18, 54, 169, 181 — and nothing on the disk says what they were.

Fifty-seven of the 181 depict an activity: sleeping, exercising, mindfulness, going to bed, commute, dining, most of them alongside a matching type category beside them, so nearly a third of the vocabulary went on what you are doing fairly than on who or anywhere you are. That said, it is not apparent that all category is really used; several may be placeholders that are declared and never filled. In the table, we emblem as implemented the classes for which we could find a scheme that power be liable for the class, but those are to be taken as conclusion activity fairly than dirt truth.

And this is the complete catalog of predicates (same disclaimer applies):

the 278 predicates in predicate.json

Every predicate the shipped ontology declares. The archetypal pillar is the id as graph.db stores it; the final says how a value gets there: copied from a source, joined from another record, derived by a rule, shipped by Apple as earth knowledge, or produced by a example (in bold). Seven we could not establish, and the array says so fairly than guessing. The ids and labels are Apple's; the plain-language readings are ours.

How it is inferred

The methods run the entire range. Most of the vocabulary is filled by plain copying (a name from Contacts, an attendee from Calendar) and rules complete the copies; the engaging rows arrive from models: a brace of XGBoost classifiers decides who is family from 144 mostly behavioral features, two embedding models are one of ten signals the scheme uses to decide whenever two records are the identical person, dozen analyzers in Photos mark partner, parent, child, coworker and companion from who appears in your pictures alongside you, on which trips and holidays, and Apple's on-device LLM says your messages to put a name and a association on a visage (if Apple Intelligence is active).

Whatever the method, all row lands in the chart alongside a confidence attached, a figure between 0 and 1.

The family scores live apart. Two CoreML models container next to the ontology, EntityTagging_Family.mlmodelc and EntityTagging_FamilyAndFriends.mlmodelc: binary XGBoost classifiers that obtain 144 features and come back a category and a probability complete it. Their scores do not go into the triple shop but into a array of their own (entityTagging.db, one row per person, seventeen association columns from family to mother to coworker, recomputed all day), which is what the iKnow scorecard additional downward reads. Only two of those seventeen columns have a shipped example rearward them; what fills the another fifteen, and how any of these probabilities would rotate into a confidence in the graph, we could not trace.

The characteristic names are in all model's metadata.json, in plain text. They are the clearest declaration of what this scheme is that I have established anywhere. All 144:

the 144 features in metadata.json

Every input EntityTagging_Family.mlmodelc reads, in the command its metadata.json declares them. EntityTagging_FamilyAndFriends says the identical 144 in the identical order, and all one is a number. The groups are the schema's own three blocks: twenty on who the individual is, forty on whenever and how you communicate alongside them, eighty-four on the photographs you the two appear in. Two of the twenty, photosPersonAge and photosAgeDifferenceCategory, are peruse from Photos too. The names are Apple's; the collection labels are ours.

The identity collection is the tidy story: identical surname, identical residence address, an iCloud Family emblem — and it is the small half. The bulk of the example is the another two: who you communication and who appears in your photographs, conditioned on the day of the week and the period of day, and afterward on the two at once. photosPersonPosteriorProbabilityGivenSaturdayNight is a shipped characteristic name in a shipped classifier whose job is deciding whether person is family.

Deleting item does not delete it everywhere.

The live chart forgets. Delete a communication and nothing re-derives them; the next run replaces the array wholesale.

But the shop keeps a second table, expired_stable_graph, beside the live one. The retracted row moves there and keeps its confidence and its sources. How lengthy it stays there is not apparent from what we could see. It seems to go following concerning 48 hours (the shop keeps a prune watermark, and a latest snapshot of the array reached rear no additional than that); but on my own Mac, I could motionless peruse extremely old records in it.

And a decision can outlive the evidence for it. On my Mac, the scorecard motionless scored two group the chart had dropped the day before, the two of them known to it lone from a calendar invitation. Well, if you desire your partner not to detect several contacts you power have deleted and their "closeness" to you, improved to autumn several rows from expired_stable_graph too (unfortunately, you have to do it manually). But I am certain you have nothing to conceal (just joking).

Look into your own data

Is any of this sensitive? We'll depart that to you, since "sensitive" method distinct things to distinct group (though I think you have plentifulness to choose from here). However, the item is, none of it lives in isolation. It is built to be joined and correlated; the nodes are there to be linked:

a individual cognition chart (synthetic data)

(Me)Tomas Quill · fatherNils Quill · brotherPriya Sandoval · partnerJonah FerreiraLena MarchettiSam OkaforThéo LindqvistGreta EriksenKai NakamuraOna SalazarBo FerreiraMaya Smith · daughterLeo Smith · sonQuill householdHalden LabsBell & MarrowVerdant Coffee Co.Northwind Clinic

me · the owner of this Mac · 1a collection the shop holds as an being · 1family, as scored · 7scored near to me · 9employer · 4group conversation · 6known, not scored near · 61membership of a collection chata calendar event the two attendedan occupation statementnamed by the stored groupa closeness mark complete the cut · nobody typed it

How to peruse this

Every node is a row in the store, and the document under it is what the shop holds. Size is how many rows name it; form is what benevolent of item it is; the one node in accent is you, and a circle marks the four the shop scores as family. A dashed row is a decision nobody typed.

Click a node — or attain the chart alongside Tab, stroll it alongside the arrow keys and media Enter — and its document replaces these notes.

Click a node and the document under the chart is what the shop holds on it (the rows, not a summary of them). The sixty-one faint ones are the part nobody expects: group the shop knows and has not placed, in it since they wrote to you once, or since they were on person else's invitation.

The most crucial point, though, is that this is not lone concerning you (the individual using the Mac). The group about you are in it too: your family, your friends, "anyone" you have talked to through your device. None of them was asked, and the shop links them to you and, through the events and groups they share, to all other. A association is intellect one flat complete the rows it was inferred from. For instance, by correlating throughout my own store, I (well, an LLM operating for me) could effortlessly activity out the following:

  • That there is a kid in the household, and approximately how old. The family-member types and a family circle provision the household. The scorecard's kid and son/daughter columns provision the child's location in it. Beside it sits an age, copied from Family Sharing; and dates of commencement in the shop can transport the system's own term imputed, although what the scheme method by it is not apparent to us.
  • Which daycare the kid goes to, and the two of the numbers that attain it. Copied off communication cards. Note what is not there: the calendar has no school-run event, so the shop holds the institution and its lines but not the hr the kid is dropped off. That is motionless adequate to call a genitor from a figure their phone already trusts.
  • Where the family volition be, on which days, between which hours. One calendar event, a place, two stored period slots and a heading that names the family (so the visitant catalog is in the cord equal anywhere the attendee rows are empty).
  • Which of the family volition be there. The scorecard names the ones scored as family, a family being holds them together, and a Family Sharing circle says which of them are in the identical family group.
  • And, in the identical file, what is installed on the machine, downward to the password manager.

It is uncomplicated to see how this could be weaponized if this sole item of nonaccomplishment for your privacy ends up in the incorrect hands. We perform that (hypothetical) circumstance out in a second write-up. The fine item is that this cognition is meant to remain local on your machine, protected by the Full Disk Access permission; although it can be consumed by another services (but it is not entirely apparent to us how and what can be accessed).

The actuality is that the amount of data in this shop is really item else: all period we dig into what the daemons infer, and how, a few new lines of inquiry open up. Whatever you would fairly no one knew concerning you or your family may fine be in there somewhere, and we think you have the correct to cognize whether it is. What you get instead: no documentation, no way to inspect the shop and no broad way to accurate an conclusion that is wrong.

So we provision you two tools. The archetypal is iKnow, a local dashboard for browsing your own chart without item leaving your Mac (the next division walks through it). The second is for going deeper. The iKnow repository ships a manual for your own agent that tells it anywhere the databases are and how to peruse them, so it can go looking for any you are after. (Please item a self-hosted example at it, not a haze one.)

iKnow

We designed iKnow as a web dashboard implemented in the Python norm library; no npm and no CDN.

It is meant to be run immediately on your Mac, anywhere the databases are stored. When executed, it binds 127.0.0.1, locates the databases in your document scheme (granted the necessary permissions), opens them read-only, collects the info on the fly and represents it on a dashboard. Nothing is written and nothing is logged; values go from the stores, complete loopback, into a browser tab; it can be run air-gapped if you want.

We have tested it on macOS 26.6.2 and 26.7.1, and, lone partially, on 27.0.1.

iKnow has a dozen pages.

Start here

What your Mac knows. The landing page: the chart of group about you. Below it arrive the faces in your photos, your family, your handles, your correspondents and anywhere you volition be next.

Its chart is the identical family as the one at the top of this post, this period drawn by the tool's own renderer:

the landing page

A dreary dashboard showing a force-directed chart of concerning seventy-eight tagged nodes about one pale node marked "(Me)", alongside a color key study "you", "a collection the shop holds as an entity", "family, as scored", "scored near to you", "employer", "group chat" and "known, not scored close".

The archetypal screen. The pale node marked (Me) is the owner of the Mac; the remainder are the people, employers and collection chats the shop links to it, colored by what it says all one is. Orange is family, as scored. Blue is a closeness mark complete the cut. The faded names about the edges are group the shop knows and has not placed.

Nothing current is summarized that is not in the record: all node is a row, and clicking one shows you the row (which is what the chart at the top of this article does too).

The chart is the overview, and an overview is uncomplicated to gesture at. The pages rearward it are not.

Social graph. Who the shop links to whom through shared meetings, collection chats and a closeness score. Each circle opens to its members and to the evidence rearward it.

What it concluded

Kinship scorecard. The family bindings inferred by the daemon.

Its cardstock on the landing leaf is cut downward to the group it names:

Family, as the scorecard has it

 Mara Quill, mother, 0.960; Tomas Quill, father, 0.960; Maya Smith, daughter, 0.960; Nils Quill, brother, 0.500; Leo Smith, son, 0.500; Ines Quill, sister, 0.500. A division headed "The household, by how many signals agree" scores Mara Quill 8 of 9, Tomas Quill and Priya Sandoval 7 of 9 and Maya Smith 6 of 9, and a final one names the Quill household, 4 members, at confidence 0.880.

Six people, six relationships, and a subtitle saying nobody typed any of it. That holds for the scores; several of what they are computed from, you did category (a connection on a communication card, an emergency contact, Family Sharing). A mother, a begetter and a female at 0.960, which is as elevated as these columns go; a brother, a son and a sister at 0.500.

Below that is the part I discover hardest to contend with. Nine distinct checks (the partner column, the composite score, the family collection entity, the Family Sharing token, the iCloud Family flag, top twelve-month contact, a Photos visage cluster, a Contacts record, a reachable handle), and the cardstock counts how many of them district on the identical person. Eight of nine on the mother; seven on the father, and seven on Priya Sandoval, the partner, who is not in the catalog above: iKnow lists the relationships that rotate up into another pillar (mother and father into parent), and partner rolls up into nothing. The associate established the partner anyway.

The cardstock is a summary of one table, and iKnow draws the entire array too:

Every person, all column

 thirty group against seventeen association columns alongside abbreviated headers. The top seven rows are the family, all lit on its own association (mother, father, daughter, brother, son, sister, partner), on the pillar that association rolls up into, and on family and familyAndFriends; the partner's row is additionally lit on coworker. Below them a few rows are lit on companion or coworker, all row is lit on family and familyAndFriends, most of them at the identical two shades, and the alumni and unidentified columns are bare from top to bottom.

Sorted by familyAndFriends, the broadest of the scores. The seven at the top all ray up their own association and the pillar it rolls up into (mother and father into parent, sister and brother into sibling, son and daughter into child), and the partner is additionally a colleague. Further downward are the allies and the remainder of the office. Under them, nearly everyone alternatively is the identical two cells: one repeated value on family and another on familyAndFriends, which is what the classifier writes whenever it has nothing to say. Two columns (alumni and unknown) are never used at all.

The scores in these two shots are invented, and additional generous than the genuine thing. On the Mac we took apart, lone mother reached the top of the ladder; the few others it scored at all got one small ballot on all family tag at once, begetter and brother alike. What the fixture keeps is the table's grain: it lone always writes a fistful of values (0.125, 0.25, 0.5 and 0.96), and most group sit on one default.

The visage index. A visage collection for everyone in your photos.

Its co-occurrence chart does not use a sole contact, communication or calendar entry. It is built from your photographs alone:

The visage co-occurrence graph

 forty-seven circles, all filled alongside a blurred face, connected whenever two of them appear in the identical photo and tagged alongside six-character fragments of collection identifiers alternatively of names. One collection sits at the center, connected to nearly everything; a tight knot sits to its left, a looser collection complete it, and a third collection at the base correct shares no nexus alongside the knot. A authority complete the chart says "photographs on the nodes — 47 of 47 drawn current have one".

Two faces are connected whenever they appear in the identical photograph, and that is the lone input: 8,904 clustered faces complete the 1,643 photographs that clasp additional than one. The labels are fragments of all cluster's local identifier, since there are no names to show. The owner is the hub. The knot on the remaining is the family, the collection at the base correct is work, and the two never portion a frame.

Each node wears its cluster's key face, peruse out of the photo archive and blurred by iKnow's own toggle for sharing the screen. Under the blur there is nobody: the fixture has no photo library, so all visage is a synthetic picture painted for it.

This is the page's own honest point: the chart points at the visage clusters and can name nearly none of them (three of the twenty-nine, in the fixture). It does not need to. Who stands next to whom, how often, and which groups never encounter is all there without a sole name, and whoever knows the family can put the names rear on in a second.

Guessed or given. What you typed in and what the Mac worked out for itself live in the identical table. A confidence mark is the lone item separating them.

What it recorded

A twelvemonth of contact. Who you talked to, when, and not a term of communication content (and it does not need any to inform whenever you are asleep).

Its cardstock on the landing leaf is the one that gets the reaction, and it contains no conclusion at all.

A twelvemonth of who you talked to

A dashboard cardstock headed "A twelvemonth of who you talked to", subtitled "18,432 interactions complete 365 days, 146 correspondents (97 named), 5 apps — and not one term of text", listing eight group alongside communication counts, in and out splits, call counts and last-contact dates, and a final division headed "The hours it can peruse as sleep".

A twelvemonth of contact, per person, divided incoming and outgoing, alongside call counts and a last-seen date, throughout five messaging apps — and, exactly as the subtitle says, not one term of communication text. None of this is content. It is all metadata, and it is enough.

The final row is the one to peruse twice: the hours it can peruse as sleep.

iKnow draws that row too, from the identical log folded onto a sole week:

Weekday against hr of day

00 Europe/London. 402 of 18.4K events autumn inner it (2%)."

Every division counts the messages and calls that cut in one hr of one weekday, complete the year. The operating week is in there, and so are the evenings and the delayed weekend mornings; and so is the faint collection from one to seven, all night. Nobody stored a sleep schedule. The quietest six-hour extend falls out of the timestamps for free.

That is the broad form of this store: nearly nothing in it had to be collected, since nearly everything in it is a consequence of item that was.

The calendar. The one tier that knows anywhere you volition be: the hour, the room, the attendees and the dial-in.

What you withdrew. Withdrawing a fact does not eliminate it. The row moves to an expired array and keeps its confidence and provenance.

The machinery

The store. The document itself: what it models, and two genuine rows expanded into everything they touch.

Device fingerprint. Every app installed on the Mac is written downward in plain text, next to a token that is an unsalted SHA-256 of that identical app identifier, so the leaf recomputes it in your browser and you can observe it match.

Who alternatively says it. The chart is the archetypal copy, not the lone one. This leaf maps the views that subscribe to it, the databases they publish into, the tables that reiterate the identical facts, the streams coming in from hardware paired alongside the Mac, and the machinery that is set up but has not run yet.

A note on macOS 27. macOS 27 was released on September 14, 2026. After the upgrade to 27.0.1, the chart withdrew most of the rows it had built from Contacts, Calendar, Siri Suggestions, Family Sharing and the app catalog, and rebuilt them complete the following day. Some pages of iKnow may not activity completely on macOS 27 yet.

But let's go deeper:

Other Article Hacker News
↑
Close Right Ads
Close Left Ads