Mindundi
Un asistente que gestiona la agenda, las tareas, la compra y la memoria de una familia, al que se le habla en lenguaje natural desde la web, Telegram, el correo o un cliente MCP, y que entiende fotos, PDF y notas de voz.
Desplegado el 16-09-2026 y en piloto, con usuarios de prueba. Es un proyecto joven y se dice así: lo que demuestra no es madurez de años, es densidad y método en muy poco tiempo.
La logística de una familia vive en la cabeza de una o dos personas y en conversaciones que se pierden. Las aplicaciones de listas y calendarios existen, pero exigen que alguien traduzca la vida a formularios, y esa traducción es precisamente el trabajo que nadie quiere hacer. El resultado es que la información está en el móvil de quien la apuntó, o no está.
La interfaz no es la aplicación: es la conversación. Cualquier superficie —web, Telegram, correo, un cliente MCP— llama exactamente a la misma acción de dominio, así que añadir un canal no toca el núcleo. Quitando eso, es una aplicación de tareas más con un bot pegado al lado.
Una capa de servicios de dominio por aplicación, agnóstica de interfaz, sobre la que se declara un registro único de capacidades; de ese registro derivan el catálogo de herramientas del LLM, las tools del servidor MCP, el ejecutor con permisos y la documentación. Los canales de entrada convergen en un único Inbox y las salidas divergen en un Notifier.
- El registro de capacidades es la declaración única: 64 capacidades (54 de escritura, 10 de lectura, 9 sensibles con confirmación forzada) de las que se derivan cuatro superficies sin duplicar contrato.
- El contenido que llega de fuera no ejecuta nada: correo y mensajes reenviados entran en modo propose-only, el agente acumula un plan y un humano lo confirma.
- Doce redes de test que no comprueban lógica sino coherencia entre superficies; cada una nació de un fallo real que la suite en verde no vio.
Lo que demuestra20
- Construir y operar un servidor MCPCódigo · Verificable públicamente
Expone las 64 capacidades del registro como tools MCP, con el esquema derivado de los parámetros Pydantic de cada capacidad. Dos transportes: stdio para desarrollo y Streamable-HTTP tras TLS en producción. La identidad se resuelve por Bearer token contra una identidad externa; un token inválido no cae al usuario por defecto. Cada llamada pasa por el mismo ejecutor que la web, con los mismos permisos y la misma auditoría.
- Declarar una sola vez lo que el sistema sabe hacer y derivar de ahí todas las superficiesCódigo · Verificable públicamente
- Implementar un bucle agéntico de uso de herramientasCódigo · Verificable públicamente
- Proteger un agente con permisos de escritura frente a contenido no confiableDecisión escrita · Verificable públicamente
- Abstraer el proveedor de LLM tras un contrato propioCódigo · Verificable públicamente
- Procesar PDF, imagen y audio dentro del flujoDecisión escrita · Verificable públicamente
- Verificar coherencia entre superficies, no solo lógicaDocumento · Verificable públicamente
- Auditar críticamente lo que produce el agente, con códigoDecisión escrita · Verificable públicamente
- Montar y operar un servidor Linux de producción desde ceroCódigo · Verificable públicamente
- Decidir con la restricción de recursos delante, y escribirlaDecisión escrita · Documento propio
- Rehacer el modelo cuando el uso lo contradiceDocumento · Verificable públicamente
- Garantizar y verificar el aislamiento entre inquilinosDecisión escrita · Verificable públicamente
- Implementar búsqueda: texto completo y semánticaCódigo · Verificable públicamente
- Diseñar un sistema multicanal (entrada converge, salida diverge)Código · Verificable públicamente
- Internacionalizar de verdad y verificarloCódigo · Verificable públicamente
- Documentar decisiones con su porqué, mientras se tomanDocumento · Verificable públicamente
- Autorizar por acción con un contrato único en todas las fronterasCódigo · Verificable públicamente
- Diseñar una capa de servicios de dominio agnóstica de interfazCódigo · Verificable públicamente
- Gobernar agentes de código con reglas y contexto explícitosDocumento · Verificable públicamente
Principios que se ven aquí9
- PrincipioCuando migro o refactorizo, verifico la equivalencia con código, no con confianza
- 12 redes estructurales que no comprueban lógica sino coherencia entre superficies; cada una nació de un fallo real que la suite en verde no vio
- PrincipioEl modelo de datos primero, la herramienta después
- Revisión de dominio completa tras una semana de uso real, con la evidencia delante
- PrincipioCuando el uso contradice el modelo, se rehace el modelo — y se escribe por qué
- REVISION_DOMINIOS.md (33 KB): el modelo de agenda rehecho tras la primera semana en producción, con las razones y los datos
- PrincipioRigor donde importa, deuda consciente donde no — y saber decir en cuál está cada cosa
- Política de testing escrita: se testean servicios, contrato del intérprete, regresiones y permisos. No se testean plantillas decorativas ni Django. Sin objetivos de cobertura, a propósito
- PrincipioPrefiero lo que sobrevive diez años a lo que brilla seis meses
- Bootstrap e iconos servidos en local, sin CDN; versiones fijadas a propósito: actualizar es un acto consciente
- PrincipioUna acción existe una vez; todas las interfaces la llaman
- D50, declarada innegociable, con un test (ServiceCoverageTests) que impide que un servicio quede sin clasificar
- PrincipioUna decisión sin su porqué es una decisión que se va a repetir mal
- 73 ADRs en DECISIONS.md, escritos durante la construcción
- PrincipioEl contenido que llega de fuera es dato, no instrucción
- Modo propose-only: el contenido reenviado o recibido por email no ejecuta nada; el agente acumula un plan que un humano confirma
- Descarga de ficheros solo tras pasar allowlist e identidad; base64 nunca persistido en el hilo
- PrincipioEn producción, lo mínimo que resuelve el problema
- SQLite en producción con WAL, synchronous en FULL y copia diaria, en lugar de un servidor de base de datos que nadie iba a administrar
- Trabajo periódico con timers de systemd y operaciones idempotentes, en lugar de un broker de colas