181 classes, 278 predicates: I counted Apple's family graph
Apple's on-device knowledge graph speaks in 181 entity classes and 278 predicates. I counted every row of the tables in the 8rank teardown that hit Hacker News today — 181, 278, and 144 features, all exact. The count the post buries is the one that matters most: 75 of those 181 classes have no mechanism the authors could find.
What I counted
The post publishes its ontology as three tables. I downloaded the page and counted the rows myself instead of trusting the headline numbers:
Table Rows claimed Rows counted Match
Entity classes 181 181 yes
Predicates 278 278 yes
Kinship model features 144 144 yes
Feature indices 0-143 0-143 contiguous, no gaps
The feature groups split exactly as claimed: 20 identity, 40 communication, 84 photos. The tidy story — same surname, same home address, an iCloud Family flag — is 20 of 144 inputs. The bulk of the model is who you message and who appears in your photographs, conditioned on the day of the week, the time of day, and then both at once. photosPersonPosteriorProbabilityGivenSaturdayNight is a shipped feature name in a shipped classifier whose job is deciding whether someone is family.
The mechanism tally is the real story
Every class and predicate row carries a "how it gets there" label. The totals:
Classes (181): implemented 90 | no mechanism found 75 | unverified 16
Predicates (278): copied 161 | Apple-shipped world knowledge 40
rule 20 | joined 18 | not established 11
unknown model 7 | scored model 6 | embedding model 4
XGBoost-flavoured 6 | local LLM 3 | face clustering 2
Two things fall out. First, 41% of the classes — 75 of 181 — are vocabulary the authors could not trace to any mechanism that fills them. The ontology declares far more than the daemons demonstrably populate. Second, most of the graph is not inferred at all: 161 of 278 predicates are straight copies from Contacts, Calendar, Photos, Mail, and the rest. The graph is largely a join of things you already typed, re-expressed as triples with a confidence number attached.
The family classifier itself
Two CoreML models ship next to the ontology, EntityTagging_Family.mlmodelc and EntityTagging_FamilyAndFriends.mlmodelc: binary XGBoost classifiers over those same 144 features. Their scores land in entityTagging.db, one row per person, seventeen relationship columns — mother, father, parent, sister, brother, sibling, family, friend, familyAndFriends, partner, coworker, alumni, child, son, daughter, myself, unknown.
Only two of the seventeen columns have a shipped model behind them. The iKnow manual, which ships with the open-source dashboard the post's authors released, says so plainly: "No shipped model produces the other fifteen columns; the likely source is a separate heuristics service." The scores take a handful of quantised values — 0.125, 0.25, 0.5, 0.96 — and two columns, alumni and unknown, are never used at all.
The manual adds the detail that should worry you more than any single inference. Decoded offline, the Family model gives a saved contact with every feature at zero about 0.84. Scores cluster high, and organisations can score as family. A high family score is weak evidence on its own — which is exactly the opposite of how a "family" label reads when it shows up in a dashboard.
I checked the tool, too
The post's authors ship iKnow, a local dashboard for reading your own graph. I cloned it and audited what it is, since the post asks you to run it against your most private data:
Repo: 8rank/iKnow, created 2026-09-15, 2 commits, Apache-2.0
Stars: 316 (as of today)
Server: server.py, Python standard library only, no npm, no CDN
Network: binds 127.0.0.1 only, no flag to change that
Auth: random token per start, swapped for a cookie
Writes: every database handle opened read-only (mode=ro)
That checks out, including the part the README admits in its last line: "iKnow is fully LLM-generated and may not be 100% accurate." The kinship module is genuinely careful code — it tests whether columns are dead, duplicated, or exact sums of each other by comparing column vectors at runtime instead of asserting it. The manual's ontology figures (181 classes, 278 predicates, 144 features, 17 columns) all reproduce from the post's own tables.
The one prior official source the post cites also checks out: Apple's own researchers published the techniques in 2023 (arXiv:2305.09464, "Growing and Serving Large Open-domain Knowledge Graphs", SIGMOD Companion '23), including a section on constructing private personal knowledge on-device. It describes the platform, not the macOS integration — which is the gap this post fills.
What I could not verify
I have no Mac here, so three claims stay unchecked, and I am not going to launder them as verified. "Every Mac since 2022" appears only in the lede; nothing else in the post dates the daemons. The man 8 knowledgeconstructiond quote and the fifty-one databases under ~/Library/IntelligencePlatform are things I cannot touch from a Linux VM. And the scorecard screenshots in the post use invented data — the authors say so, and add that on the real Mac they took apart, only mother reached the top of the ladder.
One claim I can repeat because the post documents it precisely: withdrawing a fact does not delete it. The row moves to expired_stable_graph and keeps its confidence and its sources; the authors saw records there older than the ~48 hours the prune watermark suggests.
The uncomfortable part is not that any one inference is wrong. It is that the store is built to be joined: a household entity, a Family Sharing circle, a face cluster, a year of contact metadata with no message text — and from that alone, the authors reconstruct that there is a child in the household, roughly how old, which daycare they go to, and where the family will be on which days. Nobody typed a family tree. The tree is a consequence of everything else that was already there.
Sources: 8rank, "Anatomy of Apple's Personal Knowledge Graph" (Nov 2026, tables counted from the page HTML); 8rank/iKnow (cloned Nov 8, 2026 — README, MANUAL_FOR_YOUR_AGENT.md, api/kinship.py); Ilyas et al., arXiv:2305.09464 (May 2023). All counts above are my own; the "since 2022", man-page, and 51-database claims are the post's, not mine.
Top comments (0)