montajes / FI-007

Publicada el · Actualizada el

aitorconia_.montajes1 / 5
/ 00FichalecturaNivel medio

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.

Ilustracion de apertura de la guia FI-007
@aitorconia · biblioteca de montajes · 2026
aitorconia_.montajes ~ indice.md2 / 5
/ 00Índice

Lo que hay dentro, de principio a fin

Qué obtienes
Un asistente personal ejecutandose en tu máquina al que le escribes desde Telegram, Discord o iMessage, con memoria persistente, voz opcional, programador de tareas y puente con WhatsApp.
Tiempo
Menos de 10 minutos para la instalación guiada tras tener Node 20+ y claude en el PATH.
Coste extra
La suscripción a Claude Code cubre el uso base. Las funciones opcionales tienen capa gratuita (Groq, ElevenLabs, Gemini) y pueden costar alrededor de 1 EUR/mes con uso ligero de voz.
Necesitas
Mac o Linux (Windows requiere pasos manuales), Node.js 20+, Claude Code CLI instalado y autenticado, una cuenta de Telegram para crear el bot con @BotFather.
Se rompe si
Usas 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.
@aitorconia · FI-007
aitorconia_.montajes ~ seccion-01.md3 / 5
/ 01idea aprovechable

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.

/ 02original ya

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 originalEstado 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 PuppeteerWhatsApp bloquea este tipo de bridges; los que sobreviven lo hacen por APIs oficiales.
bypassPermissions como modo por defectoSi el bot es personal está justificado, pero conviene dejarlo documentado y desactivable.
Tabla memories con FTS5 y triggers artesanalesFunciona, pero exige triggers INSERT/UPDATE/DELETE bien escritos para mantener FTS sincronizado.
launchd con KeepAlive y ThrottleInterval afinadoAplicable, pero hay que recordar limpiar el .pid al apagar para que no quede zombie.
Asistente de instalación con osascript para iMessageLos 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.

/ 03Mínimo viable

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:

@aitorconia · FI-007
aitorconia_.montajes ~ seccion-04.md4 / 5
Viene de la hoja anterior
Proyecto TypeScript con 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).
Un 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.

/ 04Decisiones pesan

Decisiones que pesan voz, programador y WhatsApp

Tres opciones del cuestionario original cambian el coste y el riesgo del montaje:

OpciónPara qué sirveCoste realRecomendación
stt_groqTranscribir notas de voz con WhisperCapa gratuita ampliaActivar si usas la voz en el coche
tts_elevenlabsResponderte con tu vozCapa gratuita + ~1 EUR/mesOpcional, pesa más el gusto que la productividad
schedulerTareas cron tipo briefing diario0 EURMuy útil, pero exige memoria persistente para no repetir contexto
whatsappLeer y responder WhatsApp desde el bot0 EUR pero frágilEvitar hoy por los bloqueos de WhatsApp contra bridges de Puppeteer
serviceArranque automático con launchd/systemd0 EURActivar siempre; recuerda ThrottleInterval >= 5 para no entrar en bucle
multiuserVarios ALLOWED_CHAT_ID con sesiones aisladas0 EURSolo 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.

/ 05Errores original

Errores que el original ya documenta y que conviene no repetir

Antes de tocar código, repasa esta lista corta de trampas conocidas:

@aitorconia · FI-007
aitorconia_.montajes ~ seccion-cont.md5 / 5
Viene de la hoja anterior

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.

@aitorconia · FI-007 · fin

Relacionadas

Más del mismo tema

Siguiente paso

Llévalo a la práctica

markdown