AI agent · Messaging

WhatsApp AI Assistant

A personal assistant that lives in WhatsApp, chats in the user's language and never lets them forget things: reminders from plain conversation, caring check-ins and a web dashboard on the same thread.

Role
AI and full-stack engineering
Platforms
WhatsApp · Web app
Stack
Node.js · TypeScript · SQLite · React 19 · Anthropic Claude · Claude Agent SDK · MCP
  • Claude tool use
  • Agent SDK
  • MCP
  • Prompt caching
  • Agent memory
  • Scheduling
  • Webhook security
Agent trace of a single turn, plus WhatsApp chats with reminders and check-ins

Product screens with sample data. Names and figures inside the screens are illustrative.

01

The problem

Reminder apps need opening. People already live in WhatsApp, and they talk in mixed languages like 'kal subah 9 baje yaad dilana'.

8
Agent tools
11
Languages incl. Hinglish
1.5 s
Debounce per turn
02

What I built

01

Say it the way you'd say it to a friend

Claude resolves times like 'tomorrow', 'in 2 hours' or 'yaad dilana' against the current time and calls tools to create, update, snooze or cancel reminders. Several quick messages are read as one thought.

02

It notices when you didn't

Read receipts shape the follow-up: if a reminder isn't read after 20 minutes, the assistant checks in gently. Daily check-ins are skipped if you chatted in the last 45 minutes, and the model can choose to stay silent.

03

Memory you can read and edit

Facts learned from chat, custom instructions and personality live in one place. Every change applies to the very next message, on WhatsApp and on the web.

Instructions, memory and quiet-hours settings
04

The same assistant on the web

A dashboard with upcoming reminders, activity and the same conversation thread as WhatsApp. Sign-in is passwordless with a WhatsApp OTP.

Assistant web dashboard

03 AI integration

How a WhatsApp message becomes an agent turn

Each incoming message runs through a small, strict pipeline before Claude sees it, and every tool call is a real write to the database. The trace below illustrates one turn as a developer would inspect it.

  1. 01Webhook, HMAC verified
  2. 02De-duplicated by message id
  3. 031,500 ms debounce batches bursts
  4. 04One serial turn per owner
  5. 05Claude with 8 tools, up to 8 rounds
  6. 06Tool results written to SQLite
  7. 07Reply sent in 4,000-char chunks
Developer trace of one turn: webhook, batching, tool_use JSON, cache tokens and available tools

Illustrative developer view of a single turn, with sample data.

Eight tools, real side effects

create, list, update and cancel reminders, update the profile, schedule and cancel check-ins, and update memory. The model never writes to the database directly.

Two backends, one toolset

The Messages API with prompt caching and a server-side fallback, or the Claude Agent SDK serving the same tools as an in-process MCP server.

Context that stays small

A current-time header, the owner's profile and memory go in every turn; history is summarised once it passes 120 messages.

Allowed to say nothing

Check-ins can return NO_MESSAGE, so the assistant stays quiet when a message would be noise.

Never send twice

Reminder state advances before sending and rolls back if the send fails; webhooks are idempotent.

Honest limits

Voice notes get a friendly 'please type it' instead of a guess, in the user's language.

Model
Anthropic Claude · tool use
Agent runtime
Messages API or Agent SDK + MCP
Tools
8 · up to 8 rounds per turn
Languages
11, including Hinglish
Server
Node.js · TypeScript · 18 endpoints
Data
SQLite · 11 tables
Web
React 19 · WhatsApp OTP sign-in
Safety
HMAC webhooks · idempotency · rollback
04

Key decisions

  1. One turn per owner

    Messages from the same person are processed serially, so two quick replies can't create two reminders.

  2. Debounce before thinking

    Waiting 1.5 s lets bursts of short messages arrive, so Claude answers the whole thought once.

  3. Read receipts as signal

    Follow-ups depend on whether a reminder was actually read, not on a fixed timer alone.