← Back to writing

Três coisas que o meu agente faz por mim todos os dias

September 9, 2026 English version

Três coisas que o meu agente faz por mim todos os dias

No primeiro artigo desta série escrevi que a melhor forma de começar a usar um agente é com uma tarefa pequena, real e reversível. Desde então perguntaram-me várias vezes o que é que eu próprio delego. A resposta honesta é que as tarefas mais úteis que tenho a correr são aborrecidas. Nenhuma delas "escreve código" nem "gere o meu email". Poupam-me dez minutos por dia cada uma, e nunca são esquecidas.

Tenho um agente a correr num Mac mini em casa, com o Hermes Agent da Nous Research. Fala comigo por Telegram e tem uma rotina embutida que verifica a cada minuto se há algum trabalho por arrancar. É essa rotina que faz quase tudo o que descrevo a seguir.

A regra: o agente não faz o trabalho

Antes dos exemplos, o desenho, porque é o que faz isto funcionar sem me arruinar a fatura.

Cada tarefa é um cron job com um script em Python à frente. O script faz o trabalho a sério: liga-se à API, lê o calendário, filtra, compara com o estado guardado num ficheiro JSON. O que sai do script entra no prompt do modelo já mastigado. O modelo só faz aquilo em que é bom: escrever-me uma mensagem em português, perguntar-me o que quero, registar a minha resposta, e dizer que correu tudo bem. Quando não há nada para dizer, responde [SILENT] e eu não recebo nada.

A primeira versão do job do ginásio não era assim. O modelo tinha as ferramentas e fazia tudo sozinho: chamava a API, lia o calendário, decidia o que mostrar. Custava cerca de 700 mil tokens por manhã, para produzir uma lista de doze aulas. Um dia o Grok cortou-me o acesso por ter esgotado o limite de gastos, e foi o incentivo que faltava para mudar. Hoje o script faz o trabalho e o modelo recebe um JSON e devolve uma lista. São 6 mil tokens por manhã, num modelo mais barato. Cem vezes menos, com melhor resultado, porque o script não se distrai.

1. O ginásio

Vou ao ginásio quase todos os dias, e as aulas de grupo marcam-se pela app, com uma janela que abre 24 horas antes. As aulas boas esgotam. Ou estou atento à hora certa, ou fico de fora.

Às 08:00 um script faz login na API da app do ginásio e pede o horário de amanhã. Depois tira o que não interessa: as modalidades que já marquei como "não gosto", tudo o que colide com um evento no meu calendário, e as aulas onde já estou inscrito. Para cada aula que sobra calcula a hora exata a que a marcação abre, que é a hora de início menos 24 horas.

O modelo recebe essa lista e manda-me uma mensagem numerada no Telegram, com hora e instrutor, a perguntar quais quero. Eu respondo "1 e 4". O agente guarda a escolha e cria, para cada aula, um job de execução única agendado para a hora em que a marcação abre. Esse job corre um único comando de terminal, com o id da aula já preenchido. Se a aula estiver cheia, o mesmo script mete-me na lista de espera. Se ficar inscrito, cria o evento no calendário com o nome da aula. Se ficar em lista de espera, não cria nada, porque não quero ver no calendário aulas onde talvez não vá.

Ontem funcionou assim: lista às 08:00, resposta minha às 08:02, marcação feita às 19:30 para o Yoga das 19:30 de hoje. Não abri a app.

2. A ementa do restaurante

Há um restaurante em Coimbra (Portugal) onde almoço muitas vezes, o Legumes e Outros Vícios. A ementa muda todos os dias e é publicada de manhã na página deles, como imagem. Não gosto de todos os pratos, e cansei-me de abrir o site todos os dias para descobrir se valia a pena ir.

Às 10:00 um script vai buscar a página e encontra a imagem da ementa. Aqui o modelo tem de fazer mais do que formatar, porque a ementa é um poster. Lê a imagem, transcreve os pratos e compara-os com um ficheiro onde estão as minhas notas, de 0 a 5. Neste momento tem 57 pratos avaliados. A regra é simples: mostra-me só os pratos com nota 3 ou mais, com a nota ao lado. Os que têm nota abaixo de 3 nunca aparecem. Para um prato que ainda não conhece, pergunta-me a nota numa lista numerada, eu respondo com os números, e ele guarda.

