Como os apps de tarefas entendem 'amanhã às 9h'
Um tour rápido pela interpretação de datas em linguagem natural, os truques de regex por trás dela e por que a IA no dispositivo está mudando o que é possível.
Digite “Email para o Sam amanhã às 9h” em um bom app de tarefas e uma de duas coisas deve acontecer. Ou você recebe a tarefa de volta como um objeto limpo com o título “Email para o Sam” e uma data de vencimento definida para 9h do dia seguinte, ou o app não faz nada e você tem que preencher um seletor de data. A diferença entre esses dois resultados é o que determina se você realmente vai usar o app.
A interpretação de datas em linguagem natural existe há décadas. Alimentou o Quicksilver. Alimentou o Fantastical. Hoje alimenta praticamente todo app de produtividade que vale a pena lançar. Mas a forma como funciona por baixo mudou de maneiras interessantes nos últimos dois ou três anos, e o resultado é que 2026 é o primeiro ano em que essa tecnologia está genuinamente resolvida para o inglês na maioria dos apps e começa a funcionar bem em outros idiomas.
Este texto é um tour de como funciona.
A forma básica do problema
Um usuário digita uma frase. O app precisa:
- Decidir se a frase contém uma data.
- Se sim, encontrar qual parte do texto se refere à data.
- Resolver essa parte em uma data e hora absolutas.
- Remover a parte da data da frase para que o texto restante seja apenas o título da tarefa.
Cada uma dessas etapas tem seus próprios modos de falha. A maioria das implementações iniciais era frágil na etapa um, gerando falsos positivos. “Buscar os 15 relatórios” não deveria receber uma data de vencimento do dia 15. “Comprar 3 maçãs” não deveria ser interpretado como algum tipo de três-alguma-coisa. “Email para o Sam na IBM” provavelmente não está fixando o horário em “na I.B.M.”
A estratégia clássica são expressões regulares. São surpreendentemente boas nisso. Alguns padrões cuidadosamente escritos podem reconhecer mais de 90% das frases de data que as pessoas realmente digitam em 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
Combine quinze ou vinte desses padrões e você cobre a cauda longa. Depois você une as correspondências: uma palavra de dia mais uma palavra de hora se torna um instante específico. Um nome de dia da semana sem qualificador significa “a próxima ocorrência daquele dia da semana”. Uma palavra de hora sozem sem dia significa hoje.
Onde o regex falha
O regex encontra um obstáculo em três tipos de entrada:
- Frases vagas. “Em algum momento da próxima semana” é uma data, mas não uma específica.
- Ambiguidade. “Na tarde de sexta” pode ser 14h ou 16h dependendo da convenção.
- Erros de digitação e gírias. “amnh às 9” é interpretável por um humano, mas não por um regex estrito sem muitas variantes.
Por muito tempo, os apps de tarefas simplesmente encogiam os ombros para isso. Se você digitasse “amnh às 9” não recebia nada. Se você digitasse “logo cedo amanhã” não recebia nada. O usuário aprendia a digitar a versão formal.
O desenvolvimento interessante do último ano é que os modelos de linguagem no dispositivo agora conseguem lidar com esses casos sem enviar nada pela rede. O framework Foundation Models da Apple, disponível desde o macOS 26, vem com um modelo que roda localmente e é rápido o suficiente para usar como fallback quando o regex falha. O Google tem uma oferta similar no Android. O padrão resultante parece com isso:
O caminho rápido cobre os 90% comuns. O modelo lida com o resto. Nenhum estágio envia o texto do usuário pela rede. Privacidade e velocidade são preservadas.
Por que “em 2 horas” é mais difícil do que parece
A frase “em 2 horas” parece fácil. Não é.
O usuário pode querer dizer qualquer uma das seguintes coisas:
- 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 do usuário, na manhã seguinte.
- 2 horas a partir do início da próxima hora (“em 2 horas” dito às 13h55 pode significar 16h, não 15h55).
A maioria dos apps faz uma escolha e a mantém. A mais comum é “2 horas a partir de agora, ao minuto”, que troca elegância por previsibilidade. Um usuário que digitou “em 2 horas” às 13h23 recebe uma notificação às 15h23. Ele aprende a digitar números inteiros quando quer horários limpos.
Por que “amanhã” padrão para 9h
Quando você digita “amanhã” sem horário, um app precisa escolher um horário. A convenção convergiu para 9h na quase totalidade dos apps no mercado. Por quê?
Porque o custo de errar é assimétrico. Se o app escolhe 9h e você queria 11h, você pode ajustar rapidamente quando notar. Se o app escolhe meia-noite ou alguma outra hora aleatória, você recebe uma notificação enquanto está dormindo ou perde completamente. 9h é o padrão seguro para quase todo tipo de tarefa de trabalho.
Alguns apps padrão para 8h. Alguns usam o horário em que você digitou a tarefa (“você disse às 14h, então provavelmente quer dizer 14h amanhã”). O último é inteligente mas não confiável, porque a maioria das pessoas que digita uma tarefa às 14h o faz durante o dia de trabalho para tarefas que quer fazer durante um futuro dia de trabalho, não exatamente às 14h do dia seguinte.
Como parece dentro do TodoBar
O TodoBar usa o padrão de dois estágios descrito acima. Digite qualquer tarefa com uma frase temporal e a camada de regex dispara primeiro, em menos de um milissegundo. Se encontrar uma data, a tarefa aparece na sua lista com o horário de vencimento certo anexado. Se a camada de regex 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 seu Mac.
Os padrões que a camada de regex reconhece estão documentados na página de suporte. Para referência rápida, todos esses funcionam:
- “em 30 minutos”
- “em 2 horas”
- “em algumas horas”
- “amanhã”
- “amanhã às 9h”
- “hoje à noite”
- “hoje à noite às 20h”
- “próxima sexta”
- “sexta às 17h”
- “12 de maio”
- “12 de maio às 14h”
- “no dia 15”
- “em 3 dias”
- “1 semana a partir de agora”
- “logo cedo amanhã”
Se você digitar algo que o parser não consegue lidar, a tarefa ainda é adicionada sem data de vencimento, e você pode anexar uma manualmente pelo botão de sino da linha. O modo de falha do parser é “sem data anexada”, não “tarefa perdida”.
Para onde tudo isso vai
A próxima fronteira interessante é a interpretação multilíngue. Frases em português como “amanhã às 9” deveriam funcionar tão bem quanto o equivalente em inglês, e cada vez mais funcionam em apps que levam a localização a sério. O modelo no dispositivo da Apple lida bem com o português nos nossos testes internos. A mesma abordagem funcionará para francês, alemão, japonês e provavelmente a maioria dos idiomas principais dentro do próximo ano.
As peças estão todas aqui. O que costumava ser uma ida e volta cara à nuvem agora é uma chamada de função local que leva 50 milissegundos. O fato de que um app indie de tarefas pode lançar isso, de graça, sem conta de inferência por usuário, é a história real.
TodoBar é um aplicativo de lista de tarefas no menu bar do macOS. Datas em linguagem natural, atalho global, sincronização via iCloud. Pague uma vez, seu para sempre.
Baixar o TodoBar na App Store