Mi asistente ejecutivo es un chat de WhatsApp conmigo mismo
Un bot de Node + Baileys en una Mac mini convierte el chat de WhatsApp con vos mismo en asistente ejecutivo: transcribe audios, filtra 39 grupos con un pipeline en capas (regex gratis primero, LLM batcheado después), maneja dos calendarios por lenguaje natural, caza promesas y delega tareas pesadas en Claude Code. Costo: menos de $5 al mes.
Ayer me mandé un audio a mí mismo preguntando qué tenía en la agenda, y me respondió mi asistente con mis reuniones reales, de mis dos calendarios. No es una app nueva ni un SaaS: es un proceso de Node corriendo en mi Mac mini, conectado a mi WhatsApp de siempre, que construí en un par de horas iterando. Este post es el por qué y el cómo, con los bugs incluidos.

El porqué: mi vida operativa ES WhatsApp
Cuando listé mis grupos para configurar el bot, eran 993. No es un typo. Entre Latech, 021, clientes, proveedores, familia y cada plan que alguna vez existió, WhatsApp es donde ocurre todo: ahí me piden deploys, ahí me mandan facturas, ahí me proponen reuniones en audios de seis minutos que escucho a 2x caminando.
El problema no es el volumen. El problema es que lo importante viaja mezclado con lo trivial, en el mismo canal, con la misma notificación. La factura del cliente y el meme del grupo de amigos suenan igual. Y las herramientas clásicas de productividad fallan todas por la misma razón: exigen que te mudes. Otro inbox, otra app, otro hábito que mantener.
WhatsApp tiene un rincón perfecto para esto: el chat con vos mismo. Ya lo usaba como bloc de notas. Ahora es mi centro de comando: le hablo (o le mando audios) y del otro lado responde un bot que ve todo lo que yo veo.
El cómo: un dispositivo vinculado con cerebro
La base es Baileys, una librería open source que habla el protocolo de WhatsApp Web. El bot se vincula como un dispositivo más (igual que WhatsApp en tu compu) y corre bajo pm2 en mi Mac mini, que está siempre prendida y conectada: el asistente no depende de que yo abra la laptop. Encima de eso: Whisper para transcribir, gpt-4o-mini para clasificar y entender lenguaje natural, y las APIs de Google Calendar y Gmail para mis dos cuentas.
El principio rector de todo el diseño es uno solo: pipeline barato primero. Cada mensaje pasa por capas de filtrado donde cada capa es más cara que la anterior, y la mayoría muere gratis en la primera:
- Capa 0, alcance: solo DMs y los 39 grupos de trabajo que elegí vigilar. Estados, canales y los otros 954 grupos no existen.
- Capa 1, regex a costo $0:stickers, reacciones, "jaja", "ok", emojis sueltos quedan descartados sin gastar un token. Acá muere ~70% de lo que entra.
- Capa 2, LLM batcheado: lo que sobrevive se acumula y cada 5 minutos un solo call a gpt-4o-mini clasifica el lote entero.
- Capa 3, acción: urgente → push inmediato al teléfono; importante → digest cada hora; el resto → descartado.

El clasificador devuelve JSON estricto por cada mensaje:
{
"importante": true,
"urgente": false,
"categoria": "plata", // trabajo | plata | fechas | pedido
"resumen": "María envió la factura de julio y espera el pago",
"propuestaHorario": null, // detecta "¿te va mañana 15:00?"
"todo": "Pagar la factura de julio a María"
}Ese único JSON alimenta todo: el digest horario agrupado por categoría, las alertas urgentes, los to-dos sugeridos y las propuestas de horario. Un call, cuatro features. El digest se ve así:
Y como los mensajes que te mandás a vos mismo no suenan en el teléfono, lo urgente también llega como push real vía ntfy, con prioridad máxima y deep link al chat correcto:
El calendario se maneja hablando
La segunda mitad del bot es un asistente de agenda sobre mis dos cuentas de Google (la personal y la de 021). Acá también hay un gate barato: una regex decide si el texto parecede calendario, y solo entonces gpt-4o-mini lo convierte en una acción estructurada con fechas absolutas. "El jueves 3pm" se vuelve 2026-07-16T15:00 sin que yo piense en zonas horarias.
Memoria: promesas, gastos y lo que quedó dicho
Mi feature favorita es la que no pedí hasta el final: el detector de promesas. El bot lee lo que yoescribo en chats de trabajo, y cuando prometo algo ("mañana te mando la cotización") lo convierte en to-do con recordatorio a la hora que corresponde. Nadie más te cubre esa espalda.

