MODULO 5-3

πŸ› οΈ Montando seu Jarvis de bolso (projeto)

Hora de juntar tudo. Neste modulo voce sai do "entendi a teoria" para o "esta funcionando no meu celular": um bot de Telegram pessoal, com cerebro, memoria, alma (soul), uma skill util, voz e um heartbeat que te manda o resumo do dia as 7h. Cinco passos curtos, cada um testavel antes do proximo. Sem app de loja, sem servidor exposto, sem mistura de chaves.

6
Topicos
~40
Minutos
Intermediario
Nivel
Projeto
Tipo
1

πŸ—ΊοΈ Visao do projeto

Tudo que voce viu nas trilhas anteriores converge aqui em uma frase: vamos montar um bot de Telegram pessoal que conversa com voce, lembra de quem voce e, executa uma rotina util e ainda fala β€” acessivel de qualquer celular, sem instalar app de loja. O Telegram ja roda no seu telefone; ele vira a porta de entrada. O cerebro (o modelo de IA) e a memoria rodam num computador seu (em casa) ou na nuvem. O celular e so o canal.

A regra de ouro do projeto e brick-by-brick (tijolo por tijolo): voce constroi UM pedaco, testa que ele funciona, e so entao parte para o proximo. Nada de montar tudo de uma vez e tentar descobrir o que quebrou. Sao cinco passos, e cada um deixa o seu Jarvis um pouco mais vivo.

πŸ“± celular Telegram canal agente (nuvem ou PC) 🧠 cerebro πŸ’Ύ memoria + soul 🧩 skill πŸŽ™οΈ voz + ⏰ 7h os 5 passos: 1 Β· o bot (canal) 2 Β· o cerebro (modelo) 3 Β· memoria + soul 4 Β· uma skill util 5 Β· voz e cadencia

O celular nunca segura o cerebro β€” ele so conversa, pelo Telegram, com o agente que vive no seu PC ou na nuvem. Cada peca azul-ciano e um dos cinco passos: voce liga uma de cada vez.

Novo aqui? Um bot e um programa que conversa por um app de mensagens (aqui, o Telegram) em vez de uma tela propria. Agente e o nosso Jarvis: o programa que recebe sua mensagem, pensa com o modelo de IA e responde β€” eventualmente usando ferramentas. Heartbeat ("batimento") e uma tarefa agendada que faz o agente agir sozinho num horario, sem voce pedir.

🧰 O que voce vai precisar (1 vez)

  • β€’Um computador seu (Windows, Mac ou Linux) com Node.js ou Python instalado β€” onde o agente vai rodar.
  • β€’A conta de Telegram que voce ja usa no celular.
  • β€’Uma chave de modelo (nuvem: OpenRouter/Anthropic) ou o Ollama instalado para rodar local β€” escolha no Passo 2.
  • β€’~40 minutos e disposicao para testar cada tijolo.

Conceitos-chave

Canal

A porta por onde voce fala com o Jarvis β€” aqui, o Telegram.

Brick-by-brick

Construir e testar um pedaco de cada vez, nunca tudo junto.

Sem app de loja

"O Telegram ja e mobile" β€” nada de publicar app nativo.

Celular = canal

O cerebro mora no PC/nuvem; o telefone so conversa.

2

πŸ€– Passo 1: o bot

O primeiro tijolo e nascer o bot. No Telegram existe um robo oficial chamado @BotFather que cria outros bots para voce. Voce conversa com ele, recebe um token (uma senha longa que identifica o seu bot) e pronto β€” o canal existe. Em seguida voce coloca a primeira trava de seguranca: a whitelist (lista de permitidos), para que so voce seja atendido.

1

Fale com o @BotFather

No Telegram, busque @BotFather, abra a conversa e envie /newbot. Ele pergunta o nome e o usuario (precisa terminar em bot, ex.: meu_jarvis_bot).

2

Guarde o token

Ele responde com algo como 7891234:AAF...xYz. Esse e o token β€” trate como senha. Ele vai morar num arquivo .env, nunca no codigo nem em print publico.

3

Descubra o SEU user ID

Fale com @userinfobot: ele responde o seu numero de usuario (ex.: 123456789). E esse numero que entra na whitelist.

⌨️ Copy-run · .env do bot arquivo: .env

Objetivo: guardar o token e a whitelist fora do codigo. Crie um arquivo chamado .env na pasta do projeto e cole o bloco abaixo, trocando os pedacos entre < > pelos seus valores.

# .env  (NUNCA suba este arquivo pro GitHub)
TELEGRAM_BOT_TOKEN=<cole-seu-token-do-BotFather>
TELEGRAM_ALLOWED_IDS=<seu-user-id-do-userinfobot>

