🪐 Claude Galaxy

Suas sessões do Claude Code viram uma galáxia animada dentro do VSCode.
O sol é o projeto aberto. Cada planeta é uma sessão do Claude Code naquele projeto — ele brilha e pulsa enquanto o Claude pensa ou roda uma tool, mostra há quanto tempo está trabalhando, e vai apagando conforme a sessão esfria. Um ping discreto avisa quando alguma sessão termina de responder.

Instalação
No VSCode: Ctrl+Shift+X → busque Claude Galaxy → Install.
Pela linha de comando:
code --install-extension MANOELHENRIQUEDEASSISFILHO.vscodeanimated
Ou pela página do Marketplace: marketplace.visualstudio.com/items?itemName=MANOELHENRIQUEDEASSISFILHO.vscodeanimated
O ID do publisher foi registrado em caixa alta e a URL do Marketplace diferencia maiúsculas de minúsculas: a variante minúscula devolve 404. A linha de comando (code --install-extension) aceita qualquer caixa.
Por que
Quando você tem 3, 5, 8 sessões do Claude Code abertas em terminais diferentes, é impossível saber quem está trabalhando e quem já terminou sem ficar alternando de janela. A galáxia fica dockada na barra lateral (ou numa janela flutuante) e responde isso de relance.
Como usar
- Clique no ícone 🪐 na Activity Bar.
- Trabalhe normalmente com o Claude Code neste projeto — os planetas aparecem sozinhos.
- Janela flutuante: arraste a view "Galáxia" para fora do VSCode (funciona desde o VSCode 1.85) e deixe num canto do monitor.
- Clique num planeta para ver os detalhes da sessão (estado, tool atual, tempos, tokens, último prompt, modelo, branch).
- Duplo-clique no planeta (ou o botão "abrir chat") retoma aquela conversa. Com a extensão oficial do Claude Code instalada, ela abre numa aba; sem ela, abre um terminal com
claude --resume <id>.
- Clique no sol para abrir o projeto no Explorer.
- A engrenagem no canto superior direito abre as configurações (sons, efeitos, tempos) sem sair da galáxia.
- A barra de status mostra
🪐 N ativas — clicar nela foca a galáxia.
Os dois relógios
| Rótulo |
O que mede |
| trabalhando há |
quanto tempo o Claude levou (ou está levando) no turno atual — congela quando ele termina de responder, e aí vira "esse comando durou tanto" |
| ativo há |
quanto tempo faz que você mandou o último comando nessa sessão — nunca para de contar |
A diferença entre os dois é exatamente há quanto tempo a sessão está te esperando.
Tokens
O painel mostra o total de tokens que passaram pela API na sessão (entrada + cache + saída), quantos foram gerados pelo modelo e o contexto da última chamada. Passe o mouse para ver a quebra completa.
Sessões grandes (acima de ~576 KB) só têm o começo e o fim lidos na carga inicial; o miolo é somado em background, em pedaços de 512 KB, e até terminar o total aparece como ≥ X.
Estados dos planetas
| Planeta |
Estado |
O que significa |
| 🟢 verde pulsando |
tool_running |
rodando uma tool (o nome aparece acima do planeta) |
| 🟣 roxo pulsando |
thinking |
o Claude está pensando/escrevendo a resposta |
| ⚪ aceso, sem pulso |
waiting_user |
terminou, esperando você |
| ⚫ apagado |
idle |
sem escrever há mais de 5 min |
| — sumiu |
dead |
sem escrever há mais de 30 min (configurável) |
O rótulo embaixo do planeta ativo é o timer: há quanto tempo aquela sessão está trabalhando na sua última mensagem. Enquanto a sessão está ativa, um anel tracejado, um arco de rastro e três satélites giram ao redor do planeta (claudeGalaxy.orbitEffects desliga).
Sons
Tudo sintetizado em código (Web Audio API) — nenhum arquivo de áudio, nada de sino de igreja:
| Evento |
Som |
| nova sessão |
"bloom" ascendente |
| sessão terminou de responder |
ping cristalino de duas notas |
| tool iniciando |
tick grave (desligado por padrão) |
| sessão esfriou |
descendente suave |
| erro na sessão |
tom dissonante curto |
Proteções: no máximo 1 som por tipo/sessão a cada 2s e no máximo 2 sons por segundo no total. O botão 🔊 no cabeçalho liga/desliga tudo, e a ⚙ ajusta volume e tick (com um botão de testar som).
Configurações
| Setting |
Padrão |
Descrição |
claudeGalaxy.activeThresholdSeconds |
15 |
escrita há menos que isso = sessão ativa |
claudeGalaxy.idleMinutes |
5 |
minutos sem escrita até virar idle |
claudeGalaxy.deadMinutes |
30 |
minutos sem escrita até virar morta |
claudeGalaxy.hideDeadSessions |
true |
esconder os planetas mortos |
claudeGalaxy.orbitEffects |
true |
satélites e anéis girando nos planetas ativos |
claudeGalaxy.multiRoot |
true |
em workspace multi-root, monitorar todas as pastas |
claudeGalaxy.sounds.enabled |
true |
sons ligados |
claudeGalaxy.sounds.volume |
0.5 |
volume (0–1) |
claudeGalaxy.sounds.toolTick |
false |
tick a cada tool iniciada |
Comandos
| Comando |
O que faz |
Claude Galaxy: Abrir galáxia |
foca a view na Activity Bar |
Claude Galaxy: Ligar/desligar sons |
atalho para o mute |
Claude Galaxy: Recarregar sessões |
re-escaneia a pasta de sessões |
Claude Galaxy: Modo demo (planetas mockados) |
planetas falsos, para ver o visual sem sessão real |
Claude Galaxy: Abrir pasta de sessões |
abre ~/.claude/projects/<projeto> |
Como funciona por dentro
O Claude Code grava cada sessão em ~/.claude/projects/<slug-do-projeto>/<uuid>.jsonl, onde o slug é o caminho absoluto do projeto com todo caractere não alfanumérico trocado por - (c:\Workspace\VSCode Galaxy → c--Workspace-VSCode-Galaxy).
A extensão vigia essa pasta (chokidar + poll de 2s como rede de segurança) e lê os arquivos de forma estritamente incremental: guarda o byte offset de cada .jsonl e só consome o que cresceu. Sessões longas passam de 10 MB — nunca há re-parse do arquivo inteiro (na carga inicial ela lê só 64 KB do começo, para o nome, e 512 KB do fim, para o estado atual).
O único trecho lido "para trás" é o miolo das sessões grandes, e só para somar tokens: em pedaços de 512 KB, um por vez, com respiro entre eles e descartando qualquer linha sem "usage" antes de parsear.
Nada sai da sua máquina: a extensão só lê arquivos locais e não faz nenhuma requisição de rede.
Requisitos
- VSCode 1.85 ou superior.
- Claude Code instalado e usado no projeto aberto (é ele quem gera os
.jsonl).
Desenvolvimento
npm install
npm run watch # bundle em modo watch
# F5 no VSCode -> Extension Development Host
npm test # testes do watcher/parser (node:test)
Assets do Marketplace (opcionais, precisam das devDependencies):
npm run assets # gera media/icon.png e media/demo.gif (com o renderer real)
Publicação
npm run package # gera o .vsix
code --install-extension *.vsix # testa o pacote localmente
npx vsce login manoelhenriquedeassisfilho # cola o PAT (Azure DevOps, escopo Marketplace > Manage)
npm run publish # ou: npx vsce publish patch|minor|major
Licença
MIT — veja LICENSE.