Guardião do PC para Windows 11. Monitora processos, conexões, a rede local, a GPU e tudo que abre com o Windows; dá a cada processo uma pontuação de risco explicada (você vê o motivo de cada ponto) e avisa quando algo foge do normal. Tem um assistente opcional que roda no seu PC pelo LM Studio: nada vai para a nuvem.
Fica como um ícone de escudo na bandeja, com janela no estilo do Windows 11. Mesma base do SmartDevices.
Print do app real; nomes de aparelhos, IPs e o nome do PC trocados por exemplos.
| Tela | O que mostra |
|---|---|
| Visão geral | situação geral, CPU, memória, disco e rede da placa física (últimos 2 min); GPU com uso, VRAM, temperatura e folga até o limite térmico, potência, driver e quem está usando a placa; alertas recentes, aparelhos na rede |
| Rede local | conexão, roteador, DNS, latência da internet; aparelhos da rede com IP, MAC, fabricante e quando apareceram; clique no nome para renomear |
| Conexões | cada conexão de cada programa, com nome DNS; portas abertas neste PC e se o firewall deixa alguém alcançá-las; exportar CSV |
| Processos | assinatura digital, quem abriu, linha de comando, rede, uso de GPU e VRAM e por que a pontuação; Analisar com IA, Abrir local, VirusTotal, Encerrar, Quarentena, Isso é normal |
| Inicialização | chaves Run, pasta Inicializar, serviços automáticos e tarefas agendadas; ligar e desligar sem apagar nada |
| Alertas | histórico por dia; Ciente, Isso é normal, Pausar 1 hora, Resumir com IA |
| Otimização | mede o que dá para limpar (temporários, cache da Otimização de Entrega, despejos de travamento, relatórios de erro, shaders, Lixeira, limpeza do Windows Update pelo DISM) e mostra sugestões a partir dos sensores; limpa só o que você marcar, com prévia e confirmação |
| Assistente IA | conversa que consulta cada sensor conforme a pergunta (o funil), com respostas técnicas e detalhadas; conversas salvas, com o modelo, o tempo e o que foi consultado; relatório do dia em HTML |
| Configurações | intervalos, período de aprendizado, limite de aviso, tipos de aviso, modelo da IA (lista lida do LM Studio), VirusTotal, lista de confiança e quantos alarmes falsos cada regra já deu |
O ícone muda de estado: escudo normal = tudo certo, ponto amarelo = atenção, ponto vermelho = risco alto, apagado = avisos pausados. Notificações do Windows avisam de processo suspeito, aparelho novo na rede, mudança na inicialização, detecções do Windows Defender e GPU perto do limite de temperatura.
- Windows 11 (funciona no 10, mas o visual é pensado para o 11)
- Python 3.12 (python.org)
- Permissão de administrador (o app pede ao abrir)
- Opcional: placa NVIDIA para o card completo da GPU (o uso por programa funciona com qualquer placa); LM Studio para o assistente; chave gratuita do VirusTotal
git clone https://github.com/dockst3r/SmartGuardian.git
Depois, dois cliques em Instalar.bat. Ele cria o ambiente do Python (.venv), instala as
bibliotecas, cria o atalho SmartGuardian no menu Iniciar e abre o app (o Windows pede permissão de
administrador). Para atualizar: git pull e Instalar.bat de novo, que instala as bibliotecas novas.
- Abra pelo menu Iniciar (ou pela busca do Windows) como qualquer app. Com o app já na bandeja, o atalho só traz a janela para a frente, sem pedir permissão de novo.
- Fechar ou minimizar a janela só esconde; o monitoramento continua. Para encerrar: botão direito no escudo → Sair.
- Configurações → Iniciar com o Windows cria uma tarefa agendada que abre o app como administrador sem pedir permissão a cada login. Atalho no menu Iniciar liga e desliga o atalho.
SmartGuardian (terminal).batlista no terminal os processos sem assinatura confiável (sg.py processos --todospara todos).
O SmartGuardian roda como administrador e pode iniciar sozinho no login. Se a pasta onde ele está
puder ser alterada por usuários comuns (é o caso de uma pasta criada direto em C:\), qualquer
programa sem administrador ganharia administrador só editando um arquivo dele. O app detecta isso e
mostra um aviso; em Configurações → Proteger a pasta, só administradores passam a alterar os
arquivos. Depois disso, para atualizar, use o Instalar.bat (ele pede administrador) ou um terminal
como administrador para o git pull.
A proteção grava as permissões só na pasta raiz; o resto herda. O perfil do WebView2 (o motor da
janela) fica fora dela, em %LOCALAPPDATA%\SmartGuardian\webview, porque parte dos processos do
WebView2 roda sem administrador e precisa gravar ali (dentro da pasta protegida a janela abria preta).
Ao abrir, o app encerra os processos do WebView2 que tenham sobrado de uma execução que caiu, e que
travariam esse perfil.
Se uma versão antiga do app deixou os arquivos sem nenhuma permissão (nem administrador abre), rode num terminal como administrador:
icacls "C:\SmartGuardian\*" /reset /T /C
Por que não um .exe? Para um programa de segurança que roda como administrador, poder ler o código
antes de rodar é uma vantagem; um .exe sem assinatura digital pedindo administrador é justamente o
que o próprio app ensina a desconfiar, e empacotadores como o PyInstaller costumam gerar alarme falso
em antivírus.
Por que administrador: sem isso o Windows esconde o caminho de boa parte dos processos e não deixa encerrar processos nem mexer na inicialização.
Cada processo começa em 0 e cada sinal soma pontos. Aviso a partir de 30 (ajustável), risco alto a
partir de 60. Pesos e listas ficam em rules.json, criado na primeira execução.
| Sinal | Pontos |
|---|---|
| Nome de processo do Windows fora da pasta do Windows (forte) | 40 |
| Conexão aberta pelo programa para uma porta usada por invasão (4444, 1337, 31337…), ou porta dessas aberta nele, TCP ou UDP (forte) | 30 |
| Pasta temporária ou gravável por qualquer usuário · assinatura quebrada · comando codificado · Office abrindo terminal · GPU acima de 50 % por ~15 s sem assinatura válida (perfil de minerador) | 25 |
| Sem assinatura digital | 20 |
| Pasta do usuário (AppData, ProgramData) · Downloads | 15 |
| Processo pai errado · sem assinatura e na internet · porta aberta para a rede (só se o firewall liberar) | 10 |
| Programa novo depois do aprendizado · sem assinatura em pasta protegida | 5 |
- Nenhum sinal comum avisa sozinho. O máximo é 25 (mesmo editando o
rules.json) e o aviso começa em 30. Só as duas regras fortes avisam sozinhas, porque quase não acontecem com programa legítimo. - Assinatura válida anula as regras de local. Discord em AppData e Defender em ProgramData ficam em 0.
Não vale para nome do Windows fora do lugar: uma cópia do
svchost.execontinua com assinatura válida da Microsoft. - Sem assinatura em Program Files ou Windows pesa só 5 (ferramentas do Git, por exemplo).
- Período de aprendizado de 7 dias. O que roda nesse período vira o normal. Se algo depois piorar (por exemplo, passar a usar uma porta de invasão), o aviso sobe de nível do mesmo jeito.
- Isso é normal. Programa assinado ganha confiança pela editora (continua confiável ao atualizar); sem assinatura, pelo hash (perde a confiança se o arquivo mudar). Cada clique conta como alarme falso da regra, e as Configurações mostram quais regras erram mais.
- Inicialização: só avisa de itens novos depois da primeira lista. Itens da Microsoft só ficam registrados, exceto quando chamam powershell, cmd, mshta e similares.
Conferida como o Windows confere, sem internet (WinVerifyTrust): assinatura no próprio arquivo, catálogo do Windows (System32) ou pacote da Microsoft Store/MSIX. Certificado vencido sem carimbo de tempo conta como assinado, com observação.
Placas NVIDIA: uso, VRAM, temperatura, folga até a placa reduzir o desempenho, potência, ventoinha,
clock e versão do driver, pela biblioteca oficial da NVIDIA (nvidia-ml-py, que usa o nvml.dll do
driver). Uso de GPU e VRAM por programa vem dos contadores do próprio Windows, e vale para
qualquer fabricante. Avisos opcionais: GPU perto do limite térmico e VRAM cheia por 30 s.
Minerador escondido aparece como uso alto e contínuo de GPU por um programa estranho, por isso a
regra do minerador (jogos, navegadores e o LM Studio são assinados e não disparam).
Hotspot e temperatura da memória não existem na API oficial para placas GeForce.
- Encerrar fecha só o processo escolhido (não os que ele abriu) e confere que é o mesmo processo da tela, para não atingir outro programa que tenha reaproveitado o PID. Recusa processos essenciais do Windows (csrss, wininit, lsass, svchost do sistema…) e o próprio SmartGuardian.
- Quarentena encerra o processo e move o arquivo para
quarentena/, com um.jsondizendo de onde veio. Recusa arquivos do Windows, arquivos assinados pela Microsoft, programas assinados instalados em Program Files (para esses, desinstale ou use o Defender) e o Python que roda o app. - Desligar da inicialização pede confirmação e nunca apaga: a entrada original fica guardada e volta igual ao religar. Serviços e tarefas do próprio Windows não são desligados por aqui (poderiam deixar o PC sem rede ou firewall), exceto os que chamam powershell, cmd, mshta e similares.
- Instale o LM Studio e baixe um modelo (veja a tabela abaixo).
- No LM Studio: carregue o modelo e ligue o servidor local (Developer → Start Server).
- No SmartGuardian: Assistente IA → Ativar.
A cada pergunta, a IA recebe uma visão geral do PC (cerca de 1.500 caracteres): sistema, GPU, e os destaques de cada sensor (processos com pontuação, portas alcançáveis, aparelhos novos, itens novos na inicialização, alertas abertos, espaço recuperável). Para aprofundar, ela chama ferramentas, cada uma lendo um sensor do SmartGuardian, e cruza os resultados (uma porta leva ao processo, o processo à assinatura, às conexões e à inicialização):
| Ferramenta | O que devolve |
|---|---|
processos |
lista filtrada (risco, sem assinatura, CPU, memória, GPU) com pontuação e motivos |
processo |
um processo inteiro: linha de comando, pai, filhos, assinatura, conexões, portas com a regra do firewall, inicialização, alertas |
conexoes |
conexões por programa, com destino, nome DNS e estado |
portas |
portas abertas, se o firewall as libera (e qual regra) e para que serve cada porta comum |
rede_local |
adaptador, roteador, DNS, latência e aparelhos com IP, MAC, fabricante e quando foram vistos |
inicializacao |
itens de terceiros, novos ou desativados |
alertas |
histórico do banco, por dias e texto |
sistema |
CPU, memória, discos, rede e plano de energia, com mínimo, média e máximo |
gpu |
todos os dados da placa e quem a usa |
otimizacao |
o que dá para limpar e as sugestões de desempenho |
Na conversa aparece ao vivo o que a IA está consultando, e cada resposta mostra no fim "Consultou: …". Nenhuma ferramenta muda nada no PC. Encerrar, desligar da inicialização e limpar continuam sendo botões que você aperta. Se o modelo não aceitar ferramentas, o app manda o resumo completo de antes (ou desligue em Configurações → Consultar os sensores).
Respostas técnicas ou simples (Configurações → Respostas): o padrão é técnico, com diagnóstico, detalhes com PID, caminhos, portas, regras do firewall e números, o mecanismo por trás e "Próximos passos" com comandos do PowerShell. Tabelas, títulos e blocos de código aparecem formatados.
O modelo é instruído a tratar os dados só como dados (um programa malicioso pode escrever instruções na própria linha de comando), a citar só telas que existem e comandos reais do Windows, e a nunca recomendar limpar o Prefetch, a memória ou o registro. O espaço para a conversa e para os resultados das ferramentas se ajusta ao contexto com que o LM Studio carregou o modelo. As conversas ficam salvas no banco local, com o modelo, o tempo e o que foi consultado em cada resposta.
Medido com este app numa RTX 5070 de 12 GB (Ryzen 7 9800X3D, 32 GB de RAM), com o resumo do PC de ~2.000 tokens em cada pergunta:
| Modelo | Tamanho | Geração | Resposta típica | Avaliação |
|---|---|---|---|---|
| Qwen3.5 9B | 6,6 GB | 92–95 tokens/s | 9–14 s | Recomendado. O mais rápido, cabe inteiro na placa com contexto de 118K, respostas boas e fiéis aos dados. |
| Gemma 4 12B QAT (Q4_0) | ~7 GB | 67–71 tokens/s | 9–17 s | Bom e leve; português bom. |
| gpt-oss 20B (MXFP4) | ~11 GB | 41–59 tokens/s | 5–10 s | Pensa pouco, então responde rápido; ocupa quase toda a VRAM. |
| Gemma 4 26B A4B QAT (Q4_0) | 14,4 GB | 35–43 tokens/s | 10–26 s | Melhor qualidade, mas não cabe inteiro: parte vai para a RAM (o processo chegou a 18,6 GB de RAM). |
| Qwen3.8 27B (Q4_K_M) | 17,7 GB | — | — | Não cabe; as tentativas não terminaram. |
Com o funil e as respostas técnicas, o Qwen3.5 9B (contexto de 25K) levou de 13 a 22 s por pergunta, consultando 1 ou 2 ferramentas e respondendo com 2.700 a 5.500 caracteres. Modelos que "pensam" antes de responder (Gemma 4, Qwen 3.x) funcionam: o app reserva espaço para o raciocínio. Cada resposta mostra o modelo e o tempo, então dá para comparar no seu próprio PC.
Analisar só mede. Limpar apaga só os itens marcados, depois de confirmar, e só arquivos mais velhos que o limite de cada item (24 h nos temporários, 7 dias em despejos e relatórios de erro). Arquivo em uso fica. Junções e links de pasta não são seguidos, então um link dentro do Temp não leva a limpeza para outra pasta. Cada limpeza fica no histórico, com quanto liberou.
As sugestões vêm dos sensores e não mudam nada sozinhas: disco acima de 85 %, PC ligado há mais de 7 dias, memória acima de 85 % (e quem usa), muitos programas na inicialização, VRAM ocupada com a GPU parada, plano de energia de economia, pasta Downloads grande e arquivo de hibernação grande.
De propósito, ficam de fora:
- Prefetch: o Windows usa para abrir os programas mais rápido. Limpar deixa tudo mais lento por dias.
- "Limpar memória": RAM livre é desperdiçada. O Windows usa a sobra como cache e solta sozinho.
- Limpeza de registro: não tem ganho medido e pode quebrar programas.
- Apagar
SoftwareDistribution\Downloaddireto: com o Windows Update ligado, ele restaura e reorganiza a pasta (medido aqui: 99 mil arquivos "apagados" voltaram). A limpeza das atualizações é pelo DISM, no item "Limpeza do Windows Update".
Só o que você ligar:
- IP público: consulta
api.ipify.orga cada 30 min (desligado por padrão). - VirusTotal: envia só o SHA-256 do arquivo, quando você clica (precisa de chave).
- Lista de fabricantes do IEEE: baixada uma vez para
data/oui.csv.
A varredura da rede só manda ping e lê a tabela ARP do Windows; não abre portas nos aparelhos.
Para as portas abertas, o app lê as regras do firewall no registro e o perfil da rede (Pública,
Privada, Domínio); não muda nenhuma regra. Porta escutando com o firewall ligado e sem regra que a
libere aparece como "Bloqueada pelo firewall" e não conta na pontuação.
O card de rede conta só as placas físicas ligadas (VPN e adaptadores virtuais ficam de fora, para não
contar o mesmo tráfego duas vezes) e bate com o contador do Windows dentro de 1 a 3%.
Banco, configurações, log, relatórios e quarentena ficam na pasta do programa e estão no .gitignore.
.venv\Scripts\python.exe -m unittest discover -s tests -v
67 casos. Programas comuns que não podem avisar (Discord, Git, Store, Defender, svchost
verdadeiro, instalador assinado em Temp, certificado vencido, jogo e LM Studio com GPU a 100 %);
ataques que precisam avisar (svchost falso em Temp e em C:\Windows\Tasks, porta 4444, AppData
sem assinatura na internet, Word abrindo PowerShell codificado, assinatura adulterada, minerador em
AppData, powershell com qualquer abreviação de -EncodedCommand); portas (conexão que chega e
loopback não contam, porta temporária nunca é "porta de invasão"); firewall (regra de app da Store, Wi-Fi Direct e perfil inativo não expõem porta; firewall desligado expõe tudo); as proteções de Encerrar e
Quarentena (testadas sem encerrar nem mover nada, inclusive PID reaproveitado e o próprio Python);
a limpeza do histórico, que mantém o que foi aprendido; o tamanho do histórico enviado à IA; a
otimização, em pastas temporárias criadas pelo teste (só arquivos velhos saem, a pasta do item fica,
junção para outra pasta não é seguida, arquivo em uso fica, analisar nunca apaga, nenhum item mexe no
Prefetch ou no Windows Update); e o funil da IA com um LM Studio falso (ferramenta e depois resposta,
limite de rodadas, argumentos quebrados, erro de ferramenta vira texto).
Interfaces tray.py + ui/ (bandeja e janela pywebview) sg.py (terminal)
|
Núcleo core/guard.py laços de coleta, pontuação, alertas, ações, contexto da IA, relatório
/ | | | \
Coletores system.py gpu.py procs.py conns.py firewall.py lan.py startup.py
CPU/mem NVML + uso processos conexões regras e ping, ARP, Run, pasta, serviços,
disco/rede por programa (psutil) DNS rev. perfil ativo fabricante tarefas agendadas
|
Análise signature.py (WinVerifyTrust) rules.py (pontuação) ai.py (LM Studio) + tools.py vt.py
optimize.py (análise e limpeza segura, sugestões)
|
Dados store.py → settings.json, smartguardian.db (SQLite), rules.json
| Arquivo | Papel |
|---|---|
tray.py |
app da bandeja: janela, ícone, administrador, instância única |
ui/index.html |
janela; tudo desenhado a partir de api.state(view) |
ui/api.py |
funções que a janela chama no Python (perguntas à IA rodam em segundo plano) |
ui/win.py |
detalhes do Windows: ícone, administrador, instância única, atalho no menu Iniciar, iniciar com o Windows, tema |
Instalar.bat |
instala ou atualiza: ambiente, bibliotecas, atalho no menu Iniciar |
core/firewall.py |
se uma porta aberta é alcançável: regras do firewall (registro), perfil ativo, programa e serviço |
core/ai.py |
prompts (técnico e simples) e o laço de ferramentas com o LM Studio |
core/tools.py |
as ferramentas da IA, uma por sensor; só leem |
core/optimize.py |
o que dá para limpar, a limpeza segura e as sugestões de desempenho |
docs/prototipo.html |
protótipo navegável da interface, com dados de exemplo |
docs/visao-geral.png |
print da Visão geral (dados identificáveis trocados por exemplos) |
- A varredura cobre até um /24 (254 endereços) da rede do PC.
- Sem país de destino nas conexões (precisaria de uma base de dados externa).
- Reativar um serviço desligado pelo app volta para "Automático", mesmo que antes fosse "Automático (atraso)".
