Anatomy of Apple's Personal Knowledge Graph
Every Mac since macOS 13 (2022) ships a pair of daemons whose only purpose in life is to build a graph about who you are, who you know, how those people are related to you and to each other, how you communicate with them, where you go, what you do and when. In this post, we look into how this system works and give you a tool to peek into your own graph.
The position
A family fork: one knight on e2 attacks White's king, queen, rook and bishop at once. White's pieces are the household the graph is about; the knight is the store, one move from every one of them. White's own last move, 18.e3, emptied the square it stands on. White is in check and has one legal reply, Kh1; then the knight takes the queen. The check falls on the one who accepted the terms. What is lost is someone else.
3r1rk1/pp2qppp/8/3p1b2/8/1NQ1P1B1/PP2nPPP/2R2RK1 w - - 1 19
Finding
- Target
- Apple Intelligence / Personal Knowledge Graph
- Affected
- macOS 13+, Intel and Apple silicon
- Class
- Privacy
Personalized AI
What if I told you that every Mac since 2022 ships a pair of daemons whose only purpose in life is to build a graph about you and the people around you: who you are, who you know, how those people are related to you and to each other, how you communicate with them, where you go, with whom, what you do and when. This graph is built on device by cross-referencing pretty much everything on the machine: Contacts, Calendar, Photos, Messages, Mail, location, Screen Time and a long tail of behavioral signals. And, more importantly, it is held as a queryable store that LLMs retrieve from (allegedly). Would you believe me?
Well, that's what is happening, and interestingly enough, there is little documentation of how this whole mechanism works on your Mac. The closest thing to an official description is the man page (man 8 knowledgeconstructiond), and this is all you get:
NAME
knowledgeconstructiond – A daemon that analyzes content on the
device to build a general purpose knowledge graph.
DESCRIPTION
knowledgeconstructiond analyzes the content on this device to help
build a knowledge graph representing the device and the user. It
works together with intelligenceplatformd, performing some of the
heavy processing tasks, to generate the knowledge graph.Previous work: To be fair, Apple's own researchers did publish a paper on the techniques behind this graph construction, back in 2023. But there is next to nothing on how it is integrated into macOS: which versions run it, and the exact list of what is collected and inferred. And not a word about the "kinship" inference discussed below. Also, we personally ran into it while doing some security research on the Apple Intelligence bundle in macOS 26 in August 2026; but a few months before, Nic Lydon came across the same database 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 post is an account of some analysis work we carried out on what the knowledge graph actually does, so that you (the user) can get a better understanding of how this mechanism works, and some clarity on what the graph holds about you and your family and friends. Everything in it was collected on macOS 26 (26.6.2 at the time of writing).
To this end, we open-source a local dashboard (iKnow) you can use to read the content of your personal knowledge graph on your Mac.
Finally, we derail a bit and look into what we do best: weaponizing and exploiting. We run a thought experiment (one that applies to any such personalized system) and show what happens if such a knowledge base ends up in the wrong hands, and how a "privacy single point of failure" can be exploited to threaten you in ways you may not have considered before (when combined with an abliterated LLM).
What's in the personal knowledge graph?
The two daemons keep their work in ~/Library/IntelligencePlatform, a directory of SQLite databases (fifty-one databases) stored in plaintext but located in a zone protected by TCC Full Disk Access.
Likely, the most interesting is graph.db. It is a triple store written in a vocabulary of 181 entity classes and 278 predicates: every row is a subject, a predicate and an object. The subject is an entity (a person, an app, an event); the object is either a plain value (a name, a handle, a date) or another entity, which is where the graph gets its edges. The predicate is the interesting part: it says what kind of relationship the system believes holds between the two.
One edge of the graph (synthetic data): a person and the organization the store holds as their employer. PS500 is the id predicate.json gives employer, and its range is not an organization but a relationship type — so one edge is two rows sharing a relationshipId, one naming the kind of relationship and one pointing at the other entity. The forty-six relationship type classes in the table below exist to carry exactly that, which is what lets an edge hold 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 will let them read. Into the graph go Contacts; Photos (faces); Calendar (titles and attendees); Family Sharing (including the age of every member); the Medical ID emergency contact in Health; events and contacts Siri Suggestions finds in Mail and Messages; people donated by apps through App Intents; and installed apps. Beside it, in tables of their own, sit who appears with whom in your photos; the communication log (who, when, which app, which direction; no content), which also pulls from your other devices; location and movement; and a long tail of device signals (screen locked, Wi-Fi, Bluetooth, charging, ambient light, and a stream named ContextualUnderstanding.PhysicalSocial whose record format lists people by name, phone and email, each with a start and an end time; it reads like a log of who was physically around you, though we never saw it filled in).
What is inferred
The complete list of the 181 entity classes:
| Class | Label | Group | Mechanism found? |
|---|---|---|---|
SB56 | entity | core | implemented |
SB104 | person | core | implemented |
SB152 | place | core | implemented |
nm_topic | topic | core | implemented |
SB65 | event | core | implemented |
nm_document | document | core | could not find mechanism |
SB473 | home | core | could not find mechanism |
SB10 | organization | core | implemented |
SB2 | group of humans | core | implemented |
SB144 | software | core | implemented |
SB193 | organism | core | implemented |
SB198 | agent | core | implemented |
SB83 | concept | core | implemented |
SB400 | occurrence | core | implemented |
SB60 | role | core | implemented |
SB197 | siribase type | core | implemented |
nm_knowledgeSource | knowledge source | core | implemented |
SB170 | time | core | could not find mechanism |
SB175 | group | core | implemented |
SB470 | device primary user | person | could not find mechanism |
SB199 | musical artist | person | could not find mechanism |
SB14 | sports team | person | implemented |
SB417 | sports organization | person | could not find mechanism |
SB115 | sports league | person | could not find mechanism |
SB185 | athlete | person | could not find mechanism |
SB21 | person in the arts | person | could not find mechanism |
SB184 | musician | person | could not find mechanism |
nm_screenTimeSegment | screen time segment | person | could not find mechanism |
CS8 | sex | attribute | might be implemented (unverified) |
CS4 | unit of measurement | attribute | implemented |
CS25 | type of profession | attribute | implemented |
CS37 | religion | attribute | could not find mechanism |
SB74 | language | attribute | could not find mechanism |
SB18 | political party | attribute | could not find mechanism |
SB461 | genre | attribute | implemented |
SB537 | mode of transportation | attribute | implemented |
SB544 | automobile model | attribute | implemented |
SB418 | make | attribute | implemented |
SB399 | content rating | attribute | could not find mechanism |
SB48 | populated place | place | implemented |
SB101 | state | place | might be implemented (unverified) |
SB163 | country | place | might be implemented (unverified) |
SB370 | time zone | place | might be implemented (unverified) |
SB131 | county | place | implemented |
SB471 | calendar | event | could not find mechanism |
SB472 | calendar event | event | implemented |
SB513 | activity event | event | implemented |
SB71 | sports game event | event | could not find mechanism |
SB77 | holiday event | event | implemented |
SB514 | transportation activity | activity | implemented |
SB515 | working activity | activity | implemented |
SB516 | meeting activity | activity | implemented |
SB517 | eating activity | activity | might be implemented (unverified) |
SB518 | watching TV activity | activity | might be implemented (unverified) |
SB519 | communicating activity | activity | implemented |
SB520 | shopping activity | activity | implemented |
SB523 | traveling activity | activity | might be implemented (unverified) |
SB524 | reading activity | activity | implemented |
SB525 | vacationing activity | activity | implemented |
SB526 | gaming activity | activity | implemented |
SB527 | socializing activity | activity | might be implemented (unverified) |
SB528 | waking up activity | activity | might be implemented (unverified) |
SB529 | going to bed activity | activity | might be implemented (unverified) |
SB522 | sleeping activity | activity | implemented |
SB530 | exercising activity | activity | implemented |
SB521 | mindfulness activity | activity | might be implemented (unverified) |
SB531 | on the phone activity | activity | implemented |
SB532 | facetime activity | activity | implemented |
SB533 | walking activity | activity | implemented |
SB534 | running activity | activity | implemented |
SB535 | bicycling activity | activity | implemented |
SB536 | hiking activity | activity | could not find mechanism |
SB722 | commute activity | activity | implemented |
SB723 | dining activity | activity | implemented |
SB726 | attending a performance activity | activity | implemented |
SB732 | stationary activity | activity | implemented |
SB764 | location visit activity | activity | implemented |
SB784 | driving activity | activity | could not find mechanism |
SB786 | behavior activity | activity | could not find mechanism |
SB394 | sports activity | activity | implemented |
SB116 | type of activity | activity type | might be implemented (unverified) |
SB545 | transportation activity type | activity type | could not find mechanism |
SB546 | working activity type | activity type | could not find mechanism |
SB547 | meeting activity type | activity type | could not find mechanism |
SB548 | eating activity type | activity type | could not find mechanism |
SB549 | watching media activity type | activity type | could not find mechanism |
SB550 | communicating activity type | activity type | could not find mechanism |
SB551 | shopping activity type | activity type | could not find mechanism |
SB552 | mindful activity type | activity type | could not find mechanism |
SB553 | sleep activity type | activity type | could not find mechanism |
SB554 | travel activity type | activity type | could not find mechanism |
SB555 | reading activity type | activity type | could not find mechanism |
SB556 | vacation activity type | activity type | could not find mechanism |
SB557 | social activity type | activity type | could not find mechanism |
SB558 | waking activity type | activity type | could not find mechanism |
SB559 | going to bed activity type | activity type | could not find mechanism |
SB560 | phone call activity type | activity type | could not find mechanism |
SB561 | facetime activity type | activity type | could not find mechanism |
SB562 | walking activity type | activity type | could not find mechanism |
SB563 | running activity type | activity type | could not find mechanism |
SB564 | biking activity type | activity type | could not find mechanism |
SB565 | hiking activity type | activity type | could not find mechanism |
SB483 | type of physical exercise | activity type | could not find mechanism |
SB721 | commute activity type | activity type | could not find mechanism |
SB785 | driving activity type | activity type | could not find mechanism |
SB787 | behavior activity type | activity type | could not find mechanism |
SB425 | vehicle | transport | implemented |
SB543 | on foot | transport | could not find mechanism |
SB335 | automobile | transport | implemented |
SB538 | plane | transport | could not find mechanism |
SB539 | bicycle | transport | could not find mechanism |
SB358 | ship | transport | could not find mechanism |
SB541 | bus | transport | could not find mechanism |
SB542 | locomotive train | transport | could not find mechanism |
SB51 | work | media | implemented |
SB405 | media work | media | implemented |
SB44 | song | media | implemented |
SB138 | album | media | could not find mechanism |
SB85 | musical work | media | implemented |
SB183 | movie | media | could not find mechanism |
SB295 | television program | media | could not find mechanism |
SB49 | animal | animal | could not find mechanism |
nm_pet | pet | animal | could not find mechanism |
nm_dog | dog | animal | could not find mechanism |
nm_cat | cat | animal | could not find mechanism |
nm_myPet | my pet | animal | could not find mechanism |
nm_myDog | my dog | animal | could not find mechanism |
nm_myCat | my cat | animal | could not find mechanism |
nm_walletOrder | wallet order | commerce | implemented |
nm_walletTransaction | wallet transaction | commerce | could not find mechanism |
nm_payment | payment | commerce | implemented |
nm_transaction | transaction | commerce | implemented |
nm_email | commerce | implemented | |
nm_shippingInfo | shippingInfo | commerce | could not find mechanism |
nm_shipmentFullFillmentInfo | shipment full fillment info | commerce | implemented |
CS29 | location relationship type | edge | implemented |
CS97 | address relationship type | edge | implemented |
nm_topicRelationshipType | topic relationship type | edge | might be implemented (unverified) |
CS1 | relationship type | edge | implemented |
nm_senderRelationshipType | sender relationship type | edge | might be implemented (unverified) |
nm_calendarRelationshipType | calendar relationship type | edge | implemented |
nm_organizerRelationshipType | organizer relationship type | edge | could not find mechanism |
CS105 | text relationship type | edge | could not find mechanism |
CS101 | language relationship type | edge | could not find mechanism |
CS22 | identifier relationship type | edge | implemented |
CS2 | image relationship type | edge | might be implemented (unverified) |
CS13 | membership relationship type | edge | implemented |
CS165 | employment relationship type | edge | implemented |
CS154 | time zone relationship type | edge | might be implemented (unverified) |
CS3 | quantity relationship type | edge | implemented |
CS36 | religion relationship type | edge | could not find mechanism |
CS167 | interest relationship type | edge | could not find mechanism |
CS38 | participation relationship type | edge | implemented |
nm_calendarSourceRelationshipType | calendar source relationship type | edge | implemented |
CS168 | agent affiliation relationship type | edge | implemented |
nm_dateRelationshipType | date relationship type | edge | implemented |
nm_administratorRelationshipType | administrator relationship type | edge | could not find mechanism |
nm_visualIdentifierRelationshipType | visual identifier relationship type | edge | implemented |
nm_songRelationshipType | song relationship type | edge | implemented |
nm_softwareRelationshipType | software relationship type | edge | implemented |
CS173 | event relationship type | edge | could not find mechanism |
nm_localizedNameRelationshipType | localized name relationship type | edge | implemented |
nm_confidenceRelationshipType | confidence relationship type | edge | implemented |
CS31 | performance relationship type | edge | could not find mechanism |
CS15 | part whole relationship type | edge | could not find mechanism |
CS113 | rating relationship type | edge | could not find mechanism |
CS166 | group relationship type | edge | implemented |
nm_livingBeingRelationship | living being relationship | edge | implemented |
nm_entityAliasRelationshipType | entity alias relationship type | edge | implemented |
nm_extractionTagRelationshipType | extraction tag relationship type | edge | implemented |
nm_orderEmailRelationshipType | order email relationship type | edge | implemented |
nm_orderTransactionRelationshipType | order transaction relationship type | edge | implemented |
nm_orderShippingInfoRelationshipType | order shipping info relationship type | edge | implemented |
nm_entityOrganizationRelationshipType | entity organization relationship type | edge | implemented |
nm_shipmentFullFillmentEmailRelationshipType | shipment full fillment email relationship type | edge | implemented |
nm_orderShipmentFullFillmentRelationshipType | order shipment full fillment relationship type | edge | implemented |
nm_orderPaymentRelationshipType | order payment relationship type | edge | implemented |
nm_fromToEmailRelationshipType | from to email relationship type | edge | could not find mechanism |
nm_orderPersonRelationshipType | order person relationship type | edge | implemented |
nm_shipmentPersonRelationshipType | shipment person relationship type | edge | implemented |
nm_emailInfoRelationshipType | email info relationship type | edge | could not find mechanism |
Every class the shipped ontology declares, grouped rather than left in file order: the core types, then people, attributes, places and events, then the activity block, and last the forty-six relationship types, which are not things at all — each one reifies an edge so that the edge can carry facets of its own, a confidence among them. The ids and labels are Apple's; the grouping is ours. intValue runs 1 to 185 with four numbers missing — 18, 54, 169, 181 — and nothing on the disk says what they were.
Fifty-seven of the 181 describe an activity: sleeping, exercising, mindfulness, going to bed, commute, dining, most of them with a matching type class beside them, so nearly a third of the vocabulary went on what you are doing rather than on who or where you are. That said, it is not clear that every class is actually used; some may be placeholders that are declared and never filled. In the table, we flag as implemented the classes for which we could locate a mechanism that might be responsible for the class, but those are to be taken as inference work rather than ground truth.
And this is the complete list of predicates (same disclaimer applies):
| Predicate | What it records | Data source | How it is obtained | Mechanism found? |
|---|---|---|---|---|
PS1 | what kind of thing this is | every source | Rule | implemented |
PS10 | genre | Apple world knowledge | Apple-shipped | implemented |
PS102 | this record is the same person/thing as that one | every source | Embedding model | implemented |
PS106 | duration | Calendar, Suggestions | Copied | could not find mechanism |
PS107 | has location | Calendar, location history | Copied | might be implemented (unverified) |
PS123 | part in part-whole relationship | Apple world knowledge | Apple-shipped | could not find mechanism |
PS132 | has religion | Contacts | Copied | could not find mechanism |
PS133 | religion | Apple world knowledge | Apple-shipped | could not find mechanism |
PS135 | area | Apple world knowledge | Apple-shipped | could not find mechanism |
PS137 | performed by | Apple world knowledge | Apple-shipped | could not find mechanism |
PS143 | attendee identifier | Calendar, Suggestions | Copied | might be implemented (unverified) |
PS144 | took part in an event | Calendar, Photos | Copied | could not find mechanism |
PS147 | population | Apple world knowledge | Apple-shipped | could not find mechanism |
PS16 | performer | Apple world knowledge | Apple-shipped | could not find mechanism |
PS194 | published by | Apple world knowledge | Apple-shipped | implemented |
PS2 | unit | Apple world knowledge | Apple-shipped | implemented |
PS225 | has location relationship | Calendar, location history | Copied | implemented |
PS232 | has attendee | Calendar, Suggestions | Copied | implemented |
PS248 | starting location | Calendar, location history | Copied | implemented |
PS249 | end location | Calendar, location history | Copied | implemented |
PS29 | start time | Calendar, Suggestions | Copied | implemented |
PS296 | URL | Calendar, apps, world knowledge | Copied | implemented |
PS3 | quantity | Apple world knowledge | Apple-shipped | implemented |
PS30 | end time | Calendar, Suggestions | Copied | implemented |
PS312 | first name | Contacts | Copied | implemented |
PS313 | username / handle | Contacts, Family Sharing | Copied | implemented |
PS314 | sport | Apple world knowledge | Apple-shipped | could not find mechanism |
PS315 | postal code | Contacts, order emails | Copied | implemented |
PS316 | full street address | Contacts, order emails | Copied | might be implemented (unverified) |
PS317 | has address | Contacts, order emails | Copied | implemented |
PS324 | has language | Contacts | Copied | could not find mechanism |
PS325 | languages spoken | Contacts | Copied | could not find mechanism |
PS33 | name | Contacts | Copied | implemented |
PS335 | text value | Calendar, apps, world knowledge | Copied | could not find mechanism |
PS336 | official name | Apple world knowledge | Apple-shipped | could not find mechanism |
PS34 | gender identity | Contacts | Copied | might be implemented (unverified) |
PS343 | demonym | Apple world knowledge | Apple-shipped | could not find mechanism |
PS35 | citizen of | Apple world knowledge | Apple-shipped | could not find mechanism |
PS358 | has rating | Apple world knowledge | Apple-shipped | could not find mechanism |
PS359 | rating | Apple world knowledge | Apple-shipped | could not find mechanism |
PS36 | birth name | Contacts | Copied | implemented |
PS37 | date of birth | Contacts | Copied | implemented |
PS374 | has member | Contacts, Family Sharing | Copied | implemented |
PS392 | last updated | Calendar, Suggestions | Copied | implemented |
PS396 | external identifier, its value, its type | every source | Joined | implemented |
PS4 | width | Apple world knowledge | Apple-shipped | might be implemented (unverified) |
PS406 | email address | Contacts, order emails | Copied | implemented |
PS407 | phone number | Contacts, order emails | Copied | implemented |
PS424 | member of political party | Apple world knowledge | Apple-shipped | could not find mechanism |
PS441 | family name | Contacts | Copied | implemented |
PS447 | has timezone | Calendar, location history | Copied | could not find mechanism |
PS448 | time zone | Calendar, location history | Copied | might be implemented (unverified) |
PS45 | member of | Contacts, Family Sharing | Copied | implemented |
PS450 | address country | Contacts, order emails | Copied | might be implemented (unverified) |
PS453 | city | Contacts, order emails | Copied | might be implemented (unverified) |
PS454 | country code ISO 3166-1 alpha-2 | Contacts, order emails | Copied | might be implemented (unverified) |
PS455 | administrative district | Contacts, order emails | Copied | might be implemented (unverified) |
PS46 | group member identifier | Family Sharing | Joined | could not find mechanism |
PS484 | official language | Apple world knowledge | Apple-shipped | could not find mechanism |
PS486 | display image | Photos, Contacts | Copied | could not find mechanism |
PS5 | height | Apple world knowledge | Apple-shipped | might be implemented (unverified) |
PS500 | employer | Contacts | Copied | implemented |
PS51 | description | Calendar, apps, world knowledge | Copied | implemented |
PS515 | location within location | Apple world knowledge | Apple-shipped | could not find mechanism |
PS520 | has contact information | Contacts, order emails | Copied | implemented |
PS524 | native home | Apple world knowledge | Apple-shipped | could not find mechanism |
PS53 | part of | Apple world knowledge | Apple-shipped | could not find mechanism |
PS545 | name prefix | Contacts | Copied | implemented |
PS546 | middle name | Contacts | Copied | implemented |
PS547 | name suffix | Contacts | Copied | implemented |
PS548 | department | Contacts | Copied | implemented |
PS557 | topics a person is interested in | Personalization Portrait | Scored model | could not find mechanism |
PS558 | topics a person is interested in | Personalization Portrait | Scored model | could not find mechanism |
PS565 | abbreviation | Apple world knowledge | Apple-shipped | could not find mechanism |
PS566 | group has part | Apple world knowledge | Apple-shipped | could not find mechanism |
PS567 | seconds from GMT | Calendar, location history | Copied | could not find mechanism |
PS568 | sub administrative area | Contacts, order emails | Copied | implemented |
PS569 | sub locality | Contacts, order emails | Copied | implemented |
PS570 | sub thoroughfare | Contacts, order emails | Copied | implemented |
PS571 | latitude | Calendar, location history | Copied | implemented |
PS572 | longitude | Calendar, location history | Copied | implemented |
PS573 | has latitude/longitude | Calendar, location history | Copied | implemented |
PS574 | previous family name | Contacts | Copied | implemented |
PS578 | has organizer | Calendar, Suggestions | Copied | implemented |
PS579 | on calendar | Calendar, Suggestions | Copied | could not find mechanism |
PS580 | calendar event sender | Calendar, Suggestions | Copied | implemented |
PS581 | second address line | Contacts, order emails | Copied | implemented |
PS582 | who administers the home | HomeKit | Copied | could not find mechanism |
PS586 | status | — | Not established | implemented |
PS598 | a person is related to / associated with another | Contacts, Health, Family Sharing, Screen Time, Photos | XGBoost + rules + copied | implemented |
PS599 | a person is related to / associated with another | Contacts, Health, Family Sharing, Screen Time, Photos | XGBoost + rules + copied | could not find mechanism |
PS618 | has subevent | Calendar, Suggestions | Copied | could not find mechanism |
PS66 | source URL | Calendar, apps, world knowledge | Copied | implemented |
PS67 | date of death | Apple world knowledge | Apple-shipped | could not find mechanism |
PS69 | external identifier, its value, its type | every source | Joined | implemented |
PS7 | image file | Photos, Contacts | Copied | might be implemented (unverified) |
PS709 | has driver | CarPlay, Wallet | Copied | could not find mechanism |
PS710 | transportation type | Apple world knowledge | Apple-shipped | could not find mechanism |
PS711 | elevation gain | Apple world knowledge | Apple-shipped | could not find mechanism |
PS712 | terrain | Apple world knowledge | Apple-shipped | implemented |
PS713 | fuel consumed | Apple world knowledge | Apple-shipped | could not find mechanism |
PS714 | highway mileage | Apple world knowledge | Apple-shipped | could not find mechanism |
PS715 | city mileage | Apple world knowledge | Apple-shipped | could not find mechanism |
PS716 | make of automobile | CarPlay, Wallet | Copied | could not find mechanism |
PS717 | model of automobile | CarPlay, Wallet | Copied | could not find mechanism |
PS718 | two events happened together | Photos, Calendar | Rule | could not find mechanism |
PS719 | kind of activity | Health, motion sensors | Rule | could not find mechanism |
PS72 | external identifier, its value, its type | every source | Joined | implemented |
PS73 | occupation | Contacts, Apple world knowledge | Copied | implemented |
PS730 | sub premises | Contacts, order emails | Copied | might be implemented (unverified) |
PS731 | administrative area code | Contacts, order emails | Copied | might be implemented (unverified) |
PS733 | label the user gave a place or thing | Calendar, Suggestions | Copied | might be implemented (unverified) |
PS734 | participant obligation | Calendar, Suggestions | Copied | could not find mechanism |
PS740 | contact label | Contacts | Copied | implemented |
PS741 | has event | Calendar, Suggestions | Copied | could not find mechanism |
PS747 | behavior category | Behavioral history | Rule | could not find mechanism |
PS75 | has mother | — | Not established | could not find mechanism |
PS753 | group includes individual | Family Sharing | Copied | implemented |
PS76 | has father | — | Not established | could not find mechanism |
PS77 | spouse | — | Not established | could not find mechanism |
PS78 | has image | Photos, Contacts | Copied | could not find mechanism |
PS79 | has child | — | Not established | could not find mechanism |
PS83 | length | Apple world knowledge | Apple-shipped | could not find mechanism |
PS85 | role held | Apple world knowledge | Apple-shipped | could not find mechanism |
PS89 | another name the same person is known by | Contacts, Photos | Embedding model | implemented |
PS99 | net worth | Apple world knowledge | Apple-shipped | could not find mechanism |
nm_QID | Wikidata id | Apple world knowledge | Apple-shipped | implemented |
nm_UMC_ID | UMC ID | Apple Music | Copied | implemented |
nm_accountInstitution | account institution | Wallet, order emails | Copied | implemented |
nm_accountLastFourDigits | account last four digits | Wallet, order emails | Copied | implemented |
nm_accountType | account type | Wallet, order emails | Copied | implemented |
nm_accuracy | accuracy | Location history | Copied | could not find mechanism |
nm_activityCategory | event type pulled out of text | Mail, Messages, app content | Rule | could not find mechanism |
nm_addressString | address string | Calendar, Suggestions | Copied | implemented |
nm_age | age | Family Sharing | Copied | implemented |
nm_albumIdentifier | album identifier | Apple Music | Copied | implemented |
nm_albumName | song album name | Apple Music, app usage | Copied | implemented |
nm_amount | amount | Wallet, order emails | Copied | implemented |
nm_anniversary | anniversary | Contacts | Copied | implemented |
nm_applicationIdentifier | application identifier | Installed apps | Copied | implemented |
nm_artistIdentifier | artist identifier | Apple Music | Copied | implemented |
nm_artistName | song artist name | Apple Music, app usage | Copied | implemented |
nm_associationReason | which mechanism named this face | Photos faces | Rule | implemented |
nm_availability | availability | Calendar, Suggestions | Copied | could not find mechanism |
nm_birthdayContactID | birthday contact id | Contacts | Joined | could not find mechanism |
nm_bundleID | bundle id | Installed apps | Copied | implemented |
nm_calendarType | calendar type | Calendar, Suggestions | Copied | could not find mechanism |
nm_carrierName | carrier name | Wallet passes, Calendar | Copied | implemented |
nm_category | topic scored from what you read and write | Personalization Portrait | Scored model | could not find mechanism |
nm_cnFavoriteActionType | contact favorite action type | Contacts | Copied | implemented |
nm_confidence | how sure the system is | whichever engine wrote the fact | Rule | implemented |
nm_confirmationConfidence | how sure a name match is | Contacts, Photos | Embedding model | implemented |
nm_creationDate | creation date | Calendar, Suggestions | Copied | implemented |
nm_dates | dates | Calendar, Suggestions | Copied | implemented |
nm_documentID | document ID | — | Not established | could not find mechanism |
nm_dynamicCategory | topic scored from what you read and write | Personalization Portrait | Scored model | could not find mechanism |
nm_emailFrom | email from | Order emails | Copied | implemented |
nm_emailIdentifier | email identifier | Order emails | Joined | implemented |
nm_emailReplyTo | email reply to | Order emails | Copied | implemented |
nm_emailTo | email to | Order emails | Copied | could not find mechanism |
nm_emailType | email type | Order emails | Copied | implemented |
nm_entityAliasRelationship | link joining two names for one person | Contacts, Photos | Embedding model | implemented |
nm_exactVersion | exact version | Installed apps | Copied | could not find mechanism |
nm_extensionHostId | extension host id | Installed apps | Copied | could not find mechanism |
nm_familyMemberType | family member type | Family Sharing | Copied | implemented |
nm_file | file | Installed apps | Copied | could not find mechanism |
nm_flightNumber | flight number | Wallet passes, Calendar | Copied | implemented |
nm_handleIdentifier | handle identifier | Messages, Mail | Joined | implemented |
nm_handles | the phone numbers and emails a person uses | Contacts | Copied | might be implemented (unverified) |
nm_hasAdministrator | has administrator | HomeKit | Copied | could not find mechanism |
nm_hasCalendar | has calendar | Calendar, Suggestions | Copied | could not find mechanism |
nm_hasConfidence | per-source trust weight | Downloadable Apple asset | Apple-shipped | implemented |
nm_hasDate | has date | Calendar, Suggestions | Copied | implemented |
nm_hasDomain | which classes a predicate applies to | The ontology itself | Apple-shipped | could not find mechanism |
nm_hasEmail | has email | Order emails | Copied | implemented |
nm_hasExtractionTags | has extraction tags | Ingest lane | Rule | could not find mechanism |
nm_hasFavoriteSportsTeam | has favorite sports team | App usage, Apple Music | Copied | could not find mechanism |
nm_hasField | has field | — | Not established | implemented |
nm_hasLocalizedName | has localized name | Apple world knowledge | Apple-shipped | implemented |
nm_hasMerchant | has merchant | Wallet, order emails | Copied | implemented |
nm_hasPayment | has payment | Wallet, order emails | Copied | implemented |
nm_hasPerson | has person | Order emails | Copied | implemented |
nm_hasProfileImage | has profile image | Contacts | Copied | implemented |
nm_hasRange | which classes a predicate applies to | The ontology itself | Apple-shipped | implemented |
nm_hasSender | has sender | Order emails | Copied | might be implemented (unverified) |
nm_hasShipmentFullFillment | has shipment full fillment | Wallet, order emails | Copied | implemented |
nm_hasShippingInfo | has shipping info | Wallet, order emails | Copied | could not find mechanism |
nm_hasSoftware | has software | Installed apps | Copied | implemented |
nm_hasSong | has song | Apple Music, app usage | Copied | implemented |
nm_hasSource | has source | Calendar, Suggestions | Copied | could not find mechanism |
nm_hasTopic | topic scored from what you read and write | Personalization Portrait | Scored model | might be implemented (unverified) |
nm_hasTransaction | has transaction | Wallet, order emails | Copied | implemented |
nm_hasVisualIdentifier | the face cluster for a person | Photos faces | Face clustering | implemented |
nm_homeTeam | home team | Apple Music, app usage | Copied | could not find mechanism |
nm_iataCode | iata code | Wallet passes, Calendar | Copied | implemented |
nm_image_bytes | image bytes | Photos, Contacts | Copied | implemented |
nm_imputedAnniversary | imputed anniversary | Contacts, behavior | Unknown model | implemented |
nm_imputedBirthday | birthday filled in rather than told — and the one the system actually reads | Photos age estimate (candidate) | Unknown model | implemented |
nm_imputedCreationDate | timestamp filled in or normalized | Calendar, Suggestions | Rule | implemented |
nm_imputedEndTime | timestamp filled in or normalized | Calendar, Suggestions | Rule | implemented |
nm_imputedInferredBirthday | birthday filled in rather than told — and the one the system actually reads | Photos age estimate (candidate) | Unknown model | implemented |
nm_imputedLastUpdated | timestamp filled in or normalized | Calendar, Suggestions | Rule | implemented |
nm_imputedNonGregorianBirthday | imputed non-gregorian birthday | Contacts, behavior | Unknown model | implemented |
nm_imputedOccurrenceDate | timestamp filled in or normalized | Calendar, Suggestions | Rule | implemented |
nm_imputedStartTime | timestamp filled in or normalized | Calendar, Suggestions | Rule | implemented |
nm_inferenceFeedbackID | handle marking a machine-made claim | The kinship classifier | XGBoost | implemented |
nm_inferredBirthday | birthday filled in rather than told — and the one the system actually reads | Photos age estimate (candidate) | Unknown model | implemented |
nm_inferredDeviceUser | owner worked out rather than declared | Behavioral history | Unknown model | implemented |
nm_inferredSemanticLabel | what a place is for, e.g. home, gym | Location history | Unknown model | implemented |
nm_intentPersonId | person as an app referred to them | App donations | Joined | implemented |
nm_isAllDay | is all day | Calendar, Suggestions | Copied | implemented |
nm_isCurrentUser | this person is the phone's owner | Contacts me-card | Rule | implemented |
nm_isDetached | is detached | Calendar, Suggestions | Copied | could not find mechanism |
nm_isFavorite | is favorite | Contacts | Copied | implemented |
nm_isStarting | is starting | Calendar, Suggestions | Copied | could not find mechanism |
nm_isSubscribed | subscribed status | Calendar, Suggestions | Copied | could not find mechanism |
nm_launchReason | launch reason | App usage, Screen Time | Copied | could not find mechanism |
nm_launchType | launch type | App usage, Screen Time | Copied | could not find mechanism |
nm_league_name | league name | Apple Music, app usage | Copied | implemented |
nm_listening_confidence | per-language competence on a relationship | — | Not established | might be implemented (unverified) |
nm_localeIdentifier | locale identifier | System settings | Copied | implemented |
nm_mappedTopic | topic scored from what you read and write | Personalization Portrait | Scored model | could not find mechanism |
nm_merchantName | merchant name | Wallet, order emails | Copied | implemented |
nm_naturalLanguageEventTypeIdentifier | event type pulled out of text | Mail, Messages, app content | Rule | could not find mechanism |
nm_nonGregorianBirthday | non-gregorian birthday | Contacts | Copied | implemented |
nm_occurrenceDate | occurrence date | Calendar, Suggestions | Copied | implemented |
nm_orderContentType | order content type | Wallet, order emails | Copied | implemented |
nm_orderNumber | order number | Wallet, order emails | Copied | implemented |
nm_organizationIdentifier | organization identifier | Contacts, Wallet | Joined | implemented |
nm_parentBundleId | parent bundle id | Installed apps | Copied | could not find mechanism |
nm_paymentIdentifier | payment identifier | Wallet | Joined | implemented |
nm_paymentMethodIsApplePay | payment method is apple pay | Wallet, order emails | Copied | implemented |
nm_personIdentifier | who a relationship points at | the other end of a relationship | Joined | implemented |
nm_personType | what kind of thing Photos detected | Photos | Rule | implemented |
nm_phoneticFamilyName | phonetic family name | Contacts | Copied | implemented |
nm_phoneticFirstName | phonetic first name | Contacts | Copied | implemented |
nm_phoneticMiddleName | phonetic middle name | Contacts | Copied | implemented |
nm_phoneticName | phonetic name | Contacts | Copied | implemented |
nm_photosDetectionType | what kind of thing Photos detected | Photos | Rule | implemented |
nm_poiType | kind of place | Maps, location history | Copied | could not find mechanism |
nm_reading_confidence | per-language competence on a relationship | — | Not established | might be implemented (unverified) |
nm_relationship | a person is related to / associated with another | Contacts, Health, Family Sharing, Screen Time, Photos | XGBoost + rules + copied | implemented |
nm_relationshipLabel | the relationship word, e.g. sister, coworker | Contacts, Health, Family Sharing | XGBoost + copied | implemented |
nm_role | role | — | Not established | could not find mechanism |
nm_screenTimeSegmentPerson | screen time segment person | Screen Time | Copied | could not find mechanism |
nm_senderDomain | sender domain | Order emails | Copied | implemented |
nm_senderIdentifier | sender identifier | Messages, Mail | Joined | might be implemented (unverified) |
nm_sgEventType | event type worked out from an app or email | Suggestions | Rule | implemented |
nm_shipmentFullFillmentIdentifier | shipment full fillment identifier | Wallet | Joined | implemented |
nm_shippingMethod | shipping method | Wallet, order emails | Copied | implemented |
nm_shippingStatus | shipping status | Wallet, order emails | Copied | implemented |
nm_shortVersion | short version | Installed apps | Copied | could not find mechanism |
nm_signalLabel | signal label | Photos | Rule | implemented |
nm_softwareIdentifier | software identifier | Installed apps | Joined | might be implemented (unverified) |
nm_songIdentifier | song identifier | Apple Music | Copied | could not find mechanism |
nm_sourceType | source type | Ingest lane | Rule | implemented |
nm_subject | subject | Order emails | Copied | implemented |
nm_suggestedName | name guessed for an unnamed face | Photos faces + Messages text | Local LLM | implemented |
nm_suggestedRelationshipConfidence | guessed relationship of a face to the phone's owner | Photos faces + Messages text | Local LLM | implemented |
nm_suggestedRelationshipToDeviceOwner | guessed relationship of a face to the phone's owner | Photos faces + Messages text | Local LLM | implemented |
nm_teamIdentifier | team identifier | Installed apps | Joined | implemented |
nm_toDisplayName | display name on an email recipient | Copied | implemented | |
nm_toEmailAddress | to email address | Copied | implemented | |
nm_topicIdentifier | topic identifier | Personalization Portrait | Joined | might be implemented (unverified) |
nm_totalAmount | total amount | Wallet, order emails | Copied | implemented |
nm_totalNotifications | total notifications | App usage, Screen Time | Copied | could not find mechanism |
nm_totalPickups | total pickups | App usage, Screen Time | Copied | could not find mechanism |
nm_trackingNumber | tracking number | Wallet, order emails | Copied | implemented |
nm_transactionIdentifier | transaction identifier | Wallet | Joined | implemented |
nm_transactionSource | transaction source | Wallet, order emails | Copied | implemented |
nm_transactionStatus | transaction status | Wallet, order emails | Copied | implemented |
nm_transactionType | transaction type | Wallet, order emails | Copied | implemented |
nm_uncertainty | uncertainty | Location history | Copied | could not find mechanism |
nm_unknownHandle | unknown handle | Messages, Mail | Joined | implemented |
nm_unlocalizedRelationshipLabel | the relationship word, e.g. sister, coworker | Contacts, Health, Family Sharing | XGBoost + copied | implemented |
nm_virtualConferenceURL | virtual conference URL | Calendar, Suggestions | Copied | implemented |
nm_visualIdentifier | the face cluster for a person | Photos faces | Face clustering | implemented |
nm_writing_confidence | per-language competence on a relationship | — | Not established | might be implemented (unverified) |
Every predicate the shipped ontology declares. The first column is the id as graph.db stores it; the last says how a value gets there: copied from a source, joined from another record, derived by a rule, shipped by Apple as world knowledge, or produced by a model (in bold). Seven we could not establish, and the table says so rather than guessing. The ids and labels are Apple's; the plain-language readings are ours.
How it is inferred
The methods run the whole range. Most of the vocabulary is filled by plain copying (a name from Contacts, an attendee from Calendar) and rules over the copies; the interesting rows come from models: a pair of XGBoost classifiers decides who is family from 144 mostly behavioral features, two embedding models are one of ten signals the system uses to decide when two records are the same person, twelve analyzers in Photos score partner, parent, child, coworker and friend from who appears in your pictures with you, on which trips and holidays, and Apple's on-device LLM reads your messages to put a name and a relationship on a face (if Apple Intelligence is active).
Whatever the method, every row lands in the graph with a confidence attached, a number between 0 and 1.
The family scores live apart. Two CoreML models ship next to the ontology, EntityTagging_Family.mlmodelc and EntityTagging_FamilyAndFriends.mlmodelc: binary XGBoost classifiers that take 144 features and return a class and a probability over it. Their scores do not go into the triple store but into a table of their own (entityTagging.db, one row per person, seventeen relationship columns from family to mother to coworker, recomputed every day), which is what the iKnow scorecard further down reads. Only two of those seventeen columns have a shipped model behind them; what fills the other fifteen, and how any of these probabilities would become a confidence in the graph, we could not trace.
The feature names are in each model's metadata.json, in plain text. They are the clearest statement of what this system is that I have found anywhere. All 144:
| # | Feature | Group |
|---|---|---|
| 0 | isVIP | identity |
| 1 | sharesWorkAddress | identity |
| 2 | hasSamePrivateEmailDomain | identity |
| 3 | hasBirthday | identity |
| 4 | hasSameEmailDomains | identity |
| 5 | sameLastName | identity |
| 6 | hasSamePublicEmailDomain | identity |
| 7 | photosPersonAge | identity |
| 8 | isFavorite | identity |
| 9 | hasSameEduEmailDomain | identity |
| 10 | hasSameWorkEmailDomain | identity |
| 11 | hasNickname | identity |
| 12 | allowListedNameMatch | identity |
| 13 | ageDifferenceCategory | identity |
| 14 | nameContainsEmoji | identity |
| 15 | nicknameContainsEmoji | identity |
| 16 | sharesHomeAddress | identity |
| 17 | allowListedNicknameMatch | identity |
| 18 | photosAgeDifferenceCategory | identity |
| 19 | iCloudFamilyMember | identity |
| 20 | personOverallPopularity | communication |
| 21 | personLongTermPopularity | communication |
| 22 | personPopularityGivenMonday | communication |
| 23 | personPopularityGivenTuesday | communication |
| 24 | personPopularityGivenWednesday | communication |
| 25 | personPopularityGivenThursday | communication |
| 26 | personPopularityGivenFriday | communication |
| 27 | personPopularityGivenSaturday | communication |
| 28 | personPopularityGivenSunday | communication |
| 29 | mondayPopularityGivenPerson | communication |
| 30 | tuesdayPopularityGivenPerson | communication |
| 31 | wednesdayPopularityGivenPerson | communication |
| 32 | thursdayPopularityGivenPerson | communication |
| 33 | fridayPopularityGivenPerson | communication |
| 34 | saturdayPopularityGivenPerson | communication |
| 35 | sundayPopularityGivenPerson | communication |
| 36 | personPosteriorProbabilityGivenMonday | communication |
| 37 | personPosteriorProbabilityGivenTuesday | communication |
| 38 | personPosteriorProbabilityGivenWednesday | communication |
| 39 | personPosteriorProbabilityGivenThursday | communication |
| 40 | personPosteriorProbabilityGivenFriday | communication |
| 41 | personPosteriorProbabilityGivenSaturday | communication |
| 42 | personPosteriorProbabilityGivenSunday | communication |
| 43 | personPopularityGivenMorning | communication |
| 44 | personPopularityGivenAfternoon | communication |
| 45 | personPopularityGivenEvening | communication |
| 46 | personPopularityGivenNight | communication |
| 47 | personPopularityGivenHome | communication |
| 48 | personPopularityGivenWork | communication |
| 49 | homePopularityGivenPerson | communication |
| 50 | workPopularityGivenPerson | communication |
| 51 | personPosteriorProbabilityGivenHome | communication |
| 52 | personPosteriorProbabilityGivenWork | communication |
| 53 | personPopularityGivenWeekday | communication |
| 54 | personPopularityGivenWeekend | communication |
| 55 | weekdayPopularityGivenPerson | communication |
| 56 | weekendPopularityGivenPerson | communication |
| 57 | top1PersonInteractionMechanism | communication |
| 58 | top2PersonInteractionMechanism | communication |
| 59 | top3PersonInteractionMechanism | communication |
| 60 | photosPersonOverallPopularity | photos |
| 61 | photosPersonLongTermPopularity | photos |
| 62 | photosPersonPopularityGivenMonday | photos |
| 63 | mondayPopularityGivenPhotosPerson | photos |
| 64 | photosPersonPosteriorProbabilityGivenMonday | photos |
| 65 | photosPersonPopularityGivenTuesday | photos |
| 66 | tuesdayPopularityGivenPhotosPerson | photos |
| 67 | photosPersonPosteriorProbabilityGivenTuesday | photos |
| 68 | photosPersonPopularityGivenWednesday | photos |
| 69 | wednesdayPopularityGivenPhotosPerson | photos |
| 70 | photosPersonPosteriorProbabilityGivenWednesday | photos |
| 71 | photosPersonPopularityGivenThursday | photos |
| 72 | thursdayPopularityGivenPhotosPerson | photos |
| 73 | photosPersonPosteriorProbabilityGivenThursday | photos |
| 74 | photosPersonPopularityGivenFriday | photos |
| 75 | fridayPopularityGivenPhotosPerson | photos |
| 76 | photosPersonPosteriorProbabilityGivenFriday | photos |
| 77 | photosPersonPopularityGivenSaturday | photos |
| 78 | saturdayPopularityGivenPhotosPerson | photos |
| 79 | photosPersonPosteriorProbabilityGivenSaturday | photos |
| 80 | photosPersonPopularityGivenSunday | photos |
| 81 | sundayPopularityGivenPhotosPerson | photos |
| 82 | photosPersonPosteriorProbabilityGivenSunday | photos |
| 83 | photosPersonPopularityGivenMorning | photos |
| 84 | morningPopularityGivenPhotosPerson | photos |
| 85 | photosPersonPosteriorProbabilityGivenMorning | photos |
| 86 | photosPersonPopularityGivenAfternoon | photos |
| 87 | afternoonPopularityGivenPhotosPerson | photos |
| 88 | photosPersonPosteriorProbabilityGivenAfternoon | photos |
| 89 | photosPersonPopularityGivenEvening | photos |
| 90 | eveningPopularityGivenPhotosPerson | photos |
| 91 | photosPersonPosteriorProbabilityGivenEvening | photos |
| 92 | photosPersonPopularityGivenNight | photos |
| 93 | nightPopularityGivenPhotosPerson | photos |
| 94 | photosPersonPosteriorProbabilityGivenNight | photos |
| 95 | photosPersonPosteriorProbabilityGivenMondayMorning | photos |
| 96 | photosPersonPosteriorProbabilityGivenMondayAfternoon | photos |
| 97 | photosPersonPosteriorProbabilityGivenMondayEvening | photos |
| 98 | photosPersonPosteriorProbabilityGivenMondayNight | photos |
| 99 | photosPersonPosteriorProbabilityGivenTuesdayMorning | photos |
| 100 | photosPersonPosteriorProbabilityGivenTuesdayAfternoon | photos |
| 101 | photosPersonPosteriorProbabilityGivenTuesdayEvening | photos |
| 102 | photosPersonPosteriorProbabilityGivenTuesdayNight | photos |
| 103 | photosPersonPosteriorProbabilityGivenWednesdayMorning | photos |
| 104 | photosPersonPosteriorProbabilityGivenWednesdayAfternoon | photos |
| 105 | photosPersonPosteriorProbabilityGivenWednesdayEvening | photos |
| 106 | photosPersonPosteriorProbabilityGivenWednesdayNight | photos |
| 107 | photosPersonPosteriorProbabilityGivenThursdayMorning | photos |
| 108 | photosPersonPosteriorProbabilityGivenThursdayAfternoon | photos |
| 109 | photosPersonPosteriorProbabilityGivenThursdayEvening | photos |
| 110 | photosPersonPosteriorProbabilityGivenThursdayNight | photos |
| 111 | photosPersonPosteriorProbabilityGivenFridayMorning | photos |
| 112 | photosPersonPosteriorProbabilityGivenFridayAfternoon | photos |
| 113 | photosPersonPosteriorProbabilityGivenFridayEvening | photos |
| 114 | photosPersonPosteriorProbabilityGivenFridayNight | photos |
| 115 | photosPersonPosteriorProbabilityGivenSaturdayMorning | photos |
| 116 | photosPersonPosteriorProbabilityGivenSaturdayAfternoon | photos |
| 117 | photosPersonPosteriorProbabilityGivenSaturdayEvening | photos |
| 118 | photosPersonPosteriorProbabilityGivenSaturdayNight | photos |
| 119 | photosPersonPosteriorProbabilityGivenSundayMorning | photos |
| 120 | photosPersonPosteriorProbabilityGivenSundayAfternoon | photos |
| 121 | photosPersonPosteriorProbabilityGivenSundayEvening | photos |
| 122 | photosPersonPosteriorProbabilityGivenSundayNight | photos |
| 123 | photosPersonPopularityGivenHome | photos |
| 124 | homePopularityGivenPhotosPerson | photos |
| 125 | photosPersonPosteriorProbabilityGivenHome | photos |
| 126 | photosPersonPopularityGivenWork | photos |
| 127 | workPopularityGivenPhotosPerson | photos |
| 128 | photosPersonPosteriorProbabilityGivenWork | photos |
| 129 | photosPersonPopularityGivenWeekday | photos |
| 130 | weekdayPopularityGivenPhotosPerson | photos |
| 131 | photosPersonPosteriorProbabilityGivenWeekday | photos |
| 132 | photosPersonPopularityGivenWeekend | photos |
| 133 | weekendPopularityGivenPhotosPerson | photos |
| 134 | photosPersonPosteriorProbabilityGivenWeekend | photos |
| 135 | photosPersonPosteriorProbabilityGivenWeekdayMorning | photos |
| 136 | photosPersonPosteriorProbabilityGivenWeekdayAfternoon | photos |
| 137 | photosPersonPosteriorProbabilityGivenWeekdayEvening | photos |
| 138 | photosPersonPosteriorProbabilityGivenWeekdayNight | photos |
| 139 | photosPersonPosteriorProbabilityGivenWeekendMorning | photos |
| 140 | photosPersonPosteriorProbabilityGivenWeekendAfternoon | photos |
| 141 | photosPersonPosteriorProbabilityGivenWeekendEvening | photos |
| 142 | photosPersonPosteriorProbabilityGivenWeekendNight | photos |
| 143 | hasWeekendWeekdayPhotosFeatures | photos |
Every input EntityTagging_Family.mlmodelc reads, in the order its metadata.json declares them. EntityTagging_FamilyAndFriends reads the same 144 in the same order, and every one is a number. The groups are the schema's own three blocks: twenty on who the person is, forty on when and how you communicate with them, eighty-four on the photographs you both appear in. Two of the twenty, photosPersonAge and photosAgeDifferenceCategory, are read from Photos too. The names are Apple's; the group labels are ours.
The identity group is the tidy story: same surname, same home address, an iCloud Family flag — and it is the small half. The bulk of the model is the other two: who you message and who appears in your photographs, conditioned on the day of the week and the time of day, and then on both at once. photosPersonPosteriorProbabilityGivenSaturdayNight is a shipped feature name in a shipped classifier whose job is deciding whether someone is family.
Deleting something does not delete it everywhere.
The live graph forgets. Delete a contact and nothing re-derives them; the next run replaces the table wholesale.
But the store keeps a second table, expired_stable_graph, beside the live one. The retracted row moves there and keeps its confidence and its sources. How long it stays there is not clear from what we could see. It seems to go after about 48 hours (the store keeps a prune watermark, and a recent snapshot of the table reached back no further than that); but on my own Mac, I could still read very old records in it.
And a conclusion can outlive the evidence for it. On my Mac, the scorecard still scored two people the graph had dropped the day before, both of them known to it only from a calendar invitation. Well, if you want your partner not to discover some contacts you might have deleted and their "closeness" to you, better to drop some rows from expired_stable_graph too (unfortunately, you have to do it manually). But I am sure you have nothing to hide (just joking).
Look into your own data
Is any of this sensitive? We'll leave that to you, since "sensitive" means different things to different people (though I think you have plenty to choose from here). However, the thing is, none of it lives in isolation. It is built to be joined and correlated; the nodes are there to be linked:
How to read this
Every node is a row in the store, and the record under it is what the store holds. Size is how many rows name it; shape is what kind of thing it is; the one node in accent is you, and a ring marks the four the store scores as family. A dashed line is a conclusion nobody typed.
Click a node — or reach the graph with Tab, walk it with the arrow keys and press Enter — and its record replaces these notes.
(Me)
- 12-month interactions
- 18,432
- incoming / outgoing
- 9,761 / 8,671
- calls
- 96
- first / last contact
- 2025-09-16 → 2026-09-15
- meetings attended / organised
- 312 / 88
- invitations sent
- 41
- phones / emails
- 2 / 3
- graph facts
- 147
- resolves into
- cnContact, faFamilyCircle, inPerson, phPerson, tel, mailto
reachable at · 5
- phone number
- +44 7700 900477
- phone number
- +44 7700 900823
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-08-02 · organiser
- School run
- 2026-07-27 · organiser
- Design crit
- 2026-07-04 · attendee
- Design crit
Mara Quill
- 12-month interactions
- 2,900
- incoming / outgoing
- 1,537 / 1,363
- calls
- 14
- first / last contact
- 2025-09-18 → 2026-09-14
- meetings attended / organised
- 37 / 9
- invitations sent
- 4
- phones / emails
- 2 / 1
- graph facts
- 50
- resolves into
- cnContact, faFamilyCircle, phPerson, tel
reachable at · 3
- phone number
- +44 7700 900549
- phone number
- +44 7700 900141
- mail address
- [email protected]
calendar record
- 2026-07-03 · attendee
- Five-a-side
- 2026-03-24 · organiser
- Parents' evening
- 2026-01-01 · organiser
- GP — follow-up
Tomas Quill
- 12-month interactions
- 2,590
- incoming / outgoing
- 1,372 / 1,218
- calls
- 13
- first / last contact
- 2025-09-18 → 2026-09-14
- meetings attended / organised
- 40 / 7
- invitations sent
- 5
- phones / emails
- 1 / 1
- graph facts
- 31
- resolves into
- cnContact, faFamilyCircle, phPerson, tel
reachable at · 2
- phone number
- +44 7700 900684
- mail address
- [email protected]
calendar record
- 2026-08-21 · attendee
- Parents' evening
- 2026-03-15 · attendee
- Quiz night
- 2026-02-28 · attendee
- GP — follow-up
Nils Quill
- 12-month interactions
- 612
- incoming / outgoing
- 324 / 288
- calls
- 7
- first / last contact
- 2025-09-18 → 2026-09-11
- meetings attended / organised
- 26 / 9
- invitations sent
- 4
- phones / emails
- 2 / 1
- graph facts
- 51
- resolves into
- cnContact, phPerson, tel
reachable at · 3
- phone number
- +44 7700 900193
- phone number
- +44 7700 900486
- mail address
- [email protected]
calendar record
- 2026-05-17 · organiser
- Standup
- 2026-05-11 · organiser
- Handover
- 2026-04-01 · attendee
- Dentist
Ines Quill
- 12-month interactions
- 468
- incoming / outgoing
- 249 / 219
- calls
- 5
- first / last contact
- 2025-09-18 → 2026-09-08
- meetings attended / organised
- 36 / 3
- invitations sent
- 6
- phones / emails
- 1 / 1
- graph facts
- 43
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900880
- mail address
- [email protected]
calendar record
- 2026-09-27 · organiser
- Design crit
- 2026-01-21 · organiser
- School run
- 2026-01-15 · attendee
- Dentist
Priya Sandoval
- 12-month interactions
- 2,280
- incoming / outgoing
- 1,208 / 1,072
- calls
- 12
- first / last contact
- 2025-10-15 → 2026-09-09
- meetings attended / organised
- 28 / 6
- invitations sent
- 3
- phones / emails
- 1 / 2
- graph facts
- 18
- resolves into
- cnContact, faFamilyCircle, phPerson, tel
reachable at · 3
- phone number
- +44 7700 900433
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-08-04 · attendee
- Design crit
- 2026-06-16 · attendee
- Handover
- 2026-03-07 · organiser
- Quiz night
Jonah Ferreira
- 12-month interactions
- 1,970
- incoming / outgoing
- 1,044 / 926
- calls
- 11
- first / last contact
- 2025-10-10 → 2026-09-14
- meetings attended / organised
- 11 / 6
- invitations sent
- 4
- phones / emails
- 1 / 2
- graph facts
- 18
- resolves into
- cnContact, tel
reachable at · 3
- phone number
- +44 7700 900185
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-05-08 · attendee
- Nils — birthday
- 2026-04-27 · attendee
- School run
- 2026-02-13 · attendee
- Nils — birthday
Lena Marchetti
- 12-month interactions
- 1,660
- incoming / outgoing
- 879 / 781
- calls
- 10
- first / last contact
- 2025-10-20 → 2026-09-10
- meetings attended / organised
- 20 / 7
- invitations sent
- 2
- phones / emails
- 1 / 2
- graph facts
- 22
- resolves into
- cnContact, tel
reachable at · 3
- phone number
- +44 7700 900763
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-07-25 · attendee
- Flat viewing
- 2026-06-17 · attendee
- Sprint review
- 2026-05-28 · organiser
- Quiz night
Sam Okafor
- 12-month interactions
- 1,350
- incoming / outgoing
- 715 / 635
- first / last contact
- 2025-10-24 → 2026-09-13
- meetings attended / organised
- 32 / 3
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 11
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900558
- mail address
- [email protected]
calendar record
- 2026-08-05 · organiser
- Design crit
- 2026-06-28 · attendee
- Sunday lunch
- 2026-04-05 · organiser
- Sunday lunch
Théo Lindqvist
- 12-month interactions
- 1,040
- incoming / outgoing
- 551 / 489
- first / last contact
- 2025-10-01 → 2026-09-09
- meetings attended / organised
- 27 / 5
- invitations sent
- 3
- phones / emails
- 1 / 1
- graph facts
- 14
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900803
- mail address
- thé[email protected]
calendar record
- 2026-06-25 · attendee
- Mum's
- 2026-04-08 · organiser
- Quiz night
- 2026-01-14 · organiser
- Design crit
Greta Eriksen
- 12-month interactions
- 300
- incoming / outgoing
- 159 / 141
- calls
- 3
- first / last contact
- 2025-10-14 → 2026-07-18
- meetings attended / organised
- 32 / 2
- invitations sent
- 4
- phones / emails
- 1 / 1
- graph facts
- 29
- resolves into
- cnContact, tel, phPerson
reachable at · 2
- phone number
- +44 7700 900191
- mail address
- [email protected]
calendar record
- 2026-09-28 · attendee
- Standup
- 2026-09-22 · organiser
- Parents' evening
- 2026-01-22 · organiser
- Sunday lunch
Iris Castellano
- 12-month interactions
- 729
- incoming / outgoing
- 386 / 343
- calls
- 2
- first / last contact
- 2025-10-03 → 2026-08-13
- meetings attended / organised
- 29 / 6
- invitations sent
- 3
- phones / emails
- 1 / 1
- graph facts
- 13
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900541
- mail address
- [email protected]
calendar record
- 2026-07-13 · attendee
- Mum's
- 2026-06-05 · attendee
- Nils — birthday
- 2026-01-14 · attendee
- Sunday lunch
Kai Nakamura
- 12-month interactions
- 447
- incoming / outgoing
- 236 / 211
- calls
- 2
- first / last contact
- 2025-10-14 → 2026-09-15
- meetings attended / organised
- 12 / 7
- invitations sent
- 0
- phones / emails
- 1 / 2
- graph facts
- 19
- resolves into
- cnContact, tel, phPerson
reachable at · 3
- phone number
- +44 7700 900840
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-08-18 · attendee
- School run
- 2026-07-21 · attendee
- Nils — birthday
- 2026-05-22 · attendee
- Physio
Ona Salazar
- 12-month interactions
- 335
- incoming / outgoing
- 177 / 158
- calls
- 1
- first / last contact
- 2025-10-02 → 2026-09-15
- meetings attended / organised
- 9 / 2
- invitations sent
- 3
- phones / emails
- 1 / 2
- graph facts
- 11
- resolves into
- cnContact, tel
reachable at · 3
- phone number
- +44 7700 900490
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-08-25 · organiser
- Mum's
- 2026-05-24 · attendee
- Physio
- 2026-01-26 · attendee
- Quiz night
Bo Ferreira
- 12-month interactions
- 183
- incoming / outgoing
- 96 / 87
- calls
- 4
- first / last contact
- 2025-10-19 → 2026-06-28
- meetings attended / organised
- 25 / 0
- invitations sent
- 4
- phones / emails
- 1 / 2
- graph facts
- 24
- resolves into
- cnContact, tel
reachable at · 3
- phone number
- +44 7700 900309
- mail address
- [email protected]
- mail address
- [email protected]
calendar record
- 2026-08-02 · attendee
- Standup
- 2026-07-27 · organiser
- Physio
- 2026-01-15 · attendee
- Sprint review
Ruth Adeyemi
- 12-month interactions
- 730
- incoming / outgoing
- 386 / 344
- first / last contact
- 2025-10-20 → 2026-09-12
- meetings attended / organised
- 2 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900842
- mail address
- [email protected]
calendar record
- 2026-03-16 · attendee
- Sunday lunch
- 2026-01-05 · attendee
- GP — follow-up
Ruth Tanaka
- 12-month interactions
- 180
- incoming / outgoing
- 91 / 89
- first / last contact
- 2025-12-05 → 2026-05-03
- meetings attended / organised
- 0 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900783
Tomas Halloran
- 12-month interactions
- 147
- incoming / outgoing
- 74 / 73
- first / last contact
- 2025-11-28 → 2026-02-21
- meetings attended / organised
- 0 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 2
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900836
- mail address
- [email protected]
Jonah Varga
- 12-month interactions
- 77
- incoming / outgoing
- 39 / 38
- first / last contact
- 2025-10-13 → 2026-05-19
- meetings attended / organised
- 2 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900128
calendar record
- 2026-03-19 · attendee
- Quiz night
- 2026-02-13 · attendee
- Five-a-side
Nadia Brennan
- 12-month interactions
- 50
- incoming / outgoing
- 25 / 25
- first / last contact
- 2025-12-01 → 2026-02-03
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900495
calendar record
- 2026-09-05 · attendee
- Parents' evening
- 2026-06-04 · attendee
- Sprint review
- 2026-04-18 · attendee
- GP — follow-up
Oskar Lindqvist
- 12-month interactions
- 81
- incoming / outgoing
- 41 / 40
- first / last contact
- 2025-11-19 → 2026-05-13
- meetings attended / organised
- 1 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900210
calendar record
- 2026-03-24 · attendee
- Sunday lunch
Halima Ceric
- 12-month interactions
- 139
- incoming / outgoing
- 70 / 69
- first / last contact
- 2025-12-15 → 2026-05-03
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900773
calendar record
- 2026-09-14 · attendee
- Nils — birthday
- 2026-04-25 · attendee
- Quiz night
- 2026-01-27 · attendee
- Nils — birthday
Peter Vance
- 12-month interactions
- 61
- incoming / outgoing
- 31 / 30
- first / last contact
- 2025-11-26 → 2026-05-22
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900700
calendar record
- 2026-09-01 · organiser
- Quiz night
- 2026-06-02 · attendee
- Parents' evening
- 2026-03-21 · attendee
- Mum's
Maya Smith
- 12-month interactions
- 151
- incoming / outgoing
- 77 / 74
- first / last contact
- 2025-10-21 → 2026-09-03
- meetings attended / organised
- 2 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 4
- resolves into
- cnContact, faFamilyCircle, phPerson, tel
reachable at · 1
- phone number
- +44 7700 900340
calendar record
- 2026-08-28 · organiser
- GP — follow-up
- 2026-01-19 · attendee
- Flat viewing
Milo Fenwick
- 12-month interactions
- 147
- incoming / outgoing
- 74 / 73
- first / last contact
- 2025-11-13 → 2026-06-16
- meetings attended / organised
- 1 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900223
calendar record
- 2026-05-22 · organiser
- Five-a-side
Agnes Okonjo
- 12-month interactions
- 140
- incoming / outgoing
- 71 / 69
- first / last contact
- 2025-10-21 → 2026-02-09
- meetings attended / organised
- 0 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900505
Dev Raman
- 12-month interactions
- 178
- incoming / outgoing
- 90 / 88
- first / last contact
- 2025-12-25 → 2026-01-20
- meetings attended / organised
- 4 / 0
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900125
- mail address
- [email protected]
calendar record
- 2026-03-18 · organiser
- Handover
- 2026-02-23 · attendee
- Parents' evening
- 2026-01-19 · organiser
- Quiz night
Clara Hovland
- 12-month interactions
- 120
- incoming / outgoing
- 61 / 59
- first / last contact
- 2025-12-10 → 2026-07-22
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900998
- mail address
- [email protected]
calendar record
- 2026-09-05 · attendee
- Flat viewing
- 2026-06-02 · organiser
- Five-a-side
- 2026-04-28 · organiser
- GP — follow-up
Tobias Reiss
- 12-month interactions
- 138
- incoming / outgoing
- 70 / 68
- first / last contact
- 2025-11-26 → 2026-01-25
- meetings attended / organised
- 6 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900251
calendar record
- 2026-04-06 · attendee
- Five-a-side
- 2026-03-20 · organiser
- Standup
- 2026-01-21 · attendee
- Five-a-side
Selma Duarte
- 12-month interactions
- 201
- incoming / outgoing
- 102 / 99
- first / last contact
- 2025-11-03 → 2026-02-06
- meetings attended / organised
- 6 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900466
calendar record
- 2026-09-28 · attendee
- Design crit
- 2026-09-15 · organiser
- Sunday lunch
- 2026-08-14 · attendee
- Physio
Arto Kekkonen
- 12-month interactions
- 209
- incoming / outgoing
- 106 / 103
- first / last contact
- 2025-10-05 → 2026-01-01
- meetings attended / organised
- 3 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900699
calendar record
- 2026-05-16 · attendee
- Flat viewing
- 2026-04-14 · organiser
- Mum's
- 2026-01-03 · attendee
- Parents' evening
Freya Ballard
- 12-month interactions
- 207
- incoming / outgoing
- 105 / 102
- first / last contact
- 2025-10-06 → 2026-05-07
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900917
calendar record
- 2026-08-13 · attendee
- Standup
- 2026-05-11 · attendee
- GP — follow-up
- 2026-02-09 · organiser
- Five-a-side
Nikhil Sundaram
- 12-month interactions
- 117
- incoming / outgoing
- 59 / 58
- first / last contact
- 2025-10-28 → 2026-06-13
- meetings attended / organised
- 1 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900209
- mail address
- [email protected]
calendar record
- 2026-08-26 · attendee
- Design crit
Marta Bielik
- 12-month interactions
- 235
- incoming / outgoing
- 119 / 116
- first / last contact
- 2025-11-06 → 2026-04-16
- meetings attended / organised
- 0 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 2
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900507
- mail address
- [email protected]
Owen Trevelyan
- 12-month interactions
- 79
- incoming / outgoing
- 40 / 39
- first / last contact
- 2025-12-26 → 2026-07-19
- meetings attended / organised
- 6 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900716
calendar record
- 2026-07-02 · attendee
- Design crit
- 2026-03-22 · attendee
- Design crit
- 2026-02-06 · attendee
- Nils — birthday
Ida Sorensen
- 12-month interactions
- 194
- incoming / outgoing
- 98 / 96
- first / last contact
- 2025-12-26 → 2026-05-14
- meetings attended / organised
- 1 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900326
- mail address
- [email protected]
calendar record
- 2026-04-25 · attendee
- Flat viewing
Rafael Pinto
- 12-month interactions
- 188
- incoming / outgoing
- 95 / 93
- first / last contact
- 2025-11-19 → 2026-07-14
- meetings attended / organised
- 0 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 6
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900286
- mail address
- [email protected]
Noor Haddad
- 12-month interactions
- 156
- incoming / outgoing
- 79 / 77
- first / last contact
- 2025-12-24 → 2026-01-15
- meetings attended / organised
- 2 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900442
calendar record
- 2026-06-18 · attendee
- Handover
- 2026-03-01 · organiser
- Sprint review
Callum Ferris
- 12-month interactions
- 179
- incoming / outgoing
- 91 / 88
- first / last contact
- 2025-12-02 → 2026-05-22
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 9
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900549
calendar record
- 2026-09-21 · attendee
- Dentist
- 2026-08-18 · attendee
- Flat viewing
- 2026-06-22 · organiser
- Parents' evening
Ingrid Saetre
- 12-month interactions
- 129
- incoming / outgoing
- 65 / 64
- first / last contact
- 2025-10-27 → 2026-07-10
- meetings attended / organised
- 6 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900119
calendar record
- 2026-08-14 · attendee
- Design crit
- 2026-06-11 · attendee
- Flat viewing
- 2026-05-22 · attendee
- Parents' evening
Hugo Marchetti
- 12-month interactions
- 101
- incoming / outgoing
- 51 / 50
- first / last contact
- 2025-10-28 → 2026-05-26
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900184
- mail address
- [email protected]
calendar record
- 2026-08-02 · attendee
- Five-a-side
- 2026-06-11 · organiser
- Parents' evening
- 2026-03-18 · organiser
- GP — follow-up
Alma Vicente
- 12-month interactions
- 146
- incoming / outgoing
- 74 / 72
- first / last contact
- 2025-10-06 → 2026-04-19
- meetings attended / organised
- 4 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900368
- mail address
- [email protected]
calendar record
- 2026-06-25 · organiser
- Parents' evening
- 2026-03-27 · attendee
- Sunday lunch
- 2026-02-19 · organiser
- Mum's
Ben Osei
- 12-month interactions
- 212
- incoming / outgoing
- 108 / 104
- first / last contact
- 2025-10-24 → 2026-08-21
- meetings attended / organised
- 3 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 9
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900196
calendar record
- 2026-08-26 · attendee
- Parents' evening
- 2026-08-14 · organiser
- Nils — birthday
- 2026-06-17 · organiser
- GP — follow-up
Sofia Almeida
- 12-month interactions
- 48
- incoming / outgoing
- 24 / 24
- first / last contact
- 2025-10-08 → 2026-04-17
- meetings attended / organised
- 6 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900496
calendar record
- 2026-07-08 · attendee
- Physio
- 2026-04-02 · attendee
- Quiz night
- 2026-03-02 · attendee
- Sprint review
Lars Ekdahl
- 12-month interactions
- 222
- incoming / outgoing
- 113 / 109
- first / last contact
- 2025-10-17 → 2026-03-16
- meetings attended / organised
- 6 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 2
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900627
- mail address
- [email protected]
calendar record
- 2026-08-12 · organiser
- Mum's
- 2026-07-19 · organiser
- Handover
- 2026-01-24 · attendee
- GP — follow-up
Mina Farouk
- 12-month interactions
- 92
- incoming / outgoing
- 46 / 46
- first / last contact
- 2025-10-20 → 2026-09-07
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900105
- mail address
- [email protected]
calendar record
- 2026-09-15 · organiser
- Sunday lunch
- 2026-07-11 · organiser
- Handover
- 2026-02-28 · attendee
- Design crit
Jasper Whitlow
- 12-month interactions
- 35
- incoming / outgoing
- 17 / 18
- first / last contact
- 2025-10-21 → 2026-04-28
- meetings attended / organised
- 5 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 6
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900220
calendar record
- 2026-06-21 · organiser
- Nils — birthday
- 2026-04-13 · attendee
- Nils — birthday
- 2026-02-09 · attendee
- Sprint review
Elena Costa
- 12-month interactions
- 160
- incoming / outgoing
- 81 / 79
- first / last contact
- 2025-11-05 → 2026-09-15
- meetings attended / organised
- 6 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900297
- mail address
- [email protected]
calendar record
- 2026-09-20 · attendee
- Five-a-side
- 2026-06-03 · organiser
- Nils — birthday
- 2026-04-21 · attendee
- Physio
Andrei Pavel
- 12-month interactions
- 154
- incoming / outgoing
- 78 / 76
- first / last contact
- 2025-12-05 → 2026-06-04
- meetings attended / organised
- 6 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900848
- mail address
- [email protected]
calendar record
- 2026-06-25 · attendee
- Design crit
- 2026-03-23 · attendee
- Standup
- 2026-01-11 · attendee
- Sunday lunch
Tess Rowntree
- 12-month interactions
- 199
- incoming / outgoing
- 101 / 98
- first / last contact
- 2025-11-11 → 2026-06-28
- meetings attended / organised
- 0 / 0
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900633
- mail address
- [email protected]
Karim Belkacem
- 12-month interactions
- 68
- incoming / outgoing
- 34 / 34
- first / last contact
- 2025-12-13 → 2026-03-06
- meetings attended / organised
- 3 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900841
calendar record
- 2026-09-23 · attendee
- Dentist
- 2026-08-03 · attendee
- Dentist
- 2026-02-04 · attendee
- Nils — birthday
Verity Shaw
- 12-month interactions
- 88
- incoming / outgoing
- 44 / 44
- first / last contact
- 2025-11-06 → 2026-01-02
- meetings attended / organised
- 3 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900256
- mail address
- [email protected]
calendar record
- 2026-04-22 · attendee
- Dentist
- 2026-04-13 · attendee
- Design crit
- 2026-04-03 · attendee
- Dentist
Nils Ahlberg
- 12-month interactions
- 236
- incoming / outgoing
- 120 / 116
- first / last contact
- 2025-12-20 → 2026-02-22
- meetings attended / organised
- 6 / 0
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 9
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900231
- mail address
- [email protected]
calendar record
- 2026-09-18 · attendee
- Dentist
- 2026-08-26 · organiser
- Sprint review
- 2026-04-04 · attendee
- Dentist
Leo Smith
- 12-month interactions
- 11
- incoming / outgoing
- 5 / 6
- first / last contact
- 2025-11-11 → 2026-06-26
- meetings attended / organised
- 2 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 5
- resolves into
- cnContact, faFamilyCircle, phPerson, tel
reachable at · 2
- phone number
- +44 7700 900747
- mail address
- [email protected]
calendar record
- 2026-09-03 · attendee
- Flat viewing
- 2026-07-09 · organiser
- Design crit
Otto Freeman
- 12-month interactions
- 52
- incoming / outgoing
- 26 / 26
- first / last contact
- 2025-10-14 → 2026-08-01
- meetings attended / organised
- 1 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900239
calendar record
- 2026-03-17 · organiser
- GP — follow-up
Amara Diallo
- 12-month interactions
- 136
- incoming / outgoing
- 69 / 67
- first / last contact
- 2025-12-06 → 2026-02-15
- meetings attended / organised
- 2 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900858
- mail address
- [email protected]
calendar record
- 2026-09-10 · attendee
- Dentist
- 2026-02-26 · organiser
- Dentist
Gil Rosenthal
- 12-month interactions
- 185
- incoming / outgoing
- 94 / 91
- first / last contact
- 2025-12-14 → 2026-08-02
- meetings attended / organised
- 2 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 6
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900712
- mail address
- [email protected]
calendar record
- 2026-04-05 · attendee
- Flat viewing
- 2026-01-25 · attendee
- Dentist
Fenna de Vries
- 12-month interactions
- 116
- incoming / outgoing
- 59 / 57
- first / last contact
- 2025-10-17 → 2026-07-01
- meetings attended / organised
- 4 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900254
calendar record
- 2026-08-20 · attendee
- Flat viewing
- 2026-07-09 · attendee
- Nils — birthday
- 2026-05-19 · attendee
- Dentist
Rory Macallan
- 12-month interactions
- 172
- incoming / outgoing
- 87 / 85
- first / last contact
- 2025-12-24 → 2026-02-09
- meetings attended / organised
- 4 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900973
calendar record
- 2026-09-23 · attendee
- Mum's
- 2026-03-12 · attendee
- Mum's
- 2026-01-08 · attendee
- Standup
Sanne Bakker
- 12-month interactions
- 36
- incoming / outgoing
- 18 / 18
- first / last contact
- 2025-11-13 → 2026-04-08
- meetings attended / organised
- 2 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 3
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900679
calendar record
- 2026-05-05 · organiser
- Nils — birthday
- 2026-02-08 · organiser
- Five-a-side
Luca Ferretti
- 12-month interactions
- 174
- incoming / outgoing
- 88 / 86
- first / last contact
- 2025-12-18 → 2026-01-12
- meetings attended / organised
- 1 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900200
- mail address
- [email protected]
calendar record
- 2026-01-06 · organiser
- Sunday lunch
Esme Carrington
- 12-month interactions
- 136
- incoming / outgoing
- 69 / 67
- first / last contact
- 2025-10-12 → 2026-02-27
- meetings attended / organised
- 6 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900970
calendar record
- 2026-07-03 · organiser
- Physio
- 2026-01-21 · attendee
- Design crit
- 2026-01-09 · attendee
- Standup
Yusuf Demir
- 12-month interactions
- 118
- incoming / outgoing
- 60 / 58
- first / last contact
- 2025-12-21 → 2026-04-19
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 9
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900364
- mail address
- [email protected]
calendar record
- 2026-08-01 · organiser
- GP — follow-up
- 2026-05-13 · organiser
- Mum's
- 2026-01-08 · attendee
- Standup
Britt Halvorsen
- 12-month interactions
- 106
- incoming / outgoing
- 54 / 52
- first / last contact
- 2025-12-16 → 2026-06-13
- meetings attended / organised
- 2 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 2
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900633
calendar record
- 2026-06-03 · attendee
- Nils — birthday
- 2026-03-25 · organiser
- Flat viewing
Nora Vasquez
- 12-month interactions
- 211
- incoming / outgoing
- 107 / 104
- first / last contact
- 2025-11-02 → 2026-03-04
- meetings attended / organised
- 3 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900650
calendar record
- 2026-09-22 · attendee
- Handover
- 2026-06-16 · attendee
- Flat viewing
- 2026-01-11 · attendee
- Physio
Emil Krahn
- 12-month interactions
- 16
- incoming / outgoing
- 8 / 8
- first / last contact
- 2025-12-24 → 2026-04-16
- meetings attended / organised
- 4 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900777
- mail address
- [email protected]
calendar record
- 2026-08-07 · attendee
- Parents' evening
- 2026-07-02 · attendee
- GP — follow-up
- 2026-05-10 · attendee
- Nils — birthday
Dahlia Mensah
- 12-month interactions
- 141
- incoming / outgoing
- 71 / 70
- first / last contact
- 2025-10-06 → 2026-03-15
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 5
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900720
- mail address
- [email protected]
calendar record
- 2026-09-01 · attendee
- Standup
- 2026-06-06 · organiser
- Design crit
- 2026-01-05 · attendee
- Physio
Ward Pelletier
- 12-month interactions
- 49
- incoming / outgoing
- 24 / 25
- first / last contact
- 2025-10-21 → 2026-07-16
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 1
- graph facts
- 7
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900723
- mail address
- [email protected]
calendar record
- 2026-09-24 · attendee
- Sprint review
- 2026-07-27 · attendee
- GP — follow-up
- 2026-01-03 · organiser
- Standup
Sunniva Aas
- 12-month interactions
- 112
- incoming / outgoing
- 57 / 55
- first / last contact
- 2025-12-25 → 2026-01-19
- meetings attended / organised
- 3 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 9
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900775
calendar record
- 2026-05-01 · organiser
- Dentist
- 2026-03-06 · attendee
- Sprint review
- 2026-03-02 · attendee
- Parents' evening
Joon Park
- 12-month interactions
- 42
- incoming / outgoing
- 21 / 21
- first / last contact
- 2025-11-19 → 2026-04-12
- meetings attended / organised
- 4 / 0
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 1
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900381
- mail address
- [email protected]
calendar record
- 2026-03-27 · attendee
- Mum's
- 2026-03-10 · organiser
- Dentist
- 2026-02-02 · attendee
- Sunday lunch
Cleo Maddox
- 12-month interactions
- 125
- incoming / outgoing
- 63 / 62
- first / last contact
- 2025-12-17 → 2026-03-02
- meetings attended / organised
- 1 / 0
- invitations sent
- 0
- phones / emails
- 1 / 1
- graph facts
- 6
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900527
- mail address
- [email protected]
calendar record
- 2026-03-16 · organiser
- Dentist
Hana Petrova
- 12-month interactions
- 49
- incoming / outgoing
- 24 / 25
- first / last contact
- 2025-10-24 → 2026-04-21
- meetings attended / organised
- 5 / 0
- invitations sent
- 1
- phones / emails
- 1 / 1
- graph facts
- 2
- resolves into
- cnContact, tel
reachable at · 2
- phone number
- +44 7700 900792
- mail address
- [email protected]
calendar record
- 2026-07-10 · attendee
- Dentist
- 2026-03-12 · attendee
- GP — follow-up
- 2026-03-10 · attendee
- Handover
Bram Jansen
- 12-month interactions
- 169
- incoming / outgoing
- 86 / 83
- first / last contact
- 2025-10-08 → 2026-03-15
- meetings attended / organised
- 1 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 4
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900962
calendar record
- 2026-03-24 · attendee
- Sunday lunch
Tiernan Walsh
- 12-month interactions
- 231
- incoming / outgoing
- 117 / 114
- first / last contact
- 2025-10-22 → 2026-01-18
- meetings attended / organised
- 1 / 0
- invitations sent
- 0
- phones / emails
- 1 / 0
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900125
calendar record
- 2026-04-16 · attendee
- Sprint review
Zofia Mazur
- 12-month interactions
- 166
- incoming / outgoing
- 84 / 82
- first / last contact
- 2025-11-22 → 2026-07-09
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 8
- resolves into
- cnContact, tel
reachable at · 1
- phone number
- +44 7700 900783
calendar record
- 2026-06-06 · attendee
- Dentist
- 2026-05-12 · attendee
- Design crit
- 2026-04-25 · organiser
- Handover
(unnamed)
- 12-month interactions
- 203
- incoming / outgoing
- 103 / 100
- first / last contact
- 2025-10-07 → 2026-07-27
- meetings attended / organised
- 4 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 2
- resolves into
- tel
reachable at · 1
- phone number
- +44 7700 900613
calendar record
- 2026-08-01 · organiser
- Sunday lunch
- 2026-03-15 · attendee
- Physio
- 2026-02-11 · attendee
- Nils — birthday
(unnamed)
- 12-month interactions
- 128
- incoming / outgoing
- 65 / 63
- first / last contact
- 2025-11-27 → 2026-05-21
- meetings attended / organised
- 2 / 0
- invitations sent
- 1
- phones / emails
- 1 / 0
- graph facts
- 6
- resolves into
- tel
reachable at · 1
- phone number
- +44 7700 900705
calendar record
- 2026-03-25 · attendee
- Quiz night
- 2026-01-15 · attendee
- Handover
(unnamed)
- 12-month interactions
- 18
- incoming / outgoing
- 9 / 9
- first / last contact
- 2025-11-27 → 2026-01-28
- meetings attended / organised
- 3 / 0
- invitations sent
- 2
- phones / emails
- 1 / 0
- graph facts
- 1
- resolves into
- tel
reachable at · 1
- phone number
- +44 7700 900336
calendar record
- 2026-07-25 · attendee
- GP — follow-up
- 2026-02-25 · organiser
- Five-a-side
- 2026-01-20 · organiser
- School run
Quill household
- class
- group of humans
- members
- 4
- named
- Mara Quill, Tomas Quill, Nils Quill, Ines Quill
- confidence
- 0.880
- asserted
- 2026-03-09
- ingest sources
- Contacts, iCloud Family
Halden Labs
- class
- organisation
- people employed here
- 9
Bell & Marrow
- class
- organisation
- people employed here
- 5
Verdant Coffee Co.
- class
- organisation
- people employed here
- 3
Northwind Clinic
- class
- organisation
- people employed here
- 2
Quill family
- message rows
- 3,622
- incoming / outgoing
- 2,100 / 1,522
- distinct handles seen
- 5
- apps
- 3
- first / last
- 2025-10-05 → 2026-09-01
apps carrying this chat
- FaceTime
- 1,690
- Signal
- 1,208
- 724
Halden · design
- message rows
- 2,414
- incoming / outgoing
- 1,400 / 1,014
- distinct handles seen
- 7
- apps
- 2
- first / last
- 2025-09-08 → 2026-09-01
apps carrying this chat
- FaceTime
- 1,810
- 604
Five-a-side
- message rows
- 3,290
- incoming / outgoing
- 1,908 / 1,382
- distinct handles seen
- 8
- apps
- 3
- first / last
- 2025-10-14 → 2026-09-09
apps carrying this chat
- Signal
- 1,828
- Messages
- 731
- 731
Flat 3B
- message rows
- 4,006
- incoming / outgoing
- 2,323 / 1,683
- distinct handles seen
- 4
- apps
- 3
- first / last
- 2025-11-15 → 2026-09-04
apps carrying this chat
- Signal
- 1,670
- 1,669
- FaceTime
- 667
Thursday quiz
- message rows
- 1,043
- incoming / outgoing
- 604 / 439
- distinct handles seen
- 6
- apps
- 1
- first / last
- 2025-10-20 → 2026-09-02
apps carrying this chat
- Messages
- 1,043
(a chat kept by its handles)
- message rows
- 4,021
- incoming / outgoing
- 2,332 / 1,689
- distinct handles seen
- 3
- apps
- 1
- first / last
- 2025-09-23 → 2026-09-11
apps carrying this chat
- Messages
- 4,021
Click a node and the record under the graph is what the store holds on it (the rows, not a summary of them). The sixty-one faint ones are the part nobody expects: people the store knows and has not placed, in it because they wrote to you once, or because they were on somebody else's invitation.
The most important point, though, is that this is not only about you (the person using the Mac). The people around you are in it too: your family, your friends, "anyone" you have talked to through your device. None of them was asked, and the store links them to you and, through the events and groups they share, to each other. A relationship is intelligence one level above the rows it was inferred from. For instance, by correlating across my own store, I (well, an LLM working for me) could easily work out the following:
- That there is a child in the household, and roughly how old. The family-member types and a family circle give the household. The scorecard's child and son/daughter columns give the child's place in it. Beside it sits an age, copied from Family Sharing; and dates of birth in the store can carry the system's own word imputed, though what the system means by it is not clear to us.
- Which daycare the child goes to, and both of the numbers that reach it. Copied off contact cards. Note what is not there: the calendar has no school-run event, so the store holds the institution and its lines but not the hour the child is dropped off. That is still enough to call a parent from a number their phone already trusts.
- Where the family will be, on which days, between which hours. One calendar event, a place, two stored time slots and a title that names the family (so the guest list is in the string even where the attendee rows are empty).
- Which of the family will be there. The scorecard names the ones scored as family, a household entity holds them together, and a Family Sharing circle says which of them are in the same family group.
- And, in the same file, what is installed on the machine, down to the password manager.
It is easy to see how this could be weaponized if this single point of failure for your privacy ends up in the wrong hands. We play that (hypothetical) scenario out in a second write-up. The good thing is that this knowledge is meant to stay local on your machine, protected by the Full Disk Access permission; although it can be consumed by other services (but it is not entirely clear to us how and what can be accessed).
The reality is that the amount of information in this store is really something else: every time we dig into what the daemons infer, and how, a few new lines of investigation open up. Whatever you would rather no one knew about you or your family may well be in there somewhere, and we think you have the right to know whether it is. What you get instead: no documentation, no way to inspect the store and no general way to correct an inference that is wrong.
So we give you two tools. The first is iKnow, a local dashboard for browsing your own graph without anything leaving your Mac (the next section walks through it). The second is for going deeper. The iKnow repository ships a manual for your own agent that tells it where the databases are and how to read them, so it can go looking for whatever you are after. (Please point a self-hosted model at it, not a cloud one.)
iKnow
We designed iKnow as a web dashboard implemented in the Python standard library; no npm and no CDN.
It is meant to be run directly on your Mac, where the databases are stored. When executed, it binds 127.0.0.1, locates the databases in your file system (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, over 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, only partially, on 27.0.1.
iKnow has a dozen pages.
Start here
What your Mac knows. The landing page: the graph of people around you. Below it come the faces in your photos, your family, your handles, your correspondents and where you will be next.
Its graph is the same household as the one at the top of this post, this time drawn by the tool's own renderer:
The first screen. The white node marked (Me) is the owner of the Mac; the rest are the people, employers and group chats the store links to it, colored by what it says each one is. Orange is family, as scored. Blue is a closeness score above the cut. The faded names around the edges are people the store knows and has not placed.
Nothing here is summarized that is not in the record: every node is a row, and clicking one shows you the row (which is what the graph at the top of this post does too).
The graph is the overview, and an overview is easy to shrug at. The pages behind it are not.
Social graph. Who the store links to whom through shared meetings, group chats and a closeness score. Each circle opens to its members and to the evidence behind it.
What it concluded
Kinship scorecard. The family bindings inferred by the daemon.
Its card on the landing page is cut down to the people it names:
Six people, six relationships, and a subtitle saying nobody typed any of it. That holds for the scores; some of what they are computed from, you did type (a relation on a contact card, an emergency contact, Family Sharing). A mother, a father and a daughter at 0.960, which is as high as these columns go; a brother, a son and a sister at 0.500.
Below that is the part I find hardest to argue with. Nine separate checks (the partner column, the composite score, the household group entity, the Family Sharing token, the iCloud Family flag, top twelve-month contact, a Photos face cluster, a Contacts record, a reachable handle), and the card counts how many of them land on the same person. Eight of nine on the mother; seven on the father, and seven on Priya Sandoval, the partner, who is not in the list above: iKnow lists the relationships that roll up into another column (mother and father into parent), and partner rolls up into nothing. The join found the partner anyway.
The card is a summary of one table, and iKnow draws the whole table too:
Sorted by familyAndFriends, the broadest of the scores. The seven at the top each light up their own relationship and the column it rolls up into (mother and father into parent, sister and brother into sibling, son and daughter into child), and the partner is also a colleague. Further down are the friends and the rest of the office. Under them, almost everyone else is the same two cells: one repeated value on family and another on familyAndFriends, which is what the classifier writes when it has nothing to say. Two columns (alumni and unknown) are never used at all.
The scores in these two shots are invented, and more generous than the real thing. On the Mac we took apart, only mother reached the top of the ladder; the few others it scored at all got one small vote on every family label at once, father and brother alike. What the fixture keeps is the table's grain: it only ever writes a handful of values (0.125, 0.25, 0.5 and 0.96), and most people sit on one default.
The face index. A face cluster for everyone in your photos.
Its co-occurrence graph does not use a single contact, message or calendar entry. It is built from your photographs alone:
Two faces are linked when they appear in the same photograph, and that is the only input: 8,904 clustered faces over the 1,643 photographs that hold more than one. The labels are fragments of each cluster's local identifier, because there are no names to show. The owner is the hub. The knot on the left is the family, the group at the bottom right is work, and the two never share a frame.
Each node wears its cluster's key face, read out of the photo library and blurred by iKnow's own switch for sharing the screen. Under the blur there is nobody: the fixture has no photo library, so every face is a synthetic portrait painted for it.
This is the page's own honest point: the graph points at the face clusters and can name almost 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 meet is all there without a single name, and whoever knows the household can put the names back on in a second.
Guessed or given. What you typed in and what the Mac worked out for itself live in the same table. A confidence score is the only thing separating them.
What it recorded
A year of contact. Who you talked to, when, and not a word of message text (and it does not need any to tell when you are asleep).
Its card on the landing page is the one that gets the reaction, and it contains no inference at all.
A year of contact, per person, split incoming and outgoing, with call counts and a last-seen date, across five messaging apps — and, exactly as the subtitle says, not one word of message text. None of this is content. It is all metadata, and it is enough.
The last line is the one to read twice: the hours it can read as sleep.
iKnow draws that line too, from the same log folded onto a single week:
Every cell counts the messages and calls that fell in one hour of one weekday, over the year. The working week is in there, and so are the evenings and the late weekend mornings; and so is the pale band from one to seven, every night. Nobody stored a sleep schedule. The quietest six-hour stretch falls out of the timestamps for free.
That is the general shape of this store: almost nothing in it had to be collected, because almost everything in it is a consequence of something that was.
The calendar. The one layer that knows where you will be: the hour, the room, the attendees and the dial-in.
What you withdrew. Withdrawing a fact does not remove it. The row moves to an expired table and keeps its confidence and provenance.
The machinery
The store. The file itself: what it models, and two real rows expanded into everything they touch.
Device fingerprint. Every app installed on the Mac is written down in plain text, next to a token that is an unsalted SHA-256 of that same app identifier, so the page recomputes it in your browser and you can watch it match.
Who else reads it. The graph is the first copy, not the only one. This page maps the views that subscribe to it, the databases they publish into, the tables that repeat the same facts, the streams coming in from hardware paired with 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 graph withdrew most of the rows it had built from Contacts, Calendar, Siri Suggestions, Family Sharing and the app catalog, and rebuilt them over the following day. Some pages of iKnow may not work fully on macOS 27 yet.
But let's go deeper:
How to cite this game
BibTeX · click to select@misc{8rank:apple-intelligence-personal-knowledge-graph,
author = {Dario Pasquini and Micha{\l} Bazyli},
title = {{Anatomy of Apple's Personal Knowledge Graph}},
year = {2026},
month = oct,
howpublished = {\url{https://8rank.ai/game/apple-intelligence-personal-knowledge-graph}},
}