Extensão do VS Code que lê os transcripts locais do Claude Code
(~/.claude/projects/**/*.jsonl) e mostra o consumo de tokens por sessão,
dia e semana.
TypeScript puro: sem Python, sem SQLite, sem CDN. Nenhum dado sai da máquina.
Criado por gabrielgreyford. Projeto independente, sem vínculo com a Anthropic — "Claude" aparece aqui apenas para descrever o que a extensão lê.
Instalação
Busque por clautrack no painel de Extensões (Cmd/Ctrl+Shift+X), ou instale
pelo terminal:
code --install-extension claudelimits.clautrack
Recebeu o .vsix direto? Menu ... no topo do painel de Extensões →
Install from VSIX..., ou arraste o arquivo sobre o painel.
Depois recarregue a janela (Cmd/Ctrl+Shift+P → Reload Window) e clique no ícone
de barras na activity bar.
Requer VS Code 1.85 ou superior. Não precisa instalar mais nada — a extensão lê apenas os transcripts que já existem na própria máquina de quem a instalou, e não envia nada para lugar nenhum.
O que mostra
Painel lateral — tokens efetivos de hoje com comparativo vs. ontem, os quatro tipos de token, sparkline de 14 dias e o resumo da sessão do projeto aberto.
Dashboard (aba do editor) — filtro de período (7/30/90 dias ou tudo), consumo diário empilhado por tipo, cache read em gráfico próprio, consumo semanal, mapa de calor hora × dia da semana, ranking por modelo e por projeto, e tabela de sessões ordenável.
Como os números são calculados
Tokens efetivos = input + output + cache write. O cache read fica de fora dessa soma e aparece em separado: na base local ele é cerca de 30× maior que todos os outros tipos juntos, então incluí-lo num único número tornaria os demais invisíveis. Nada é escondido — o cache read tem seu próprio gráfico, seu próprio tile e sua própria coluna na tabela.
Deduplicação é global. A mesma mensagem do assistente é gravada em vários
arquivos quando uma sessão é retomada ou bifurcada — na base local, 16 mil das 28
mil linhas de assistente são repetidas. Cada mensagem é contada uma única vez,
pela chave message.id + requestId (com uuid como reserva). Sem isso os totais
ficariam mais que o dobro do real.
Subagentes entram por padrão. Transcripts em <sessão>/subagents/*.jsonl são
atribuídos à sessão-pai e podem ser desligados no filtro do dashboard.
O dia é local, não UTC, para que "hoje" signifique o seu hoje.
Desempenho
Varredura incremental com cache em globalStorage. Arquivos inalterados vêm do
cache; um arquivo que cresceu é lido só a partir do offset anterior (transcripts
são append-only), com re-leitura completa se ele encolher. Uma linha ainda sendo
escrita nunca é lida pela metade.
Medido sobre 362 arquivos / 227 MB: 786 ms a frio, 21 ms a quente.
A view se atualiza sozinha via fs.watch recursivo (debounce de 1,5 s), com um
timer de fallback caso o watcher perca um evento.
Configuração
| Setting | Padrão | O que faz |
|---|---|---|
claudeUsage.dataPath |
~/.claude/projects |
Pasta dos transcripts |
claudeUsage.refreshInterval |
30 |
Segundos entre atualizações de fallback |
claudeUsage.includeSubagents |
true |
Incluir subagentes nos totais |
claudeUsage.weekStartsOn |
monday |
Primeiro dia da semana |
Comandos: Abrir dashboard, Atualizar, Reconstruir índice (descarta o cache e reindexa do zero).
Desenvolvimento
npm install
npm run build # typecheck + bundles
npm test # 19 testes sobre parser, dedupe e agregações
npm run package # gera o .vsix
node scripts/baseline.mjs --twice roda o scanner real sobre a sua base e imprime
totais, período e projetos — é a checagem que pega erro de dedupe ou de glob.
node scripts/preview.mjs gera .preview/*.html com os seus dados reais nos dois
temas, para inspecionar a interface sem abrir um Extension Host.
Pressione F5 para abrir o Extension Development Host.