Software · Opinion

Your Mac runs a family classifier Apple has never documented

Every Mac since 2022 scores who in your life counts as family, from photos and message timing. Apple should publish what its local models infer, with a delete button that deletes.

Every Mac since 2022 ships two XGBoost classifiers whose job is to decide whether the person you message is your mother. They are called EntityTagging_Family.mlmodelc and EntityTagging_FamilyAndFriends.mlmodelc, they take 144 features, and one of those features is named photosPersonPosteriorProbabilityGivenSaturdayNight. I expected a teardown of Apple’s on-device intelligence to confirm the usual story of modest, local and boring. The Eighth Rank write-up of the machinery behind it did not.

The numbers: fifty-one SQLite databases under ~/Library/IntelligencePlatform, one of them a triple store with 181 entity classes and 278 predicates, fifty-seven of the classes describing activities such as sleeping and commuting. A table recomputed daily holds seventeen relationship columns per person, from mother to coworker. Only two of the seventeen have a shipped model the authors could find. What fills the other fifteen they could not trace. Documentation for all of it is a man page for knowledgeconstructiond, and Apple’s 2023 research paper covers the technique without saying which macOS versions run it or what is collected.

The obvious reply is that all of this stays on the device, behind Full Disk Access. That is a statement about where the files sit, and I think it is being asked to carry far more than it can. The databases are plaintext. The authors’ dashboard, iKnow, is a Python standard-library script that reads them read-only over loopback. Anything you have granted Full Disk Access, whether a backup tool, a terminal or a coding agent, can do the same. The authors ship a manual so your own agent can go looking, and they ask you to point a self-hosted model at it, which tells you how low the bar is. Beside the plaintext app list sits an unsalted SHA-256 of each app identifier, so the password manager is in there twice.

Then there are the people who never agreed to be in it. The store links your relatives, your friends and anyone you have been in contact with to you and to each other. From their own machine the authors worked out that a child lives in the household, which daycare it attends and both phone numbers for it, where the family will be on a given day, and which of them will be there. None of those people clicked anything.

Deletion is the part I would put in front of a regulator. The live graph forgets a deleted contact, but a table called expired_stable_graph keeps the retracted row with its confidence and its sources. The authors think rows are pruned after about 48 hours, yet on one of their own Macs they could still read very old records. The scorecard also kept scoring two people the graph had dropped the day before, both known to it only from a calendar invitation. So after you delete someone, the Mac can still hold its old guess about who they are to you.

To be fair to Apple, the authors hedge heavily. They cannot say every class is actually populated, and on their Mac only mother reached the top of the scoring ladder. They are not sure what other services read the graph, and the claim that LLMs retrieve from it carries an “allegedly”. I take all of that at face value, and it is my complaint. Outside researchers had to work out what a family classifier does from the feature names in a metadata.json, and they report no general way to correct an inference that is wrong. A system that guesses at kinship with a 0.125 or a 0.96 and offers no appeal is the kind of thing a vendor should be eager to show people.

So here is what I want from Apple, and from Google and Microsoft for their equivalents. Ship a pane in Settings that lists every inferred row about you, with its confidence and its source. Let me correct a row and have the correction stick. Make deletion purge the expired copy. This costs them nothing in function: after the upgrade to macOS 27.0.1 the graph withdrew most of its Contacts, Calendar and Family Sharing rows and rebuilt them within a day, so the store is cheap to regenerate and has no need to hoard retracted facts.

You can check the retention claim yourself. Add a throwaway contact with a distinctive name, let the Mac see it, delete it, wait three days, then open the store with a read-only SQLite client and look in expired_stable_graph for the name. If the row is still there with a confidence attached, Apple has your answer on what deleting means.

Prompted by Anatomy of Apple's Personal Knowledge Graph — Eighth Rank, Eighth Rank.