Eu pensava que o consumo de tokens crescia exponencialmente de acordo com o tamanho da conversa.
Eu estava errado. O crescimento é linear.

Após 10 dias sem ligar o notebook, decidi criar algo novo no último dia do ano: um dashboard open-source com métricas de uso para Claude Code.
Funciona completamente offline, baseado nos arquivos que ele salva no seu computador 🗄️.
Vídeo demo:
O que que ele mede?
Não analisa conteúdo, apenas quantidade, volume e tempo ⌛️, sobre os seguintes domínios: projetos, sessões, mensagens e tokens (de entrada, saída e cache).
- Uso de tokens por sessão/pasta (input e output)
- Ordenado por: quantidade de token, "novidade/mais recente" ou mensagens
- Horário de maior atividade
- Baseado em mensagens, tokens ou sessões
- Custo estimado (se eu usasse o modo de cobrança por API Key ☠️ ao invés de subscription)
Por que é útil?
Talvez não seja, mas eu gosto de gráficos bonitos e atualizações em tempo-real 😁
Como os dados já estão lá, resolvi fazer, por curiosidade mesmo. Usei a minha stack de estimação: Bun, TypeScript e React.
Continuarei usando o Claude Code, então os números devem subir ⬆️. Número grande = gráfico bonito = pessoa feliz.
Serve também como análise pessoal de uso da ferramenta, e combina com o meu lema de novos projetos para 2026:
Criar algo útil para mim, e então distribuí-lo. Se não é útil para mim, não criar.
Como funciona?
Bun is all you need

Bun -> Chokidar -> 👀 -> 💿
Ao executar o arquivo src/server/index.ts, registramos um novo watcher (observador de arquivos) com o Chokidar na pasta global do Claude Code ($HOME/.claude), nos arquivos:
stats-cache.jsonprojects/**/**.jsonlhistory.jsonl
A biblioteca permite cadastrar uma função de callback que será executada quando algum desses arquivos for alterado. Por baixo dos panos, ela utiliza a SYSCALL fsevents no MACOS e inotify no Linux (não sei como funciona no Windows, mas a biblioteca é cross-platform).
Além do watcher, iniciamos também um servidor web com Bun.serve na porta 3190 com alguns endpoints:
/ws-> Servidor WebSocket nativo do Bun (para comunicação em tempo real entre FE -> BE)/-> Rota estática com arquivo../client/index.html(aplicação React)/api/{utils}e/health-> Endpoints úteis para a API
Bun -> WebSocket -> React
Assim que a notificação chega ao Bun, ele lê todos os arquivos e constrói um objeto massivo com as informações necessárias para o dashboard (sim, extremamente ineficiente, mas tem uma explicação), esse objeto é enviado para a aplicação React, que atualiza os gráficos.
Como foi feito?
Uma mistura de Vibe Coding com Vibe Engineering.
Não programei 1 linha de código na mão 😁, isso explica a ineficiência da arquitetura de transmissão de dados e prováveis problemas de qualidade (como a aplicação react viver dentro de um único arquivo index.html), mas o foco do projeto não era qualidade, e sim criar algo funcional o mais rápido possível.
Como estou de recesso nesse fim de ano (🎉), passei ~10 dias sem ligar o computador e hoje tirei 3h30m para finalizar a aplicação e escrever este post.
O primeiro commit foi feito no dia 20/12/2025, mas ficou parado desde então.

Vi que, no dia 21/12, lançaram um Claude Code Wrapped que segue uma abordagem parecida, mas resolvi terminar minha versão mesmo assim.
Conclusões
Se eu não pagasse o plano mensal do Claude Code ($20 ou $100), teria gasto quase $2000 dólares com o desenvolvimento dos meus projetos pessoais ☠️ (já que esse é o meu computador pessoal).

E ainda bem que a CLI usa uma boa estratégia de cache, senão os gastos seriam bem maiores.
Se você conhece alguém que usa modelo de cobrança por API Token no Claude Code, avise-a urgentemente que ela está queimando dinheiro.
Vale MUITO mais a pena pagar 2 planos em contas diferentes e alternar entre elas (usando /login) quando o limite de uma for atingido.
Jamais opte por pagar por token, é simplesmente caro demais.
Com isso, vou ficando por aqui, um grande abraço e feliz começo de ano para você 😁🥂
Ah, se quiser aprender mais sobre como usar o Claude Code, escrevi um guia completo: Claude Code Setup 👀