Ao fim de duas semanas, a mensagem das 10:00 passou a ser só "Na ementa hoje: Peito de frango com molho de mostarda, limão e mel (4), Caril verde de grão de bico (3)". Se não houver nada acima de 3, fica em silêncio.

A parte irritante foi o horário. Às 10:00 o poster ainda é muitas vezes o de ontem. Por isso há um segundo job, de 15 em 15 minutos até às 11:45, que só acorda o modelo se o endereço da imagem tiver mudado. Um script de monitorização guarda o hash do último endereço e compara. E o modelo tem instruções para ler a data impressa no poster e ficar calado se não for a de hoje. Sem isto, recebia a ementa de ontem como se fosse nova, e recebi, nas primeiras semanas.

3. Os jogos da Académica

Sou da Académica. A Liga marca os jogos jornada a jornada, às vezes duas ou três de uma vez, e quase sempre com "hora por confirmar" durante semanas. Manter isto no calendário à mão é o tipo de tarefa que se abandona ao fim de um mês.

Este job é o mais simples dos três e não usa o modelo de todo. Ao meio-dia, um script pede à API da Liga Portugal a época inteira da equipa, num só pedido, e compara com o que já tem guardado. Cada jogo tem um código estável, e o script guarda a correspondência entre esse código e o evento no calendário. Jogo novo, cria o evento. Jogo conhecido com data ou hora diferente, edita o evento existente, procurando-o pela data antiga, para não ficar com o jogo duplicado. Quando o jogo termina, o título passa de "Académica-CD Feirense" para "Académica 1-0 CD Feirense", com o resultado.

Ainda no outro dia seis jogos ganharam data no mesmo dia e o calendário ficou certo ao meio-dia sem eu fazer nada. Quando não há alterações, o script não escreve nada e a rotina não me manda mensagem nenhuma. Zero tokens, zero notificações.

O que ainda está mal

Não está perfeito, mas também não está mal.

A lista de espera do ginásio está só meio resolvida. O script mete-me lá, diz-me que fiquei em lista de espera, e fica por aí. Quando abre uma vaga, a app do ginásio avisa-me, e a partir daí é uma corrida: quem tocar primeiro entra. Ainda tenho uma entrada, um Pilates, que continua "em lista de espera" no ficheiro de estado. Já foi há muito. A próxima iteração é um job que vigia a aula e preenche a vaga no instante em que abre, antes de eu sequer ver a notificação.

A ementa depende de o modelo ler bem um poster. Quase sempre lê. Quando um prato vem escrito de forma ligeiramente diferente da que está no ficheiro, ele pergunta-me a nota de um prato que já avaliei. Tolero, porque a alternativa é fazer eu a correspondência à mão.

E o custo, mesmo baixo, não é zero. A ementa gasta cerca de 40 mil tokens por dia, porque a leitura de imagem é cara. É o preço de o restaurante publicar um poster em vez de texto.

Por onde começar o teu

Os três casos têm a mesma forma. Há uma fonte de dados que muda todos os dias, uma regra tua sobre o que interessa, e um sítio onde o resultado tem de ficar. Um script faz a pesquisa e a filtragem, um ficheiro guarda o que tu decidiste, e o modelo trata da conversa.

Procura na tua semana uma coisa que verificas repetidamente à mesma hora. O horário de uma aula, um preço, uma agenda, um menu, o estado de uma encomenda. Se consegues descrever a regra numa frase ("só me interessa se for acima de 3", "só as aulas que não colidem com o calendário"), é candidata.

Depois começa pela versão em que o modelo faz tudo, porque é a mais rápida de pôr a funcionar. Só quando estiver a funcionar é que vale a pena tirar-lhe o trabalho e passá-lo para um script. Foi o que eu fiz, e a fatura do Grok é que me lembrou de o fazer.