Version 1.0.0. Personal desktop agent for Windows. One Python process, a WebView2 window, and online models. It talks, reads files, researches with sources, watches mail and the clock, and waits for a yes before it changes anything that matters.
The window has three columns: agenda on the left, the conversation in the center, and the current work on the right. The center is Chat or Voice.
- Talks through Gemini, then Maritaca, then NVIDIA. The order is in
config.toml. A missing key skips that provider. - Reads the folders listed in
roots..envstays out of the file tools. researchis a web fact and only counts when it comes back with numbered sources. Without a source, it says it does not know.read_pagereads a public page.read_feedreads RSS or Atom.last30dayslists what people engaged with in the last 30 days on Hacker News, Reddit, GitHub, and Polymarket.- The right-hand terminal is one continuous PowerShell session. A typed command runs immediately. A command the agent asks for also runs immediately, except when it deletes, overwrites, formats, stops a process, shuts the PC down, or runs
git clean,git reset --hard, orgit push --force. A yes in the chat is enough for those. - News at 07:30 and 19:30, a Radar card at 08:30, mail at 09:00 and 21:00, a curiosity note at 18:00, and a tech scout at 22:00. Times are America/Sao_Paulo. An empty result stays quiet. Disks C, D, E, F, and H are checked every 6 hours and reported only above 95%.
- Mail can be read freely. A draft, a send, and a delete wait for a yes and show the recipient, subject, and body.
- Telegram uses the same agent when
TELEGRAM_BOT_TOKENandTELEGRAM_ALLOWED_USERSare set. Only that user gets in. Text is the default. Voice sends the written reply plus one OGG Opus note. The PC has to be on, andffmpeghas to be on PATH. - A routine runs by itself at its time, with read and search only. It does not run commands or send mail.
- MCP: copy
mcp.example.jsontomcp.json, or paste the JSON in the chat. Connecting a server waits for a yes. Reads run. Writes wait again. - The
cerebrofolder is a local Obsidian vault: diary, lessons, and short notes. It is not part of this repository. - A YouTube link or a topic can be saved through the knowledge vault after a yes.
- Voice uses local Kokoro (
pm_santaon CUDA when there is room). Transcription tries Groq Whisper, then Gemini. - To store an API key, ask in the chat. A masked card opens beside the conversation. The value never enters the transcript and never comes back to the model. A yes in the chat does not save it. The card button does.
Closing the window leaves the process in the tray. Sair quits.
Requires Windows, Python 3.12, and the WebView2 runtime.
start.batThe first run creates .venv, copies .env.example to .env, and copies config.example.toml to config.toml when that file is missing. Put at least one key in .env:
GEMINI_API_KEY=
MARITACA_API_KEY=
NVIDIA_API_KEY=
One key is enough. Without Gemini, web research and the Gemini transcription fallback stay off.
.env.example also has empty slots for the free-tier providers in awesome-ai-free-tiers: Mistral, OpenRouter, DeepSeek, SiliconFlow, Hyperbolic, Fireworks, SambaNova, Cohere, Hugging Face, Inception, Reka, Cloudflare, Zhipu, StepFun, and 01.AI, plus Tavily, Exa, and Jina for search, and Deepgram, AssemblyAI, ElevenLabs, and Cartesia for audio. An empty line stays off. The chat cascade uses only the provider blocks in config.toml. Ask in the chat to store a key in the masked card.
Add your own folders under roots in config.toml. Restart after changing roots or keys from the file. A key saved in the secure card is picked up by the running app.
.venv\Scripts\python.exe -m pytest.env, mcp.json, config.toml, data/, logs/, and cerebro/ stay on the machine. They hold keys, the mailbox, the chat database, and private notes.
Apache License 2.0. See LICENSE.
Versão 1.0.0. Agente pessoal para Windows. Um processo Python, uma janela WebView2 e modelos online. Ele conversa, lê arquivos, pesquisa com fonte, olha o e-mail e o relógio, e espera um sim antes de mudar o que importa.
A janela tem três colunas: agenda à esquerda, conversa no centro e o trabalho atual à direita. No centro, Chat ou Voz.
- Conversa pelo Gemini, depois Maritaca, depois NVIDIA. A ordem está em
config.toml. Chave ausente pula o provedor. - Lê as pastas de
roots. O arquivo.envfica fora das ferramentas de arquivo. researché um fato da web e só vale com fontes numeradas. Sem fonte, ele diz que não sabe.read_pagelê uma página pública.read_feedlê RSS ou Atom.last30dayslista o que as pessoas engajaram nos últimos 30 dias no Hacker News, Reddit, GitHub e Polymarket.- O terminal da direita é um PowerShell contínuo. O comando digitado roda na hora. O comando que o agente pede também roda na hora, salvo quando apaga, sobrescreve, formata, encerra um processo, desliga o PC ou faz
git clean,git reset --hardegit push --force. Um sim no chat basta. - Notícias às 07:30 e 19:30, Radar às 08:30, e-mail às 09:00 e 21:00, curiosidade às 18:00 e reconhecimento técnico às 22:00. O fuso é America/Sao_Paulo. Sem resultado, fica quieto. Os discos C, D, E, F e H são olhados a cada 6 horas e só avisam acima de 95%.
- Ler o e-mail é livre. Rascunho, envio e exclusão esperam um sim e mostram destinatário, assunto e texto.
- O Telegram usa o mesmo agente quando
TELEGRAM_BOT_TOKENeTELEGRAM_ALLOWED_USERSestão preenchidos. Só esse usuário entra. O padrão é texto. Voz manda a resposta escrita e um único áudio OGG Opus. O PC precisa estar ligado, e offmpegprecisa estar no PATH. - Uma rotina roda sozinha no horário, só com leitura e pesquisa. Ela não roda comando nem envia e-mail.
- MCP: copie
mcp.example.jsonparamcp.json, ou cole o JSON no chat. Conectar um servidor espera um sim. Leitura segue. Escrita espera de novo. - A pasta
cerebroé um cofre local do Obsidian: diário, lições e notas curtas. Ela não entra neste repositório. - Um link de vídeo ou um tema pode ir para o cofre de conhecimento depois de um sim.
- A voz é o Kokoro local (
pm_santana CUDA quando há espaço). A transcrição tenta o Groq Whisper e depois o Gemini. - Para guardar uma chave, peça no chat. Um cartão mascarado abre ao lado da conversa. O valor não entra no histórico e não volta para o modelo. Um sim no chat não grava. O botão do cartão grava.
Fechar a janela deixa o processo na bandeja. Sair encerra.
Precisa de Windows, Python 3.12 e do runtime WebView2.
start.batNa primeira vez ele cria o .venv, copia .env.example para .env e, se não houver config.toml, copia config.example.toml. Coloque pelo menos uma chave no .env:
GEMINI_API_KEY=
MARITACA_API_KEY=
NVIDIA_API_KEY=
Uma chave basta. Sem o Gemini, a pesquisa na web e a transcrição de reserva ficam desligadas.
O .env.example também tem vagas vazias para os provedores do catálogo awesome-ai-free-tiers: Mistral, OpenRouter, DeepSeek, SiliconFlow, Hyperbolic, Fireworks, SambaNova, Cohere, Hugging Face, Inception, Reka, Cloudflare, Zhipu, StepFun e 01.AI, além de Tavily, Exa e Jina para busca, e Deepgram, AssemblyAI, ElevenLabs e Cartesia para áudio. Linha vazia fica desligada. A cascata da conversa usa só os blocos de provedor do config.toml. Peça no chat para guardar uma chave no cartão mascarado.
Acrescente as suas pastas em roots, no config.toml. Reinicie depois de mudar as pastas ou as chaves pelo arquivo. Uma chave salva no cartão seguro passa a valer no app que está aberto.
.venv\Scripts\python.exe -m pytest.env, mcp.json, config.toml, data/, logs/ e cerebro/ ficam na máquina. Ali estão as chaves, a caixa de e-mail, o banco das conversas e as notas privadas.
Apache License 2.0. Veja LICENSE.