A eso se suman recordatorios por lenguaje natural, registro de gastos por moneda, y un historial de 14 días de los chats vigilados que puedo interrogar como si fuera una persona que estuvo en todas mis conversaciones:
Hablarle, y que hable por vos
El canal funciona en las dos direcciones. Le puedo hablar por audio (los audios grabados por mí son comandos; los reenviados solo se transcriben), pedirle resúmenes de cualquier chat vigilado, y hasta dictarle respuestas que recién salen cuando yo las confirmo:
La capa que lo cambia todo: Claude Code y mi Brain
Acá es donde el bot deja de ser un filtro inteligente y se vuelve parte de algo más grande. En mi día a día ya trabajo con workflows de agentes: cotizaciones que se generan solas a partir de un PRD, e2e testing que encuentra la causa raíz y se auto-corrige, deploys que corren mientras duermo. Todo eso vive en Claude Code, y Claude ya está conectado al Company Brain de 021, el grafo de conocimiento del que escribí en otro post.

El bot es la puerta de entrada por WhatsApp a esa maquinaria: para tareas que le quedan grandes a un clasificador, puede levantar Claude Code y delegarle el trabajo pesado. Se ve así:
Y como Claude ya habla con el Brain, preguntarle algo de la empresa desde el teléfono es un mensaje de WhatsApp: el bot le pregunta a Claude, Claude le pregunta al Brain, y la respuesta vuelve al chat.
Decisiones de diseño con opinión
- El bot jamás escribe a terceros por su cuenta.La única función que envía mensajes a otras personas (borradores tipo "respondele a Juan que…") requiere preview exacto y confirmación explícita, y expira a los 5 minutos. Todo lo demás ocurre en mi autochat.
- Los audios reenviados nunca ejecutan comandos.Un audio grabado por mí puede ser un comando de voz; uno reenviado solo se transcribe. Si no, cualquiera podría mandarme un audio diciendo "borrá mi agenda" y yo reenviármelo sin pensar.
markOnlineOnConnect: false. Si el dispositivo vinculado se reporta online, WhatsApp deja de mandar notificaciones push al teléfono. Un bot que te silencia el teléfono es peor que no tener bot.- Push por fuera de WhatsApp. Los mensajes que te mandás a vos mismo no suenan. Para urgencias uso ntfy: push real, con prioridad, y el tap abre directamente el chat correcto vía deep link de wa.me.
War stories: los tres bugs que me gustaron
1. El \b que no banca tildes. Mis gates son regex, y JavaScript computa \b con \w ASCII: "é" no es word character. Resultado: "gasté 120 en hosting" no matcheaba gast[eéao]\w*\b y el bot me ignoraba en silencio. La regla que me llevo: en español, nunca cierres un gate con \b después de una posible tilde.
2. Dos instancias peleando por la sesión. Lancé una instancia de prueba mientras la de producción corría bajo pm2. WhatsApp solo permite una conexión por dispositivo vinculado: las dos entraron en un loop de reconexión mutua, pateándose cada 3 segundos. Parecía un bug del bot; era un conflicto de sesión.
3. El recordatorio que viajó al 2023.Le dije al clasificador de promesas qué día y hora era… pero no el año. Dedujo "mañana" en el año de su training data y me agendó un recordatorio tres años en el pasado. Los LLMs no asumen tu presente: decíselo completo.
Los números
- Costo: menos de $5 al mes todo incluido. Whisper para audios, gpt-4o-mini batcheado para clasificación y lenguaje natural, visión para imágenes. Google Calendar, Gmail y ntfy son gratis.
- Stack: Node + Baileys + pm2 en una Mac mini siempre prendida. Sin servidores nuevos, sin base de datos: el estado es un JSON y el historial son archivos JSONL con retención de 14 días.
- Tiempo: un par de horas iterando, usando el flujo de desarrollo con agentes que ya tengo armado. Cada feature se deployó y probó contra mis datos reales antes de la siguiente.
Lo que sigue
La próxima pieza es ops: que el bot haga ping a los servidores de mis clientes y me avise de una caída antes de que me la cuente el cliente, y que "¿está caído el server de X?" se responda con un status real por ssh.
Pero más que un roadmap, esto tiene un modo de crecer: mejora continua. Cada vez que me encuentro haciendo algo a mano dos veces, es candidato a volverse una capability del bot. Así aparecieron las promesas, los gastos y la búsqueda histórica, y así van a aparecer las que siguen.
La tesis ya está probada: no necesitaba otra app de productividad. Necesitaba que el canal donde ya vivo, el chat conmigo mismo, dejara de ser un bloc de notas y empezara a trabajar.