- Mensaje en Telegram → Agente
- Agente → CLI fin (JSON)
- CLI fin (JSON) → Clasificador
- CLI fin (JSON) → SQLite
- SQLite → App web + push
El problema
Llevar las finanzas personales y las de Nimbo en planillas no funcionaba: cargar cada gasto era fricción y los resúmenes de tarjeta en PDF quedaban sin revisar.
Qué construí
- Un agente en Telegram: le escribo “gasté 12.000 en el súper” o le mando el PDF del resumen, y lo registra.
- Una CLI propia (
fin) que es la única puerta a los datos: el agente la usa y recibe JSON. Nunca escribe SQL directo, que fue justamente la falla de la versión anterior. - Clasificación de cada movimiento con un modelo de decisiones tipadas, con umbral de confianza y reglas de respaldo si el proveedor falla o se agota el presupuesto.
- Una app web instalable con avisos push: resumen, radar de desvíos, informe semanal de oportunidades y la administración de Nimbo (presupuestos, tarifario, cobros).
Cómo funciona
El agente corre con permisos mínimos: solo puede ejecutar fin y solo lee archivos de su espacio de
trabajo. Lo probé con consignas maliciosas, como pedirle que lea la configuración o que ejecute otro comando,
y no puede. La app es estática y se regenera en cada escritura; el backend es Python con la biblioteca
estándar y SQLite.
Estado y resultado
En producción, en uso diario. Cargar un gasto lleva un mensaje y los resúmenes de tarjeta se importan solos.
Stack
- OpenClaw
- Python
- SQLite
- Telegram
- Vite
- Web Push