Mindundi
Un asistente al que una familia le habla como a una persona —por la web, Telegram, el correo o un cliente MCP— y que organiza la agenda, las tareas, la compra y lo que hay que recordar. Entiende fotos, PDF y notas de voz.
En producción desde septiembre de 2026, con acceso privado; se enseña en una demo guiada. Incluye un resumen diario a la hora que elige cada familia y avisos por Telegram con botones para completar o posponer. Están previstas nuevas vías de entrada, como Alexa y una aplicación móvil, sobre el mismo núcleo.
- Un agente de IA con permisos de escritura sobre datos reales, al que se le habla desde la web, Telegram, el correo o un cliente MCP, con una frontera de seguridad para lo que no escribe el usuario.
- Una sola declaración de lo que el sistema sabe hacer, de la que salen las herramientas del agente, el servidor MCP y el ejecutor con permisos, con tests que impiden que las superficies se separen.
- De la idea a producción en una semana (septiembre de 2026), con las decisiones escritas, una política de tests y un modelo de dominio rehecho tras la primera semana de uso.
- Operación completa en una VM pequeña y compartida: servicios, tareas programadas, copias y despliegues reversibles, con la memoria disponible decidiendo qué modelos corren dentro.
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.
Cada acción del dominio es una función de servicio que no sabe nada del canal. Encima, un registro declara una sola vez lo que el sistema sabe hacer —parámetros, permiso, si pide confirmación— y de él salen las herramientas del agente, las del servidor MCP y el ejecutor con permisos. Los mensajes en lenguaje natural entran por una recepción común; MCP llama directamente al ejecutor. Los formularios web aplican la misma política de permisos y llaman a los servicios de dominio. Las respuestas del agente se reparten por un registro de canales de salida.
- Una acción nueva se registra una vez y aparece en el agente y los clientes MCP. Los formularios web se añaden cuando la interfaz los necesita y llaman a los mismos servicios, con la misma política de permisos.
- Un correo o un mensaje reenviado puede dar lugar a consultas con permisos; las escrituras quedan en un plan que aprueba la persona autenticada, no quien lo envió.
- Tests que no comprueban lógica sino coherencia entre superficies, cada uno nacido de un fallo real que la suite en verde no vio.
Las evidencias60
- Agentes de IA con uso de herramientasMejor ejemplo del portfolioCódigo · Bajo petición
El modelo consulta antes de decidir, resuelve varias acciones en un mensaje («añade pañales y recuérdame llamar al fontanero» crea la compra y la tarea) y recibe los errores de validación para corregirse. Cada llamada pasa por el mismo ejecutor con permisos; las escrituras quedan auditadas y los borrados esperan una confirmación dentro del agente de la aplicación.
- Servidores MCPMejor ejemplo del portfolioCódigo · Bajo petición
- Seguridad de agentes LLM (prompt injection)Código · Bajo petición
- Registro único de herramientas (fuente única de verdad)Mejor ejemplo del portfolioCódigo · Bajo petición
- Arquitectura multicanalCódigo · Bajo petición
- IA multimodal (documentos, imagen y audio)Mejor ejemplo del portfolioCódigo · Bajo petición
- Arquitectura por capas (capa de servicios)Código · Bajo petición
- Modelado de dominioDecisión escrita · Bajo petición
- Refactorización del modelo de datosDecisión escrita · Bajo petición
- Desarrollo con agentes de código (AI-native)Documento · Bajo petición
- Context engineeringDocumento · Bajo petición
- Revisión de código generado por IADecisión escrita · Bajo petición
- Entrega rápida con IA sin perder calidadHistorial de commits · Bajo petición
- Tests de arquitectura y coherenciaCódigo · Bajo petición
- Function callingCódigo · Bajo petición
- Prompt engineeringCódigo · Bajo petición
- Conversación multiturno con memoriaMejor ejemplo del portfolioCódigo · Bajo petición
- LLM en producciónCódigo · Bajo petición
- Abstracción de proveedores de LLMMejor ejemplo del portfolioCódigo · Bajo petición
- RAG (Retrieval-Augmented Generation)Mejor ejemplo del portfolioCódigo · Bajo petición
- Extracción de datos con LLMCódigo · Bajo petición
- Optimización de costes de LLMMejor ejemplo del portfolioDecisión escrita · Bajo petición
- Adopción rápida de stacks nuevos con IAHistorial de commits · Bajo petición
- Arquitectura hexagonal (puertos y adaptadores)Código · Bajo petición
- Desarrollo web full stackCódigo · Bajo petición
- Configuración por entornoCódigo · Bajo petición
- Arquitectura multi-tenantCódigo · Bajo petición
- Renderizado en servidor (SSR)Código · Bajo petición
- Diseño de UX para usuarios no técnicosDecisión escrita · Bajo petición
- Internacionalización (i18n)Código · Bajo petición
- Sistema de diseñoCódigo · Bajo petición
- Búsqueda de texto completo y semánticaCódigo · Bajo petición
- Modelado minimalista (YAGNI)Decisión escrita · Bajo petición
- Integridad de datosCódigo · Bajo petición
- Migraciones de base de datosCódigo · Bajo petición
- Relaciones polimórficasCódigo · Bajo petición
- Administración de servidores LinuxCódigo · Bajo petición
- Despliegues reversibles (rollback)Código · Bajo petición
- Planificación de capacidadDecisión escrita · Bajo petición
- ObservabilidadCódigo · Bajo petición
- Control de acceso y autorizaciónCódigo · Bajo petición
- Autenticación y gestión de identidadesCódigo · Bajo petición
- Aislamiento de datos entre inquilinosMejor ejemplo del portfolioCódigo · Bajo petición
- Seguridad de aplicaciones webCódigo · Bajo petición
- Gestión de secretosCódigo · Bajo petición
- Integración de APIs de tercerosCódigo · Bajo petición
- Procesamiento idempotenteCódigo · Bajo petición
- Tareas programadasCódigo · Bajo petición
- Testing automatizadoCódigo · Bajo petición
- Tests de regresión y equivalenciaCódigo · Bajo petición
- Registros de decisiones de arquitectura (ADR)Documento · Bajo petición
- Documentación técnicaDocumento · Bajo petición
- Auditoría técnica y retrospectivasDocumento · Bajo petición
- Desarrollo de productoDocumento · Bajo petición
- Análisis de requisitos de negocioDecisión escrita · Bajo petición
- Gestión del alcanceDecisión escrita · Bajo petición
- Métricas de producto y adopciónDocumento · Bajo petición
- Autonomía de extremo a extremoHistorial de commits · Bajo petición
- Transparencia técnicaDocumento · Bajo petición
- Comunicación escritaDocumento · Bajo petición
Principios que se ven aquí28
- PrincipioCuando migro o refactorizo, verifico la equivalencia con código, no con confianza
- Las migraciones se revierten y se vuelven a aplicar sobre una base con datos antes de desplegar
- PrincipioEl modelo de datos primero, la herramienta después
- Revisión completa del dominio tras la primera semana de uso real, con los datos de uso delante
- PrincipioCuando el uso contradice el modelo, se rehace el modelo — y se escribe por qué
- El modelo de agenda, rehecho tras la primera semana en producción, con las razones y los datos escritos al lado
- PrincipioRigor donde importa, deuda consciente donde no — y saber decir en cuál está cada cosa
- Política de tests escrita: se testean los servicios, el contrato del intérprete, las regresiones y los permisos; no las plantillas ni el framework. Sin objetivos de cobertura, a propósito
- PrincipioLa autocrítica se publica, no se guarda
- El registro de decisiones publica los fallos propios, como que la web pedía menos permisos que el asistente
- 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
- Una acción, un servicio, escrito como norma innegociable y vigilado por un test que impide que un servicio quede sin clasificar
- PrincipioUna decisión sin su porqué es una decisión que se va a repetir mal
- Registro de decisiones numerado desde el primer día, escrito durante la construcción; los cambios de rumbo son entradas nuevas que citan a la anterior
- PrincipioEl contenido que llega de fuera es dato, no instrucción
- Modo propuesta: permite consultas con permisos, pero acumula las escrituras de lo reenviado o recibido por correo en un plan que confirma la persona autenticada
- El plan lo aprueba la persona autenticada, no el remitente, que se puede falsificar; remitentes y grupos en lista blanca y ficheros descargados solo tras comprobar la identidad
- Las reglas de encontrar antes de actuar se dan también a los clientes MCP externos: nada de deducir identificadores ni de ejecutar algo para averiguar qué es
- PrincipioEn producción, lo mínimo que resuelve el problema
- SQLite en producción, con WAL y copia diaria, en lugar de un servidor de base de datos que nadie iba a administrar; y búsqueda semántica sin base de datos vectorial ni servicio externo
- Trabajo periódico con timers de systemd y operaciones idempotentes, en lugar de un broker de colas
- PrincipioConstruyo sistemas, no piezas: diseño la siguiente fase y construyo solo la actual
- Añadir un canal no toca el núcleo, y la lista de la compra está pensada para admitir menús y un carrito automático, sin un solo campo añadido por adelantado
- PrincipioLos agentes, más para contrastar que para producir; y lo que dicen se verifica
- Un agente de otro proveedor revisa al primero desde el diseño, y de las propuestas de mejora del propio cliente MCP solo se aplicaron las que resistieron la comprobación contra el código
- PrincipioLo difuso se resuelve en el borde; el núcleo es determinista
- El modelo produce un comando estructurado que el núcleo valida antes de ejecutar, y su confianza solo decide si preguntar o proponer: nunca autoriza
- El resumen diario se compone sin modelo de lenguaje: el contenido ya existe, una plantilla acierta siempre y no puede inventarse una cita
- PrincipioLa petición no es el requisito: primero el problema que hay detrás
- Se pidieron categorías editables; el problema era no encontrar dónde poner algo, y lo resolvió un juego fijo y completo, sin modelo nuevo
- PrincipioCada dato tiene un solo sitio donde se escribe; el resto lo lee
- El cumpleaños vive en la ficha de la persona; crear uno aparte se rechaza con un error que dice dónde va
- PrincipioLo que se puede calcular no se escribe a mano
- La edad se calcula al leer, y los recuentos escritos a mano en la documentación se sustituyeron por referencias al registro, que no caducan
- PrincipioLo seguro es el camino por defecto, y se garantiza en un solo sitio
- Un único contrato de permisos para la web, el agente y el cliente MCP, que falla cerrado: sin persona no hay visibilidad
- PrincipioPrefiero un fallo visible a un éxito aparente
- El resumen diario se envía aunque no haya nada, porque el silencio no se distingue de un temporizador roto; y si el proveedor del modelo cae, se dice que no está disponible, no que no se entendió
- PrincipioUna red de seguridad que no he visto fallar no es una red
- Cada arreglo se da por bueno al reintroducir el fallo y ver que el test lo caza
- La copia diaria fallaba desde el primer día sin que nadie lo supiera; desde entonces cada copia pasa un control de integridad
- PrincipioLas reglas que importan las vigila una comprobación, no la memoria
- Tests que no comprueban lógica sino coherencia entre superficies —la web no puede hacer menos que el asistente, el prompt solo nombra herramientas que existen—, cada uno nacido de un fallo real que la suite en verde no vio
- PrincipioLo que tiene historia no se borra; lo que nunca fue, sí
- El historial de compras sobrevive aunque se borre la lista, y los hechos que se sustituyen en la memoria se conservan con cuándo dejaron de valer
- PrincipioEl dato dice cuánto sabe: vacío, provisional o validado
- Cada hecho de la memoria guarda quién lo afirmó y desde cuándo vale, y una insignia avisa cuando la búsqueda funciona degradada
- PrincipioCambio por debajo sin que lo note quien consume
- Un interruptor nuevo nace apagado pero se enciende donde ya había servicio, para no cortarlo en silencio; y los accesos antiguos siguen valiendo tras cambiar el método de autenticación
- PrincipioConstruyo donde vive el conocimiento del negocio; lo demás se compra o se enlaza
- La parte delicada del protocolo de autenticación es de la librería, no código propio
- PrincipioConsistente antes que ingenioso: lo nuevo hereda el molde de lo que ya funcionó
- La configuración y el despliegue se tomaron del molde de Ajuntaweb 2.0
- PrincipioEl sistema no promete lo que no hace
- Un test comprueba que el prompt solo nombra herramientas y campos que existen, y los textos que seguían prometiendo un comportamiento retirado se corrigieron y se vigilan
- PrincipioUn «no» lleva escrita la condición que lo reabriría
- Categorías fijas: si aparece un hueco real, añadir una son cinco líneas y un test; y lo retirado deja una marca en el código para que nadie lo reponga por intuición
- PrincipioNada existe sin consumidor
- Se retiró una interfaz común que nadie implementaba, porque una interfaz sin uso invita a usarla