Kabootar
contents

the manual

Everything Kabootar does, and how to use it

Kabootar is a helper that lives in your team's WhatsApp. It sets reminders, checks in on people, remembers what you tell it, sets up Google Meet calls, and writes out voice notes. This guide explains all of it in plain words, with examples. The first half is for everyone on the team; the second half is for the person who runs it.

In a hurry? The quick guide fits on one screen.

watch · hi, I'm Kabootar

1. Getting started

If you're on the team

You don't install anything. Kabootar is a normal WhatsApp contact that your admin has already set up. Three things to know:

  1. You need to be added first. Kabootar only talks to people the admin has added on the dashboard. If you message it and get nothing back, that's why: ask your admin to add you.
  2. In a direct message, just talk. Anything you send gets an answer.
  3. In a group, get its attention. It reads everything, but only answers when you @mention it, reply to one of its messages, or use one of its nicknames (your admin picks these — for example kabu).

A first conversation might look like this:

remind me tomorrow at 10 to send the invoice
kabootar Done — I'll remind you tomorrow at 10 am.
also remember that Priya handles the Acme account
kabootar Noted.
who handles Acme?
kabootar Priya — you told me earlier today.

Write the way you'd write to a colleague. There are no commands to learn. Hindi and Hinglish are fine.

If you're the admin

You run the app on a computer or a server and manage it from a web page called the dashboard. In short:

  1. Start the app and open the dashboard in a browser (http://localhost:3022 on the same machine).
  2. Link a WhatsApp account by scanning a QR code — this account becomes Kabootar.
  3. Note the dashboard password it gives you (it's also sent to that WhatsApp account's own chat).
  4. Enter an OpenRouter key and pick a model. That's the AI behind the replies.
  5. Add your people on the People page. Until you do, Kabootar answers no one.

Every step is spelled out in the admin guide, including Google Meet and voice notes.

2. Talking to Kabootar

watch · getting my attention

Kabootar answers as a person would: it reads the recent conversation, knows who's on the team, and remembers what it's been told. A few things about how it decides when to speak.

Direct messages

If you've been added, every message you send gets a reply. If you send two messages quickly, it answers the latest one — it won't send you two replies to one thought.

Groups

It reads every message in a group it's in (that's how it can remember things said there), but it only replies when someone who's been added does one of these:

Its group replies quote the message they answer, so it's clear who it's talking to. People who haven't been added are ignored in groups too — they can be seen and added by the admin, but never answered.

Names

Kabootar knows people by the names the admin gave them, plus any nicknames (the admin calls these aliases). "Remind Vivek", "remind viv" and "remind @Vivek" all work if viv is one of Vivek's aliases. If you mention someone it doesn't know, it says so and suggests the admin add them — it will never guess.

Times

All times are Indian Standard Time. "Tomorrow at 9", "Monday 5 pm", "in 2 hours" all work. If it can't tell what time you mean, it asks rather than guessing.

3. Reminders

watch · reminders

A reminder is a message Kabootar sends at a time you choose — to you, to someone else on the team, or to a group.

Setting one

remind me at 6 to call the electrician
remind Vivek tomorrow 11am to send the deck
every weekday at 9:30 remind the eng group about standup
remind Priya and Arjun on the 1st of every month to submit expenses

It confirms with the exact time and the names, taken from what was actually saved — so what it says is what will happen. A reminder arrives as a plain message in that person's chat (or in the group).

Repeating

Reminders can repeat daily, on weekdays, weekly or monthly. A monthly reminder set for the 31st lands on the last day of shorter months.

Seeing what's set

what reminders do I have?
what's scheduled for the design group?

In a direct message it lists yours; in a group, the group's. Before setting a new one it checks what's already there, so if you ask for the same thing twice it tells you instead of making a duplicate.

Cancelling

cancel the electrician reminder
kabootar Cancelled the reminder “call the electrician” for 6 pm today.

A reminder can only be cancelled from the chat it belongs to: yours from your direct message, a group's from that group. If two could match, it asks which one.

Good to know

4. Check-ins

watch · check-ins

A check-in is a reminder that waits for an answer. Use it when you want to know something got done, not just that someone was told.

check in with Vivek at 5 whether the client deck went out
kabootar Set — I'll ask Vivek at 5 pm and wait for his answer.

What happens next:

  1. At 5 pm Vivek gets the question in his direct message with Kabootar.
  2. Any reply from him counts as the answer — even "done" or "not yet".
  3. If he hasn't replied within the reply window (two hours unless you say otherwise; anywhere from 30 minutes to 8 hours), Kabootar nudges him once: still waiting on this one — even a one-liner works.
  4. If there's still no answer after a bit more time, the check-in is marked missed. The admin can see this on the dashboard.

Check-ins go to people, not groups — a group can't "answer". They can repeat like reminders (a daily end-of-day check-in, say).

5. Memory

watch · memory

Kabootar remembers facts about people and groups, and uses them later without being asked. Each thing it remembers is one short sentence, tagged with who said it, where, and when — so it can tell you "Sidhant mentioned in the eng group on Monday that…" rather than just stating things.

When it remembers

Asking it back

