Repository avatar
AI Tools
v0.1.1
active

wacrew

io.github.sumioshi/wacrew

WhatsApp for AI agents: read chats, transcribe voice notes and reply at a human pace.

Documentation

WACrew

WACrew

Open-source WhatsApp AI automation for teams that serve clients in group chats.
An inbox sorted by who has waited longest, replies written in your own voice and delivered at a human pace,
a client CRM, a live 2D office, and an MCP server so your coding agent can work the chats too.

License: Apache 2.0 Node 20+ Built with Baileys Sponsor MCP server npm Glama score

wacrew.com.br · Leia em português

The AI drafts a reply; flipping AUTO on, it types and answers on its own

Why

If you sell or deliver work over WhatsApp, you know the scene: forty client groups, a four-minute voice note in the middle of a thread, the bug screenshot lost in the scroll, and the client who wrote three days ago that nobody saw.

A chatbot does not fix that. Canned answers read like a robot, clients notice, and the relationship cools down. What you need is someone who reads everything, answers the way you would, and never lets anyone wait. WACrew is that someone, and you stay in control of every message.

A client conversation in WACrew: AI replies delivered in bubbles, with the client's contract, people and notes on the side

The engine that makes it read like a person:

225+60~30 s
writing skills: your voice and client conductcode rules that block robot tellshistory messages read before replyingmedian until typing starts in a live chat

What it does

Nobody waits. Every group and direct chat lands in one queue sorted by waiting time. A client's group and their private chats show up together, back-to-back messages collapse into one block, and voice notes arrive transcribed.

Writes like you, delivers like a person. The AI reads the history and writes with your punctuation, openings and rhythm, measured on your own past messages. Before anything leaves, a deterministic review blocks robot clichés, repeated apologies and duplicate bubbles (the generic part of it is also a standalone library, botsmell). Delivery comes with read receipt, typing indicator and pauses, and it stops on its own if the client writes again or you answer from your phone.

You stay in control. In Confirm mode (the default) nothing is sent without your OK. Autonomous mode is turned on per chat. Every message records who wrote it: you on the phone, you on the panel, a teammate, or the AI.

Today view: who is waiting, AI activity, signals and today's calendar Today. Who is waiting and for how long, what the AI is doing, signals and today's agenda.2D pixel-art office with one desk per client project 2D office. One desk per project. When a client writes, the desk turns red right away, with sound.
Dashboard with message volume, first-reply time and who replied Dashboard. Volume, first-reply time, who answered, busiest clients and deliveries per month.Clients kanban board with waiting time, tags and last message Clients. Table and board views with contract, deliveries and waiting time per client.
Client drawer with the coding agent running in the project's repository Agent bridge (optional). If you use Orca, the client drawer shows the coding agent working on that project's repo and lets you send it commands.Weekly Google Calendar view inside the panel Calendar. Your Google Calendar inside the panel, editable by you or by the AI.

More screens in docs/screenshots/: org chart, team access, notifications, project links, settings and the command palette.

How it works

                          ┌────────────────────────────┐
  WhatsApp ─► collector ─►│  data/<chat>/              │◄─► web panel (Next.js, :3000)
  (Baileys)   (daemon)    │  messages.jsonl + media    │
                          │  transcripts, notes, state │◄─► MCP server (your coding agent)
                          └─────────────┬──────────────┘
                     transcriber (MLX on Apple Silicon, or an API)
  • Collector (src/): a Baileys daemon (WhatsApp Web multi-device, no browser). Baileys is isolated behind ports and adapters in src/whatsapp/. It writes every message, reaction and media file to data/<chat>/ and runs the delivery queue that sends replies at a human pace.
  • Panel (web/): Next.js 16 + React 19. Inbox, conversation view, clients, dashboard, calendar, team, 2D office, settings. Live updates over SSE.
  • MCP server (web/mcp/server.ts): 36 tools over the same data, for Claude Code, Codex, Qwen Code or any MCP client.
  • Transcriber (transcriber/): Whisper large-v3 via MLX, loaded on demand and released when idle. Off a Mac, set TRANSCRIBE_BACKEND=openrouter.
  • Local or cloud. Run everything on your machine, or deploy the collector and panel 24/7 with the included Dockerfile (a railway.json is provided). The local MCP can read straight from the cloud panel (WAC_MCP_REMOTE=1), downloading media on demand.

Quick start

Requirements: Node.js 20+, ffmpeg, and a WhatsApp account to pair. Local transcription needs Apple Silicon (uv tool install mlx-whisper).

git clone https://github.com/sumioshi/wacrew && cd wacrew
npm install && npm --prefix web install
cp .mcp.json.example .mcp.json
npm run dev          # collector + panel + transcriber + notifier

Open http://localhost:3000/config, scan the QR code (WhatsApp › Linked devices › Link a device), pick the groups to follow and mark who is on your team. The session is saved in auth/ and reconnects on its own.

