Pular para o conteúdo principal
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

ArgumentoDescriçãoDefault
dotCódigo Graphviz DOT inline. Exatamente um de dot | file.(um dos dois)
fileCaminho para um arquivo .dot a renderizar. Exatamente um de dot | file.(um dos dois)
formatpng | svg | jpgpng
engineLayout: dot | neato | fdp | sfdp | circo | twopi | osage | patchworkdot
dpiResolução raster para png/jpg (30–600, com clamp)150
outputCaminho 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

ArgumentoDescriçãoDefault
rootDiretório do módulo a analisar.
internalOnlySó arestas entre pacotes deste módulo (descarta dependências de terceiros)true
clusterAgrupa pacotes em clusters por diretório de topotrue
styledark | light | plaindark
dotOnlyRetorna o código DOT gerado em vez de renderizar a imagemfalse
format / engine / dpi / outputIguais 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.