Como verificar: rode o agente (ex.: npm start ou python main.py), mande /start ao seu bot pelo celular e veja se ele responde. Depois peca a um amigo para mandar mensagem ao mesmo bot: ele deve ser ignorado em silencio. Se isso acontecer, a whitelist esta funcionando.

Novo aqui? Um arquivo .env ("environment", ambiente) e um bloco de texto onde voce guarda segredos (tokens, chaves) separados do codigo. Long-polling e o jeito do Telegram funcionar sem abrir nenhuma porta no seu PC: e o seu agente que pergunta ao Telegram "chegou mensagem?", em vez de ficar esperando alguem bater na sua maquina. Por isso o bot e seguro mesmo rodando em casa.

Conceitos-chave

@BotFather

O bot oficial do Telegram que cria o seu bot e entrega o token.

Token

A senha do bot. Vive no .env, nunca no codigo.

Whitelist

Lista do(s) ID(s) permitidos; qualquer outro e ignorado.

Long-polling

Sem porta exposta: o agente pergunta ao Telegram se chegou algo.

3

🧠 Passo 2: o cerebro

O bot ja recebe mensagem β€” mas ainda nao pensa. Agora voce pluga o cerebro: o modelo de IA que vai gerar as respostas. Aqui voce faz a escolha mais importante do projeto, e ela e uma so linha no .env. Voce pode usar a nuvem (potente, paga por uso) ou rodar local com Ollama (gratis depois de baixar, privado, mais lento). O melhor: trocar entre os dois nao mexe no codigo β€” e hot-swap (troca a quente).

☁️ Nuvem (OpenRouter / Anthropic)

  • βœ“Respostas rapidas e fortes, mesmo em PC fraco.
  • βœ“Zero configuracao de hardware.
  • βœ—Paga por token; os dados saem da sua maquina.
  • βœ—Precisa de internet.

🏠 Local (Ollama)

  • βœ“$0 por token apos baixar; dados ficam em casa.
  • βœ“Funciona offline.
  • βœ—Exige RAM (3B@8GB, 8B@16GB); CPU e lento (30-60s).
  • βœ—Respostas um pouco mais fracas que a nuvem de ponta.
⌨️ Copy-run · hot-swap do cerebro arquivo: .env