Run it 24/7 on a VPS. WACrew only records what arrives while it is running: if your computer is off, messages from that period never reach the history or the queue. The repo ships a docker-compose.yml with a persistent volume for the WhatsApp session and data:

cp .env.example .env   # set PANEL_USER and PANEL_PASS
docker compose up -d

Deploy on Hostinger

Referral link: you get a discount on the VPS and the project earns a commission that helps keep it maintained.

Other clouds. Run the prebuilt image ghcr.io/sumioshi/wacrew or build the Dockerfile on any host (Railway works out of the box) with a volume at /data. Set PANEL_USER and PANEL_PASS to protect the panel with login; without them the panel is open, which is only fine on localhost.

MCP tools

The server is registered by .mcp.json (project scope). Claude Code and Qwen Code read it and ask for approval on first use.

From npm, without cloning. With the panel running on a VPS, add the MCP to any client with wacrew-mcp:

claude mcp add wacrew -e WAC_CLOUD_URL=https://your-panel.example.com \
  -e WAC_CLOUD_USER=admin -e WAC_CLOUD_PASS=change-me -- npx -y wacrew-mcp
AreaTools
Readlistar_grupos, ler_mensagens, buscar, listar_contatos, caixa_de_entrada, novidades, resumo_do_dia, ler_notas, estado_triagem
Mediatranscrever, ver_imagem, ver_video, assistir_video, ler_documento
Replypreparar_resposta, revisar_texto, responder, responder_midia, editar_mensagem, reagir, status_envio, cancelar_envio
Triage and CRMmarcar_resolvido, silenciar_grupo, anotar, etiquetar, alertar_chat, definir_modo, definir_contrato, registrar_feature, dashboard, editar_perfil
Calendaragenda_ver, agenda_marcar, agenda_editar, agenda_apagar

Highlights:

  • buscar finds text inside transcripts too.
  • ver_imagem and ver_video hand the media to the model, which is handy for bug screenshots. assistir_video has a Gemini model watch a video with its audio, attached or from a link.
  • responder returns a ticket. The message leaves later at a human pace: seconds in a live chat, minutes to hours in a cold one. The ticket is interrupted if the client writes or you answer by hand. status_envio tracks it and cancelar_envio cancels it.
  • preparar_resposta returns your recent style and what the client left open. Pass 2 or 3 candidatos to responder and the least out-of-character one is sent.

Tool names are in Portuguese because the project started in Brazil. Descriptions are clear enough for any model.

Configuration

Everything has a default. Copy .env.example to .env and adjust what you need.

VariableWhat it does
PANEL_USER, PANEL_PASSPanel login. Required when the panel is reachable from the internet.
OPENROUTER_API_KEYPosture check before sending, video watching and API transcription.
COPILOT_PROVIDER, ANTHROPIC_API_KEY, COPILOT_OPENAI_API_KEYThe in-panel copilot (Anthropic or any OpenAI-compatible API).
TRANSCRIBE_BACKENDmlx (local, default on a Mac) or openrouter.
WAC_MCP_REMOTE, WAC_CLOUD_URL, WAC_CLOUD_USER, WAC_CLOUD_PASSPoint the local MCP and sync at your cloud panel.
WAC_NOME_OPERADOR, WAC_SKILL_VOZYour first name and the voice skill the AI loads before writing.
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETCalendar and Google sign-in.
CONTROL_TOKENBearer token for the external control API.
DATA_DIR, AUTH_DIR, LOG_LEVELWhere data and the session live, and log verbosity.

There is also a public REST API documented in docs/api-v1.md.

What gets stored

data/<chat>/
  messages.jsonl     one line per message (the AI's "database")
  reactions.jsonl    emoji reactions
  log.md             the same conversation, human-readable
  audio/ video/ image/ document/ transcripts/

data/, auth/, .env and groups.config.json are git-ignored. Never commit them.

Read this before using it

  • This is not the official WhatsApp API. WACrew links to your account as one more device, through Baileys. It is built to answer people who already talk to you. Bulk messaging and cold outreach can get your number banned.
  • No old history. Capture starts when you pair the number.
  • Sending is real. The panel and the control API send messages as you. Keep them on localhost or behind login.
  • WACrew is an independent project, not affiliated with WhatsApp or Meta.

Contributing

If WACrew saves you time, consider sponsoring the project. It pays for the hours that keep it maintained.

Issues and pull requests are welcome.

npm test            # Vitest
npx tsc --noEmit    # typecheck

Shared logic between the panel and the MCP lives in web/lib/. See CONTRIBUTING.md.

Sponsors

WACrew is free and open source. Sponsors keep it maintained and get their name or logo here.

Become the first sponsor

License

Apache 2.0 © Rodrigo Sumioshi. See NOTICE.

NPM
wacrew-mcp
Install Command
npm install wacrew-mcp