Who Chui knows, how it learns about them, and what can be corrected from a conversation.
A person appears on the account once somebody has been named in at least one meeting. The transcript itself only ever says speaker_0, speaker_1 — naming that voice in the app is what creates the person and puts their name into every turn they speak.
Three things, and get_person() returns all three:
That is the fast answer to "what have I discussed with X", "who is X" and "when did I last speak to X" — a fraction of the cost of reading the transcripts.
list_people() is the roster: everyone on the account, how many meetings each was in, and when the most recent was. It is also how a name becomes an id.
update_person() is the one tool here that CORRECTS what Chui knows about a person — the two below change how many people there are, and everything else that writes is a setting (Settings, changed by asking). It corrects a person's name, how you know them, where they work, their role, or a free-text note of your own. Use it when somebody says something new about a person — not to record an inference from a transcript, which the automatic fold already does.
It is asked about first, because what it replaces is not kept anywhere: prepare_update_person() reads back each field as it is and as it would be, and nothing has happened at that point; only after you say yes is the correction written, exactly as it was shown. If the person was changed in the meantime, nothing is written and it has to ask again.
The note is yours: Chui never overwrites it, so a correction that has to survive future meetings belongs there. A correction to it replaces the whole note, so to add a line, the new text has to carry the old one.
Renaming rewrites that person in every meeting they appear in, and each of those meetings' summaries is then written again around the new name — a minute or two later, and a batch at a time over several minutes for somebody who is in hundreds of meetings. That happens whether the rename was typed to an assistant or done in the app. If the new name already belongs to somebody else on the account, Chui refuses rather than quietly folding the two together.
One human spelled two ways — «Maria Ivanova» and «Maria I.» — is one entry too many, and merging them moves every meeting onto the surviving name while the other name disappears from the list. The name that goes is kept as another spelling the survivor answers to, so asking about it still finds them. In the app it is Merge on the People screen.
It can be taken back for thirty days, exactly as it was, with Split on the person. After that it is permanent. Only the most recent merge into somebody is on offer, and taking it back spends it.
An assistant can do both, and both are asked about first — merging destroys an entry, and a model reading names off a transcript must not be able to decide two humans are one on its own. prepare_merge_people() changes nothing and answers with both entries by name, how many meetings each is in and when each was last in one; only after you say yes does merge_people() do it, and it takes nothing but the answer to that question, so it cannot be aimed at a pair you were not shown. prepare_unmerge_people() and unmerge_people() are the same two steps for taking a merge back — it names who would come back and how many meetings go with them before anything moves.
Reading the two back is the part that matters, and not as a formality: the mistake this guards against is the two the wrong way round, and «Ivan P. is the same person as Ivan Petrov?» reads perfectly while describing the opposite act.
There is still no way to delete a person from an assistant, or from the app: a person disappears by being merged into somebody else, or with the meetings they were named in.