Objetivo: escolher o cerebro mudando so duas linhas. Adicione UM dos blocos abaixo ao seu .env (deixe o outro comentado com #).

# --- opcao A: NUVEM (potente, paga por uso) ---
LLM_PROVIDER=openrouter
LLM_MODEL=<ex: anthropic/claude-3.5-sonnet>
LLM_API_KEY=<cole-sua-chave-do-openrouter>

# --- opcao B: LOCAL com Ollama (gratis, privado) ---
# LLM_PROVIDER=ollama
# LLM_MODEL=<ex: llama3.2>
# (rode antes, no terminal:  ollama pull <ex: llama3.2> )

Como verificar: reinicie o agente e mande pelo celular: "em uma frase, quem e voce?". Se vier uma resposta coerente, o cerebro esta ligado. Para testar o hot-swap, troque o bloco ativo (comente A, descomente B), reinicie e mande de novo β€” mesma conversa, cerebro diferente, sem tocar no codigo.

⚠️ Cuidado classico: nao misture chaves

Chave da OpenAI nao e chave da Anthropic, e nenhuma das duas e o token do Telegram. Cada servico tem a sua. Misturar e a causa numero 1 de "nao funciona e nao sei por que". Se aparecer um erro de autenticacao (401/403), o primeiro lugar para olhar e qual chave foi para qual variavel no .env.

Conceitos-chave

Cerebro (motor LLM)

O modelo que pensa em texto e gera as respostas.

Hot-swap

Trocar o modelo mudando o .env, sem mexer no codigo.

Ollama

Programa que roda modelos de IA no seu proprio computador.

Decisao economica

Local p/ tarefa simples, nuvem p/ tarefa dificil.

4

πŸ’Ύ Passo 3: memoria + soul

Agora o bot pensa, mas e um estranho: esquece tudo ao fechar e nao tem personalidade. Dois arquivos resolvem isso. O soul.md ("a alma") da carater β€” quem ele e, o tom de voz, o que prioriza β€” e e injetado sempre no inicio da conversa. A memoria faz ele lembrar: as conversas viram texto guardado e um indice SQLite permite buscar o que ja foi dito. Sem o soul, voce tem "uma pasta de codigo"; com ele, voce tem um Jarvis.

⌨️ Copy-run · a alma do seu Jarvis arquivo: soul.md

Objetivo: dar identidade ao bot. Crie um arquivo soul.md na pasta do projeto e cole o bloco, trocando os pedacos entre < >.

# soul.md β€” a alma do meu Jarvis

## Quem sou
Eu sou o <nome-do-seu-jarvis>, assistente pessoal de <seu-nome>.

## Tom de voz
Direto, caloroso e breve. Sem enrolacao. Trato <seu-nome> pelo nome.

## Prioridades
- Responder em portugues.
- Quando nao souber, dizer que nao sabe (nunca inventar).
- Lembrar do contexto das conversas anteriores.

## Sobre <seu-nome>
Fuso: <ex: America/Sao_Paulo>. Trabalho: <ex: professor>.
Prefere respostas em topicos curtos.

Como verificar: reinicie e mande "qual e o seu nome e quem eu sou pra voce?". Ele deve responder com o nome do soul.md e te chamar pelo seu nome. Depois mande "meu prato favorito e lasanha", feche o Telegram, abra de novo mais tarde e pergunte "qual e meu prato favorito?". Se ele lembrar, a memoria SQLite esta gravando.

🧩 Como a memoria funciona, sem mistica

  • β€’Cada conversa vira texto salvo num arquivo ou banco β€” a "verdade" e legivel por voce.
  • β€’Um indice SQLite FTS5/BM25 (busca por palavra) acha rapido o trecho relevante quando voce pergunta algo.
  • β€’Antes de responder, o agente busca na memoria e cola o trecho no contexto. Por isso ele "lembra".

Novo aqui? SQLite e um banco de dados que e so um arquivo na sua pasta (nada de servidor). FTS5/BM25 e o jeito dele fazer busca por texto β€” voce pergunta "lasanha" e ele acha a frase onde voce falou disso. System prompt e o texto invisivel colado no comeco de toda conversa: e ali que o soul.md entra para o modelo "saber quem e".

Conceitos-chave

soul.md

A alma: personalidade, tom e prioridades, injetados sempre.

Memoria persistente

Conversas viram texto que sobrevive ao fechar o app.

SQLite

Banco-arquivo simples; o indice da memoria.

System prompt

O texto inicial onde o soul vira a identidade do modelo.

5

🧩 Passo 4: uma skill util

Ate aqui seu Jarvis conversa e lembra. Hora de ele fazer algo concreto. Uma skill e uma "receita": um arquivo curto que empacota um passo-a-passo que voce repetiria toda vez. A nossa: "resumo do meu dia" β€” ele puxa sua agenda (via uma ferramenta MCP de calendario) e devolve um resumo em topicos. Em vez de explicar cinco passos, voce diz uma frase e a skill executa.

MCP (Model Context Protocol) e o "USB das ferramentas de IA": cada integracao (calendario, e-mail, GitHub) e um servidor separado e padronizado que voce pluga sem reescrever o agente. E mais seguro do que baixar "skills da comunidade" de origem duvidosa β€” voce sabe exatamente o que cada servidor faz.

⌨️ Copy-run · skill "resumo do meu dia" arquivo: skills/resumo-do-dia/SKILL.md

Objetivo: dar ao Jarvis a receita de resumir seu dia. Crie a pasta e o arquivo SKILL.md abaixo, trocando os pedacos entre < >.

---
name: resumo-do-dia
description: Resume os compromissos de hoje em topicos curtos.
  Acionar quando o usuario disser "resumo do dia", "como esta
  meu dia" ou "agenda de hoje".
---

# Resumo do meu dia

Passos:
1. Use a ferramenta de calendario (MCP) para listar os
   eventos de HOJE no fuso <ex: America/Sao_Paulo>.
2. Para cada evento, pegue horario + titulo.
3. Responda em ate <ex: 5> topicos curtos, do mais cedo
   ao mais tarde. Comece com "Bom dia, <seu-nome>!".
4. Se nao houver eventos, diga que a agenda esta livre.

Como verificar: reinicie o agente e mande pelo celular "resumo do meu dia". Ele deve acionar a skill, consultar o calendario e responder com a lista de eventos em topicos (ou avisar que esta livre). Se ele responder de forma generica sem olhar a agenda, confira se o servidor MCP de calendario esta conectado.

πŸ“Š Skill x ferramenta β€” qual e a diferenca?

  • β€’Ferramenta (tool): uma acao atomica β€” "listar eventos do calendario". E uma mao.
  • β€’Skill: um procedimento que orquestra ferramentas + julgamento β€” "monte o resumo do dia". E a receita que usa as maos.
  • β€’A skill custa quase nada ate ser acionada: o agente le so o frontmatter (~100 tokens) e so carrega o resto quando precisa.

Novo aqui? O frontmatter e o bloco entre --- no topo do arquivo (nome + descricao). E por ele que o agente decide se aciona a skill. Carregamento progressivo significa que a receita inteira so e lida quando faz falta β€” economiza contexto e mantem o Jarvis leve.

Conceitos-chave

Skill (SKILL.md)

Uma receita empacotada num arquivo markdown.

MCP

O "USB das ferramentas": pluga integracoes padronizadas.

Frontmatter

Nome + descricao no topo; decide quando acionar a skill.

Carregamento progressivo

A receita so e lida quando e necessaria.

6

πŸŽ™οΈ Passo 5: voz e cadencia

Os dois ultimos tijolos deixam o Jarvis humano e proativo. Voz: voce manda um audio no Telegram, o agente transcreve com Whisper (entende sua fala), pensa e β€” se quiser β€” responde falando com TTS (sintese de voz). Cadencia: um heartbeat agendado (cron) faz ele agir sozinho β€” por exemplo, te mandar o "resumo do meu dia" todo dia as 7h, mesmo com o celular no bolso e o laptop fechado.

🎀 audio.ogg ffmpeg.oggβ†’.wav WhisperSTT (texto) 🧠 LLMpensa TTSsintese πŸ”Š respostaaudio voz e interface, nao cerebro β€” o TTS e saida OPCIONAL

O audio vira texto (Whisper), o LLM pensa em texto, e a fala de volta (TTS) e opcional. Lembre: "voz e a interface, o orquestrador e o cerebro" β€” voce decide por mensagem se responde em texto ou voz.

⌨️ Copy-run · voz + heartbeat das 7h arquivos: .env + terminal

Objetivo: ligar a voz e agendar o resumo diario. Acrescente ao .env e teste a conversao de audio no terminal.

# .env  (voz e cadencia)
VOICE_ENABLED=true
STT_PROVIDER=whisper
OPENAI_API_KEY=<chave-da-OpenAI-so-para-Whisper>
# heartbeat: rodar a skill "resumo-do-dia" todo dia as 7h
HEARTBEAT_CRON=<ex: 0 7 * * *>
HEARTBEAT_SKILL=resumo-do-dia

# --- teste rapido da conversao de audio (no terminal) ---
# ffmpeg -i <audio-do-telegram.ogg> -ar 16000 saida.wav

Como verificar: (voz) grave um audio no Telegram dizendo "me conte uma curiosidade" β€” o agente deve transcrever e responder. (cadencia) para nao esperar ate as 7h, troque temporariamente HEARTBEAT_CRON para daqui a 2 minutos (ex.: se sao 14h32, use 34 14 * * *), reinicie e veja a mensagem chegar sozinha. Funcionou? Volte o cron para 0 7 * * *.

⚠️ A chave do Whisper e diferente

O Whisper (transcricao) costuma usar a OPENAI_API_KEY, que NAO e a chave do seu cerebro se voce escolheu Anthropic/OpenRouter, nem o token do Telegram. Tres servicos, tres credenciais. Se a voz "nao transcreve", quase sempre e essa chave faltando ou trocada.

Novo aqui? STT ("speech-to-text") e transformar fala em texto; Whisper e o modelo que faz isso. TTS ("text-to-speech") e o caminho inverso: texto vira voz. ffmpeg e um conversor de audio/video que prepara o arquivo do Telegram para o Whisper. cron e a notacao de agendamento: 0 7 * * * quer dizer "as 7h00, todo dia".

Conceitos-chave

STT / Whisper

Transforma o audio que voce manda em texto.

TTS

Saida opcional: o Jarvis responde falando.

Heartbeat / cron

Agendamento que faz o agente agir sozinho num horario.

Proativo

De "responde quando chamo" para "me avisa antes".

Auto-checagem (opcional): no seu Jarvis de bolso, onde mora o cerebro (o modelo)?

🎯 Resumo do modulo

βœ“
Visao e brick-by-brick β€” um bot de Telegram pessoal, montado um tijolo de cada vez, com o celular so como canal.
βœ“
Passo 1 e 2: bot e cerebro β€” @BotFather + token + whitelist; e o cerebro plugado por hot-swap (nuvem ou Ollama).
βœ“
Passo 3 e 4: memoria, soul e skill β€” soul.md da alma, SQLite da memoria, e uma skill "resumo do meu dia" via MCP faz ele agir.
βœ“
Passo 5: voz e cadencia β€” Whisper/TTS para falar, e um heartbeat das 7h para ser proativo. Cada peca testada antes da proxima.

Proximo:

Voltar para a trilha β€” voce concluiu a Trilha 5 (Jarvis no celular). Hora de revisar a jornada e seguir para a Trilha 6.