O Visualizador de Grafo de Dependências é uma ferramenta web que lê os grafos
gerados pelo nosso sistema configurado com o Claude Code
(.claude/doc/graph.json) e os exibe de forma interativa, para que engenheiros e
demais membros da equipe possam visualizar com mais clareza as dependências e os
relacionamentos entre cada camada do projeto (domain, application,
infrastructure e entrypoint).
Em vez de varrer o codebase com grep para entender o impacto de uma mudança, a
equipe abre a página, busca o módulo e enxerga na hora quem depende dele, o que
ele usa e quem implementa cada interface com o layout em anéis concêntricos
refletindo a regra de dependência da Clean Architecture: qualquer seta apontando
"para fora" do centro salta aos olhos como violação de camada.
Desenvolvido pela SophiaMind como uma página estática
única (index.html), sem build, sem backend e sem instalação de dependências.
- Modo Arquitetura: anéis concêntricos por camada domain no centro, entrypoint na borda evidenciando violações da regra de dependência
- Modo Orgânico: layout de força livre (force-directed) para explorar clusters
- Painel de detalhes por módulo: descrição, arquivo, exports, "Depende de" e "Usado por", com navegação clicável entre dependências
- Filtros por camada (domain, application, infrastructure, entrypoint, shared,
config) e por tipo de relação (
uses,depends_on,implements,extends) - Busca instantânea por id do módulo, caminho do arquivo, exports ou descrição
(atalho
/) - Exportação do grafo em PNG de alta resolução (~2400px) e SVG vetorial
- Carregamento flexível: fetch automático do
graph.json, upload de arquivo, drag & drop ou colar o JSON direto na página - Interfaces (
type: interface) renderizadas como nós vazados, diferenciando contratos de implementações - Tooltip com descrição ao passar o mouse e destaque da vizinhança do nó
- Responsivo (desktop e mobile) e com suporte a
prefers-reduced-motion
Nenhuma instalação é necessária é uma página estática. Você só precisa de:
- Um navegador moderno (Chrome, Firefox, Edge ou Safari)
- Conexão com a internet no primeiro carregamento (D3.js e fontes via CDN)
- Um arquivo
graph.jsonno formato definido emGRAPH_SPEC.md, gerado e mantido pelo Claude Code no repositório do sistema Para servir localmente (opcional), qualquer servidor estático resolve por exemplo, Python 3 já instalado na máquina.
Siga as etapas abaixo para rodar o visualizador em sua máquina local:
- Clone o repositório:
git clone https://github.com/sophiamind/ClaudePreviewGraph.git- Navegue até o diretório do projeto:
cd ClaudePreviewGraph- Coloque o grafo do seu projeto ao lado do
index.html(ou use o exemplo embutido):
cp /caminho/do/projeto/.claude/doc/graph.json ./graph.json- Sirva a pasta com um servidor estático (necessário para o fetch do JSON funcionar):
python -m http.server 8000Após iniciar o servidor, acesse o visualizador em http://localhost:8000.
A página carrega o grafo nesta ordem de prioridade:
graph.jsonao lado doindex.html.claude/doc/graph.json(se o repositório inteiro for publicado)- Exemplo embutido de demonstração
Também é possível arrastar e soltar um
graph.jsonem qualquer ponto da página, usar o botão Carregar JSON ou Colar o conteúdo diretamente.
- Suba
index.htmle ograph.jsonpara a branch publicada (ou pastadocs/) - Em Settings → Pages, aponte para a branch/pasta
- Acesse
https://seu-usuario.github.io/seu-repo/ - Para atualizar o grafo, basta substituir o
graph.jsonnenhuma alteração no HTML é necessária
Consultas rápidas no terminal sobre o mesmo graph.json exibido pela página
(úteis em revisões de código e análises de impacto):
# Quem depende de um módulo? (impacto de uma mudança)
python3 -c "
import json
g = json.load(open('.claude/doc/graph.json'))
alvo = 'domain/recording/entity/recording_task'
for e in g['edges']:
if e['to'] == alvo:
print(f\" {e['from']} ({e['type']})\")
"# Quem implementa uma interface?
python3 -c "
import json
g = json.load(open('.claude/doc/graph.json'))
iface = 'application/recording/port/hls_downloader'
for e in g['edges']:
if e['to'] == iface and e['type'] == 'implements':
print(f\" {e['from']}\")
"No visualizador, o equivalente é clicar no módulo e consultar as seções "Usado por" e "Depende de" do painel de detalhes.
Contribuições são bem-vindas! Por favor, siga as diretrizes em CONTRIBUTING.md para fazer um pull request. Pontos de atenção:
- O projeto é intencionalmente um único
index.htmlsem etapa de build — mantenha assim - O grafo segue o contrato de
GRAPH_SPEC.md; mudanças no formato devem ser refletidas na especificação e no parser (parseGraph) - Lembre o invariante do grafo: a atualização do
graph.jsonentra no mesmo commit da mudança de código
Distribuído sob a licença MIT. Veja LICENSE para mais informações.
Team SophiaMind Desenvolvimento e manutenção sophiamind.com.br
- D3.js simulação de força e renderização do grafo
- Claude Code geração e manutenção
automática do
graph.jsona cada commit do sistema - Google Fonts Space Grotesk e JetBrains Mono
- A todos os engenheiros da equipe que usam e dão feedback sobre a ferramenta