what was the review link Priya shared?
kabootar Priya shared it in the design group yesterday: https://…
when is Arjun on leave?
kabootar He told me last week he's off from the 3rd to the 7th.

It searches everything you're allowed to know before it ever says "I don't know", and it forgives typos — "kabotar link" finds "Kabootar".

Correcting it

actually the launch is on the 12th, not the 10th
kabootar Got it — the 12th.
forget what I said about the venue
kabootar Forgotten.

A correction replaces the old fact; it never keeps two that disagree. Dates like "tomorrow" or "next Monday" are saved as the actual date, so they still make sense weeks later.

Good to know

6. Who can see what

watch · who sees what

Kabootar keeps a separate memory per person and per group, and follows two simple rules — built into the program, not left to the AI's judgement:

In a group, it stays on topic

Everyone in a group reads its reply, so there it only answers from that group's memory. If the answer needs more — your personal facts, another group's — it sends the answer to your direct message instead, and the group just sees Sent you a DM, Sidhant.

You can ask for that yourself: @Kabootar DM me the numbers. Calendar answers always come as a DM.

It also won't talk about privacy itself: no "I can't share that because…" — it simply answers with what you may know.

7. Meetings & Google Meet

watch · meetings

Kabootar can put a meeting with a Google Meet link on your Google Calendar and tell everyone. You're the host, exactly as if you'd made it yourself. Each person connects their own company Google account once.

Connecting your calendar (once)

connect my google calendar
kabootar Here's your link (valid 15 minutes): https://… — sign in with your company Google account.

An instant call

give me a meet link now
start a call with Vivek and Priya

The meeting starts right away and everyone named gets the link on WhatsApp immediately.

A scheduled meeting

set up a meet with Vivek and the design group tomorrow 4pm about the launch
kabootar Created “Launch” — tomorrow 4 pm, 30 min. Meet: https://… Invited Vivek; Aisha and Rohan get the link on WhatsApp. I'll remind everyone 5 minutes before.

Who gets what:

Inviting someone outside the team

