Pitch: Fiz um mascote de mesa com ESP32 que reage ao Claude Code, sem OAuth e sem gastar token
Começou como um devaneio pequeno: uma telinha mostrando o consumo de tokens do Claude Code. Daí empolguei com a ideia de fazer algo deliciosamente inútil, juntei uma impressora 3D, um rolo de filamento laranja parado aqui em casa... e nasceu o Claudinho, um Clawd de mesa que reage em tempo real ao que o Claude está fazendo.
Ele mostra quando o Claude está pensando, rodando ferramenta, esperando permissão, deu erro ou terminou. Mostra também o uso das janelas de 5 horas e 7 dias e o contexto, e apita quando o Claude termina ou precisa de mim. Assim eu paro de ficar encarando o terminal.
As duas regras que eu me impus
1. Nada de OAuth. Não aceitava que um enfeite de mesa tivesse acesso à minha conta, nem guardado na placa, nem numa API de terceiros. A saída foi usar o que o Claude Code já entrega no próprio computador:
- hooks: o Claude Code chama um script a cada evento (começou, usou ferramenta, pediu permissão, terminou...), e o script manda um POST pequeno para a placa na rede local;
- status line: o Claude Code passa para ela, em JSON, o uso do plano e o contexto. O script repassa só os números.
A placa nunca vê credencial nenhuma, só um segredo local para ninguém da rede mandar evento falso.
2. Custo zero de token. Os hooks rodam em segundo plano, fora do modelo. O Claude nem sabe que o Claudinho existe.
Hardware
Hoje são duas versões:
- Placa única (a recomendada): a E32R28T, um ESP32 com tela de toque de 2,8" já integrada, alto-falante e bateria. Soldagem: só os 2 fios do USB-C de energia na caixa.
- Clássica: ESP32-C3 Super Mini + display Nextion 2,4".
Algumas coisas que deram trabalho e foram divertidas:
- Saber se está carregando. O pino de status do carregador (TP4054) não chega no ESP32. A solução foi olhar só a tensão da bateria: quando pluga o cabo, ela pula uns 100 mV de uma vez, e quando tira, cai o mesmo tanto. Somado a uma tendência lenta de subida, deu para mostrar o raiozinho de carga.
- A voz. É de robô e gerada na hora na própria placa, sem nada gravado, saindo pelo DAC de 8 bits do ESP32.
- Extras inúteis, como prometido: jogo da velha, Genius e um painel da impressora 3D Bambu Lab via MQTT local.
Instalação
Entra como plugin do Claude Code, e uma skill guia a gravação do firmware e a configuração do Wi-Fi conversando com você.
Quem fez o quê
A caixa é 100% minha, modelada à mão no SketchUp. O firmware, os scripts, o plugin e boa parte da documentação foram escritos pelo Claude dentro do próprio Claude Code, comigo testando cada passo na placa de verdade. O Codex (GPT) fez uma revisão de segurança. Autoria dividida, para ninguém guardar mágoa quando a Skynet chegar.
Links
- Código, guia de montagem e vídeo (MIT, README em português): https://github.com/argeuthiesen/claudinho
- Caixa para imprimir, com o arquivo do SketchUp: https://makerworld.com/models/3365275-claudinho
Projeto de fã, sem ligação oficial com a Anthropic. Dúvidas e sugestões são bem-vindas!