Meeting transcripts
A transcript is a text file of what was said in a meeting. Upload one and the bot posts a short summary in the channel, then sends each person who owns an action item (a task someone agreed to do) a direct message. They file the items they want as tickets (one task each) in Linear, the team’s task tracker, with one click. Nothing is filed until that person presses a button.
For example: after the weekly sync you drop weekly-sync.vtt into the meetings channel. A minute later the bot replies there with who was present, what was decided and what was discussed. Alex, named as the owner of “Draft the build checklist”, gets a direct message offering it as a ticket.
Meeting transcripts are off unless whoever runs the bot has switched them on. If nothing happens when you upload, see Why nothing happens. To get the same summary from a call without a file, see Voice notes.
Upload a transcript
Section titled “Upload a transcript”- Open the meetings channel,
ai-meeting-transcriptsunless an admin chose another name. The bot creates it the first time a voice meeting needs it, so it may not exist yet. Until it does, uploads are not read: ask whoever runs the bot. - Post one file in it:
.txt,.vtt,.srtor.md. You can add a message with it.
The bot replies to your upload with Reading the transcript. This takes a minute or two. The summary follows when it is ready, and that note is removed.
| File | What the bot does with it |
|---|---|
.vtt and .srt (caption files with timestamps) | Drops the timestamps, cue numbers and markup. Keeps the speaker names when the file has them and joins consecutive lines from the same speaker |
.txt and .md | Reads the text as it is |
Rules for the file:
- It must be plain text, saved in the standard text encoding (UTF-8). A file the bot cannot read as text is refused.
- It must be no larger than the size limit: 512 KB by default, and whoever runs the bot can set 1 KB to 2048 KB.
- Only the first 400,000 characters are read.
- Post one file per message. Text pasted into the channel is not read and gets a nudge. It is stored and searchable like any message, see What the bot stores.
What the bot posts
Section titled “What the bot posts”The bot replies to your upload. The post leaves out any part that has nothing in it. This is an example:
# Weekly sync5 October 2026
**Attendees (3):** Sam, Alex, Robin
### Decisions- Ship the lobby build on Friday.
### Action items**Alex**- Draft the build checklist**Sam**- Update [ENG-9: Add blue crossbow](<https://tracker.example/issue/ENG-9>): status to In Progress
### Discussion- The host menu needs a mute option.
### Related issues- Host menu audio: [ENG-12: Host menu mute](<https://tracker.example/issue/ENG-12>)
-# Owners got a DM to turn these into Linear tickets.- Title and date. The date appears only when the transcript states it, in your own language and format.
- Attendees. Plain names with a count, never mentions, so nobody is pinged. At most 15 are listed, then
and N more. - Decisions and Discussion. At most 6 bullets each, then
and N more in the transcript. The action items sit between them, so the work comes before the talk. - Action items. Grouped under the owner as said in the meeting, with
Unassignedlast. The title is the work itself, never the act of filing it:Create a ticket for the battle axeis posted asAdd the battle axe. A link means the meeting named a Linear ticket the bot could verify, or the bot judged that one clearly covers the item. With no action items the section is the small lineNo action items came up in this meeting.- When owners were sent direct messages, a small line at the end says
Owners got a DM to turn these into Linear tickets. - A step that changes work already in Linear reads
Update <ticket>: status to <Status>, or justUpdate <ticket>when the meeting asked for a note and no status. When no ticket could be found it reads<title> - no matching issue found, so nothing to update.
- When owners were sent direct messages, a small line at the end says
- Related issues. Linear tickets the meeting talked about, including every verifiable ticket number said anywhere in it, even when no action item carries it. Only with a Linear connection.
Every ticket link reads like ENG-9: Add blue crossbow. Titles are cleaned of brackets and mentions and cut to 70 characters.
A long post is split over at most 4 messages, and anything past that ends with N more lines not shown. When the transcript was longer than the bot reads, the last message says Only the first part of this transcript was read because it is too long.
The post is written once and does not change when tickets are created later: the direct messages show that. If the bot restarts mid-post, or you upload the same file again after a failure, it removes its earlier partial post and writes a fresh one, so the channel never holds two copies.
Your action items
Section titled “Your action items”Everyone named as the owner of an action item gets one direct message with their items. Only that person sees it.
Doge Bot sends you a DM
Hi Alex, here are your action items from Weekly sync (see the summary).
-
Draft the build checklist - this might already be ENG-12: Host menu mute. Check it before creating.
-
Book the QA session
-
Move ENG-9: Add blue crossbow to In Progress
see the summarygoes to the summary in the channel.this might already be <ticket>means a ticket looks related but the bot is not sure it is the same work. Pressing Create still files a new ticket, so check the link and dismiss the item if that ticket already covers it.already tracked as <ticket>means the bot is confident that ticket covers the item. The item is shown but cannot be selected or created, so the same work is never filed twice.- Every item starts selected, so one press of
Create selectedhandles them all. A drop-down with the placeholderChoose the items to createlists up to 25 items, numbered like the message. Untick the ones you do not want. - With a single item there is no drop-down. The buttons are
Create ticketandDismiss, and the footer saysNothing is filed until you press Create ticket. - An item that changes a ticket already in Linear is an update, see Updates to existing tickets.
- Nothing is sent when the bot has no Linear connection, because the buttons could not file anything.
- An item with no clear owner, or whose owner matches no member or more than one, goes to whoever uploaded the transcript, and the message says
Some of these had no clear owner, so they came to you.The same happens to the rest when more than 10 owners are named: at most 10 people are messaged per transcript.
The controls
Section titled “The controls”| Control | What it does |
|---|---|
Drop-down Choose the items to create | Selects the items you want. The message updates to match. Only with two or more open items |
Create selected (N) or Create ticket | Files each selected item as its own Linear ticket. N is the number selected, and the button is greyed out at 0 |
Dismiss all or Dismiss | Marks every open item as dismissed. Nothing is created |
Cycle drop-down (placeholder Cycle) | Sets the cycle for every ticket one press files. A cycle is Linear’s name for a planned stretch of work time, often one or two weeks: No cycle (default), Current cycle or Next cycle, matched to the team’s cycles at that moment. Shown only while there is new work to file. Updates never change a cycle |
While the bot works, every control is greyed out and the primary button reads ⏳ Creating… (⏳ Applying… for updates), with the line Working on it, this takes a few seconds. You cannot press twice.
When it is done the message is closed and has no buttons:
- A created item shows
created:and a link to its ticket. An applied update showsappliedornoted. - An item you left unticked shows
not filed, and a dismissed one showsdismissed. - The last line says
It is created.,It is updated.orIt is created and updated. - After you choose a team from the drop-down, the original message is closed the same way and the drop-down message is replaced by the
Created <ticket>lines.
A message nobody pressed keeps its buttons, with no time limit.
Only the person an item belongs to can use its controls. Items without an owner belong to whoever uploaded the transcript. Anyone else is told These action items are not for you.
Updates to existing tickets
Section titled “Updates to existing tickets”For each action item the bot decides whether it is new work or a change to work that already exists, such as “move the blue crossbow to in progress”. An update changes one Linear ticket: it sets its status, or adds a comment when the meeting asked for no status. Your message lists it as Move <ticket> to <Status> or Add a note to <ticket>.
Only these four statuses exist:
| In the meeting | Status set |
|---|---|
| Will be done later | Backlog |
| Planned for the current week | Todo |
| Being worked on now | In Progress |
| Built, with a pull request that is not merged yet | In Review |
The bot never sets Done or Canceled, and never closes a ticket. When the team has no matching state, for example no In Review, the ticket gets a comment saying what the meeting suggested instead. A ticket already in that state is not written to, and its line still reads applied.
When every button in the message is an update they read Apply update and Apply selected (N), and the drop-down placeholder reads Choose the items to apply. In a mixed message the buttons keep the Create wording and one press does both: updates first, then new tickets.
An update the bot could not match to a ticket is shown as Note: <title> (no matching issue found, nothing to update). You cannot select it.
You can apply an update only when an admin has linked you to a Linear user with /linear-admin link and you are a member of the ticket’s team in Linear. A link the bot made by matching names does not count, because anyone can copy a display name. Otherwise the item is refused with a line saying why and nothing changes. See Linking members to Linear. A ticket in a private team is never changed.
After you press the button you get one short follow-up listing only refusals, problems and fallbacks. A fallback reads <ticket> noted (no "In Review" state, so I added a note instead), with the status the meeting asked for in place of In Review. A plain success is visible in the closed message.
Which team, and what the ticket holds
Section titled “Which team, and what the ticket holds”Tickets go to one Linear team, chosen in this order:
- The team the meeting clearly named, when exactly one public (not private) Linear team has that name and it is one of the teams offered to you. A team you are not offered is ignored.
- The single team the bot offers you. The offered teams are your own Linear teams when the bot has linked you to a Linear user, and all public teams otherwise. See Linking members to Linear.
- Your choice. The bot asks
Which Linear team should these tickets go in?with a drop-downChoose a team, and creates the tickets once you choose. If the bot could tell from the meeting which team the work belongs to, that team is listed first with the descriptionSuggested from the meeting. It is only a hint: nothing is selected for you and nothing is filed until you choose. With more than 25 teams the question addsShowing 25 of N teams. Ask an admin if yours is missing.When the meeting named no team, your choice is remembered for the meeting, so the next person is not asked again if that team is offered to them.
Each ticket has:
- The item’s title as the title.
- The item’s description with every link and image turned into plain text, so a link in the transcript cannot sneak into the ticket. Then a line
---,From the meeting "<title>" in [Discord](<link to the summary>)andApproved by [<your display name>](<link to your Discord profile>). When the item had no owner in the bot’s records but the meeting named one, it addsOwner in the meeting: <name>. - You as the assignee, when the item was yours and you are linked to a Linear user. An item that came to you only because it had no owner is not assigned.
- Up to three labels the AI picks from labels that already exist for the team. It never creates one.
- The project, when the meeting named one that belongs to the team. A project is matched by its exact name, ignoring case and accents, and is dropped when the team does not have it.
- The cycle you picked, if any. When the team does not use cycles or has no such cycle, the tickets are filed without one and the reply says why, for example
Engineering has no next cycle, so the 3 tickets were filed without one.When they did go into a cycle the message saysFiled in Engineering · Cycle 88 (Oct 19–25)., or names the tickets that missed it, for exampleFiled in Engineering · Cycle 88 (Oct 19–25), except ENG-12.These results stay in the closed message as small lines underIt is created.
Up to three tickets are filed at the same time. If Linear refuses the assignee, a label, the project or the cycle, the bot files the ticket again without them and says how many tickets lost what, for example Linear rejected some details, so ENG-12 was filed without its labels or cycle. It names only what the bot had sent. If Linear was too slow to confirm a ticket and the bot found it on a second try, the message says Linear did not confirm the details of ENG-12, so check it in Linear. Linear shows the account the bot connects with as the creator, not you.
When a ticket cannot be created
Section titled “When a ticket cannot be created”These replies are private to you.
| The bot says | What it means |
|---|---|
Meeting tickets are turned off. | The bot has no Linear connection right now, so Create selected and the team drop-down cannot work. Selecting and Dismiss all still do |
This meeting is no longer available. Nothing was created. | The bot has no posted summary for this message |
These action items are not for you. | You pressed a control on someone else’s items |
Unknown action. | The control is not one the bot recognises |
Select at least one action item first. | You pressed Create selected with nothing chosen. The button is greyed out in that case, so you only see this when the message was out of date |
Still creating that ticket. Give it a few seconds. | A ticket for that item is being filed. Wait, then look at the message |
Linear is slow right now. Try again in a moment. | Linear did not return the team list in time. Press the button again |
No Linear team is available. | Linear shows no team for you to file into. Ask an admin |
That team is not available. Pick another team. | The team you chose is not offered to you any more |
You are no longer in the server, so I cannot create these tickets. | You left the server |
Linear rejected the ticket, so nothing was filed. Tell an admin: the bot may lack permission for that team. | Linear refused. Tell an admin |
Linear did not answer in time, so I cannot tell yet whether the ticket was filed. Try again in a moment: it will not create a second one. | Linear was too slow. The ticket may or may not exist. Press the button again |
Could not create the ticket in Linear, so nothing was filed. Try again in a moment. | Another Linear error |
N more items are still selected. (1 more item is still selected. for one) | The bot stopped after a failure. The rest stay selected for the next press |
I could not update <ticket> because your Discord account is not linked to Linear yet. Ask an admin to run /linear-admin link for you. | You have no admin-made link to a Linear user, so an update is refused |
I could not update <ticket> because you are not on its Linear team. | You are not a member of the ticket’s team in Linear |
Could not find <ticket> in Linear, so nothing was changed. | The ticket was deleted, moved, or is in a private team |
Could not check your access in Linear, so nothing was changed. Try again in a moment. | Linear did not answer the membership check |
Linear did not answer in time, so the update may or may not have been applied. Check the issue in Linear before trying again. | Linear was too slow while applying an update |
Linear rejected the update, so nothing was changed. Tell an admin: the bot may lack permission for that team. | Linear refused the update |
Could not update the issue in Linear, so nothing was changed. Try again in a moment. | Another Linear error while applying an update |
A ticket is never created twice for one item. Pressing Create selected again after a failure finds the ticket if it was made.
What the bot says in the channel
Section titled “What the bot says in the channel”These replies go to your upload and are visible to everyone in the channel. Nobody is pinged.
| The bot says | What it means |
|---|---|
Reading the transcript. This takes a minute or two. | The file passed the first checks and is being read. The bot replaces this note with the summary, or with the reason it failed |
I can only read .txt, .vtt, .srt, .md transcripts. | The file has another extension |
That file is too large (the limit is N KB). | The file is over the size limit. Below 1 MB the limit is given in KB, so the default reads 512 KB. From 1 MB up it reads N MB, rounded |
That file is not plain text, so I cannot read it. | The file is not valid UTF-8 text |
That file has no text in it. | Nothing was left after reading it |
I could not download that file. Please upload it again. | The bot could not fetch the attachment |
The AI service is unavailable right now. Please upload the file again in a minute. | The AI provider is down or rejected the request. The bot pauses all uploads for a minute, and the upload does not count against the daily limits |
The daily limit for transcripts has been reached. Please try again tomorrow. | The shared daily limit is used up |
You have reached your daily limit of 5 transcripts. Please try again tomorrow. | You uploaded 5 transcripts in the last 24 hours |
Something went wrong while processing that file. Please try uploading it again. | An unexpected error. Upload again |
I already summarised this file: see the summary | The same file was already summarised. The link goes to that summary. When the summary message is gone the reply is Already received this file. |
Sent the action item DMs that had not gone out. | You uploaded a file again after the bot lost the direct messages, for example in a restart. See Why you might not get your items |
That file is already being processed. | The same file is being read right now |
<names> could not get a DM (their DMs are closed), so their action items are only listed above. | Some direct messages did not arrive. The names are display names: up to five, then and N more |
Please upload one file at a time. | You posted more than one file |
Please upload the transcript as a file (.txt, .vtt, .srt or .md) and I will summarise it, or run /notes start in a voice channel to take notes live. | You wrote text and no file |
You have uploaded a lot of files recently. Please try again later. | You used up your hourly limit |
The last three are sent at most once an hour per person each, so a chatty channel does not fill with replies.
Why nothing happens
Section titled “Why nothing happens”The bot stays quiet when:
- Meeting transcripts are off, or the bot’s AI is not set up. Ask whoever runs the bot.
- You posted in another channel, in a thread, or in another server. Only the one channel is watched.
- The meetings channel does not exist yet. An upload is read only in a channel with the current name.
- The message is from a bot or is a system message.
- The message has no file and no text.
Why you might not get your items
Section titled “Why you might not get your items”The summary always posts. A direct message is skipped when:
- Whoever runs the bot has limited its direct messages to a list of people and you are not on it. The uploader’s reply does not mention this.
- Your direct messages from server members are closed. The bot does not try again by itself, and the uploader’s reply names you.
- The bot has no Linear connection. Then nobody is messaged.
If the bot restarted after posting the summary and before the messages went out, upload the same file again. Two minutes after the post the bot sends only the messages that had not gone out and replies Sent the action item DMs that had not gone out.
The bot matches a name to a member only when exactly one member of the server has that name, ignoring case and accents. A name that matches two members, or none, counts as no owner, so a ticket never goes to the wrong person.
Limits
Section titled “Limits”| Limit | Default | Counted |
|---|---|---|
| File size | 512 KB | Per file. Whoever runs the bot can set 1 to 2048 KB |
| Transcripts per day | 20 | Across everyone, in any rolling 24 hours. Voice meetings count too. A restart resets the count |
| Transcripts per person per day | 5 | Per uploader, in any rolling 24 hours. A voice meeting counts for the person who started it. A restart resets the count |
| Uploads per person | 10 | Per rolling hour. A restart resets the count |
| People messaged per transcript | 10 | The rest of the items go to the uploader |
| Action items per meeting | 15 | Any more are dropped |
| Attendees stored | 50 | Any more are dropped. The post lists 15 |
| Uploads at once | One per person | Your uploads run in order. The bot works on four people’s uploads at the same time |
A transcript that fails because the AI provider was unavailable, or that is cut short by the bot shutting down, gives its slot back against the daily limits. Any other failure keeps it, because the model may already have been used.
What the AI and Linear get
Section titled “What the AI and Linear get”- The AI reads the transcript text (up to the first 400,000 characters) and the file name. A transcript over 200,000 characters is read in two parts that are then merged. It gets nothing else from Discord: no ids, no channel and no member list.
- For each action item and topic it also reads the title and up to 300 characters of description, and the title and description of up to five similar Linear tickets, so it can say whether one covers it. For an update item the search uses the words that named the ticket. Only with a Linear connection.
- When you press
Create selectedit reads the item title, its description and the names of the labels the team can use, to pick labels. - To suggest a team for the drop-down it may read the meeting title, the decisions and the action item titles (up to 4,000 characters), with the names and one-line descriptions of the public Linear teams. It does this only when the meeting named no team, has new work and Linear has two or more public teams.
- Linear gets short English searches built from the action items and topics, whatever language the meeting used, and a lookup of ticket numbers said in the meeting (up to 20 per meeting, those tied to an item first). It gets a ticket, a status change or a comment only when you press the button.
- Private Linear teams are never searched, and a ticket whose team cannot be told is never linked.
For what the bot keeps, and for how long, see What the bot stores.
- How meeting transcripts work for the rules behind it.
- Voice notes to get the same summary from a call instead of a file.
- Ticket prompts for the other way the bot offers to file a ticket.