Give their email: set up a call with client@acme.com Friday 3pm. They get a Google invite and nothing on WhatsApp. Tell Kabootar to remember their email once (remember the Acme client's email is …) and next time you can just say the Acme client.

Your email

My email is priya@gmail.com saves your own address so you get invites — useful if you can't connect a company account. Only you can set yours; nobody can set someone else's from chat. The admin can also set it on the dashboard.

What's coming up

what calls do I have this week?
kabootar Tue 3 pm · 30 min · Launch · https://… · with Vivek, +2 guests

Up to 30 days ahead. In a group the answer comes to your DM — a calendar is personal.

Good to know

8. Voice notes

watch · voice notes

Send a voice note and Kabootar writes out what you said and posts the words as a reply, right under the voice note — handy for whoever can't listen right now. In a group it adds your name: 🎤 Sidhant: "…".

If it sounds like a request

Kabootar never acts on a voice note directly — a misheard word shouldn't set a reminder for the wrong person. If the voice note asks it to do something, it says what it would do and asks you to confirm:

🎤 (voice note)
kabootar 🎤 “remind Vivek at 5 to send the deck”
kabootar Want me to remind Vivek at 5 pm to send the deck? React 👍 to confirm.

React to that question to answer it:

Only the person it asked can confirm, once, within an hour. Typing "yes" as a reply to the question works too. Questions it just answers (like "what's on my calendar?") are answered straight away — no confirmation needed. A voice note that isn't for Kabootar at all gets the transcript and nothing more.

Good to know

9. Why you can trust its answers

AI assistants sometimes say "done!" without doing anything. Kabootar has a guard against this: before a reply is sent, the app checks in code whether the things it claims — "I've set the reminder", "noted", "I've cancelled it", "the meeting's booked" — actually happened. If they didn't, the reply is redone; if it still doesn't add up, you get an honest Sorry, I couldn't actually do that just now. Could you ask me again? instead of a false promise.

In the same spirit, its confirmations repeat the time and the names from what was really saved, and it asks rather than guesses when a name or a time is unclear.

10. Admin guide

Everything from here on is for the person who runs Kabootar. The dashboard is a small web page with three sections — People, Reminders, Bot Settings — and every change applies immediately, no restart.

First-run setup

watch · setting it up

Start the app (your developer or the README covers how). Then open the dashboard in a browser:

The first time, you're walked through four steps:

  1. Link WhatsApp. A QR code appears. On the phone whose WhatsApp account should be Kabootar: Settings → Linked devices → Link a device → scan. Use a dedicated number if you can; this account's name is what people will see in their chats.
  2. Sync. Wait under a minute while it links up.
  3. Password. A random dashboard password is shown once — and sent to the linked WhatsApp account's own chat ("message yourself"), so it's never lost. You can change it later.
  4. Configure. Paste an OpenRouter API key, pick a model from the list, choose your dashboard username, and set the system prompt and history limit (Bot Settings explains what these mean). The key and model are tested live before anything is saved.

After that you land on the People page. Kabootar is connected but silent — it replies to no one until you add people.

Logging in & passwords

People page

watch · the dashboard

This page is Kabootar's permission list. It has three tabs.

People

Everyone Kabootar talks to. For each person:

+ Add person adds someone by phone number (any format like +91 98765 43210); the number is checked against WhatsApp before saving. Or add people from the Unknown tab once they've messaged.

Groups

Kabootar reads every group it's in, but a group only becomes a name it knows — something people can say "remind the eng group" about — once you add it here. Groups appear in the Unknown tab after their first message; give them a name and optional aliases. If the group's WhatsApp name changes, the label follows. Each group row also has a voice toggle to turn voice-note transcripts off in that group.

Unknown

People and groups Kabootar has seen but you haven't added: someone who messaged it, spoke in a group it's in, or was @mentioned. Nothing here is ever answered. Add as person / Add group opens the add dialog with the details filled in — you still choose the name.

Reminders page

Every reminder and check-in, whoever set it, with who asked for it. Statuses:

Filter by status and by who it's for. + New reminder creates one from here: pick reminder or check-in, write the message (sent word for word), tick people or groups (each gets its own delivery), set the date and time (IST), a repeat, and — for check-ins — the reply window. Cancel a pending one with ✕.

Notes dialog

The ✎ button on any person or group shows what Kabootar remembers about them, newest first. Each line shows the fact and who said it, where and when. For a group, it's everything said in that group, whoever it was about.

Bot Settings

AI Provider

The OpenRouter key and the model that writes Kabootar's replies. Both must pass a live test before Save lights up, so a typo can't take the bot down. Any model in OpenRouter's list that can use tools works; search the list by name.

Behavior

Voice notes

Google

The three values from your Google Cloud setup (Client ID, Client secret, Public URL). See Google setup.

Account

Dashboard username and password.

Google setup (one time)

To let people connect their calendars, Kabootar needs to be registered with Google as an app inside your company's Google Workspace. Doing it inside the company means only company accounts can connect, and Google asks for no review and no re-approval. It takes about fifteen minutes.

  1. Make the sign-in reachable from the internet. Google has to send people back to Kabootar after they sign in. Kabootar listens for this on port 3023 — that's the only thing to expose; the dashboard stays private. For a quick start run ngrok http 3023 and copy the https://… address it prints (a free static ngrok domain saves you updating Google every restart). On a proper server, give port 3023 its own subdomain with HTTPS.
  2. In the Google Cloud Console, in a project that belongs to your Workspace organisation, open Google Auth Platform:
    • Audience: user type Internal.
    • Data access: add the scopes …/auth/calendar.events, openid, …/auth/userinfo.email.
  3. APIs & Services → Library: enable the Google Calendar API.
  4. Google Auth Platform → Clients → Create client → Web application. Add the authorised redirect URI https://<your public address>/google/callback. Copy the Client ID (ends in .apps.googleusercontent.com) and the Client secret (starts with GOCSPX-).
  5. Dashboard → Bot Settings → Google: paste the Client ID, the secret and the public address; save. The page shows the exact redirect URI Google must have — check it matches.
  6. Optionally add people's emails (People → aka → Email) so they get calendar invites even before they connect.

Now anyone on the team can say connect my google calendar.

Running it day to day

11. Troubleshooting

Kabootar doesn't reply to someone.
They aren't added on the People page, or their switch is off. In a group, they also need to @mention it, reply to it, or use a nickname.
It replied "Sent you a DM" in a group.
That's by design: the answer needed things outside that group's memory, so it went to the person privately. See Who can see what.
It said it doesn't know someone I mentioned.
That person isn't added. Add them on the People page (they're probably waiting in the Unknown tab).
A reminder shows as missed.
The reason is on the Reminders page: the person was muted or removed, the group was un-named, the app was off for over two hours past the time, or a check-in got no answer.
"Couldn't transcribe that voice note."
Almost always the OpenRouter account has under $0.50 of credit (needed for audio even with your own provider key). Otherwise, check the voice model on Bot Settings → Behavior.
The Google link shows a "400 … malformed" page.
It was opened inside WhatsApp's built-in browser. Copy the link into Chrome or Safari (a private window if you have several Google accounts) and sign in with the company account only.
Google says redirect_uri_mismatch.
The redirect URI in Google Cloud must match what Bot Settings → Google shows, exactly. After an ngrok restart the address changes — update both. A brand-new Google client can take a few minutes to start working.
Google says invalid_client.
The Client ID and secret are swapped or mistyped. The ID ends in .apps.googleusercontent.com; the secret starts with GOCSPX-.
Someone with a personal Gmail can't connect.
Expected — only company accounts can. They can still say "my email is …" to receive invites.
I lost the dashboard password.
It's in the linked WhatsApp account's own chat (Settings → the account's own number, or search "Hammer dashboard").
The setup page says WhatsApp was unlinked.
The device was removed from the phone's linked devices. Restart the app and scan the new QR code; settings and history are kept.

12. What it doesn't do yet

Kabootar is built on an unofficial WhatsApp client. It behaves like a normal phone — it shows as online, marks messages read after a natural pause, shows "typing…" while it thinks — but WhatsApp's terms don't allow bots, so the risk of the number being logged out is never zero. The tips under Running it day to day keep it low.