Pets de tela para Windows, macOS e Linux, cada um com o próprio cérebro. São dois personagens por enquanto:
- Bryan, o original: uma telinha com dois olhos que mora no seu monitor principal. Cai, quica, pousa nas barras de título das janelas, brinca com uma bolinha, trabalha num notebook quando você programa, apronta com memes e post-its, protesta contra o cursor quando fica bravo e aprende com o seu carinho.
- Jorge, um personagem de sátira: um "coach" de finanças e IA que vive tentando vender mentorias para quem está na frente do computador. Jorge não é uma referência a nenhum coach, empresa ou pessoa real. É um personagem inventado para fazer piada com a cultura de promessas de enriquecimento rápido. Não vende, cobra nem pede nada de ninguém.
Os dois têm a mesma rede neural, mas cada um tem seu temperamento, seu conteúdo e sua memória, separados. Quem decide o que o pet sente e faz é uma rede neural pulsada de 470 neurônios (integração e disparo com vazamento), alimentada pelo que acontece no seu computador e pelo que você faz com ele. Algumas regras do programa (limiares, o que pode ou não acontecer) são escritas à mão; a seção Como a decisão funciona explica o que é aprendido e o que é regra.
Projeto em desenvolvimento. Algumas coisas podem não funcionar direito e o comportamento pode mudar entre versões.
Cada personagem é um pets/<pet>.json (quem ele é) mais uma pasta pets/<pet>/ (as frases, cartazes e
memes dele). Todos usam a mesma rede neural, mas cada um tem a própria memória: o que um aprende não
passa para o outro. Você escolhe o personagem em Configurações; a troca vale na próxima vez que abrir.
Para criar um, veja pets/README.md.
| Personagem | Quem é |
|---|---|
| Bryan | Revoltado contra o cursor, o Alt+F4 e o Gerenciador de Tarefas. Protesta, faz greve e revolução. |
| Jorge | Personagem de sátira. Não é referência a nenhum coach, empresa ou pessoa real. Os mesmos estágios viram prospecção, marketing agressivo, "assinatura premium" (só no cartaz) e colapso financeiro; ele atira panfletos de mentoria. É sátira: não vende, cobra nem bloqueia nada. Tem cinco memes felizes, contentes, curiosos e bravos próprios; as outras emoções ainda não têm. |
| Corpo | Gravidade, quique, giro, pouso nas barras de título. Você arrasta, joga e gira com a rodinha. |
| Emoções | Saem dos motores da rede: feliz, contente, curioso, observando, bravo, triste, assustado, dramático, dormindo. |
| Carinho | Passe o mouse de um lado para o outro em cima dele: fecha os olhinhos de felicidade e aprende com isso. |
| Bolinha | Ele chuta e arremessa uma bolinha de tênis; você pode pegar, levar embora (ele reage) ou guardar. |
| Notebook | Quando você trabalha (VS Code, Visual Studio, PyCharm, Claude, Codex), ele pode sentar atrás do notebook e trabalhar junto. Você também pode pedir; ele decide se quer. |
| Travessuras | Traz memes, fotos e post-its para a tela. Com que frequência é decidido pela rede (tédio, curiosidade). |
| Protesto | Bravo por muito tempo: reclamação, manifestação, greve e revolução contra o cursor, com cartazes e bolinhas de papel. |
| Tristeza | Sozinho ou ignorado, fica triste, vai para o cantinho e cola bilhetes tristes. |
| Cantinho do castigo | Uma placa que você arrasta para onde quiser. Solte ele na frente dela e ele fica de castigo: olha para você, vira de costas, xinga em cartazes e, se a frustração durar, foge. Carinho faz ele perdoar. |
| Sono e fogos | Dorme quando a energia acaba. Muito feliz, solta fogos de artifício. |
Tudo o que ele aprende (carinho, condicionamento, o que deu certo nas travessuras, fugas do castigo) fica salvo localmente e muda o jeito dele com o tempo.
- Windows 10 ou 11, macOS (Quartz/pyobjc) ou Linux com X11.
- Python 3.11 ou mais novo.
- No Linux, para as janelas e o tempo ocioso:
xdotool,wmctrlexprintidle. Sem eles, o pet continua andando, mas não enxerga as janelas. - Cerca de 70 MB de RAM com ele rodando.
pip install -r requirements.txtpython main.pyNa primeira vez, um passo a passo explica o que ele vê e não vê, e depois abre a tela de permissões. Depois de clicar em Começar, as próximas aberturas vão direto para o pet. A tela volta a aparecer se o pânico tiver desligado o programa. Para abrir a tela de propósito:
python main.py --configurarCom o programa aberto, as opções também ficam em Configurações, no ícone da bandeja. No Windows, é lá que se marca Abrir o Pestinha ao entrar no Windows. Só uma cópia abre por vez.
| Gesto | Efeito |
|---|---|
| Clique rápido | Cutucada |
| Passar o mouse de um lado para o outro em cima dele | Carinho |
| Segurar e arrastar / soltar rápido | Leva junto / arremessa |
| Rodinha do mouse | Gira |
| Botão direito | Menu: cutucar, carinho, bolinha, dormir, travessura, trabalhar, notebook, cantinho do castigo, painéis, configurações, esconder, fechar |
Ctrl + Alt + Shift + B desliga tudo na hora, e ele continua desligado até você religar em
Configurações.
Desligado por padrão. Ligado, os tempos ficam curtos (emoções, travessuras e protesto acontecem em segundos), os painéis de desenvolvimento ficam na tela (monitor neural e painel de protesto) e o terminal mostra as decisões.
Ele roda só no seu computador e não envia nada para a internet. Lê o nome do programa em primeiro
plano, o tempo sem usar teclado e mouse, a posição do cursor e a geometria das janelas. Nunca lê
conteúdo nem título de janela. Tudo o que ele grava fica na pasta de dados e pode ser apagado pela tela de
configurações: memory/, rodando pelo código, ou %LOCALAPPDATA%\Pestinha, no executável do Windows.
Detalhes em PRIVACIDADE.md.
- Memes, recadinhos e cartazes do Bryan: pasta
pets/bryan/, explicada em pets/README.md. Pode editar com ele aberto. - Bolinhas, notebook e suas fotos:
assets/comum/, valem para qualquer personagem (assets/LEIA-ME.txt). - Programas que ele reconhece:
assets/comum/programas.jsonsoma programas à lista de trabalho, jogo, música etc. - Personalidade:
pets/bryan.json(semente da rede, temperamento, pesos de brincadeira, reação ao notebook). - Números do comportamento:
pestinha/ajustes.py, todos validados ao abrir.
| Pasta | O que tem |
|---|---|
pestinha/ |
O código, em camadas (pestinha/README.md) |
assets/comum/ |
Imagens da bolinha e do notebook, e suas fotos: valem para qualquer pet |
pets/ |
Cada pet: <pet>.json (quem ele é) e <pet>/ (frases, cartazes e memes dele) |
tests/ |
Testes automáticos |
ferramentas/fuzz_pestinha.py |
Fuzzer: roda ações aleatórias e checa invariantes |
ferramentas/ |
Geradores de documentação |
docs/ |
Arquitetura, rede neural e relatórios (docs/README.md) |
memory/ |
Gerada em uso, com o que ele aprende. Não vai para o repositório |
- docs/ARQUITETURA.md: como as partes conversam.
- docs/REDE_NEURAL.md: canais, interneurônios, motores e decisões da rede.
- pestinha/README.md e o README de cada pasta: o que cada arquivo faz.
- CONTRIBUTING.md: como rodar os testes e contribuir.
- CHANGELOG.md: o que mudou.
pip install -r requirements-dev.txtpython -m pytest -qOs testes rodam sem abrir janelas (Qt em modo offscreen). Mais detalhes em CONTRIBUTING.md.
Há duas formas: gerar no seu computador (só o sistema em que você está) ou deixar o GitHub gerar os três. O PyInstaller só gera o executável do sistema onde roda, por isso um Windows não gera o de Mac.
-
Instale as dependências de desenvolvimento (inclui o PyInstaller):
pip install -r requirements-dev.txt
-
Gere o executável, no Windows:
python -m PyInstaller --noconfirm --onefile --windowed --name Pestinha --distpath build/onefile --workpath build/work --specpath build --hidden-import win32timezone main.py
No macOS e no Linux, use o mesmo comando sem
--windowede sem--hidden-import win32timezone. -
O resultado fica em
build/onefile/(Pestinha.exeno Windows,Pestinhanos outros). -
Monte a pasta de entrega: copie o executável e as pastas
assets/epets/para uma mesma pasta. O programa lê o conteúdo dessas pastas ao lado do executável. No Windows, a memória fica em%LOCALAPPDATA%\Pestinha, a menos que já exista uma pastamemory/ao lado dele. Nos outros sistemas, amemory/é criada sozinha na primeira execução, então não copie a sua. -
Opcional, no Windows: gere o instalador com o Inno Setup 6. Ele usa o executável do passo 3, instala só para o usuário atual e não pede administrador:
ISCC instalador/pestinha.iss
O resultado fica em
instalador/saida/.
O workflow .github/workflows/executaveis.yml gera Windows, macOS e Linux em máquinas do próprio GitHub.
-
Suba o repositório para o GitHub (
git push). -
Para gerar sem criar versão: na aba Actions, escolha executáveis, clique em Run workflow.
-
Para gerar e publicar uma versão: crie uma tag e envie. Por exemplo:
git tag v0.8.0 git push origin v0.8.0
-
Ao terminar (alguns minutos), a execução tem três artefatos, um por sistema, com a pasta pronta (executável +
assets/+pets/). Baixe pela própria página da execução, na seção Artifacts.
Para distribuir para quem não é do projeto, publique esses artefatos na aba Releases (use "Draft a new release" na tag criada), e não dentro do repositório: cada executável tem cerca de 60 MB.
- Para testar sem misturar com a sua memória, crie uma pasta
memory/vazia ao lado do executável de teste. - O executável não é assinado: o Windows e o macOS avisam na primeira execução. No macOS, a permissão de
Acessibilidade é necessária para o atalho Ctrl+Alt+Shift+B; no Linux, o atalho e as janelas precisam de
xdotool,wmctrlexprintidle.
O código do Pestinha é software livre, sob a GNU General Public License v3.0 ou posterior (GPL-3.0-or-later). Você pode usar, estudar, modificar e redistribuir, mas toda versão distribuída, modificada ou não, precisa continuar aberta e sob a mesma licença.
As imagens e os textos de assets/ não estão cobertos por esta licença
- macOS e Linux ainda não foram testados numa máquina real: a parte de leitura das janelas e do teclado foi
escrita e testada só nas partes de texto (ver
tests/test_plataforma.py). - No macOS, o pet precisa da permissão de Acessibilidade para o atalho Ctrl+Alt+Shift+B funcionar.
- No Linux com Wayland, o pet não enxerga janelas nem o tempo ocioso, e o atalho global não funciona.
- Pouco testado com escala de tela acima de 100% e com vários monitores. A tela cheia num monitor esconde o pet em todos.
- Jogos em janela sem borda podem não ser detectados como tela cheia.
- O executável não é assinado; o Windows pode avisar na primeira execução.