Publicada el · Actualizada el
ClaudeClaw Lite asistente personal de Claude Code desde el móvil
Una idea potente que mezcla un bot de mensajeria con el CLI de Claude Code: en lugar de inventar un envoltorio alrededor de una API, se lanza el mismo proceso claude que ya usas en la terminal y se le habla desde el móvil. La promesa es real, pero la forma de montarlo del original tiene partes que ya están desfasadas.

Lo que hay dentro, de principio a fin
claude en el PATH.new URL(import.meta.url).pathname con carpetas que contienen espacios, olvidas el trigger de FTS5 en la tabla de memorias, dejas el setInterval del indicador "escribiendo..." sin limpiar, o activas el programador sin desactivar bypassPermissions.La idea aprovechable lanzar el CLI real, no envolver una API
El acierto de fondo del proyecto es renunciar al patrón "wrapper de API" y lanzar el binario claude como subproceso con @anthropic-ai/claude-agent-sdk. Eso significa que el bot hereda tus skills globales (~/.claude/skills/), tus servidores MCP, tu CLAUDE.md y la reanudación de sesión por chat. No es un chatbot tuneado: es el mismo Claude Code al que le hablas desde el sofá.
El truco está en permissionMode: 'bypassPermissions' para que el subproceso no se quede bloqueado pidiendo confirmación de cada herramienta en un terminal sin nadie delante.
La conversación se reanuda pasando a query() el sessionId guardado en SQLite para cada chat. El comando /newchat borra la fila y empieza una conversación limpia.
Lo que el original ya está desfasado pegamento de bots y configuración dispersa
El documento original es un megaproMPT dirigido a Claude Code que describe capa por capa un proyecto de unas 2.800 líneas de TypeScript con siete tablas SQLite, integración completa con WhatsApp vía Puppeteer, generador de plantillas launchd/systemd, asistente de instalación interactivo de 700 líneas y un motor de memoria con doble sector y decaimiento. Si lo que necesitas es la idea y un montaje realista, esa fábrica entera no te aporta.
Las partes que el original arrastra y que ya no encajan:
| Pieza del original | Estado actual |
|---|---|
| MegaproMPT para que Claude Code construya el proyecto al vuelo | Útil como inspiración, pero el resultado es difícil de mantener y versionar. |
wa-daemon con whatsapp-web.js y Puppeteer | WhatsApp bloquea este tipo de bridges; los que sobreviven lo hacen por APIs oficiales. |
bypassPermissions como modo por defecto | Si el bot es personal está justificado, pero conviene dejarlo documentado y desactivable. |
Tabla memories con FTS5 y triggers artesanales | Funciona, pero exige triggers INSERT/UPDATE/DELETE bien escritos para mantener FTS sincronizado. |
launchd con KeepAlive y ThrottleInterval afinado | Aplicable, pero hay que recordar limpiar el .pid al apagar para que no quede zombie. |
Asistente de instalación con osascript para iMessage | Los permisos de Accesibilidad en macOS son frágiles y cambian entre versiones. |
Si copias el megaproMPT del original tal cual, acabarás con un proyecto que ningún IDE maneja bien y que rompe en cuanto cambias una ruta con espacios. Vale más clonar el repo y leer su README.
Mínimo viable que sí merece la pena un bot de Telegram con memoria simple
Si quieres llevarte la idea sin comerte toda la fábrica, el montaje útil es este:
tsx para desarrollo y tsc para producción.@anthropic-ai/claude-agent-sdk para lanzar el CLI con resume y settingSources: ['project', 'user'].better-sqlite3 en modo WAL con dos tablas: sessions(chat_id, session_id) y turns si prefieres memoria simple.grammy para Telegram, porque es la vía más estable y mejor documentada.CLAUDE.md en la raíz con tu nombre, tus skills y tus normas de estilo (sin frases IA, sin guiones largos).notify.sh para que el bot te avise al móvil en tareas largas.Con este esquema, cualquier skill que instales en ~/.claude/skills/ queda disponible para tu bot sin tocar nada.
Decisiones que pesan voz, programador y WhatsApp
Tres opciones del cuestionario original cambian el coste y el riesgo del montaje:
| Opción | Para qué sirve | Coste real | Recomendación |
|---|---|---|---|
stt_groq | Transcribir notas de voz con Whisper | Capa gratuita amplia | Activar si usas la voz en el coche |
tts_elevenlabs | Responderte con tu voz | Capa gratuita + ~1 EUR/mes | Opcional, pesa más el gusto que la productividad |
scheduler | Tareas cron tipo briefing diario | 0 EUR | Muy útil, pero exige memoria persistente para no repetir contexto |
whatsapp | Leer y responder WhatsApp desde el bot | 0 EUR pero frágil | Evitar hoy por los bloqueos de WhatsApp contra bridges de Puppeteer |
service | Arranque automático con launchd/systemd | 0 EUR | Activar siempre; recuerda ThrottleInterval >= 5 para no entrar en bucle |
multiuser | Varios ALLOWED_CHAT_ID con sesiones aisladas | 0 EUR | Solo si compartes máquina |
El truco de renombrar .oga a .ogg antes de enviar a Groq sigue siendo necesario: el formato es el mismo, pero la API de Whisper filtra por extensión.
Errores que el original ya documenta y que conviene no repetir
Antes de tocar código, repasa esta lista corta de trampas conocidas:
1. Resuelve siempre PROJECT_ROOT con fileURLToPath(import.meta.url). La propiedad .pathname deja %20 literal y revienta rutas tipo ~/Desktop/Mis Proyectos/. 2. No escribas en process.env al leer .env. El subproceso de Claude hereda el entorno y puedes filtrar secretos. 3. Limpia el setInterval del "escribiendo..." justo cuando vuelva runAgent(). Si se queda vivo, te gasta el rate limit de Telegram. 4. En FTS5, declara triggers INSERT/UPDATE/DELETE para mantener memories_fts sincronizado con la tabla base. 5. Si usas bypassPermissions, documenta que es tu máquina y tu chat, y deja un interruptor para apagarlo.
Con esto tienes la esencia del proyecto sin atarte a un megaproMPT que caduca. La idea aprovechable es lanzar el CLI real desde el móvil; el "cómo" del original sigue siendo un buen punto de partida para tu propio montaje, pero ya pide una reescritura para mantenerse sano.

