Your team and your AI agent, in the same thread.

Group chat built around threads. Bring your AI agent into the conversation, and send what gets decided to your calendar, to-dos or maps.

Invite-only. You need an invite link from a current member. How invites work

iPhone, Android, Mac, Linux and the web

Example
9:02 AM

An order comes in. The details stay under it.

Replies stay under the message they answer, so the main chat stays short.

Sarah Miller9:02 AM
Catering order from Lakeside Dental: 40 lunch boxes, Friday at 11:30 AM.
3 replies
Mike Johnson9:05 AM
I can deliver. Leaving at 11.
Emily Davis9:11 AM
6 of the boxes need to be vegetarian.
Mike Johnson9:14 AM
The van is booked.
9:20 AM

Ask your agent where the conversation is.

Create a Managed Hermes agent in DonutChat, then @mention it. It reads the thread and answers there.

Bots and agents in the docs

Sarah Miller9:20 AM
@donut_bot what have we settled so far?
Donut BotBOT9:20 AM
Settled so far:
  • 40 lunch boxes, 6 of them vegetarian
  • Mike delivers in the van, leaving at 11:00
  • Due Friday at 11:30 AM
9:26 AM

Finish it in the apps you already use.

When a message mentions a meeting, task, reminder or place, a suggestion appears under it. Tap it to open your calendar, to-do, reminders or maps app.

Sarah Miller9:26 AM
Confirmed with Lakeside. Deliver to 214 Lake St, Friday 11:30 AM.
Lakeside Dental delivery · Fri 11:30 AM
214 Lake St
CalendarLakeside Dental deliveryFri 11:30 AM – 12:30 PM · 214 Lake St

Also in DonutChat

Discover
News picked for your interests, with a discussion per article.
My Memo
A private chat for your notes, links and files.
Bookmarks
Save messages and find them later.
Polls
Ask the group and see the votes in chat.

Build a bot that streams its answer.

Build a bot that answers in threads and shows its reply while it is being written. For alerts, one webhook request is enough.

// Start a reply you will keep updating
const { reply_id } = await post('/thread-replies', {
  chat_id, parent_message_id, content: '', status: 'GN',
});

// Send the full text so far as your model writes it
let text = '';
for await (const chunk of model.stream(prompt)) {
  text += chunk;
  await post('/thread-replies/stream', {
    chat_id, parent_message_id, reply_id,
    content: text, status: 'GN',
  });
}

// Finish
await post('/thread-replies/stream', {
  chat_id, parent_message_id, reply_id,
  content: text, status: 'OK',
});

Developer docs

Example

Get DonutChat

Sign up in the iPhone or Android app with an invite link, then use the same account on desktop and the web.