<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Heidenber Palacio Garzón</title>
    <description>The latest articles on DEV Community by Heidenber Palacio Garzón (@heidenber).</description>
    <link>https://dev.to/heidenber</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4230474%2F0f1a3028-4886-463b-af4e-934d0ee3c1e3.jpg</url>
      <title>DEV Community: Heidenber Palacio Garzón</title>
      <link>https://dev.to/heidenber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heidenber"/>
    <language>en</language>
    <item>
      <title>Por qué dejé de pedirle a mi agente de IA que dibuje diagramas [Trazo - opensource]</title>
      <dc:creator>Heidenber Palacio Garzón</dc:creator>
      <pubDate>Fri, 06 Nov 2026 14:55:59 +0000</pubDate>
      <link>https://dev.to/heidenber/por-que-deje-de-pedirle-a-mi-agente-de-ia-que-dibuje-diagramas-4g56</link>
      <guid>https://dev.to/heidenber/por-que-deje-de-pedirle-a-mi-agente-de-ia-que-dibuje-diagramas-4g56</guid>
      <description>&lt;p&gt;Si usas un agente como Claude Code, Codex o Pi, probablemente le has pedido un diagrama de arquitectura. Y probablemente el resultado tenía algo raro: dos cajas encimadas, un texto que se sale de su recuadro o una flecha que atraviesa un nodo.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema: el agente dibuja a mano
&lt;/h2&gt;

&lt;p&gt;Cuando un agente genera un diagrama en SVG, tiene que calcular él mismo la posición de cada caja, cada flecha y cada etiqueta. Los modelos de lenguaje son buenos describiendo sistemas, pero no calculando geometría.&lt;/p&gt;

&lt;p&gt;Lo medí: en un benchmark con Codex (8 tareas, 3 ejecuciones cada una), &lt;strong&gt;20 de 24 diagramas SVG escritos a mano tenían defectos de layout&lt;/strong&gt;. Además fueron los más caros en tokens, porque el agente escribe todo el dibujo como tokens de salida.&lt;/p&gt;

&lt;h2&gt;
  
  
  La idea: separar el qué del dónde
&lt;/h2&gt;

&lt;p&gt;Construí &lt;strong&gt;trazo&lt;/strong&gt; con una regla simple: &lt;em&gt;el agente dice qué hay en el sistema; trazo decide dónde va cada cosa.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El agente escribe un JSON semántico, sin coordenadas ni estilos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"architecture"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Orders"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nodes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"web"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"client"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"database"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"edges"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"web -&amp;gt; api: HTTPS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api -&amp;gt; db: SQL"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y trazo lo convierte en un HTML interactivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;trazo make demo.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4kpezqjb7mlexz9658u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4kpezqjb7mlexz9658u5.png" alt="Diagrama generado por trazo" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El HTML funciona sin servidor y sin internet: puedes mover, hacer zoom, pasar el cursor sobre un nodo para ver sus conexiones y exportar a SVG o PNG.&lt;/p&gt;

&lt;h2&gt;
  
  
  Los números
&lt;/h2&gt;

&lt;p&gt;Mismo benchmark, tres formas de hacer el diagrama:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opción&lt;/th&gt;
&lt;th&gt;Diagramas con defectos de layout&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SVG escrito a mano por el agente&lt;/td&gt;
&lt;td&gt;20 de 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mermaid&lt;/td&gt;
&lt;td&gt;7 de 24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;trazo&lt;/td&gt;
&lt;td&gt;0 de 46&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Para ser justo: &lt;strong&gt;Mermaid gastó entre un 35 y un 40% menos tokens que trazo&lt;/strong&gt; y GitHub lo muestra directamente en Markdown. Si eso es lo que más te importa, Mermaid es una buena opción. trazo gana en layout, en validación y en que el mismo JSON siempre da el mismo HTML, byte por byte.&lt;/p&gt;

&lt;p&gt;Detalles y método: &lt;a href="https://github.com/heidenber/trazo/blob/main/bench/README.md" rel="noopener noreferrer"&gt;bench/README.md&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué más hace
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cuatro tipos de diagrama:&lt;/strong&gt; arquitectura, flujo (con carriles), ERD (con claves foráneas a nivel de columna) y secuencia (con fragmentos &lt;code&gt;alt&lt;/code&gt;, &lt;code&gt;opt&lt;/code&gt; y &lt;code&gt;loop&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Errores útiles para el agente:&lt;/strong&gt; cada error indica la ruta exacta en el JSON y trae una pista, así el agente se corrige solo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill para agentes:&lt;/strong&gt; le enseña al agente a leer el código antes de dibujar y a dibujar solo lo que encontró.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lo que &lt;strong&gt;no&lt;/strong&gt; hace: solo tiene cuatro tipos (Mermaid, PlantUML y D2 cubren muchos más) y no se renderiza dentro de Markdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruébalo en tres pasos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Instálalo (necesita Node.js 22 o superior):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @heidenber/trazo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Opcional: pídele a tu agente que instale la skill siguiendo &lt;a href="https://github.com/heidenber/trazo/blob/main/README_ES.md#skill-para-agentes" rel="noopener noreferrer"&gt;estas instrucciones&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Pídele un diagrama:
&amp;gt; Usa trazo para dibujar la arquitectura de este proyecto. Ejecuta &lt;code&gt;trazo example architecture&lt;/code&gt; para ver el formato, escribe el JSON, ejecuta &lt;code&gt;trazo make&lt;/code&gt; y dime dónde quedó el archivo HTML.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;p&gt;trazo es open source (Apache-2.0): &lt;a href="https://github.com/heidenber/trazo" rel="noopener noreferrer"&gt;https://github.com/heidenber/trazo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Me interesa saber qué tipo de diagrama te falta y cómo le va con tu agente. Los comentarios y los issues son bienvenidos.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>ai</category>
      <category>cli</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
