From pressing stop to a written summary: the stages, the notes, and what can go wrong.
Pressing stop ends the recording and starts everything else. The audio goes up to Chui's servers, is transcribed, and is summarised. On a phone the recording is already safe on disk before any of that: if there is no connection it waits, and it goes up when there is one. Nothing is lost to a bad network and there is nothing to press.
On a Mac or Windows, a recording is not lost if Chui closed while it was still stopping: the next time Chui opens it finds that recording and uploads it into the meeting you started, notes included (since build 236).
A meeting moves through them and the app shows where it is:
A notification says when a meeting's text and summary are ready. It carries no title and no content.
Chui is not a transcript product. The intended use is to jot two lines during the meeting — a name, a number, what you promised — and let Chui merge them with what was actually said. The summary is written from both; the typed lines steer it rather than appearing in it verbatim. Notes can also be written or fixed after the meeting.
list_meetings() gives the roster: id, title, date, duration, status, and nothing else. get_meeting() gives one meeting's summary, its notes, its duration and how many speakers were detected — usually the right place to stop. The transcript is a separate, much more expensive read: see Finding what was said.
The meeting you are in is in that roster too, marked in_progress, so an assistant asked «what am I in the middle of?» can answer it. There is no transcript and no summary until the recording lands — Chui transcribes a meeting after it ends — and no final length either, so what comes back instead is how long it has been going, when Chui last heard sound from the device, and the notes being typed into it as they are typed. An assistant can read those notes, add to them, and say the meeting is unfinished; it should not report it as an empty or failed meeting, which is what those missing pieces look like from outside.
It means «not finished», not «happening now», and the difference is worth knowing. Chui learns a recording ended when the device says so, and three quite different things look identical from the server: a conversation being spoken; one that stopped a minute ago whose audio is still going up; and a phone that died mid-meeting and will never say anything again. So an assistant is told not to claim the microphone is open.
What it gets instead is one narrow fact. While a meeting is being recorded the phone sends a stretch of sound up every ninety seconds, so Chui knows how long ago the newest stretch of that recording arrived — and it knows nothing beyond that. A long gap means no new audio has arrived for it: the recording may be paused, the phone may be offline, or the meeting may have ended without Chui being told. A short gap does not prove it is live either, because a phone catching up on an older recording over a new connection looks just as recent. Chui hands the number over rather than naming a cause, and where it could not check at all it says nothing instead of guessing.
Chui titles a meeting itself, usually from the calendar invite or from what was said, so the name is often a guess. It can be corrected in the app or by saying so to an assistant — rename_meeting(). The notes typed during the meeting can be corrected by an assistant too, and that is asked about first, because the new text replaces all of them at once and the old ones are not kept anywhere. prepare_update_meeting() reads back the notes as they are and as they would be, and nothing has happened at that point; only after you say yes does update_meeting() write them, and it writes exactly the text you were shown. An assistant should send the whole text with the change in it, or the rest is gone. If the notes changed in the meantime — on another device, say — nothing is written and it has to ask again.
The summary can be corrected the same way — a wrong name, a wrong number, a decision written down backwards. prepare_update_summary() reads back the summary as it is and as it would be, nothing has happened at that point, and only after you say yes does update_summary() write exactly the text you were shown, replacing all of it. The transcript cannot be edited — not by an assistant and not in the app; it is what was said.
A summary corrected by hand is an ordinary summary afterwards, and nothing protects it: naming a speaker, changing the notes, merging or splitting a person in the meeting, renaming one of them, or asking for a fresh summary makes Chui write the summary afresh from the transcript and the notes, and the correction is replaced. So when the mistake is who was speaking or what a note said, fix that instead — the summary follows by itself a minute or two later.
A weekly stand-up is one meeting happening again, and Chui knows which recordings are occurrences of it — from the calendar series they belong to, which is stored on the recording rather than looked up. get_series() gives the earlier occurrences of one meeting, newest first, so «what did we agree last week?» and «what was still open from the one before?» are one call and then a get_meeting() rather than a search over titles that may not resemble each other. A meeting recorded without a calendar entry belongs to no series, and the answer says so rather than coming back empty.
A meeting can come back marked cut short or partial. That is Chui saying the recording does not cover the whole conversation — the app was suspended, or the recording was rebuilt after a crash and the end of it never reached disk. Summarise what is there as a fragment; do not describe it as the whole meeting. A meeting has no such mark when nothing went wrong, and an imported file never has one, because there is no meeting clock to compare it against.
get_coverage() asks that question directly and answers it in one sentence: whether the recording covers the meeting, how long the file is, how long the meeting ran, and the share of it that reached the recording. Nothing in a transcript shows this — twenty minutes of a ninety-minute meeting reads exactly like the whole of a twenty-minute one — so it is worth asking before telling somebody what was agreed. It also distinguishes «nobody measured this» from «this is fine», which are not the same answer.
The summary is those notes folded into what was said, so when either changes Chui writes it again by itself a minute or two later — naming a speaker, or fixing a note, is usually all it takes. In the app, "Write the summary again" shows a quiet line while it rewrites (since build 248). An assistant can ask for it outright, and it is the one thing it can do here that costs real money on every call: a language-model pass over the whole meeting, and for a meeting that never transcribed, a transcription pass over the audio as well. It also throws away the summary that is there. So it is asked about first: prepare_resummarise_meeting() reads back the summary that would go and says which of the two runs a yes would buy, and nothing is spent; only after you say yes does resummarise_meeting() start the run. If Chui has already written the summary again by itself in the meantime, it says so and buys nothing. A meeting Chui heard no words in cannot be summarised again and says so rather than paying to listen to the silence twice.
Nearly every summary comes in the same sections: in brief, main topics, decisions, next steps, open questions. When a meeting plainly is an interview, a stand-up, a sales call or a lesson, Chui may write it in that kind's own shape instead — questions and answers, each person and what is blocking them, the customer's needs and objections, what was explained and the homework. Chui decides from the conversation, a label on the meeting only hints, and when in doubt it uses the usual sections. Every one of these shapes still ends with next steps and open questions.
If it got the kind of recording wrong, change it. At the end of a summary a button names what kind of recording Chui took it for, such as a memo, an interview or a meeting (since build 248). Pick another kind and the summary is written again in that shape, with the old one dimmed until the new one arrives; the same button can also hand the choice back to Chui. By typing, passing shape to prepare_resummarise_meeting() writes the summary again in the shape you name, and keeps it for that meeting; auto gives the choice back to Chui.
A short note, for one voice (since build 235). A recording with only one voice in it, such as a thought you speak to yourself, can come back as a short note instead: the thought itself, tidied up, with no headings or speaker names, and marked with a lightbulb in your meetings. Since build 236 that holds for a long one too, running for hours, which could before be read as two voices and treated as a meeting.
A shape of your own, taught once. If a meeting of yours has its own headings — the weekly review is always numbers, risks, asks — tell an assistant once and Chui writes that meeting that way from then on. It is taught to a recurring meeting with set_series_shape() (from any one of its meetings; every occurrence after it follows, and get_series() reads it back), or to a label with the summary_shape of update_label() (every meeting wearing the label follows, and list_labels() shows it). A sentence or a list of headings is enough. Chui still opens with its short «in brief» and ends with next steps and open questions, which the Briefing before your next meeting reads. A recurring meeting's shape wins over a label's; two labels teaching two different shapes leave the choice to Chui; a short voice note stays a sentence or two. Summaries already written stay as they are until summarised again. An empty shape gives the choice back to Chui. It is part of the paid plan, and there is no button for it in the app — it is asked for in words.
A transcript comes back as speaker_0, speaker_1 … — the engine tells the voices apart but cannot name them. Naming one in the app, or through an assistant with name_speaker(), puts the name in place of the label everywhere that meeting is read, adds the person to the roster so the next meeting offers them, and rewrites the summary around the name.
When you name a voice in the app, the list starts with «Me», with your account's name beside it: one tap puts your name on that voice exactly as your account spells it (since build 249).
Recognising a voice from one meeting to the next happens only for people who switched on «Own-voice recognition» for themselves (Settings, changed by asking). Their voice arrives already named in their own meetings and in their company's meetings they were invited to; every other voice starts at speaker_0, speaker_1 … and is named by hand. A name Chui put on a voice is changed in one tap, like any other.
A name Chui worked out from the conversation and nobody has confirmed yet shows as an ordinary name that is only a guess. Tapping it offers “Yes, this is …”, which makes it permanent, and “Not …”, which takes it off. Through an assistant, get_meeting() lists such names under tentative_speaker_names; naming the voice with the same name confirms it, and prepare_reject_speaker_name() then reject_speaker_name() takes it off.
Each failure says which one it is and what can be done: the file was cut off before it was saved; the audio never arrived; the format cannot be read; the transcription ran out of time (the recording is safe — try again later); the summary was not written, but the transcript is there. Most of them offer a retry.
When a summary cannot be written because of a fault on Chui's side, Chui keeps trying by itself every hour for about a day (since build 230), so a problem overnight does not leave the meeting waiting for "Write the summary again".
Deleting a meeting destroys the recording, the transcript, the summary and the notes, everywhere they exist, for good — and with them everything Chui had learned about the people in it from that conversation. Any public link to it stops working. Chui remembers that the meeting was deleted, so a phone still holding the audio throws it away instead of uploading it again later. Nothing brings any of it back.
In the app it is Delete meeting at the foot of the meeting, or a swipe on the row, and either way Chui asks first in a sheet that names the meeting.
An assistant can do it too, and it is asked about the same way — in two steps, because this is one of the things that cannot be undone. prepare_delete_meeting() reads back which meeting it is: what it is called, when it was, how long it ran, whether you typed notes in it, and whether anybody outside Chui is reading it through a link. Nothing has happened at that point. Only after you say yes does delete_meeting() destroy it, and it takes nothing but the answer to that question — there is no way to aim it at a meeting you were not just shown. A colleague who can open a meeting somebody shared with the team cannot delete it; only the person who recorded it can.
You stopped recording at the break and started again afterwards, or the recording died and Chui filed the rest of the meeting on its own. Either way one conversation is sitting in your list as two rows, with two summaries and two sets of speakers.
Ask an assistant to join them. prepare_merge_meetings() reads both back — which one survives, how long each is, how long the gap between them was, and how long the joined recording would be — and nothing has happened at that point. Only after you say yes does merge_meetings() do it, and it takes nothing but the answer to that question.
What it does: the two recordings are put end to end, in the order they were made, into the earlier meeting, which keeps its id and its date. The later meeting is then deleted. Chui reads the joined recording again from the beginning, so the meeting ends up with one transcript, one summary and one set of speakers covering the whole conversation — that takes a few minutes. Notes typed in either meeting are kept, in order, with the second half's moved along the clock.
No audio is ever lost by it. Every second of both recordings is inside the surviving meeting, measured, before the other row is touched. What does not come back is the words: both summaries and both transcripts are replaced, corrections made by hand to either included, and nothing puts the two rows back. There is no undo.
Two more things worth knowing before you ask for it. If the two halves are seen by different people — one shared with your company, one kept to yourself — the joined meeting is seen by whoever could see the more private of the two, so nothing you kept to yourself is put in front of anybody by being joined. And if either half was linked to a calendar entry, the joined meeting keeps that link, so it stays in its own series.
Three things Chui refuses, and it says so before you decide rather than after.
It will not join two recordings it cannot honestly put together — two halves recorded at different settings, or one made on a phone and one on a Mac — rather than produce a file that plays as the wrong meeting. It will not join two rows that started at the same moment and ran the same length: that is one conversation that reached Chui twice, not two halves of one, and joining it would make a meeting that says everything twice. Delete one of those instead.
And it cannot yet join anything recorded in a browser tab. A recording made in the browser writes its index as it goes rather than in one place at the end, and Chui has no way to put two of those together. The recordings themselves are fine and play normally; it is only joining them Chui cannot do. Two halves of a meeting you want joined have to have been recorded on a phone, a Mac or a Windows PC.
And on a free account, if the meeting that would survive has not been read yet — one that went wrong, say — and the month's ten meetings are already used, Chui refuses: reading the joined recording would be the first read, it would be held for the month, and both halves would be locked at once. A paid account has no such limit; otherwise they can be joined next month. What an account costs is what a free account is free of.
There is no button for this anywhere in Chui. It is a repair you notice while reading the two meetings, which is where asking for it belongs.
The other way round: you left the phone on the table, or the laptop open, and three conversations went into one recording. Chui filed one meeting with one summary, which is about all of them and therefore about none of them.
In builds 238 and 239 a phone recording split itself into separate meetings at each long silence as it went; since build 240 «New recording» on a phone again makes one recording that runs until «Stop» (Recording a meeting).
Chui usually notices by itself. After a recording of half an hour or more is read, Chui asks whether it is really several meetings — mainly by who is talking: where some people stop for good and others start, that is where one meeting ends. It checks each such place against what is being talked about, your calendar and any pause, and only when those agree does the meeting screen show a card: “Looks like 3 separate meetings”, each piece with its time, a title and the people in it. Untick a piece to keep it joined to its neighbour; “Split into N” cuts it, and “It’s one meeting” makes the card go away for good.
Or ask where it breaks. find_split_points() answers with Chui's own suggestion — the same pieces the card shows, with the names — and also lists the long silences: how far into the recording each is, how long the quiet lasted, the last thing said before it and the first thing said after. It changes nothing you can see. If you say it is one meeting, keep_as_one_meeting() is the typed “It’s one meeting”.
Then ask for the cut. prepare_split_meeting() names every piece that would exist — when it starts, how long it is and the first thing said in it — and nothing has happened at that point. Only after you say yes does split_meeting() do it, and it takes nothing but the answer to that question.
What it does: the audio is divided exactly where you said, and every piece becomes a meeting of its own. The first piece keeps this meeting's id, its date, its title and its published link; the rest are new meetings, starting at the times they were really recorded. Nothing is re-recorded and nothing is re-transcribed — Chui knows the second every word was said at, so the words of the first hour simply stay with the first hour, and the names on the voices are kept exactly as they are. Your notes go with the piece they were typed during. Chui then writes a new summary for each piece, which takes under a minute.
It costs nothing against a free account's ten meetings a month. Nothing is sent to be transcribed again, so there is nothing to charge for: if you had used nine meetings before the cut, you have used nine after it.
What you lose is the summary of the whole recording — and what that summary wrote into the people in it, which Chui writes again from the new ones. No audio is lost and no words are lost. There is no undo: joining the pieces back together with merge_meetings() would work, but that re-reads the joined recording from scratch and takes minutes.
Chui refuses the cut, before asking you anything, in four cases: a piece that would be shorter than ten seconds; a recording made in a browser tab, whose index Chui cannot yet cut; a meeting it is still reading; and a meeting it holds no word timings for, which it says so about and which reading the meeting again fixes.
A meeting Chui put together after the recording device stopped sending can be split, or joined with another meeting, straight away (since build 247). If that device later sends the rest of its recording, the part Chui did not have arrives as a separate meeting.
The one button for this is on the card Chui shows when it suspects a recording is several meetings; a cut anywhere else is asked for in words.