RODS significa Radar de Orçamento, Despesas e Supérfluos.
Este projeto é uma implementação inicial de um agente financeiro conversacional, criado para ajudar usuários a registrar movimentações financeiras, refletir sobre gastos e manter mais consciência sobre decisões de consumo.
A proposta do RODS é funcionar como um agente de responsabilização financeira, analisando mensagens enviadas pelo usuário, classificando movimentações e gerando respostas contextualizadas com humor, provocação e sarcasmo controlado.
Este repositório representa a versão prática inicial do projeto, desenvolvida a partir do design do sistema agentic documentado previamente.
O objetivo do RODS é apoiar pessoas que possuem metas financeiras, mas têm dificuldade em manter constância no controle de gastos, principalmente diante de compras impulsivas, despesas supérfluas e decisões emocionais de consumo.
Nesta versão, o sistema funciona como um bot integrado ao Telegram, capaz de:
- iniciar um fluxo de onboarding;
- interpretar mensagens financeiras em texto;
- classificar movimentações com apoio de LLM;
- registrar movimentações no Notion;
- responder ao usuário com um tom crítico, educativo e sarcástico controlado.
Esta é uma versão inicial funcional do agente.
- Integração com Telegram.
- Endpoint serverless para receber mensagens do Telegram.
- Agente principal responsável por coordenar o fluxo da conversa.
- Onboarding conversacional.
- Classificação de mensagens financeiras com Gemini.
- Validação estrutural dos dados classificados.
- Registro de movimentações financeiras no Notion.
- Ferramentas separadas para registro de:
- despesas;
- receitas;
- contribuições para caixinhas.
- Geração de respostas contextualizadas com tom crítico e humor controlado.
- Comandos auxiliares para desenvolvimento e testes.
Algumas ideias fazem parte da proposta conceitual do sistema, mas não foram tratadas como entrega principal nesta versão do repositório:
- leitura automática de cupons fiscais por imagem;
- RAG avançado;
- integração via MCP;
- dashboard financeiro completo;
- persistência definitiva de todo o perfil financeiro;
- aplicativo mobile próprio;
- integração com WhatsApp.
- TypeScript
- Node.js
- Vercel Serverless Functions
- Telegram Bot API
- Gemini API
- Notion API
- Zod
RODS-AGENT
├── api
│ └── telegram.ts
│
├── src
│ ├── agent
│ │ ├── contextualRoastGenerator.ts
│ │ ├── financialTextClassifier.ts
│ │ ├── onboardingAgent.ts
│ │ ├── prompts.ts
│ │ ├── rodsAgent.ts
│ │ └── schemas.ts
│ │
│ ├── services
│ │ ├── gemini.service.ts
│ │ ├── notion.service.ts
│ │ └── telegram.service.ts
│ │
│ ├── tools
│ │ ├── registerBoxContribution.tool.ts
│ │ ├── registerExpense.tool.ts
│ │ └── registerIncome.tool.ts
│ │
│ └── types
│
├── .env.example
├── .gitignore
├── package.json
├── package-lock.json
├── README.md
└── tsconfig.jsonUsuário
↓
Telegram
↓
api/telegram.ts
↓
RodsAgent
├── OnboardingAgent
├── FinancialTextClassifier
│ ↓
│ GeminiService
├── ContextualRoastGenerator
└── Tools
↓
NotionService
↓
NotionEndpoint responsável por receber as atualizações enviadas pelo Telegram e encaminhar as mensagens para o agente principal.
Coordena o fluxo principal do agente.
É responsável por lidar com comandos, controlar o estado da conversa, acionar onboarding, chamar o classificador financeiro e direcionar o registro da movimentação.
Gerencia o fluxo inicial de onboarding do usuário.
Nesta etapa, o agente coleta informações básicas para montar um contexto inicial de uso.
Responsável por interpretar mensagens financeiras enviadas pelo usuário.
Ele utiliza o Gemini para transformar uma mensagem em uma estrutura de dados classificada, indicando o tipo de movimentação, valor, descrição, categoria, nível de necessidade e outros campos relevantes.
Responsável por gerar respostas com tom crítico, provocativo e sarcástico controlado.
O objetivo não é humilhar o usuário, mas reforçar a consciência sobre o comportamento financeiro.
Centraliza os prompts utilizados pelo agente e pelo classificador.
Define os schemas de validação usados para garantir que as respostas estruturadas estejam no formato esperado.
Serviço responsável pela comunicação com a API do Gemini.
Serviço responsável pela comunicação com o Notion.
Nesta versão, o Notion é utilizado para registrar as movimentações financeiras processadas pelo agente.
Serviço responsável pelo envio de mensagens de resposta ao usuário via Telegram.
Ferramenta responsável por registrar despesas.
Ferramenta responsável por registrar receitas.
Ferramenta responsável por registrar contribuições para caixinhas ou objetivos financeiros.
1. O usuário envia uma mensagem para o bot no Telegram.
2. O endpoint api/telegram.ts recebe a atualização.
3. A mensagem é encaminhada para o RodsAgent.
4. O agente verifica se a mensagem é um comando ou uma entrada financeira.
5. Se necessário, o agente conduz o onboarding.
6. Quando o usuário envia uma movimentação financeira em texto, o agente chama o classificador.
7. O FinancialTextClassifier envia a mensagem para o Gemini.
8. A resposta do modelo é validada com schemas.
9. Com base na intenção identificada, o agente chama a ferramenta adequada:
- registrar despesa;
- registrar receita;
- registrar contribuição para caixinha.
10. A movimentação é registrada no Notion.
11. O agente retorna uma resposta contextualizada ao usuário.Nesta versão, o sistema trabalha com três intenções principais:
REGISTER_EXPENSE
REGISTER_INCOME
REGISTER_BOX_CONTRIBUTIONgastei 35 reais com lancherecebi 500 reais de pagamentoguardei 100 reais para a viagemAs despesas podem ser classificadas conforme o nível de necessidade:
ESSENTIAL
NECESSARY
OPTIONAL
IMPULSIVEEsses níveis ajudam o agente a ajustar o tom da resposta e identificar quando um gasto pode estar desalinhado com os objetivos do usuário.
| Comando | Descrição |
|---|---|
/start |
Inicia o fluxo do bot. |
/reset |
Reinicia o estado local da conversa. |
/status |
Mostra o status atual do usuário no fluxo. |
/devseed |
Carrega um perfil de teste para facilitar validações durante o desenvolvimento. |
O comando /devseed é um recurso auxiliar de desenvolvimento.
Ele existe para facilitar testes do fluxo de movimentações sem precisar refazer todo o onboarding manualmente.
Nesta versão:
- usa memória local;
- não persiste o onboarding completo no Notion;
- não substitui uma persistência real de perfil;
- pode ser removido ou alterado em versões futuras.
Crie um arquivo .env com base no arquivo .env.example.
Exemplo:
TELEGRAM_BOT_TOKEN=
GEMINI_API_KEY=
GEMINI_MODEL=
NOTION_TOKEN=
NOTION_MOVEMENTS_DATABASE_ID=Nunca versionar tokens reais, chaves de API ou dados sensíveis.
Clone o repositório:
git clone <url-do-repositorio>Acesse a pasta do projeto:
cd rods-agentInstale as dependências:
npm installPara rodar o projeto localmente com ambiente serverless da Vercel:
npx vercel devO endpoint principal do bot está em:
/api/telegramExecute:
npm run checkEsse comando deve ser utilizado antes de subir alterações para a branch principal.
Depois de iniciar o projeto localmente, valide o fluxo principal:
1. Enviar /start no Telegram.
2. Passar pelo onboarding ou usar /devseed.
3. Enviar uma movimentação financeira em texto.
4. Verificar se o agente respondeu corretamente.
5. Conferir se a movimentação foi registrada no Notion.
6. Testar /status.
7. Testar /reset.Exemplo de entrada:
gastei 32 reais com lancheResultado esperado:
O agente deve identificar a mensagem como despesa, classificar os dados principais, registrar a movimentação no Notion e responder ao usuário com feedback contextualizado.O RODS utiliza humor, provocação e sarcasmo como parte da experiência, mas existem limites importantes:
- o alvo da crítica deve ser o comportamento financeiro, não a pessoa;
- o agente não deve usar linguagem discriminatória;
- o agente não deve humilhar o usuário;
- o feedback deve manter caráter educativo;
- quando houver pouca informação, o sistema deve evitar conclusões definitivas.
Esta versão ainda possui limitações importantes:
- o onboarding funciona como etapa inicial, mas a persistência completa do perfil ainda pode evoluir;
- a entrada principal considerada nesta versão é textual;
- a leitura de imagem de cupom fiscal ainda não faz parte da entrega prática principal;
- o sistema depende da disponibilidade das APIs externas utilizadas;
- o Notion é usado como base operacional, não como dashboard financeiro final;
- o comando
/devseedé apenas auxiliar de desenvolvimento.
Possíveis melhorias futuras:
- persistir o perfil financeiro completo do usuário;
- adicionar leitura de cupons fiscais por imagem;
- melhorar consulta de histórico financeiro;
- criar dashboards no Notion ou em uma interface própria;
- implementar RAG para recuperação contextual mais avançada;
- adicionar suporte a múltiplos usuários com persistência robusta;
- melhorar tratamento de erros e logs;
- preparar deploy definitivo em produção;
- evoluir o agente para outros canais de conversa.
Este projeto utiliza variáveis de ambiente para armazenar chaves e tokens.
Arquivos como .env, .vercel e node_modules não devem ser versionados.
Antes de subir o projeto para o GitHub, confirme se não existem tokens reais expostos no código ou no histórico de commits.
Desenvolvido por Ariane Carvalho.
Projeto criado como parte dos estudos em sistemas agentic, LLMs e automação com agentes conversacionais.