Cómo entienden las apps de tareas "mañana a las 9"
Un recorrido corto por el procesamiento de fechas en lenguaje natural, los trucos de regex detrás, y por qué la IA en el dispositivo está cambiando lo posible.
Escribe “Email a Sam mañana a las 9” en una buena app de tareas y debería pasar una de dos cosas. O recibes la tarea como un objeto limpio con título “Email a Sam” y fecha de vencimiento puesta a las 9:00 del día siguiente, o la app no hace nada y tienes que rellenar un selector de fecha. La diferencia entre esos dos resultados es lo que determina si realmente usas la app.
El procesamiento de fechas en lenguaje natural lleva décadas existiendo. Impulsó Quicksilver. Impulsó Fantastical. Hoy impulsa básicamente cualquier app de productividad que valga la pena enviar. Pero la forma en que funciona por debajo ha cambiado de maneras interesantes en los últimos dos o tres años, y el resultado es que 2026 es el primer año en que esta tecnología está genuinamente resuelta para el inglés en la mayoría de las apps y empezando a funcionar bien en otros idiomas.
Esta entrada es un recorrido por cómo funciona.
La forma básica del problema
El usuario escribe una frase. La app necesita:
- Decidir si la frase siquiera contiene una fecha.
- Si la contiene, encontrar qué fragmento del texto se refiere a la fecha.
- Resolver ese fragmento en una fecha y hora absolutas.
- Quitar el fragmento de fecha de la frase para que el texto restante sea solo el título de la tarea.
Cada uno de estos pasos tiene sus propios modos de fallo. La mayoría de las primeras implementaciones eran frágiles en el paso uno, generando falsos positivos. “Recoger los 15 informes” no debería recibir una fecha del día 15. “Comprar 3 manzanas” no debería interpretarse como algún tipo de tres-cosas. “Email a Sam en IBM” probablemente no está fijando la hora a “en I.B.M.”
La estrategia clásica son las expresiones regulares. Son sorprendentemente buenas para esto. Un puñado de patrones cuidadosamente escritos puede reconocer más del 90% de las frases de fecha que la gente realmente escribe en apps de tareas:
\bin\s+(a|an|\d+|some|several)\s+(min|minute|minutes|hour|hours|hr|hrs|day|days|week|weeks|month|months)\b\b\d{1,2}(:\d{2})?\s*(am|pm)\b\b(tomorrow|today|tonight|noon|midnight)\b\b(monday|tuesday|wednesday|thursday|friday|saturday|sunday)\b
Combina quince o veinte de estos patrones y cubres la cola larga. Después juntas las coincidencias: una palabra de día más una palabra de hora se convierte en un instante específico. Un nombre de día sin calificador significa “la siguiente ocurrencia de ese día.” Una palabra de hora sin día significa hoy.
Donde la regex se queda corta
La regex choca contra una pared en tres tipos de entrada:
- Frases vagas. “En algún momento de la próxima semana” es una fecha pero no específica.
- Ambigüedad. “Viernes por la tarde” podría ser las 14h o las 16h según la convención.
- Faltas de ortografía y jerga. “mñn a las 9p” lo entiende un humano pero no una regex estricta sin muchas variantes.
Por mucho tiempo, las apps de tareas simplemente se encogían de hombros ante estos casos. Si escribías “mñn a las 9p” no obtenías nada. Si escribías “primera cosa mañana” no obtenías nada. El usuario aprendía a escribir la versión formal.
El desarrollo interesante del último año es que los modelos de lenguaje en el dispositivo ahora pueden manejar estos casos sin enviar nada por la red. El framework Foundation Models de Apple, disponible desde macOS 26, incluye un modelo que corre localmente y es lo bastante rápido para usarse como respaldo cuando la regex falla. Google tiene una oferta similar en Android. El patrón resultante se ve así:
El camino rápido cubre el 90% de los casos. El modelo cubre el resto. Ninguna de las dos etapas envía el texto del usuario por la red. La privacidad y la velocidad se preservan ambas.
Por qué “en 2 horas” es más difícil de lo que parece
La frase “en 2 horas” parece fácil. No lo es.
El usuario podría querer decir cualquiera de los siguientes:
- 2 horas a partir de ahora mismo, al minuto.
- 2 horas a partir de ahora mismo, redondeadas al cuarto de hora más cercano por limpieza.
- 2 horas a partir de ahora mismo, pero si cae durante las horas de sueño marcadas del usuario, la mañana siguiente.
- 2 horas a partir del inicio de la próxima hora (“en 2 horas” dicho a las 13:55 podría significar las 16:00, no las 15:55).
La mayoría de las apps toman una decisión y la mantienen. La más común es “2 horas a partir de ahora mismo, al minuto,” que cambia elegancia por previsibilidad. Un usuario que escribe “en 2 horas” a las 13:23 recibe una notificación a las 15:23. Aprende a escribir números enteros cuando quiere horas limpias.
Por qué “mañana” se predetermina a las 9 de la mañana
Cuando escribes “mañana” sin hora, una app tiene que elegir una hora. La convención ha convergido en las 9:00 en casi todas las apps del mercado. ¿Por qué?
Porque el coste de equivocarse es asimétrico. Si la app elige las 9 y tú querías las 11, puedes ajustarlo rápido cuando lo notes. Si la app elige medianoche o alguna otra hora aleatoria, recibes una notificación mientras duermes o te la pierdes por completo. Las 9 son el predeterminado seguro para casi cualquier tipo de tarea de trabajo.
Algunas apps usan las 8 por defecto. Algunas usan la hora del día en que escribiste la tarea (“dijiste a las 14:00, así que probablemente quieres decir 14:00 mañana”). Lo segundo es ingenioso pero poco fiable, porque la mayoría de la gente que escribe una tarea a las 14:00 lo hace durante la jornada laboral para tareas que quieren hacer durante una jornada laboral futura, no exactamente a las 14:00 del día siguiente.
Cómo se ve esto dentro de TodoBar
TodoBar usa el patrón de dos etapas descrito arriba. Escribe cualquier tarea con una frase temporal y la capa de regex se dispara primero, en menos de un milisegundo. Si encuentra una fecha, la tarea aparece en tu lista con la hora correcta. Si la capa de regex no puede resolver la frase, el clasificador de Foundation Models en el dispositivo lo intenta, con una latencia típica de unos 50 milisegundos. En cualquier caso, ningún texto sale de tu Mac.
Los patrones que reconoce la capa de regex están documentados en la página de soporte. Como referencia rápida, todos estos funcionan:
- “en 30 minutos”
- “en 2 horas”
- “en un par de horas”
- “mañana”
- “mañana a las 9”
- “esta noche”
- “esta noche a las 8”
- “el próximo viernes”
- “viernes a las 5pm”
- “12 de mayo”
- “12 de mayo a las 2pm”
- “el día 15”
- “en 3 días”
- “1 semana desde ahora”
- “primera cosa mañana”
Si escribes algo que el procesador no puede manejar, la tarea se añade igual sin fecha de vencimiento, y puedes adjuntarle una manualmente desde el botón de campana de la fila. El modo de fallo del procesador es “sin fecha adjunta,” no “tarea perdida.”
Hacia dónde va todo esto
La siguiente frontera interesante es el procesamiento multilingüe. Frases en español como “mañana a las 9” deberían funcionar tan bien como su equivalente en inglés, y cada vez funcionan más en apps que se toman en serio la localización. El modelo en el dispositivo de Apple maneja bien el español en nuestras pruebas internas. El mismo enfoque funcionará para francés, alemán, japonés y probablemente la mayoría de los idiomas grandes en el próximo año.
Las piezas están todas aquí. Lo que solía ser una costosa ida y vuelta a la nube es ahora una llamada local de función que toma 50 milisegundos. Que una app de tareas independiente pueda enviar eso, gratis, sin factura de inferencia por usuario, es la historia real.
TodoBar es una lista de tareas amigable para la barra de menú de macOS. Fechas en lenguaje natural, atajo global, sincronización con iCloud. Paga una vez, tuyo para siempre.
Conseguir TodoBar en el App Store