O tool @diagram renderiza diagramas de arquitetura, dependências, fluxo e ER em PNG, SVG ou JPG a partir de Graphviz DOT — com os textos nítidos e exatamente corretos, porque os rótulos vêm do layout engine, não de pixels “chutados” por um modelo de visão.
O Graphviz é embedado: o go-graphviz traz o engine upstream compilado para WebAssembly, executado pelo runtime wazero (Go puro). Portanto não há cgo, não há binário dot para instalar e não há chamada de rede — o mesmo DNA self-contained do TTS/STT embedados e das notas de voz puro-Go.
Para qualquer diagrama de nós/arestas, prefira @diagram ao @image. O @image gera uma imagem raster e erra letras; o @diagram é determinístico e os nomes saem 100% corretos. SVG é infinitamente escalável; PNG com dpi=300 é qualidade de impressão.
Uso
<tool_call name="@diagram" args='{"cmd":"render","dot":"digraph{rankdir=LR; cli->agent; cli->llm}","output":"/tmp/arch.png"}' />
<tool_call name="@diagram" args='{"file":"./arch.dot","format":"svg","output":"/tmp/arch.svg"}' />
<tool_call name="@diagram" args='{"cmd":"gomod","root":".","format":"svg","output":"/tmp/imports.svg"}' />
O LLM invoca @diagram automaticamente quando você pede um diagrama de arquitetura/dependências como imagem — ele escreve o DOT (os modelos são bons em DOT) e renderiza aqui.
São dois subcomandos: render (DOT → imagem) e gomod (grafo de imports real de um módulo Go → imagem).
Subcomando render
Renderiza DOT — inline (dot) ou de um arquivo .dot (file) — para uma imagem.
Argumentos
| Argumento | Descrição | Default |
|---|
dot | Código Graphviz DOT inline. Exatamente um de dot | file. | (um dos dois) |
file | Caminho para um arquivo .dot a renderizar. Exatamente um de dot | file. | (um dos dois) |
format | png | svg | jpg | png |
engine | Layout: dot | neato | fdp | sfdp | circo | twopi | osage | patchwork | dot |
dpi | Resolução raster para png/jpg (30–600, com clamp) | 150 |
output | Caminho do arquivo de saída. Omitido, grava num arquivo temporário e retorna o caminho. | (temp) |
Subcomando gomod
Constrói o grafo de imports real de um módulo Go (via go list -json ./...) e o renderiza, clusterizado por diretório de topo — um grafo de dependências fiel ao código 1:1, sem enumerar pacote na mão.
Argumentos
| Argumento | Descrição | Default |
|---|
root | Diretório do módulo a analisar | . |
internalOnly | Só arestas entre pacotes deste módulo (descarta dependências de terceiros) | true |
cluster | Agrupa pacotes em clusters por diretório de topo | true |
style | dark | light | plain | dark |
dotOnly | Retorna o código DOT gerado em vez de renderizar a imagem | false |
format / engine / dpi / output | Iguais ao render | — |
Use dotOnly: true para obter o DOT gerado e editá-lo (cores, agrupamentos, rótulos) antes de renderizar com render. Para diagramas focados, aponte root para um subdiretório (ex.: ./cli) — o grafo do módulo inteiro pode ficar muito largo.
Saída
Para render e gomod (sem dotOnly), o tool grava o arquivo e retorna um resumo com caminho, formato, tamanho e — para raster — as dimensões:
Diagrama renderizado → /tmp/arch.png (PNG, 245.1KB)
dimensões: 1200x800
Com dotOnly: true, o gomod retorna o próprio código DOT (texto), pronto para editar ou versionar.
Notas
- Não é read-only e não é concurrency-safe: o tool grava um arquivo (e o
gomod invoca go list), então passa pela confirmação de segurança padrão e não entra em lotes paralelos read-only.
- Embedado de verdade: o Graphviz roda como WebAssembly via wazero — nada para instalar, funciona offline já no primeiro uso, em qualquer SO/arquitetura.
- Engines suportados:
dot (hierárquico, default), neato/fdp/sfdp (força), circo (circular), twopi (radial), osage/patchwork (clusters/treemap).
Combine com o @docs-flatten e o @context: monte uma base de conhecimento do projeto e peça um diagrama de arquitetura — a IA usa o que aprendeu para escrever o DOT e o @diagram para renderizá-lo com fidelidade.