Como as apps de tarefas entendem 'amanhã às 9h'
Uma visita rápida à análise de datas em linguagem natural, os truques de expressões regulares por trás disso, e por que a IA no dispositivo está a mudar o que é possível.
Escreve “Email ao Sam amanhã às 9h” numa boa app de tarefas e uma de duas coisas deve acontecer. Ou recebes a tarefa de volta como um objeto limpo com título “Email ao Sam” e uma data de entrega definida para as 9:00 do dia seguinte, ou a app não faz nada e tens de preencher um seletor de data. A diferença entre esses dois resultados é o que determina se realmente usas a app.
A análise de datas em linguagem natural existe há décadas. Alimentou o Quicksilver. Alimentou o Fantastical. Hoje alimenta praticamente todas as apps de produtividade que valem a pena lançar. Mas a forma como funciona por baixo mudou de formas interessantes nos últimos dois ou três anos, e o resultado é que 2026 é o primeiro ano em que esta tecnologia está genuinamente resolvida para inglês na maioria das apps e a começar a funcionar bem noutros idiomas.
Este artigo é uma visita a como funciona.
A forma básica do problema
Um utilizador escreve uma frase. A app precisa de:
- Decidir se a frase contém sequer uma data.
- Se contiver, encontrar qual o trecho do texto que se refere à data.
- Resolver esse trecho numa data e hora absolutas.
- Remover o trecho da data da frase para que o texto restante seja apenas o título da tarefa.
Cada um destes passos tem os seus próprios modos de falha. A maioria das implementações iniciais eram frágeis no passo um, gerando falsos positivos. “Ir buscar os 15 relatórios” não deve obter uma data de entrega do dia 15 do mês. “Comprar 3 maçãs” não deve ser interpretado como algum tipo de três-alguma-coisa. “Email ao Sam na IBM” provavelmente não está a fixar a hora “na I.B.M.”
A estratégia clássica são as expressões regulares. São surpreendentemente boas nisso. Um punhado de padrões cuidadosamente escritos pode reconhecer mais de 90% das frases de data que as pessoas realmente escrevem nas apps de tarefas:
\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 quinze ou vinte destes padrões e cobres a cauda longa. Depois encaixes as correspondências: uma palavra de dia mais uma palavra de hora torna-se um instante específico. Um nome de dia da semana sem qualificador significa “a próxima ocorrência desse dia da semana.” Uma palavra de hora sem dia significa hoje.
Onde as expressões regulares falham
As expressões regulares atingem um limite em três tipos de entrada:
- Frases vagas. “Algures na próxima semana” é uma data mas não uma específica.
- Ambiguidade. “Sexta à tarde” pode ser às 14h ou às 16h dependendo da convenção.
- Erros ortográficos e calão. “amnhã às 9” é analisável por um humano mas não por uma expressão regular estrita sem muitas variantes.
Durante muito tempo, as apps de tarefas simplesmente ignoravam estes casos. Se escrevesses “amnhã às 9” não obtinhas nada. Se escrevesses “logo de manhã amanhã” não obtinhas nada. O utilizador aprendia a escrever a versão formal.
O desenvolvimento interessante do último ano é que os modelos de linguagem no dispositivo conseguem agora lidar com estes casos sem enviar nada pela rede. O framework Foundation Models da Apple, disponível desde o macOS 26, lança um modelo que corre localmente e é suficientemente rápido para usar como fallback quando as expressões regulares falham. O Google tem uma oferta semelhante no Android. O padrão resultante parece assim:
O caminho rápido cobre os 90% dos casos. O modelo trata do resto. Nenhum estágio envia o texto do utilizador pela rede. Privacidade e velocidade são ambas preservadas.
Por que “em 2 horas” é mais difícil do que parece
A frase “em 2 horas” parece fácil. Não é.
O utilizador pode querer dizer qualquer um dos seguintes:
- 2 horas a partir de agora, ao minuto.
- 2 horas a partir de agora, arredondado para os 15 minutos mais próximos para limpeza.
- 2 horas a partir de agora, mas se isso cair durante as horas de sono marcadas do utilizador, na manhã seguinte.
- 2 horas a partir do início da hora seguinte (“em 2 horas” dito às 13:55 pode significar 16:00, não 15:55).
A maioria das apps faz uma escolha e mantém-na. A mais comum é “2 horas a partir de agora, ao minuto”, que troca elegância por previsibilidade. Um utilizador que escreveu “em 2 horas” às 13:23 recebe uma notificação às 15:23. Aprendem a escrever números inteiros quando querem horas exatas.
Por que “amanhã” tem como padrão as 9h
Quando escreves “amanhã” sem hora, uma app tem de escolher uma hora. A convenção convergiu para as 9:00 em quase todas as apps do mercado. Porquê?
Porque o custo de adivinhar errado é assimétrico. Se a app escolhe as 9h e querias as 11h, podes ajustar rapidamente quando notas. Se a app escolhe meia-noite ou alguma outra hora aleatória, recebes uma notificação enquanto dormes ou perdes-a completamente. As 9h são o padrão seguro para quase todo o tipo de tarefa de trabalho.
Algumas apps têm como padrão as 8h. Algumas usam a hora do dia em que escreveste a tarefa (“disseste-o às 14h, por isso provavelmente queres dizer às 14h de amanhã”). Esta última é inteligente mas pouco fiável, porque a maioria das pessoas que escreve uma tarefa às 14h está a fazê-lo durante o dia de trabalho para tarefas que quer fazer durante um dia de trabalho futuro, não exatamente às 14h do dia seguinte.
Como isto parece dentro do TodoBar
O TodoBar usa o padrão de dois estágios descrito acima. Escreve qualquer tarefa com uma frase temporal e a camada de expressões regulares dispara primeiro, em menos de um milissegundo. Se encontrar uma data, a tarefa aparece na tua lista com a hora de entrega certa associada. Se a camada de expressões regulares não conseguir resolver a frase, o classificador Foundation Models no dispositivo tenta, com uma latência típica de cerca de 50 milissegundos. De qualquer forma, nenhum texto sai do teu Mac.
Os padrões que a camada de expressões regulares reconhece estão documentados na página de suporte. Como referência rápida, todos estes funcionam:
- “em 30 minutos”
- “em 2 horas”
- “daqui a um par de horas”
- “amanhã”
- “amanhã às 9h”
- “hoje à noite”
- “hoje à noite às 8”
- “próxima sexta”
- “sexta às 17h”
- “12 de maio”
- “12 de maio às 14h”
- “dia 15”
- “em 3 dias”
- “daqui a 1 semana”
- “logo de manhã amanhã”
Se escreveres algo que o analisador não consegue tratar, a tarefa é adicionada na mesma sem data de entrega, e podes associar uma manualmente a partir do botão de sino da linha. O modo de falha do analisador é “sem data associada”, não “tarefa perdida.”
Para onde vai tudo isto
A próxima fronteira interessante é a análise multilingue. Frases em português como “amanhã às 9” devem funcionar tão bem quanto o equivalente inglês, e cada vez mais o fazem em apps que levam a localização a sério. O modelo no dispositivo da Apple trata bem o espanhol nos nossos testes internos. A mesma abordagem funcionará para o francês, o alemão, o japonês, e provavelmente a maioria dos principais idiomas dentro do próximo ano.
As peças estão todas aqui. O que costumava ser uma cara ida e volta à nuvem é agora uma chamada de função local que demora 50 milissegundos. O facto de uma app de tarefas indie poder lançar isso, gratuitamente, sem fatura de inferência por utilizador, é a história real.
TodoBar é uma lista de tarefas simpática na barra de menus para macOS. Datas em linguagem natural, atalho global, sincronização com iCloud. Pagas uma vez, fica tua para sempre.
Obter o TodoBar na App Store