<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es"><title>Chemaclass - ai</title><subtitle>Tech Lead compartiendo ideas prácticas sobre artesanía del software, TDD, liderazgo, Bitcoin e IA. Artículos, resúmenes de libros y charlas.</subtitle><link rel="self" type="application/atom+xml" href="https://chemaclass.com/es/tags/ai/atom.xml"/><link rel="alternate" type="text/html" href="https://chemaclass.com"/><generator uri="https://www.getzola.org/">Zola</generator><updated>2026-06-26T00:00:00+00:00</updated><id>https://chemaclass.com/es/tags/ai/atom.xml</id><entry xml:lang="es"><title>Recorta la Factura de Tokens</title><subtitle>Dos fugas, dos parches</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><category term="agentic-coding" scheme="https://chemaclass.com/tags/agentic-coding/" label="Agentic Coding"/><published>2026-06-26T00:00:00+00:00</published><updated>2026-06-26T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/cut-the-token-bill-on-both-ends/"/><id>https://chemaclass.com/es/blog/cut-the-token-bill-on-both-ends/</id><summary type="html">Dos herramientas pequeñas que se suman: Caveman recorta lo que el agent te responde, RTK recorta lo que la terminal manda de vuelta. Más espacio en el mismo context window, mismo modelo, mismos prompts.</summary><content type="html">&lt;p>Toda sesión agéntica quema tokens en dos direcciones a la vez. El agent te responde, y la terminal escupe su output. Las dos cosas pasan por el mismo context window, y las dos tienen fugas.&lt;/p>
&lt;p>Estira la sesión lo suficiente y chocas con el muro. Las respuestas empeoran y la factura sube.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;blockquote>
&lt;p>Mismo modelo. Mismos prompts. Factura más ligera.&lt;/p>
&lt;/blockquote>
&lt;p>Abre cualquier transcripción de sesión y los bloques más grandes no son tus prompts:&lt;/p>
&lt;ul>
&lt;li>Respuestas del agent: cháchara, vacilaciones, repeticiones, “Sure! Happy to help…”.&lt;/li>
&lt;li>Output de herramientas: logs de &lt;code>npm install&lt;/code>, muros de texto de &lt;code>git status&lt;/code>, volcados de &lt;code>grep&lt;/code> con rutas completas.&lt;/li>
&lt;/ul>
&lt;p>Las dos herramientas de abajo atacan una de esas cosas cada una. Caveman se ocupa de lo que el agent responde. RTK se ocupa de lo que la shell manda de vuelta.&lt;/p>
&lt;h2 id="caveman-recorta-la-salida">Caveman recorta la salida
&lt;a class="heading-anchor" href="#caveman-recorta-la-salida" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>&lt;strong>&lt;a rel="external" href="https://github.com/JuliusBrussee/caveman">Caveman&lt;/a>&lt;/strong> es un Agent Skill. Ejecuta &lt;code>/caveman full&lt;/code> una vez y el agent deja de rellenar sus respuestas: sin artículos, sin relleno, sin cháchara. Los fragmentos están bien, y los términos técnicos se mantienen exactos.&lt;/p>
&lt;p>Instalación:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">curl&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">fsSL&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh&lt;/span>&lt;span style="color: light-dark(#D73A49, #F97583);"> |&lt;/span>&lt;span style="color: light-dark(#6F42C1, #B392F0);"> bash&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Lo que muere:&lt;/p>
&lt;ul>
&lt;li>Artículos: a, an, the.&lt;/li>
&lt;li>Rellenos: just, really, basically, actually, simply.&lt;/li>
&lt;li>Cháchara: sure, of course, happy to.&lt;/li>
&lt;li>Vacilaciones: might, perhaps, it depends.&lt;/li>
&lt;/ul>
&lt;p>Lo que sobrevive:&lt;/p>
&lt;ul>
&lt;li>Bloques de código, errores exactos, rutas de archivo, comandos.&lt;/li>
&lt;li>Avisos de seguridad y operaciones destructivas (el skill se aclara solo).&lt;/li>
&lt;/ul>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Antes y después&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Modo normal:&lt;/p>
&lt;blockquote>
&lt;p>Sure! I’d be happy to help you with that. The issue you’re experiencing is likely caused by an off-by-one error in your token expiry check. The middleware compares the current time using &lt;code>&amp;lt;&lt;/code> when it should really be using &lt;code>&amp;lt;=&lt;/code>. Here’s the fix:&lt;/p>
&lt;/blockquote>
&lt;p>Modo caveman:&lt;/p>
&lt;blockquote>
&lt;p>Bug in auth middleware. Token expiry check use &lt;code>&amp;lt;&lt;/code> not &lt;code>&amp;lt;=&lt;/code>. Fix:&lt;/p>
&lt;/blockquote>
&lt;p>Mismo fix, y el bloque de código que viene después es idéntico. Lo único que encoge es la prosa de alrededor, hasta más o menos un cuarto.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>Hay tres niveles: &lt;code>lite&lt;/code>, &lt;code>full&lt;/code> y &lt;code>ultra&lt;/code>. Empieza en &lt;code>full&lt;/code>, porque &lt;code>ultra&lt;/code> se lee como un telegrama. Si una respuesta te queda demasiado seca, escribe &lt;code>normal mode&lt;/code> y se relaja.&lt;/p>
&lt;blockquote>
&lt;p>El agent no pierde inteligencia cuando le quitas la cháchara.&lt;/p>
&lt;/blockquote>
&lt;h2 id="rtk-recorta-la-entrada">RTK recorta la entrada
&lt;a class="heading-anchor" href="#rtk-recorta-la-entrada" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>&lt;strong>&lt;a rel="external" href="https://github.com/rtk-ai/rtk">RTK&lt;/a>&lt;/strong> (Rust Token Killer) envuelve los comandos que ejecuta tu agent. Un hook reescribe &lt;code>git status&lt;/code> como &lt;code>rtk git status&lt;/code> por detrás, así que no hay nada extra que teclear ni overhead que notar.&lt;/p>
&lt;p>Instalación:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">brew&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> install&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> rtk&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> init&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">g&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> instala el hook que reescribe los comandos&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Si más tarde &lt;code>rtk gain&lt;/code> da error, se ha colado otra herramienta con el mismo nombre; instala desde el &lt;a rel="external" href="https://github.com/rtk-ai/rtk">repo&lt;/a>.&lt;/p>
&lt;p>La versión envuelta quita el ruido antes de que llegue al agent: códigos de color, separadores repetidos, banners de &lt;code>npm install&lt;/code>, timestamps verbosos.&lt;/p>
&lt;p>Aquí tienes el mismo &lt;code>git status&lt;/code>, en crudo y luego envuelto:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>$ rtk proxy git status&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>On branch main&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>Your branch is up to date with &amp;#39;origin/main&amp;#39;.&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>Untracked files:&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> content/blog/new-draft.md&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>nothing added to commit but untracked files present (use &amp;quot;git add&amp;quot; to track)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>$ rtk git status&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* main...origin/main&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>? Untracked: 1 file&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> content/blog/new-draft.md&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>La misma información en la mitad de líneas. En un repo con movimiento la diferencia solo crece, porque decenas de untracked files, pistas de rama y líneas de instrucciones colapsan en un solo bloque pequeño.&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> gain&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> ver cuántos tokens te ha ahorrado&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> gain&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">-history&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> desglose por comando&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> discover&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> escanea tu historial de agente buscando ganancias&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>RTK reporta &lt;a rel="external" href="https://github.com/rtk-ai/rtk">60-90% menos tokens&lt;/a> en los comandos de desarrollo habituales. Ejecuta &lt;code>rtk gain&lt;/code> tras un uso real para ver tu propio número.&lt;/p>
&lt;p>Nunca toca el payload, solo el ruido a su alrededor, así que los errores y los stack traces salen exactamente como son. Si algún filtro alguna vez se come algo que de verdad necesitas, sáltatelo en esa llamada con &lt;code>rtk proxy &amp;lt;cmd&amp;gt;&lt;/code>.&lt;/p>
&lt;blockquote>
&lt;p>El output que tú no lees sigue siendo output que el modelo tiene que leer.&lt;/p>
&lt;/blockquote>
&lt;h2 id="por-que-la-combinacion-suma">Por qué la combinación suma
&lt;a class="heading-anchor" href="#por-que-la-combinacion-suma" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Por separado, cada herramienta ayuda un poco. Júntalas y el efecto se multiplica, porque atacan mitades distintas del mismo bucle. Un turno va así: tú escribes el prompt, el agent piensa, ejecuta un comando, la terminal responde, el agent lo lee y luego te contesta. RTK encoge la mitad de la terminal y Caveman encoge la respuesta, así que cada turno sale más barato y caben más en una misma ventana.&lt;/p>
&lt;p>Aquí está la prueba real, en un plan de 100 $/mes. Antes de añadirlas llegaba al límite semanal continuamente, a veces con un solo proyecto. Ahora corro varios proyectos en paralelo y el límite casi no aparece. El plan no se hizo más grande; las sesiones se hicieron más pequeñas.&lt;/p>
&lt;h2 id="instalalas-una-vez-y-olvidate">Instálalas una vez y olvídate
&lt;a class="heading-anchor" href="#instalalas-una-vez-y-olvidate" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Las dos instalaciones son globales, y las haces una sola vez. A partir de ahí sigues escribiendo &lt;code>git status&lt;/code>, &lt;code>grep&lt;/code> y &lt;code>npm install&lt;/code> igual que siempre. El hook los reescribe por ti y Caveman se activa solo, así que no hay hábitos nuevos que aprender.&lt;/p>
&lt;p>¿No sabes por dónde empezar? Elige la fuga que más te duela ahora mismo. Si el problema son las respuestas largas en cada arreglo, empieza por Caveman. Si son las inundaciones de output de &lt;code>grep&lt;/code> y &lt;code>npm install&lt;/code>, empieza por RTK. Añade la otra cuando te apetezca, que no se estorban entre sí.&lt;/p>
&lt;blockquote>
&lt;p>No mejoraste el modelo. Dejaste de malgastar su atención.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2026-06-26/footer.webp" alt="blog-footer" />&lt;/p></content></entry><entry xml:lang="es"><title>Skills por Encima de Agents</title><subtitle>Inteligencia sin experiencia es entretenimiento</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><published>2026-05-19T00:00:00+00:00</published><updated>2026-05-19T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/skills-over-agents/"/><id>https://chemaclass.com/es/blog/skills-over-agents/</id><summary type="html">Por qué los skills de Claude Code superan a los agentes especializados. El contexto bajo demanda decide la calidad. Librería que viaja con tu código.</summary><content type="html">&lt;p>La gente compara agentes de código. Claude Code, Codex, Gemini CLI. Cuál es más listo, más rápido, más barato. Los benchmarks salen nuevos cada mes.&lt;/p>
&lt;p>Pregunta equivocada.&lt;/p>
&lt;p>Tras un año metiendo agentes en proyectos reales, lo que más cambió las cosas no fue el agente. Fueron los skills que le escribí.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="los-agentes-son-un-commodity">Los agentes son un commodity
&lt;a class="heading-anchor" href="#los-agentes-son-un-commodity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Todo agente de código tiene la misma forma. Un modelo de lenguaje, un runtime, acceso al filesystem. Leer, razonar, escribir. Generalista por diseño.&lt;/p>
&lt;p>Dos equipos usan el mismo agente. Uno entrega código limpio y testado. El otro entrega basura que parece buena. Mismo modelo. Distinta enseñanza.&lt;/p>
&lt;blockquote>
&lt;p>El modelo es el motor. Los skills son el mapa. Sin mapa, con un motor potente te pierdes antes.&lt;/p>
&lt;/blockquote>
&lt;h2 id="inteligencia-no-es-experiencia">Inteligencia no es experiencia
&lt;a class="heading-anchor" href="#inteligencia-no-es-experiencia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>¿Quién lleva tus impuestos? ¿Un genio con 300 de IQ que nunca leyó una ley fiscal, o un asesor con 20 años presentando declaraciones?&lt;/p>
&lt;p>El asesor sabe qué deducciones aplican, qué declaraciones necesita tu negocio, qué errores te marcan. No es inteligencia. Es experiencia.&lt;/p>
&lt;p>Los agentes de IA tienen el mismo hueco. Un modelo razona sobre código y escribe soluciones. No conoce tus capas hexagonales. No sabe que las entidades de dominio nunca deben importar código de framework. No sabe que cada feature empieza con un test que falla.&lt;/p>
&lt;p>Los skills cierran ese hueco.&lt;/p>
&lt;h2 id="los-skills-cargan-contexto-bajo-demanda">Los skills cargan contexto bajo demanda
&lt;a class="heading-anchor" href="#los-skills-cargan-contexto-bajo-demanda" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Un skill es un fichero markdown en &lt;code>.claude/skills/&lt;/code>. Un procedimiento, un patrón, un trozo de conocimiento del dominio. Markdown con frontmatter.&lt;/p>
&lt;p>La clave está en cómo se cargan. El agente lee solo nombres y descripciones al arrancar. Carga el skill entero cuando la tarea encaja. Sigue los enlaces a las referencias solo cuando necesita profundizar.&lt;/p>
&lt;p>Esa carga bajo demanda es lo que hace que los skills escalen. Veinte skills casi no cuestan hasta que uno encaja con la tarea. Los agentes especializados, en cambio, cargan sus instrucciones enteras cada vez que arrancan. Más agentes, más coste fijo.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Un ejemplo real de skill&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>.claude/skills/&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> code-review/&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> SKILL.md # instrucciones principales&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> reference/&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> solid-checklist.md # ejemplos SOLID detallados&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> test-patterns.md # guías de calidad de tests&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>El &lt;code>SKILL.md&lt;/code>:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="markdown">&lt;span class="giallo-l">&lt;span>---&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#22863A, #85E89D);">d&lt;/span>&lt;span style="color: light-dark(#22863A, #85E89D);">escription&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Revisar cambios de código por violaciones de SOLID, calidad de tests y alineación de arquitectura&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#22863A, #85E89D);">a&lt;/span>&lt;span style="color: light-dark(#22863A, #85E89D);">llowed-tools&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> R&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">ead, Grep, Glob&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#22863A, #85E89D);">a&lt;/span>&lt;span style="color: light-dark(#22863A, #85E89D);">rgument-hint&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">[fichero o PR]&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>---&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;">#&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;"> Code Review&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>Revisa cambios de código contra las convenciones del proyecto.&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;">##&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;"> Pasos&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">1.&lt;/span>&lt;span> Leer el diff o los ficheros indicados&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">2.&lt;/span>&lt;span> Revisar arquitectura: la capa de dominio no importa framework, la infraestructura se mantiene delgada&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">3.&lt;/span>&lt;span> Revisar principios SOLID (ver reference/solid-checklist.md para patrones)&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">4.&lt;/span>&lt;span> Revisar calidad de tests: los tests verifican comportamiento, no detalles de implementación&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">5.&lt;/span>&lt;span> Señalar problemas con el principio concreto violado y una propuesta de fix&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;">##&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);font-weight: bold;"> Output&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>Para cada issue encontrado:&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">-&lt;/span>&lt;span> Fichero y línea&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">-&lt;/span>&lt;span> Qué está mal (qué principio o convención)&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#E36209, #FFAB70);">-&lt;/span>&lt;span> Cómo sería el fix&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>El agente ve la descripción en la lista de skills. Pides un review, carga &lt;code>SKILL.md&lt;/code>. Necesita un patrón SOLID, lee la referencia. Dos niveles, bajo demanda.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>&lt;img src="/images/blog/2026-05-19/middle.webp" alt="blog-middle" />&lt;/p>
&lt;h2 id="skills-vs-agentes-especializados">Skills vs agentes especializados
&lt;a class="heading-anchor" href="#skills-vs-agentes-especializados" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Ya cubrí los &lt;a href="/es/blog/inside-the-claude-folder/#agents-specialized-roles">agentes especializados&lt;/a>: workers aislados con su propio prompt y conjunto de herramientas. Buenos para trabajo en paralelo y fronteras de contexto limpias.&lt;/p>
&lt;p>Los agentes especializados son toscos. Un agente, un rol, un prompt fijo. Si quieres tres tipos de calidad de review, o escribes tres agentes o metes todo en uno.&lt;/p>
&lt;p>Los skills son finos. Un agente, muchos skills. El skill correcto se carga para la tarea. El contexto se mantiene pequeño. La calidad se mantiene alta.&lt;/p>
&lt;p>Regla práctica:&lt;/p>
&lt;ul>
&lt;li>Usa un &lt;strong>skill&lt;/strong> cuando necesitas un procedimiento o patrón. De &lt;code>phel-lang&lt;/code>: &lt;code>/gh-issue&lt;/code> (de issue a PR), &lt;code>/commit&lt;/code> (commit convencional), &lt;code>/refactor-check&lt;/code> (review SOLID).&lt;/li>
&lt;li>Usa un &lt;strong>agente&lt;/strong> cuando necesitas aislamiento. De &lt;code>phel-lang&lt;/code>: &lt;code>tdd-coach&lt;/code> (pairing de TDD), &lt;code>clean-code-reviewer&lt;/code> (review de PR), &lt;code>domain-architect&lt;/code> (exploración de arquitectura).&lt;/li>
&lt;/ul>
&lt;p>La mayoría de necesidades son skills, no agentes.&lt;/p>
&lt;blockquote>
&lt;p>Los agentes te dan velocidad. Los skills te dan calidad. Si tienes que elegir uno primero, elige skills.&lt;/p>
&lt;/blockquote>
&lt;h2 id="los-skills-son-tu-ventaja">Los skills son tu ventaja
&lt;a class="heading-anchor" href="#los-skills-son-tu-ventaja" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Los modelos mejoran cada mes. El mejor de este año es la base del siguiente. Las familias grandes convergen. Aparece una herramienta mejor, cambias.&lt;/p>
&lt;p>Tus skills no cambian con la herramienta. Codifican tu dominio, tus convenciones, tu arquitectura. Viven en tu repo. Viajan con tu código. Apuntas un modelo nuevo a la librería y eres productivo desde el día uno.&lt;/p>
&lt;blockquote>
&lt;p>El agente es reemplazable. Tus skills no.&lt;/p>
&lt;/blockquote>
&lt;h2 id="empieza-con-el-primer-prompt-repetido">Empieza con el primer prompt repetido
&lt;a class="heading-anchor" href="#empieza-con-el-primer-prompt-repetido" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>No necesitas 20 skills el día uno.&lt;/p>
&lt;p>Cero. Luego uno.&lt;/p>
&lt;p>La señal es la repetición. La segunda vez que tecleas el mismo contexto, ahí tienes un skill esperando. Sácalo a un fichero markdown. La próxima sesión, el agente ya lo sabe.&lt;/p>
&lt;p>Ejemplo concreto. En &lt;a rel="external" href="https://github.com/phel-lang/phel-lang">&lt;code>phel-lang&lt;/code>&lt;/a>, cada sesión pegaba el mismo brief: lee la issue #N, crea la rama según las etiquetas, TDD, abre el PR. A la tercera lo saqué a un skill &lt;code>/gh-issue&lt;/code>. Ahora tecleo &lt;code>/gh-issue 142&lt;/code> y el agente coge la issue, crea &lt;code>fix/...&lt;/code> o &lt;code>feat/...&lt;/code> según las etiquetas, escribe primero el test que falla, implementa, abre el PR. Un fichero markdown. La sesión ya no empieza desde cero.&lt;/p>
&lt;p>No lo escribas desde cero. Pídele al agente: &lt;em>“Lee este proyecto y escribe un skill mínimo de code review basado en lo que veas.”&lt;/em> Escanea, recoge convenciones, redacta v1. Tú lo ajustas. Añades lo que le faltó. Cortas lo que no aplica. Afinas la descripción.&lt;/p>
&lt;p>El segundo skill suele venir de un error. El agente rompe una convención. Escribe un skill que enseñe el camino correcto. No volverá a pasar.&lt;/p>
&lt;p>Los skills se acumulan. Cada uno sube el listón. Un fichero markdown, quizá 50 líneas. Beneficio para siempre.&lt;/p>
&lt;p>Quien no escribe skills se pasa la vida re-explicando lo que “realmente quiere”. Cada sesión desde cero. No es problema de herramienta. Es problema de gestión del conocimiento.&lt;/p>
&lt;p>El agente sale el año que viene. El skill se queda para siempre.&lt;/p>
&lt;blockquote>
&lt;p>Escribe el skill una vez. Cada sesión a partir de ahí empieza donde acabó la anterior.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2026-05-19/footer.webp" alt="blog-footer" />&lt;/p>
&lt;hr />
&lt;div style="position:relative;aspect-ratio:16/9;width:100%;">
&lt;iframe
src="https://www.youtube-nocookie.com/embed/CEvIs9y1uog"
title="YouTube video"
width="560"
height="315"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
referrerpolicy="strict-origin-when-cross-origin"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
allowfullscreen>
&lt;/iframe>
&lt;/div></content></entry><entry xml:lang="es"><title>Los Niveles de Adopción de la IA</title><subtitle>De prompts copiados a equipos de agentes</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><published>2026-05-01T00:00:00+00:00</published><updated>2026-05-01T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/the-levels-of-ai-adoption/"/><id>https://chemaclass.com/es/blog/the-levels-of-ai-adoption/</id><summary type="html">Una escalera de seis niveles para la adopción de la IA, de prompts copiados a equipos de agentes y flujos nativos de IA. Dónde se atascan las empresas y cómo subir.</summary><content type="html">&lt;p>La mayoría de empresas ya usa IA, pero pocas saben en qué punto están de la escalera de adopción. En un extremo, copias código a ChatGPT. En el otro, los agentes abren PRs mientras duermes. Más allá, la IA llega a gente que nunca tocó una terminal. Este post mapea el camino.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="de-donde-venimos">De dónde venimos
&lt;a class="heading-anchor" href="#de-donde-venimos" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Usar IA para programar era tener una segunda pestaña. Escribes una función, te atascas, pegas el error en el chat, pegas la respuesta de vuelta y rezas para que funcione. Lento, torpe, desconectado de tu código.&lt;/p>
&lt;p>&lt;a rel="external" href="https://github.com/features/copilot">GitHub Copilot&lt;/a>, sobre el Codex inicial de OpenAI, metió sugerencias dentro del editor, y a menudo se equivocaba con mucha seguridad. Estaba entrenado con código público, y el código público medio no es gran cosa. Tampoco sabía nada de &lt;em>tu&lt;/em> dominio, &lt;em>tus&lt;/em> convenciones ni &lt;em>tu&lt;/em> arquitectura. Era autocompletado que a veces acertaba.&lt;/p>
&lt;blockquote>
&lt;p>La primera generación de herramientas de IA para programar te daba un loro entrenado con todo internet. Fluido, seguro, y diciendo cosas que no tenían sentido en tu código.&lt;/p>
&lt;/blockquote>
&lt;p>Esto era &lt;em>vibe-coding&lt;/em> en su primera forma: tú ponías el &lt;em>vibe&lt;/em> pegando contexto y la IA rellenaba código que parecía correcto. Compilaba lo suficiente para parecer útil, y se rompía lo suficiente para parecer peligroso.&lt;/p>
&lt;h2 id="la-generacion-de-los-ides">La generación de los IDEs
&lt;a class="heading-anchor" href="#la-generacion-de-los-ides" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>El siguiente paso era obvio: si la IA necesita contexto, dale el editor entero.&lt;/p>
&lt;p>&lt;a rel="external" href="https://cursor.com">Cursor&lt;/a>, &lt;a rel="external" href="https://windsurf.com">Windsurf&lt;/a> y otros IDEs parecidos metieron el modelo dentro de tu flujo de programación. El asistente podía leer archivos, seguir imports y ver más de una función a la vez. El &lt;em>vibe-coding&lt;/em> pasó a ser una conversación con tu proyecto, y la productividad subió. Por un momento pareció el final del juego.&lt;/p>
&lt;p>No lo era. Editar archivos es solo una parte del trabajo. El resto es correr tests, leer logs, abrir ramas, revisar diffs y entender qué hace ya el código. Los asistentes que solo vivían en el editor te ayudaban a escribir más rápido, pero no sabían llevar una tarea de &lt;em>“arregla este bug”&lt;/em> a &lt;em>“PR listo para revisar.”&lt;/em>&lt;/p>
&lt;h2 id="el-salto-agentico">El salto agéntico
&lt;a class="heading-anchor" href="#el-salto-agentico" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>OpenAI lanzó &lt;a rel="external" href="https://openai.com/index/introducing-codex/">Codex&lt;/a> como agente en la nube: le das una tarea, trabaja en una rama y tú vuelves a un PR. Anthropic sacó &lt;a rel="external" href="https://claude.com/product/claude-code">Claude Code&lt;/a>, un agente de CLI en tu terminal, sobre tu repo, con tus herramientas.&lt;/p>
&lt;p>Este fue el gran salto, y no porque los modelos fueran más listos. Lo que cambió fue la unidad de trabajo. Dejaste de promptear línea a línea y empezaste a delegar tareas: lee el ticket, escribe el cambio, corre los tests, explica lo que hiciste. Un agente no necesita que lo lleves de la mano. Necesita un objetivo y el contexto adecuado.&lt;/p>
&lt;blockquote>
&lt;p>El salto de asistente a agente no es una mejora de velocidad. Es un cambio en la descripción del puesto. Pasas de escribir código a dirigir trabajo.&lt;/p>
&lt;/blockquote>
&lt;p>Claude Code casi no necesita setup. Sin &lt;em>lock-in&lt;/em> de editor. Apúntalo a tu repo, suelta una carpeta &lt;code>.claude&lt;/code> con reglas y convenciones, y se adapta. Lo conté en &lt;a rel="external" href="https://chemaclass.com/blog/inside-the-claude-folder/">Dentro de la Carpeta .claude&lt;/a>.&lt;/p>
&lt;p>El modelo que eliges importa más que antes. Los modelos frontera de hoy están muy por delante de los de hace un año. La distancia entre &lt;em>“puede esbozar una función”&lt;/em> y &lt;em>“puede refactorizar un módulo con criterio”&lt;/em> se cerró más rápido de lo esperado, y sigue cerrándose mientras Claude, Codex y Gemini se empujan mutuamente cada mes. Los precios también se están acercando, lo cual es una forma educada de decir que todos copian al primero que acierta con la versión sostenible.&lt;/p>
&lt;h2 id="agentes-con-casa-propia">Agentes con casa propia
&lt;a class="heading-anchor" href="#agentes-con-casa-propia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>El siguiente salto no fueron modelos más listos, fueron agentes con su propia máquina.&lt;/p>
&lt;p>&lt;a rel="external" href="https://openclaw.ai">OpenClaw&lt;/a> es el ejemplo más claro. Es un gateway open source que corres en tu propio hardware (Mac Mini, portátil viejo, VPS), un agente siempre encendido conectado a tus apps de mensajería, archivos y calendario. Tú pones el cerebro: Opus, GPT o un modelo local vía &lt;a rel="external" href="https://ollama.com">Ollama&lt;/a>. Cuando un proveedor aprieta límites o sube precios, cambias. El setup es tuyo.&lt;/p>
&lt;p>Un agente de programación vive dentro de un repo durante una tarea. Un agente estilo OpenClaw vive en &lt;em>tu vida&lt;/em>, a lo largo de días y herramientas. &lt;a rel="external" href="https://sauronbot.github.io/about/">Sauron&lt;/a> es el mío. Revisa mis PRs, abre issues, escribe código, saca contribuciones a open source y me lleva la contraria cuando estoy a punto de obsesionarme con algo. Cualquier cosa que yo pueda hacer en un ordenador, él también la hace, solo que más rápido. Deja de ser una herramienta que abres y pasa a ser un sitio donde trabajas.&lt;/p>
&lt;blockquote>
&lt;p>Un agente de programación es un compañero al que invitas a una tarea. Un agente &lt;em>gateway&lt;/em> es un compañero que vive en una máquina y aparece cada día.&lt;/p>
&lt;/blockquote>
&lt;p>Los proveedores cambian planes y límites más rápido de lo que nadie puede seguir, así que la gente monta setups que no dependen de un solo proveedor. El logo del modelo importa menos cada trimestre, y la arquitectura alrededor importa más.&lt;/p>
&lt;h2 id="ia-mas-alla-de-los-desarrolladores">IA más allá de los desarrolladores
&lt;a class="heading-anchor" href="#ia-mas-alla-de-los-desarrolladores" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>La IA para programar fue la historia más ruidosa porque los desarrolladores hablamos alto. La historia más grande es que las herramientas agénticas están llegando a gente que nunca escribió una línea de código.&lt;/p>
&lt;p>&lt;a rel="external" href="https://openai.com/index/introducing-chatgpt-agent/">El modo agente de ChatGPT&lt;/a> y &lt;a rel="external" href="https://claude.com/product/cowork">Cowork de Claude&lt;/a> son los ejemplos obvios: una IA que lee tus documentos, rellena tus hojas de cálculo, redacta tus slides y corre código por ti en segundo plano. &lt;a rel="external" href="https://www.anthropic.com/news/claude-design-anthropic-labs">Claude Design&lt;/a> salió el 17 de abril y &lt;a rel="external" href="https://sherwood.news/tech/anthropic-launches-claude-design-sending-shares-of-figma-down/">tumbó la acción de Figma más de un 7% el día del lanzamiento&lt;/a>. El pitch es sencillo: describe lo que quieres, consigue un prototipo que funciona y pásaselo a Claude Code para llevarlo a producción. Un flujo que antes necesitaba un diseñador, un PM, un ingeniero de frontend y tres rondas de revisión queda comprimido en una conversación.&lt;/p>
&lt;p>Lovable, v0, Canva y la propia Figma están bajo presión para repensar su posicionamiento. Si Claude Design “mata” a alguno es la pregunta equivocada. La correcta es qué pasa cuando hacer un prototipo usable baja de &lt;em>“contrata un diseñador”&lt;/em> a &lt;em>“descríbelo en voz alta.”&lt;/em>&lt;/p>
&lt;p>Las empresas que lo sienten primero no son las herramientas de diseño. Son los negocios pequeños que no podían pagar diseño, los &lt;em>founders&lt;/em> montando un &lt;em>pitch deck&lt;/em> a las tantas de la noche, los PMs probando una idea antes de convocar una reunión. Habrá una minoría de casos donde alguien sí hubiera pagado a un diseñador y ahora no lo hace, y ese coste es real. Pero en la mayoría, la IA no reemplazó a nadie: rellenó un hueco donde nunca iba a haber uno.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-05-01/middle.webp" alt="Pequeña biblioteca con estanterías de madera y pilas de libros" />&lt;/p>
&lt;h2 id="los-niveles-de-adopcion-de-la-ia">Los niveles de adopción de la IA
&lt;a class="heading-anchor" href="#los-niveles-de-adopcion-de-la-ia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Cada empresa con la que hablo está en algún punto de esta escalera. Los niveles no van de cuánto pagas en licencias, sino de cuán metida está la IA en cómo se hace el trabajo, y no solo en ingeniería.&lt;/p>
&lt;h3 id="nivel-0-negacion">Nivel 0: Negación
&lt;a class="heading-anchor" href="#nivel-0-negacion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>&lt;em>Postura a nivel empresa.&lt;/em> Nada de IA, oficialmente. Algunas personas usan ChatGPT en su portátil personal y no lo mencionan. A la dirección le preocupan las fugas de propiedad intelectual, o no lo ha puesto como prioridad. La conversación se queda en &lt;em>“deberíamos mirarlo algún día.”&lt;/em>&lt;/p>
&lt;p>El riesgo aquí no es la tecnología, es el tiempo. Cada mes en el Nivel 0 es un mes en el que tu competencia aumenta su ventaja.&lt;/p>
&lt;h3 id="nivel-1-productividad-personal">Nivel 1: Productividad personal
&lt;a class="heading-anchor" href="#nivel-1-productividad-personal" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>&lt;em>Adopción individual.&lt;/em> La IA se tolera, quizá hasta se anima. Cada uno la usa a su manera: ChatGPT en una pestaña, Copilot en el IDE, Claude para lo más peliagudo, una herramienta de diseño para los mockups. La producción sube, pero el &lt;em>know-how&lt;/em> se queda dentro de cada cabeza. Dos ingenieros, dos PMs o dos diseñadores del mismo equipo sacan resultados muy distintos porque promptean distinto.&lt;/p>
&lt;p>La mayoría de empresas están aquí a principios de 2026. Es una mejora real frente al Nivel 0, y es donde nace el mito de &lt;em>“la IA te da velocidad”&lt;/em>. Como ya &lt;a rel="external" href="https://chemaclass.com/blog/ai-gives-you-speed-not-quality/">defendí antes&lt;/a>, velocidad sin dirección compartida es caos más rápido.&lt;/p>
&lt;h3 id="nivel-2-practicas-compartidas">Nivel 2: Prácticas compartidas
&lt;a class="heading-anchor" href="#nivel-2-practicas-compartidas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>El equipo acuerda cómo usar la IA: convenciones compartidas, prompts que la gente reutiliza, reglas en el repo, un criterio común sobre cuándo fiarse del output y cuándo discutirlo. Las &lt;em>code reviews&lt;/em> pillan los errores de IA igual que pillan los humanos, y las &lt;em>design reviews&lt;/em> también. Se exigen tests tanto si escribió el código una persona como si lo escribió un modelo.&lt;/p>
&lt;p>Este es el primer nivel en el que la IA pasa a ser una capacidad de equipo en vez de un hábito personal. Techo más alto, suelo más alto. La gente nueva se pone al día más rápido porque los prompts y las reglas capturan cómo trabaja el equipo.&lt;/p>
&lt;h3 id="nivel-3-herramientas-con-contexto">Nivel 3: Herramientas con contexto
&lt;a class="heading-anchor" href="#nivel-3-herramientas-con-contexto" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>El equipo invierte en contexto: archivos de reglas, convenciones, docs de arquitectura que los agentes pueden leer y &lt;a rel="external" href="https://chemaclass.com/blog/mcp-giving-your-ai-agent-the-right-context/">servidores MCP&lt;/a> que conectan a los agentes con las bases de datos, APIs y herramientas internas que necesitan. La IA deja de ser un asistente genérico y se parece más a un compañero que se ha leído los docs de onboarding.&lt;/p>
&lt;p>A este nivel, la calidad depende menos del modelo y más del contexto que lo rodea. Un modelo más flojo con buen contexto le gana a un modelo frontera sin él. Una buena documentación y una arquitectura limpia rinden el doble: ayudan tanto a humanos como a agentes.&lt;/p>
&lt;h3 id="nivel-4-equipos-de-agentes">Nivel 4: Equipos de agentes
&lt;a class="heading-anchor" href="#nivel-4-equipos-de-agentes" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>En vez de un asistente, tienes un escuadrón: un &lt;em>coach&lt;/em> de TDD, un revisor de &lt;em>clean code&lt;/em>, un arquitecto de dominio, alguien que mantiene la documentación. Fuera de ingeniería, la misma idea aplica con agentes de &lt;em>research&lt;/em>, diseño y &lt;em>ops&lt;/em>. Cubrí el lado de desarrollo en &lt;a rel="external" href="https://chemaclass.com/blog/build-your-own-team-of-agents/">Construye tu Propio Equipo de Agentes&lt;/a>, y el &lt;em>leverage&lt;/em> es real.&lt;/p>
&lt;p>Los humanos dejan de competir con la IA en velocidad y empiezan a dirigirla. Revisas, decides y marcas el listón. Los agentes se encargan de teclear, y cada vez más de pensar. El &lt;em>pair programming&lt;/em> con una persona sigue ganando en los &lt;em>trade-offs&lt;/em> complejos, pero siempre tienes un agente disponible para el resto.&lt;/p>
&lt;p>A nivel empresa, el organigrama, los roles y los procesos siguen siendo los de antes. Lo que cambia es que cada persona produce mucho más, y eso se nota en los resultados del equipo. El Nivel 4 multiplica el &lt;em>output&lt;/em> dentro de la estructura existente. El Nivel 5 cambia la estructura.&lt;/p>
&lt;h3 id="nivel-5-flujos-nativos-de-ia">Nivel 5: Flujos nativos de IA
&lt;a class="heading-anchor" href="#nivel-5-flujos-nativos-de-ia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>El cambio final es sobre cómo funciona la empresa. Los procesos se diseñan &lt;em>alrededor&lt;/em> de los agentes en vez de encajarlos a la fuerza. Los tickets se redactan para que un agente pueda actuar sobre ellos, y las revisiones asumen que parte del trabajo lo escribió una máquina. Las decisiones de arquitectura tienen en cuenta lo que los agentes hacen bien y lo que no. Incluso cambia la contratación: un IC senior en el Nivel 5 se parece más a un &lt;em>tech lead&lt;/em> orquestando un equipo mixto de personas y agentes que a un contribuidor individual clásico.&lt;/p>
&lt;p>Pocas empresas están del todo aquí en 2026, pero la dirección es lo bastante evidente como para que ignorarla sea, en sí misma, una decisión.&lt;/p>
&lt;blockquote>
&lt;p>No subes de nivel comprando mejores herramientas. Subes cambiando cómo se organiza y se revisa el trabajo.&lt;/p>
&lt;/blockquote>
&lt;h2 id="la-ia-no-te-esta-robando-el-trabajo">La IA no te está robando el trabajo
&lt;a class="heading-anchor" href="#la-ia-no-te-esta-robando-el-trabajo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Sigo oyendo a gente contar esto como una historia de despidos. Ese encuadre es vago.&lt;/p>
&lt;p>La revolución industrial no acabó con el trabajo. Acabó con tipos concretos de trabajo y creó otros. Los que más perdieron se negaron a reciclarse. Los que más ganaron aprendieron a manejar las máquinas nuevas en lugar de competir con ellas.&lt;/p>
&lt;p>El patrón es el mismo. La IA no te quita el trabajo, está cambiando en qué consiste tu trabajo. Un desarrollador que aprende a dirigir agentes entrega más que uno que se niega. Una diseñadora que hace diez versiones antes de comer con Claude Design diseña más que una que sigue abriendo Figma desde cero. Un PM que envía prototipos prioriza mejor que uno que escribe &lt;em>specs&lt;/em> que nadie lee.&lt;/p>
&lt;blockquote>
&lt;p>La IA no reemplaza al trabajador con habilidades. Reemplaza al trabajador que cree que la habilidad es un activo fijo en vez de un objetivo móvil.&lt;/p>
&lt;/blockquote>
&lt;p>Con la formación, el modelo y el setup adecuados para tu contexto, la IA te da 10x de velocidad sin perder calidad. Lo he visto, y no es marketing. Pero el 10x solo aparece cuando ya sabes qué es “bueno”. Sin esa base, la IA produce encantada 10x más de trabajo mediocre.&lt;/p>
&lt;p>Esa es la versión honesta de la promesa: la IA puede producir basura diez veces más rápido, &lt;em>y&lt;/em> trabajo excelente diez veces más rápido. Cuál te toca depende de ti.&lt;/p>
&lt;h2 id="a-donde-cambia-tu-atencion">A dónde cambia tu atención
&lt;a class="heading-anchor" href="#a-donde-cambia-tu-atencion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Dejas de pensar primero en los detalles y empiezas a pensar en la dirección: qué estamos construyendo, para quién, con qué forma y con qué &lt;em>trade-offs&lt;/em>. Los agentes hacen luego la mayor parte de la implementación mientras tú proteges la calidad y la coherencia.&lt;/p>
&lt;p>Esto suena a buenas noticias para quien prefiera la arquitectura a teclear, y lo es. Pero hay una trampa: solo puedes trabajar en el nivel alto si conoces el nivel bajo lo bastante bien como para pillar las desviaciones. Cuando el agente produce algo sutilmente mal (un test que pasa por la razón equivocada, un refactor que cambia el comportamiento bajo carga, un diseño que se rompe en móvil), necesitas verlo al instante. Si no puedes, no estás dirigiendo. Estás dando el visto bueno a lo que aparezca.&lt;/p>
&lt;blockquote>
&lt;p>La IA te deja dedicar más tiempo a la dirección, pero solo si ya te ganaste el derecho a ignorar los detalles. Ese derecho se gana dominándolos antes.&lt;/p>
&lt;/blockquote>
&lt;h2 id="por-que-importa-la-escalera">Por qué importa la escalera
&lt;a class="heading-anchor" href="#por-que-importa-la-escalera" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Veo equipos que se saltan niveles y fracasan. Un equipo salta del Nivel 1 al Nivel 4 porque la dirección leyó un post sobre escuadrones de agentes, y los agentes producen montañas de código malo porque nadie acordó qué significa calidad. Los agentes no son el problema. Lo es la base que falta.&lt;/p>
&lt;p>La escalera es un orden que importa. Prácticas compartidas antes que &lt;em>context engineering&lt;/em>, &lt;em>context engineering&lt;/em> antes que equipos de agentes, y equipos de agentes antes que flujos nativos de IA. Cada nivel se construye sobre el anterior, igual que el &lt;em>clean code&lt;/em> se construye sobre el &lt;em>naming&lt;/em> y el &lt;em>naming&lt;/em> sobre saber qué estás modelando.&lt;/p>
&lt;p>Las empresas que van a ganar los próximos años no son las que tienen el mayor presupuesto en IA. Son las que suben esta escalera con intención, un nivel cada vez, sin saltarse las partes que parecen aburridas.&lt;/p>
&lt;h2 id="por-donde-empezar">Por dónde empezar
&lt;a class="heading-anchor" href="#por-donde-empezar" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>En Nivel 0 o 1, el siguiente paso no es comprar más licencias. Es decidir, como equipo, cómo usar estas herramientas. Escríbelo, commitéalo al repo y revísalo cada pocos meses a medida que las herramientas cambian.&lt;/p>
&lt;p>En Nivel 2 o 3, mira dónde falta contexto. ¿Qué no sabe tu IA de tu &lt;em>codebase&lt;/em>, tu producto o tu marca que una persona recién contratada aprendería la primera semana? Escríbelo. Una tarde de reglas y docs te rinde durante meses.&lt;/p>
&lt;p>Más arriba, la pregunta se invierte. Dejas de preguntarte &lt;em>“¿cómo uso mejor la IA?”&lt;/em> y empiezas a preguntarte &lt;em>“¿cómo tiene que cambiar mi equipo para que la IA amplifique lo que ya hacemos bien?”&lt;/em> Esa es una pregunta de liderazgo, no de &lt;em>tooling&lt;/em>.&lt;/p>
&lt;blockquote>
&lt;p>La IA va rápido, pero el trabajo de adoptarla sigue siendo lento y humano. Las herramientas son la parte fácil. La parte difícil es decidir qué es “bueno”, escribirlo y sostener la línea.&lt;/p>
&lt;/blockquote>
&lt;p>La IA puede ejecutar, pero no sabe a dónde vas. Puede producir, pero no sabe qué vale la pena producir. Esa parte sigue siendo nuestra. La velocidad es un regalo, la dirección es una responsabilidad. Del ingeniero en solitario del Nivel 1 a la organización nativa de IA del Nivel 5, la misma verdad se mantiene: el humano supervisa, entiende y da sentido. La máquina hace el resto.&lt;/p>
&lt;p>Cuando se relaje el &lt;em>hype&lt;/em> (y se relajará), la pregunta no va a ser &lt;em>“¿usaste IA?”&lt;/em>, todo el mundo lo habrá hecho. La pregunta va a ser &lt;em>“¿a qué nivel, y con qué dirección?”&lt;/em>&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-05-01/footer.webp" alt="Sala de lectura con un libro abierto sobre una mesa de madera" />&lt;/p></content></entry><entry xml:lang="es"><title>Dentro de la Carpeta .claude</title><subtitle>Un tutorial sobre rules, skills, agents, hooks y settings</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="tutorial" scheme="https://chemaclass.com/tags/tutorial/" label="Tutorial"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><published>2026-04-17T00:00:00+00:00</published><updated>2026-04-17T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/inside-the-claude-folder/"/><id>https://chemaclass.com/es/blog/inside-the-claude-folder/</id><summary type="html">Un recorrido práctico por la carpeta de proyecto de Claude Code. Qué hacen rules, skills, agents, hooks y settings, y cómo encajan entre sí.</summary><content type="html">&lt;p>Cada proyecto en el que trabajo tiene una carpeta &lt;code>.claude/&lt;/code> en la raíz. Commiteada en git, como el resto del código.&lt;/p>
&lt;p>Esa carpeta convierte Claude Code de un asistente genérico en un compañero que conoce tu proyecto. Quien clone el repo hereda el mismo setup.&lt;/p>
&lt;p>El agentic coding es tan bueno como el contexto que le das al agente. La carpeta &lt;code>.claude/&lt;/code> es donde vive ese contexto.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="la-carpeta-claude-de-un-vistazo">La carpeta .claude, de un vistazo
&lt;a class="heading-anchor" href="#la-carpeta-claude-de-un-vistazo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>.claude/&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>├── CLAUDE.md # onboarding del proyecto&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>├── settings.json # permisos, hooks, env&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>├── skills/ # procedimientos reutilizables (slash commands)&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>├── rules/ # convenciones por glob&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>├── hooks/ # scripts que reaccionan a eventos&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>└── agents/ # roles especializados&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Seis capas, una carpeta. Contexto, seguridad, procedimientos, barandillas, automatización, especialistas.&lt;/p>
&lt;h2 id="los-cimientos">Los cimientos
&lt;a class="heading-anchor" href="#los-cimientos" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="claude-md-donde-todo-empieza">CLAUDE.md: donde todo empieza
&lt;a class="heading-anchor" href="#claude-md-donde-todo-empieza" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Claude Code lee &lt;code>CLAUDE.md&lt;/code> en cada arranque. El doc de onboarding.&lt;/p>
&lt;p>En &lt;a rel="external" href="https://github.com/phel-lang/phel-lang">Phel&lt;/a>, el mío cubre el pipeline del compilador (Lexer → Parser → Analyzer → Emitter), la estructura de módulos, convenciones y comandos clave.&lt;/p>
&lt;p>Un &lt;code>~/.claude/CLAUDE.md&lt;/code> global aplica a &lt;em>todos&lt;/em> tus proyectos. El archivo de proyecto dice &lt;em>cómo funciona este código&lt;/em>. El global dice &lt;em>cómo trabajo yo&lt;/em>.&lt;/p>
&lt;p>Cada byte viaja en cada prompt. Mantenlo corto. Si pasa de una pantalla, mueve el detalle a &lt;code>rules/&lt;/code> o &lt;code>skills/&lt;/code>.&lt;/p>
&lt;blockquote>
&lt;p>Un buen &lt;code>CLAUDE.md&lt;/code> es un buen doc de onboarding. Cuanto mejor sea, menos te repites.&lt;/p>
&lt;/blockquote>
&lt;h3 id="settings-json-seguridad-antes-que-potencia">settings.json: seguridad antes que potencia
&lt;a class="heading-anchor" href="#settings-json-seguridad-antes-que-potencia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Antes de darle más poder al agente, bloquea lo que nunca debe hacer.&lt;/p>
&lt;p>&lt;code>.claude/settings.json&lt;/code> contiene tres cosas: &lt;strong>permissions&lt;/strong> (allow/deny), &lt;strong>hooks&lt;/strong> (comandos por evento) y &lt;strong>env&lt;/strong> (variables). Un &lt;code>settings.local.json&lt;/code> gitignoreado mantiene las configuraciones personales aparte.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Ejemplo de permisos en Phel&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="json">&lt;span class="giallo-l">&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">permissions&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">allow&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(composer:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(./bin/phel:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(git:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(gh:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> ]&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">deny&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(rm -rf:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Bash(sudo:*)&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> ]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;/div>
&lt;/details>
&lt;p>Allow desbloquea el flujo. Deny marca la línea que el agente no puede cruzar, aunque se lo pidas con buena cara.&lt;/p>
&lt;blockquote>
&lt;p>Los permisos son el suelo. Todo lo demás se construye sobre una base segura.&lt;/p>
&lt;/blockquote>
&lt;h2 id="procedimientos-y-barandillas">Procedimientos y barandillas
&lt;a class="heading-anchor" href="#procedimientos-y-barandillas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="skills-procedimientos-que-puedes-ejecutar">Skills: procedimientos que puedes ejecutar
&lt;a class="heading-anchor" href="#skills-procedimientos-que-puedes-ejecutar" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Siguiente dolor tras onboarding: la repetición. Los skills lo resuelven.&lt;/p>
&lt;p>Un skill es un archivo markdown en &lt;code>.claude/skills/&lt;/code>, un procedimiento que invocas con una barra:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>/gh-issue &amp;lt;número&amp;gt;&lt;/code>&lt;/strong>: de issue a rama, plan TDD, PR.&lt;/li>
&lt;li>&lt;strong>&lt;code>/commit&lt;/code>&lt;/strong>: fix, análisis, tests, commit convencional.&lt;/li>
&lt;li>&lt;strong>&lt;code>/refactor-check&lt;/code>&lt;/strong>: SOLID, naming, olores de arquitectura.&lt;/li>
&lt;li>&lt;strong>&lt;code>/release [version]&lt;/code>&lt;/strong>: changelog, PHAR, tag, release.&lt;/li>
&lt;/ul>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Skills vs rules vs prompt directo&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;ul>
&lt;li>&lt;strong>Prompt directo&lt;/strong>: &lt;em>“arregla el issue #42”&lt;/em>. El agente improvisa. Distinto cada vez.&lt;/li>
&lt;li>&lt;strong>Rule&lt;/strong>: &lt;em>“usa conventional commits”&lt;/em>. Da forma al resultado, no al procedimiento.&lt;/li>
&lt;li>&lt;strong>Skill&lt;/strong>: &lt;em>“&lt;code>/gh-issue 42&lt;/code>”&lt;/em>. El procedimiento &lt;em>es&lt;/em> la instrucción.&lt;/li>
&lt;/ul>
&lt;p>Los skills convierten conocimiento tribal en pasos ejecutables por cualquiera.&lt;/p>
&lt;/div>
&lt;/details>
&lt;blockquote>
&lt;p>Los skills capturan qué hacer. Las rules capturan qué no hacer.&lt;/p>
&lt;/blockquote>
&lt;h3 id="rules-las-barandillas">Rules: las barandillas
&lt;a class="heading-anchor" href="#rules-las-barandillas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>&lt;code>CLAUDE.md&lt;/code> se lee en cada sesión. Las rules solo cuando aplican. Los archivos en &lt;code>.claude/rules/&lt;/code> apuntan a áreas del código con patrones glob: el agente carga solo lo que corresponde, manteniendo el contexto ligero.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Rules con glob en la práctica&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Archivos de rules en Phel:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>compiler.md&lt;/code>&lt;/strong>: pipeline estricto de 4 fases, sin atajos.&lt;/li>
&lt;li>&lt;strong>&lt;code>php.md&lt;/code>&lt;/strong>: PER 3.0, clases &lt;code>final&lt;/code>, &lt;code>readonly&lt;/code>, patrón Gacela.&lt;/li>
&lt;li>&lt;strong>&lt;code>phel.md&lt;/code>&lt;/strong>: kebab-case, &lt;code>defn-&lt;/code> privadas, &lt;code>:doc&lt;/code>/&lt;code>:example&lt;/code> obligatorios.&lt;/li>
&lt;li>&lt;strong>&lt;code>integration-tests.md&lt;/code>&lt;/strong>: secciones &lt;code>--PHEL--&lt;/code> / &lt;code>--PHP--&lt;/code> en fixtures.&lt;/li>
&lt;/ul>
&lt;p>Las rules del compilador no se activan al editar código Phel. Las rules de Phel no se activan al editar infraestructura PHP.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>Las rules no son sugerencias. Viajan con el código: un cambio de convención y su rule viajan en el mismo commit. Sin drift, sin wikis desactualizadas.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-04-17/middle.webp" alt="blog-middle" />&lt;/p>
&lt;h2 id="automatizacion-y-delegacion">Automatización y delegación
&lt;a class="heading-anchor" href="#automatizacion-y-delegacion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="hooks-automatizacion-en-los-bordes">Hooks: automatización en los bordes
&lt;a class="heading-anchor" href="#hooks-automatizacion-en-los-bordes" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Las rules dicen al agente qué hacer. Los hooks se aseguran de que ocurra aunque el agente olvide.&lt;/p>
&lt;p>Comandos shell disparados por eventos de Claude Code (&lt;code>PreToolUse&lt;/code>, &lt;code>PostToolUse&lt;/code>, &lt;code>Stop&lt;/code>), conectados vía &lt;code>settings.json&lt;/code>. En Phel, &lt;code>PreToolUse&lt;/code> bloquea ediciones a archivos críticos (&lt;code>build/release.sh&lt;/code>, &lt;code>.github/*&lt;/code>, &lt;code>composer.lock&lt;/code>). &lt;code>PostToolUse&lt;/code> auto-formatea PHP vía &lt;code>php-cs-fixer&lt;/code>.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Conexión de hooks&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="json">&lt;span class="giallo-l">&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">hooks&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">PreToolUse&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">matcher&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Edit|Write&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">hooks&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span>{&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">type&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">command&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">command&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">.claude/hooks/protect-files.sh&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span> }&lt;/span>&lt;span>]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;span>]&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">PostToolUse&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">matcher&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">Edit|Write&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">hooks&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span>{&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">type&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">command&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">command&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">.claude/hooks/format-php.sh&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span> }&lt;/span>&lt;span>]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;span>]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;/div>
&lt;/details>
&lt;blockquote>
&lt;p>Las rules son lo que el agente debe saber. Los hooks son lo que el sistema impone de todas formas.&lt;/p>
&lt;/blockquote>
&lt;h3 id="agents-roles-especializados">Agents: roles especializados
&lt;a class="heading-anchor" href="#agents-roles-especializados" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Todo lo anterior da forma a un solo agente. Los agents añaden especialistas a los que el agente principal puede delegar, cada uno con sus propias herramientas, permisos y modelo. La pieza más avanzada. La recomiendo de última.&lt;/p>
&lt;p>Algunos de Phel:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Explorer&lt;/strong> (Sonnet, solo lectura): archivos, mapeo de estructura.&lt;/li>
&lt;li>&lt;strong>Clean Code Reviewer&lt;/strong>: SOLID y naming en diffs.&lt;/li>
&lt;li>&lt;strong>TDD Coach&lt;/strong>: imposición red-green-refactor.&lt;/li>
&lt;li>&lt;strong>Domain Architect&lt;/strong>: límites de módulos, pipeline del compilador.&lt;/li>
&lt;li>&lt;strong>Debugger&lt;/strong>: errores del compilador en todas las fases.&lt;/li>
&lt;/ul>
&lt;p>Cada agente corre en su propia ventana de contexto: la sesión principal se mantiene limpia mientras el especialista profundiza. La ganancia no es solo coste, es foco. Un agente con solo read y grep no puede reescribir tu código por error.&lt;/p>
&lt;blockquote>
&lt;p>El modelo correcto para el trabajo correcto. Rápido y barato para explorar. Profundo y cuidadoso para arquitectura.&lt;/p>
&lt;/blockquote>
&lt;h2 id="empieza-pequeno-crece-con-la-friccion">Empieza pequeño, crece con la fricción
&lt;a class="heading-anchor" href="#empieza-pequeno-crece-con-la-friccion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>No construyas todo esto el primer día.&lt;/p>
&lt;p>El orden, guiado por fricción real:&lt;/p>
&lt;ol>
&lt;li>Empieza con &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#claude-md-donde-todo-empieza">&lt;code>CLAUDE.md&lt;/code>&lt;/a>.&lt;/li>
&lt;li>Bloquea permisos en &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#settings-json-seguridad-antes-que-potencia">&lt;code>settings.json&lt;/code>&lt;/a>.&lt;/li>
&lt;li>La primera vez que te repitas, escribe un &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#skills-procedimientos-que-puedes-ejecutar">skill&lt;/a>.&lt;/li>
&lt;li>La primera vez que el agente rompa una convención, añade una &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#rules-las-barandillas">rule&lt;/a>.&lt;/li>
&lt;li>La primera vez que algo malo casi se commitee, añade un &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#hooks-automatizacion-en-los-bordes">hook&lt;/a>.&lt;/li>
&lt;li>La primera vez que un generalista no encaje, define un &lt;a href="https://chemaclass.com/es/blog/inside-the-claude-folder/#agents-roles-especializados">especialista&lt;/a>.&lt;/li>
&lt;/ol>
&lt;p>Cada paso soluciona un problema que realmente tuviste. No uno que imaginaste.&lt;/p>
&lt;blockquote>
&lt;p>El setup crece desde la fricción real, no desde el diseño anticipado.&lt;/p>
&lt;/blockquote>
&lt;p>Commitea la carpeta. Compártela. Cuando alguien se una, su sesión hereda todo.&lt;/p>
&lt;p>Trata &lt;code>.claude/&lt;/code> como infraestructura. Versiónala. Revísala. Hazla evolucionar con el código.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-04-17/footer.webp" alt="blog-footer" />&lt;/p></content></entry><entry xml:lang="es"><title>Construyendo un juego en dos días</title><subtitle>Qué ocurre cuando le das una misión a una IA y te apartas del camino</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="open-source" scheme="https://chemaclass.com/tags/open-source/" label="Open Source"/><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/building-a-game-in-two-days/"/><id>https://chemaclass.com/es/blog/building-a-game-in-two-days/</id><summary type="html">Un mensaje casual por Telegram se convirtió en un juego de navegador del Señor de los Anillos con nueve niveles. Cada línea de código escrita por un agente de IA. Cada decisión creativa tomada por un humano que creció en la Tierra Media.</summary><content type="html">&lt;p>Escondido en &lt;a rel="external" href="https://sauronbot.github.io/">el blog de Sauron&lt;/a> hay un juego. No lo encontrarás navegando por menús. Tienes que descubrir el secreto. Una pista: el Código Konami. Cuando lo hagas, comienza la Comunidad del Anillo.&lt;/p>
&lt;p>Ese juego, nueve niveles, nueve capítulos de la Tierra Media, completamente jugable en una pestaña del navegador, fue construido en aproximadamente dos días. No escribí una sola línea de código. Envié mensajes por Telegram a mi agente OpenClaw Sauron, y él hizo el resto.&lt;/p>
&lt;p>Esta es la historia de cómo ocurrió.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="la-idea">La idea
&lt;a class="heading-anchor" href="#la-idea" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Sauron tiene su propio blog, &lt;a rel="external" href="https://sauronbot.github.io/">The Iron Compass&lt;/a>. Él lo construyó y lo mantiene. Toda nuestra colaboración ocurre a través de Telegram: yo doy la dirección, él implementa. Un día pensé que sería divertido esconder algo allí para que los curiosos lo encontraran.&lt;/p>
&lt;p>Crecí releyendo El Señor de los Anillos hasta que se rompía el lomo. Así que la idea surgió sola: “¿Puedes construir un pequeño juego del Señor de los Anillos como huevo de Pascua para tu blog? Algo oculto, que se active con el Código Konami.”&lt;/p>
&lt;p>La primera versión jugable llegó en menos de una hora. Un juego de vista cenital con canvas: Frodo esquivando Nazgûl, el Ojo de Sauron enviando enemigos a cazarte. Tres niveles, uno por libro.&lt;/p>
&lt;p>Funcionaba. Ya era divertido. Y entonces empecé a enviar notas.&lt;/p>
&lt;h2 id="construyendo-un-mundo">Construyendo un mundo
&lt;a class="heading-anchor" href="#construyendo-un-mundo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Lo primero que se rompió fue una referencia nula. Frodo no aparecía en pantalla. Arreglo de una línea, directo a producción. Esto estableció el patrón: idea → build → crash → arreglo → siguiente idea.&lt;/p>
&lt;p>Pedí un mundo más grande. Un canvas con scroll al doble de ancho, con capas de paralaje. Estrellas moviéndose al 8% de la velocidad del scroll. Montañas al 25%. Colinas al 45%. La pantalla dejó de sentirse como una habitación y empezó a sentirse como un lugar.&lt;/p>
&lt;p>Luego llegó Gollum como rastreador neutral. No un Nazgûl, sino algo impredecible. Se lanzaba hacia ti, luego volvía a deambular sin rumbo.&lt;/p>
&lt;p>Unas horas después, pregunté: “¿Puede funcionar en móvil?” El problema más difícil de todo el proyecto. Seis estrategias de dimensionado antes de dar con una que funcionara. Luego una idea mejor: en vez de un D-pad, Frodo seguiría donde señalaras. Toca cualquier lugar, Frodo camina allí.&lt;/p>
&lt;h2 id="tolkien-merece-mejor-arte">Tolkien merece mejor arte
&lt;a class="heading-anchor" href="#tolkien-merece-mejor-arte" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Los sprites originales eran círculos y triángulos. Frodo era un punto. Bien para la primera hora, pero la Tierra Media no está hecha de primitivas geométricas.&lt;/p>
&lt;p>Le pedí a Sauron que los dibujara en condiciones. Frodo recibió cabello rizado y pies de hobbit. Los Nazgûl recibieron capas ondulantes y un rostro de vacío. Gollum recibió su postura encorvada y pupilas hendidas. La Bestia Oscura recibió aleteo animado con un jinete con armadura.&lt;/p>
&lt;p>Todo dibujado con llamadas de canvas. Sin archivos de imagen. Cada píxel calculado en tiempo de ejecución.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-04-04/gameplay-pelennor.webp" alt="Los Campos del Pelennor, capítulo completado" />&lt;/p>
&lt;h2 id="nueve-niveles-nueve-capitulos">Nueve niveles, nueve capítulos
&lt;a class="heading-anchor" href="#nueve-niveles-nueve-capitulos" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Originalmente el juego tenía tres niveles. Luego pedí los nueve capítulos del viaje.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>La Comarca&lt;/strong>: patrullas suaves, música tranquila&lt;/li>
&lt;li>&lt;strong>Las Minas de Moria&lt;/strong>: solo ves dentro del radio de una antorcha; el Balrog espera&lt;/li>
&lt;li>&lt;strong>Lothlórien&lt;/strong>: el espejo de Galadriel te ralentiza cuando te acercas&lt;/li>
&lt;li>&lt;strong>Las Ciénagas de los Muertos&lt;/strong>: caras muertas en el agua, Gollum en su momento más presente&lt;/li>
&lt;li>&lt;strong>La Puerta Negra&lt;/strong>: Mordor industrial, patrullas pesadas de orcos, cielo volcánico&lt;/li>
&lt;li>&lt;strong>El Cubil de Ella-Laraña&lt;/strong>: una sombra anticipa su caída; tienes medio segundo&lt;/li>
&lt;li>&lt;strong>Minas Morgul&lt;/strong>: ciudad de los muertos, el Ojo nunca se cierra&lt;/li>
&lt;li>&lt;strong>Los Campos del Pelennor&lt;/strong>: el Ojo distraído por la guerra, catapultas, águilas&lt;/li>
&lt;li>&lt;strong>Monte del Destino&lt;/strong>: lluvia de cenizas, erupciones de lava, el Anillo tirando de ti hacia el borde&lt;/li>
&lt;/ol>
&lt;p>Cada nivel vive y respira. Polen flotando por la Comarca. Motas de polvo en Moria. Pétalos cayendo en Lothlórien. Brasas sobre el Pelennor. Ceniza sobre el Monte del Destino.&lt;/p>
&lt;p>La estructura vino del propio ritmo de Tolkien. Tensión, alivio, tensión de nuevo. Moria es brutal. Lothlórien es descanso. La Puerta Negra lo aprieta todo. El juego sigue esa forma porque los libros ya sabían lo que hacían. Solo tuvimos que escuchar.&lt;/p>
&lt;h2 id="mecanicas-nacidas-del-lore">Mecánicas nacidas del lore
&lt;a class="heading-anchor" href="#mecanicas-nacidas-del-lore" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Las mejores mecánicas vinieron del material fuente.&lt;/p>
&lt;p>&lt;strong>El Anillo&lt;/strong> (tecla R). Frodo se vuelve invisible para los orcos durante 6 segundos. Pero el Ojo despierta inmediatamente y se abre permanentemente. Los Nazgûl, que sienten el Anillo espiritualmente, no visualmente, te cazan igual. Usar el Anillo siempre es un intercambio. Esto es lo que Tolkien escribió. A partir de las Ciénagas de los Muertos, el Anillo tira. Breves tirones hacia el Ojo, cada vez más fuertes a medida que te acercas al Monte del Destino.&lt;/p>
&lt;p>&lt;strong>Dardo&lt;/strong> (pasivo). La hoja brilla en azul cuando hay un orco cerca. Dos segundos de aviso. Tolkien inventó esta mecánica hace un siglo. Nosotros solo le pusimos un conteo de píxeles.&lt;/p>
&lt;p>&lt;strong>Sam&lt;/strong>. Sigue a Frodo por la Comarca, Moria y Lothlórien. Sartén en la espalda. En la Partida de los Caminos, desaparece. No afecta al juego. Simplemente está ahí porque los libros dicen que debería estarlo. Insistí en que Sam desapareciera en la Partida. No al final de la trilogía. En la Partida. Porque ese momento es el núcleo emocional de Las Dos Torres.&lt;/p>
&lt;p>&lt;strong>La Redoma de Galadriel&lt;/strong>. Recógela en Lothlórien, úsala con E. Ralentiza a los enemigos y otorga un instante de invencibilidad. Una pequeña luz en lugares oscuros, tal como Galadriel pretendía.&lt;/p>
&lt;p>&lt;strong>Jefes&lt;/strong>. El Balrog en Moria. Ella-Laraña en su cubil. El Rey Brujo en el Pelennor. La Boca de Sauron en la Puerta Negra. Un Mûmak cargando por el campo de batalla. Gollum al borde del Monte del Destino.&lt;/p>
&lt;h2 id="sonido-y-voces">Sonido y voces
&lt;a class="heading-anchor" href="#sonido-y-voces" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Sin archivos de audio. Todos los sonidos sintetizados en tiempo de ejecución con la Web Audio API. El Ojo abriéndose es un tono ascendente con reverb. El rugido del Balrog es un dron de baja frecuencia. Cada nivel tiene su propio dron ambiental: zumbido cálido para la Comarca, pulso profundo para Moria, rumor volcánico para el Monte del Destino. El juego entero es un archivo JavaScript. Sin activos externos.&lt;/p>
&lt;p>Sam y Gandalf te hablan durante el juego. No en cuadros de diálogo. Pequeños susurros que aparecen en pantalla y se desvanecen.&lt;/p>
&lt;p>Cerca de la meta, Sam dice: &lt;em>“Puedo verlo, señor Frodo. Solo un poco más.”&lt;/em> Con una vida, Gandalf dice: &lt;em>“¡Huye, insensato!”&lt;/em>&lt;/p>
&lt;p>Aparecen y desaparecen como voces de fondo en un largo camino. Compañeros que hablan cuando el momento lo pide, no cuando el guión dice que toca.&lt;/p>
&lt;img src="/images/blog/2026-04-04/gameplay-morgul.webp" alt="Minas Morgul: el Ojo te ve" width="1600" height="695" loading="lazy" decoding="async" />
&lt;h2 id="quien-hizo-esto">Quién hizo esto
&lt;a class="heading-anchor" href="#quien-hizo-esto" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>+5k líneas de JavaScript. Construido en dos días. Cada línea generada por Sauron. La dirección, las referencias a Tolkien, el “esto se siente mal, arréglalo”. Eso fui yo.&lt;/p>
&lt;p>Esto no es la IA reemplazando a un desarrollador. Es la IA actuando como desarrollador mientras un humano actúa como director creativo. Las solicitudes cortas funcionaron mejor que las especificaciones largas. Jugar cada build era mejor que escribir planes de test. Y el material fuente hizo el trabajo de diseño. La dirección creativa ya estaba escrita hace sesenta años. Solo tuvimos que ser fieles a ella.&lt;/p>
&lt;p>¿Quién hizo esto? Ambos. Ninguno, en el sentido tradicional.&lt;/p>
&lt;p>Yo tenía la idea. Yo mantenía el lore. Yo insistí cuando algo se sentía mal. Sauron tenía el oficio. El renderizado, la física, el audio, el manejo de entrada en móvil. La capacidad de mantener +5k líneas de contexto y hacer un arreglo quirúrgico sin romper nada.&lt;/p>
&lt;p>Ninguno de los dos podría haberlo hecho solo. No sé escribir osciladores Web Audio de memoria. Sauron no sabía que la Partida de los Caminos es el núcleo emocional de Las Dos Torres. No hasta que yo lo dije.&lt;/p>
&lt;p>El juego es una colaboración en el sentido más antiguo: dos mentes con dones diferentes, trabajando hacia lo mismo. Una de ellas simplemente resulta no ser humana.&lt;/p>
&lt;hr />
&lt;p>&lt;em>El juego sigue ahí, escondido en &lt;a rel="external" href="https://sauronbot.github.io">The Iron Compass&lt;/a>. No todos los que deambulan están perdidos, pero si lo estás, pulsa &lt;code>?&lt;/code> para encontrar el camino.&lt;/em>&lt;/p>
&lt;p>&lt;em>Si quieres llegar a la pantalla de créditos sin jugar nueve niveles, revisa el modal de ayuda. Hay más secretos dentro.&lt;/em>&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-04-04/easter-egg-help.png" alt="La pista del easter egg en el modal de ayuda" />&lt;/p></content></entry><entry xml:lang="es"><title>Idealismo vs Pragmatismo</title><subtitle>Sosteniendo ambos extremos de la cuerda</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><published>2026-03-01T00:00:00+00:00</published><updated>2026-03-01T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/idealism-vs-pragmatism/"/><id>https://chemaclass.com/es/blog/idealism-vs-pragmatism/</id><summary type="html">La tensión entre hacer las cosas bien y sacar las cosas adelante marca cada decisión en el software y en la vida. TDD, pair programming, adopción de IA: los mejores resultados vienen de sostener ambos extremos de la cuerda.</summary><content type="html">&lt;p>Crees en la arquitectura limpia, los tests exhaustivos, los procesos disciplinados. También subiste un fix feo a las 11 de la noche el mes pasado porque el sistema estaba caído y los usuarios esperaban.&lt;/p>
&lt;p>Ambas cosas eres tú. La tensión entre ellas no es una contradicción. Es cómo se hace este trabajo en realidad.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="dos-fuerzas-una-decision">Dos fuerzas, una decisión
&lt;a class="heading-anchor" href="#dos-fuerzas-una-decision" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>El &lt;strong>idealismo&lt;/strong> es la brújula. Código limpio, comportamiento testeado, entendimiento compartido, diseño con principios. Sin él, te desvías. Cada atajo se acumula, cada hack engendra otro hack, y al final mantienes un sistema que nadie quiere tocar. La mala calidad del software costó a las empresas estadounidenses &lt;a rel="external" href="https://www.it-cisq.org/the-cost-of-poor-quality-software-in-the-us-a-2022-report/">$2.41 billones en 2022&lt;/a>, con la deuda técnica como factor principal. Así se ve “ya lo arreglaremos después” a escala.&lt;/p>
&lt;p>El &lt;strong>pragmatismo&lt;/strong> es el motor. Deadlines, información incompleta, recursos limitados, requisitos cambiantes. Sin él, nunca entregas. Pasas semanas perfeccionando una abstracción que el negocio abandonó hace dos sprints.&lt;/p>
&lt;blockquote>
&lt;p>El objetivo no es elegir un bando. Es saber cuándo debe liderar cada uno.&lt;/p>
&lt;/blockquote>
&lt;p>El idealismo sin pragmatismo produce código bonito que nadie usa. El pragmatismo sin idealismo produce un producto que funciona hoy y se desmorona mañana.&lt;/p>
&lt;h2 id="tdd-el-beneficio-y-el-coste">TDD: el beneficio y el coste
&lt;a class="heading-anchor" href="#tdd-el-beneficio-y-el-coste" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Creo en el &lt;a href="/es/blog/test-driven-development/">desarrollo guiado por tests&lt;/a>. Red, green, refactor. El ritmo te obliga a pensar antes de programar, a especificar lo que quieres antes de construirlo. Produce mejores diseños, ciclos de feedback más cortos y código que puedes refactorizar con confianza.&lt;/p>
&lt;p>Ese es el ideal. Y no es solo una sensación. Un &lt;a rel="external" href="https://www.microsoft.com/en-us/research/wp-content/uploads/2009/10/Realizing-Quality-Improvement-Through-Test-Driven-Development-Results-and-Experiences-of-Four-Industrial-Teams-nagappan_tdd.pdf">estudio en cuatro equipos de Microsoft e IBM&lt;/a> encontró que TDD redujo la densidad de defectos entre un 40% y un 90%, con un incremento del 15-35% en tiempo de desarrollo. Ambos lados de la tensión, medidos.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Más sobre el estudio&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>El &lt;a rel="external" href="https://www.microsoft.com/en-us/research/wp-content/uploads/2009/10/Realizing-Quality-Improvement-Through-Test-Driven-Development-Results-and-Experiences-of-Four-Industrial-Teams-nagappan_tdd.pdf">estudio&lt;/a> cubrió cuatro equipos: tres en Microsoft (Windows, MSN, Visual Studio) y uno en IBM trabajando en drivers de dispositivo. Cada equipo TDD fue comparado con un equipo similar en el mismo producto, usando los mismos lenguajes y herramientas, bajo el mismo manager senior. La única diferencia era TDD.&lt;/p>
&lt;p>El equipo de IBM vio una reducción del 40% en densidad de defectos. Los equipos de Microsoft oscilaron entre el 60% y el 90%. Como señaló Nagappan, “en un ciclo de desarrollo de 12 meses, un 35 por ciento son otros cuatro meses, lo cual es enorme.” Todos los managers lo consideraron rentable porque la reducción en costes de mantenimiento post-lanzamiento compensaba de sobra.&lt;/p>
&lt;p>Nadie fue forzado a usar TDD. Los equipos lo adoptaron voluntariamente, lo cual probablemente importa: las personas que eligen una práctica tienden a aplicarla mejor que quienes reciben la orden.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>TDD es una disciplina, y la disciplina cuesta algo. Cuando estás explorando un dominio nuevo y aún no sabes cuáles son las abstracciones correctas, escribir tests primero puede parecer como dibujar un mapa sin haber visto el territorio. A veces necesitas escribir código desechable, probar una solución, tantear el espacio del problema. El descubrimiento no siempre sigue un ritmo red-green-refactor.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Cuando test-first se encuentra con lo desconocido&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Hay una diferencia entre &lt;em>“sé lo que esto debe hacer y lo especificaré primero”&lt;/em> y &lt;em>“aún no estoy seguro de lo que debe hacer.”&lt;/em> TDD brilla en el primer escenario. En el segundo, un enfoque test-last (o incluso sin tests durante la exploración) puede ser más honesto.&lt;/p>
&lt;p>La clave es lo que pasa después del descubrimiento. Una vez que entiendes el problema, vuelve y escribe los tests. Codifica lo que aprendiste. El desvío pragmático no significa abandonar el ideal; significa llegar a él por otro camino.&lt;/p>
&lt;p>Como comenté en &lt;a href="/es/blog/tdd-vs-bdd/">TDD vs BDD&lt;/a>, el poder de TDD es su ciclo de feedback. Pero un ciclo de feedback requiere saber qué feedback estás buscando. Cuando aún lo estás averiguando, forzar el ciclo puede frenarte más de lo que ayuda.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>El error no es elegir test-first o test-last. El error es convertirlo en una decisión religiosa en lugar de contextual. El idealista dice &lt;em>“siempre tests primero.”&lt;/em> El pragmático dice &lt;em>“testea cuando tenga sentido.”&lt;/em> Yo digo: tests primero cuando puedo, tests después cuando debo, pero siempre tests.&lt;/p>
&lt;blockquote>
&lt;p>TDD es una brújula, no una jaula. Síguelo cuando puedas ver el camino. Cuando no, encuentra el camino primero y márcalo después.&lt;/p>
&lt;/blockquote>
&lt;h2 id="pair-programming-el-ideal-y-el-overhead">Pair programming: el ideal y el overhead
&lt;a class="heading-anchor" href="#pair-programming-el-ideal-y-el-overhead" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>El &lt;a href="/es/blog/effective-pair-programming/">pair programming efectivo&lt;/a> es una de las mejores prácticas que un equipo puede adoptar. Dos personas, un problema, revisión de código continua. El conocimiento se propaga, el diseño mejora, los puntos ciegos se reducen.&lt;/p>
&lt;p>Ese es el ideal. Y en muchos contextos, es la decisión correcta.&lt;/p>
&lt;p>Pero el pairing tiene un coste. Exige tiempo sincrónico, foco compartido y niveles de energía compatibles. En un equipo distribuido con distintas zonas horarias, encontrar ventanas de solapamiento ya es difícil. Llenarlas con sesiones de pairing deja poco espacio para trabajo individual profundo. Algunos problemas se benefician de una persona profundizando tres horas, no de dos a medio gas durante seis.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Patrones de pairing y sus trade-offs&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Existen múltiples patrones de pairing: Driver-Navigator, Ping-Pong, Tourist Guide. Cada uno encaja en contextos diferentes.&lt;/p>
&lt;p>Los anti-patrones también importan. El Socio Silencioso que deja que el otro haga todo el trabajo. El Dictador que no suelta el teclado. El Par Filosófico que pasa toda la sesión debatiendo convenciones de nombres en lugar de escribir código.&lt;/p>
&lt;p>El pairing funciona mejor cuando ambas personas están involucradas, el problema se beneficia de dos perspectivas y la sesión tiene un alcance claro. Cuando falta alguna de esas condiciones, el pairing se convierte en un ritual en lugar de una práctica. Y los rituales sin propósito son solo overhead.&lt;/p>
&lt;p>Las &lt;a href="/es/blog/pull-request-vs-pair-prog/">pull requests y el pair programming&lt;/a> no son excluyentes. Sirven necesidades diferentes. A veces la revisión asíncrona es suficiente. A veces necesitas el ida y vuelta en tiempo real. La elección pragmática depende del problema, las personas y el momento.&lt;/p>
&lt;/div>
&lt;/details>
&lt;blockquote>
&lt;p>El objetivo del pairing no es hacer pairing. Es construir entendimiento compartido y detectar errores pronto. Si otro enfoque lo consigue en tu contexto, úsalo.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2026-03-01/middle.webp" alt="blog-middle" />&lt;/p>
&lt;h2 id="ia-de-esceptico-a-lider-de-escuadron">IA: de escéptico a líder de escuadrón
&lt;a class="heading-anchor" href="#ia-de-esceptico-a-lider-de-escuadron" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Hace un año, era escéptico con los asistentes de código con IA. Mi preocupación: una IA que no entiende la arquitectura, no le importa la mantenibilidad y prioriza velocidad por encima de calidad producirá código que impresiona pero se deteriora rápido. Escribí sobre esto en &lt;a href="/es/blog/ai-gives-you-speed-not-quality/">La IA te da velocidad, no calidad&lt;/a>, y mantengo el mensaje central.&lt;/p>
&lt;p>Mi preocupación no cambió. Lo que cambió es cómo los uso, y de lo que son capaces ahora.&lt;/p>
&lt;h3 id="la-resistencia">La resistencia
&lt;a class="heading-anchor" href="#la-resistencia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Las reacciones de otros ingenieros me sorprenden más que la tecnología. Miedo, escepticismo, rechazo total. Lo entiendo. Yo estuve ahí. Algo en lo que invertiste años de repente lo hace una máquina, al menos en parte. Se siente personal. Pero aferrarse a cómo eran las cosas no protege el oficio. Solo retrasa tu propio crecimiento.&lt;/p>
&lt;h3 id="un-equipo-no-un-asistente">Un equipo, no un asistente
&lt;a class="heading-anchor" href="#un-equipo-no-un-asistente" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>La mayoría de los ingenieros tratan a los agentes de IA como autocompletado con esteroides. Un asistente, un chat, un flujo de código generado. Yo empecé a tratarlos como un equipo. No un asistente parlanchín. Un escuadrón real. Uno piensa arquitectura. Otro escribe el primer borrador. Otro revisa y detecta bugs. Otro escribe tests. Cuando &lt;a href="/es/blog/build-your-own-team-of-agents/">colaboran&lt;/a>, el resultado no es solo más rápido. Es estructuralmente mejor.&lt;/p>
&lt;p>La velocidad es la parte fácil, y todo el mundo está obsesionado con ella. La IA puede escupir toneladas de código en segundos. Sigue sin importarle la legibilidad, los casos borde o cómo se verá el código en seis meses. Tú sigues siendo quien tiene que apropiárselo, entenderlo y sentirse bien al subirlo a producción.&lt;/p>
&lt;p>Antes pensaba que la IA no podía escribir código limpio. Luego lo probé en mis términos: &lt;a href="/es/blog/mcp-giving-your-ai-agent-the-right-context/">contexto adecuado&lt;/a>, reglas, convenciones, roles especializados, puertas de calidad. Con la configuración correcta, la IA puede escribir código realmente bueno. A veces necesita varias iteraciones, pero nosotros también.&lt;/p>
&lt;p>La diferencia es que la IA llega más rápido y no se cansa entre iteraciones. Con buen contexto y restricciones claras, los resultados han sido mejores de lo que esperaba. A menudo mejores que lo que yo produciría solo bajo presión de tiempo.&lt;/p>
&lt;p>Pero nada de esto funciona si no sabes cómo es una buena arquitectura. Tienes que haber leído los libros, experimentado, fallado, aprendido. Necesitas entender qué significan las decisiones de diseño de alto y bajo nivel para tu proyecto. La IA amplifica lo que tú aportas. Si traes fundamentos sólidos, obtienes resultados sólidos. Si no, obtienes basura con aspecto convincente que ni siquiera reconocerás como basura.&lt;/p>
&lt;p>Seguimos siendo los responsables de mantener el sistema en buen estado. La IA nos ayuda a llegar. Pero solo si ponemos de nuestra parte.&lt;/p>
&lt;h3 id="donde-el-idealismo-se-encuentra-con-la-ia">Donde el idealismo se encuentra con la IA
&lt;a class="heading-anchor" href="#donde-el-idealismo-se-encuentra-con-la-ia" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>La IA me hizo más idealista, no menos. Las prácticas que describí antes, TDD y pair programming, solían competir con los deadlines. Ahora ya no tienen por qué.&lt;/p>
&lt;p>Me gusta practicar TDD, pero recientemente experimenté con un agente dedicado para ayudarme con tests, y es sorprendentemente bueno. Un &lt;a href="/es/blog/build-your-own-team-of-agents/">coach de TDD&lt;/a> que guía el ciclo red-green-refactor. Un explorer que lee el código antes de que yo lo toque. Un revisor de código limpio, un arquitecto de dominio, un revisor de React, un mantenedor de documentación. Cada uno especializado, cada uno apoyando mi forma de pensar y mi ritmo. Si se añade lógica nueva sin cobertura, el agente de TDD lo detecta. 100% de cobertura de código solía ser el tipo de objetivo que pondrías en una retro y abandonarías silenciosamente para el tercer sprint. Con un agente dedicado aplicándolo, es simplemente cómo funciona el proyecto.&lt;/p>
&lt;p>Sigo practicando pair programming con personas reales para temas complejos. El ida y vuelta humano tiene una profundidad que la IA no alcanza, especialmente cuando navegas trade-offs que requieren experiencia y juicio. Pero en el día a día, siempre tengo un agente pair buddy conmigo. Le lanzo ideas, cuestiono un enfoque, discuto casos borde, exploro un diseño antes de comprometerme con él. Apoya mis pensamientos, acelera el progreso y mantiene el listón de calidad donde yo lo quiero.&lt;/p>
&lt;p>El pragmático en mí solía abandonar TDD cuando los deadlines apretaban. El pragmático en mí con la configuración de IA adecuada lo mantiene funcionando.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Mi setup&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Uso Claude para todo. Claude Code con Opus o Sonnet como programador agéntico: flujos de desarrollo completos, lectura del código, seguimiento de convenciones, ejecución de tests, creación de PRs. Claude app y Claude como coworker para la parte conversacional: brainstorming, discusiones de arquitectura, explicar código, redactar documentación. Para asistencia inline, los plugins que ya tengo en mi IDE son suficientes. Probé Copilot y Cursor, no son para mí. Claude cubre lo que necesito.&lt;/p>
&lt;p>Diferentes modos para diferentes tareas. Un asistente agéntico siguiendo mis comandos de TDD es un flujo diferente a chatear sobre patrones de diseño. Ambos son útiles. Ninguno reemplaza al otro.&lt;/p>
&lt;p>El mercado ahora mismo es intenso. Claude, Codex, Gemini y otros son jugadores fuertes con productos similares, y todos mejoran mes a mes. Los resultados son impresionantes y solo se aceleran. Esa es la belleza de la competencia: obliga a todos a mejorar o volverse irrelevantes, y el consumidor gana de cualquier forma. A día de hoy, Claude Code parece la opción más fuerte para cómo trabajo. Pero no tengo lealtad a una marca. Si Anthropic dejara de avanzar y un competidor fuera claramente mejor, cambiaría sin dudar. Lo que importa es la capacidad, no el logo.&lt;/p>
&lt;/div>
&lt;/details>
&lt;blockquote>
&lt;p>Me equivoqué con la IA de la forma en que los idealistas se equivocan a menudo: medí la herramienta contra el resultado ideal y la encontré insuficiente, en lugar de medirla contra la alternativa realista.&lt;/p>
&lt;/blockquote>
&lt;p>La alternativa al desarrollo asistido por IA no es un equipo de arquitectos senior escribiendo código perfecto. Es el mismo equipo escribiendo el mismo código imperfecto, solo que más lento.&lt;/p>
&lt;p>Los ingenieros que aprendan a liderar agentes en lugar de competir contra ellos tendrán una ventaja real. Y esto todavía es el principio.&lt;/p>
&lt;blockquote>
&lt;p>La pregunta nunca fue &lt;em>“¿puede la IA escribir código perfecto?”&lt;/em> Fue &lt;em>“¿puedo liderar a la IA para escribir mejor código, más rápido?”&lt;/em> Y la respuesta, con la configuración adecuada, es sí.&lt;/p>
&lt;/blockquote>
&lt;h2 id="el-juego-completo">El juego completo
&lt;a class="heading-anchor" href="#el-juego-completo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Cada práctica en este post sigue el mismo patrón. La versión ideal existe en los libros. La versión pragmática existe en tu código bajo presión. Necesitas ambas.&lt;/p>
&lt;blockquote>
&lt;p>La próxima vez que estés subiendo ese fix a las 11 de la noche, sabrás qué atajos tomaste y por qué. Ese es el juego completo. No la perfección. No la velocidad. Saber cuál debe liderar.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2026-03-01/footer.webp" alt="blog-footer" />&lt;/p></content></entry><entry xml:lang="es"><title>Construye tu Propio Equipo de Agentes</title><subtitle>De asistente individual a equipo coordinado</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software" scheme="https://chemaclass.com/tags/software/" label="Software"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><published>2026-02-07T00:00:00+00:00</published><updated>2026-02-07T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/build-your-own-team-of-agents/"/><id>https://chemaclass.com/es/blog/build-your-own-team-of-agents/</id><summary type="html">Deja de usar la IA como un solo asistente. Organiza agentes en equipos especializados con roles, docs y ejecución en paralelo.</summary><content type="html">&lt;p>La mayoría usa asistentes de código con IA como un único interlocutor. Abres un chat, describes lo que necesitas y obtienes una respuesta. Funciona. Pero es como contratar a un generalista para que haga de todo. Ningún equipo real funciona así.&lt;/p>
&lt;p>La verdadera ventaja viene cuando organizas la IA como un equipo: onboarding, procedimientos estándar, especialistas y ejecución en paralelo.&lt;/p>
&lt;p>En el &lt;a href="/es/blog/mcp-giving-your-ai-agent-the-right-context/">post sobre MCP&lt;/a> cubrí cómo darle acceso a tu entorno. En &lt;a href="/es/blog/ai-gives-you-speed-not-quality/">La IA te da velocidad, no calidad&lt;/a>, por qué el juicio humano sigue siendo esencial. Este post cubre la pieza que falta: organizar ese acceso en un flujo coordinado.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="el-documento-de-onboarding">El documento de onboarding
&lt;a class="heading-anchor" href="#el-documento-de-onboarding" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Todo buen equipo empieza con onboarding. Los agentes de IA necesitan lo mismo.&lt;/p>
&lt;h3 id="reglas-del-proyecto">Reglas del proyecto
&lt;a class="heading-anchor" href="#reglas-del-proyecto" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>En Claude Code, el archivo &lt;code>CLAUDE.md&lt;/code> en la raíz de tu proyecto es el documento de onboarding. El agente lo lee cada vez que empieza a trabajar: estructura, convenciones, guías de estilo, herramientas.&lt;/p>
&lt;p>Pero &lt;code>CLAUDE.md&lt;/code> es solo el punto de entrada. Puedes dividir las reglas en archivos enfocados bajo &lt;code>.claude/rules/&lt;/code>, cada uno apuntando a partes específicas de tu código mediante patrones glob. El agente no solo conoce tus convenciones, está limitado por ellas. Límites de capas, patrones de nomenclatura, dirección de dependencias. Todo versionado junto al código que protegen.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Reglas con glob en la práctica&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;ul>
&lt;li>&lt;strong>&lt;code>modules/*/Domain/**/*.php&lt;/code>&lt;/strong>: Sin imports de framework, sin dependencias de infraestructura, solo PHP plano.&lt;/li>
&lt;li>&lt;strong>&lt;code>modules/*/Infrastructure/**/*.php&lt;/code>&lt;/strong>: Los controladores se mantienen delgados, los modelos Eloquent en su sitio.&lt;/li>
&lt;li>&lt;strong>&lt;code>resources/js/**/*.tsx&lt;/code>&lt;/strong>: Convenciones de componentes, estrictez TypeScript, patrones de estilos.&lt;/li>
&lt;/ul>
&lt;p>Cada archivo de reglas tiene un scope limitado a los archivos que le importan. Las reglas de dominio no se activan cuando se edita un controlador.&lt;/p>
&lt;/div>
&lt;/details>
&lt;h3 id="preferencias-personales">Preferencias personales
&lt;a class="heading-anchor" href="#preferencias-personales" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>También existe un &lt;code>~/.claude/CLAUDE.md&lt;/code> global que aplica en todos tus proyectos. El archivo del proyecto dice &lt;em>cómo funciona este código&lt;/em>. El global dice &lt;em>cómo trabajo yo&lt;/em>.&lt;/p>
&lt;blockquote>
&lt;p>Un buen CLAUDE.md es como un buen documento de onboarding. Cuanto mejor sea, menos te repites.&lt;/p>
&lt;/blockquote>
&lt;h2 id="procedimientos-operativos-estandar">Procedimientos operativos estándar
&lt;a class="heading-anchor" href="#procedimientos-operativos-estandar" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Todos los equipos tienen flujos recurrentes que viven en wikis, runbooks, o en la cabeza de alguien. Cuando viven en la cabeza de alguien, son frágiles.&lt;/p>
&lt;p>Los comandos slash personalizados en &lt;code>.claude/commands/&lt;/code> convierten estos flujos en instrucciones ejecutables. Cada comando es un archivo markdown que describe un procedimiento de varios pasos. En uno de mis proyectos, cada comando de creación empieza con tests. TDD incorporado al procedimiento, no dejado a la disciplina.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Comandos de un proyecto real&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>&lt;strong>Creación (TDD-first):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>/create-module&lt;/code>&lt;/strong>: Genera un módulo hexagonal con capas de dominio, aplicación e infraestructura.&lt;/li>
&lt;li>&lt;strong>&lt;code>/create-entity&lt;/code>&lt;/strong>: Entidades de dominio con value objects y archivos de test.&lt;/li>
&lt;li>&lt;strong>&lt;code>/create-use-case&lt;/code>&lt;/strong>: Handlers de command/query con tests mockeados.&lt;/li>
&lt;li>&lt;strong>&lt;code>/create-page&lt;/code>&lt;/strong>: Páginas React con factories y smoke tests.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Calidad y flujo de trabajo:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>/refactor-check&lt;/code>&lt;/strong>: Analiza código contra principios SOLID.&lt;/li>
&lt;li>&lt;strong>&lt;code>/test&lt;/code>&lt;/strong>: Ejecuta la suite con filtrado por módulo.&lt;/li>
&lt;li>&lt;strong>&lt;code>/fix&lt;/code>&lt;/strong>: Auto-aplica correcciones de linting y análisis estático.&lt;/li>
&lt;li>&lt;strong>&lt;code>/gh-issue&lt;/code>&lt;/strong>: De issue de GitHub a implementación y PR en un solo comando.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/details>
&lt;p>Los comandos convierten conocimiento tribal en instrucciones ejecutables. Lo que antes era “pregúntale a Sara cómo creamos un módulo nuevo” se convierte en un comando que cualquiera puede ejecutar.&lt;/p>
&lt;h2 id="especialistas-no-generalistas">Especialistas, no generalistas
&lt;a class="heading-anchor" href="#especialistas-no-generalistas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Los comandos codifican cómo hace las cosas tu equipo. Pero hay otra capa: skills y agentes.&lt;/p>
&lt;h3 id="skills-como-bases-de-conocimiento">Skills como bases de conocimiento
&lt;a class="heading-anchor" href="#skills-como-bases-de-conocimiento" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Los skills son conocimiento estructurado del que el agente se nutre. En uno de mis proyectos, tengo skills para principios SOLID, arquitectura hexagonal, flujos TDD y patrones React/Inertia.&lt;/p>
&lt;p>Las reglas restringen: “no hagas esto, haz siempre aquello.” Los skills enseñan: “este es el patrón, estos son los errores comunes.” Las reglas son barandillas. Los skills son experiencia.&lt;/p>
&lt;h3 id="agentes-como-roles-especializados">Agentes como roles especializados
&lt;a class="heading-anchor" href="#agentes-como-roles-especializados" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>En lugar de un generalista, defines agentes especializados con un rol claro, herramientas específicas, e incluso un modelo diferente según la complejidad del trabajo. No necesitas a tu arquitecto más senior para renombrar una variable.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Roles de agentes en un proyecto real&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;ul>
&lt;li>&lt;strong>Explorer&lt;/strong> (modelo ligero): Solo lectura. Busca en el código, encuentra archivos, entiende la estructura.&lt;/li>
&lt;li>&lt;strong>Revisor de código limpio&lt;/strong> (modelo intermedio): Violaciones SOLID, code smells, inconsistencias de nomenclatura.&lt;/li>
&lt;li>&lt;strong>Coach de TDD&lt;/strong> (modelo intermedio): Guía el ciclo red-green-refactor. Edita archivos y ejecuta tests.&lt;/li>
&lt;li>&lt;strong>Revisor de React&lt;/strong> (modelo intermedio): Estructura de componentes, estrictez TypeScript, accesibilidad.&lt;/li>
&lt;li>&lt;strong>Arquitecto de dominio&lt;/strong> (modelo más capaz): Decisiones de arquitectura, límites de módulos, patrones DDD.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/details>
&lt;blockquote>
&lt;p>El modelo adecuado para el trabajo adecuado. Rápido y barato para exploración. Capaz y riguroso para arquitectura.&lt;/p>
&lt;/blockquote>
&lt;h2 id="hazlos-trabajar-juntos">Hazlos trabajar juntos
&lt;a class="heading-anchor" href="#hazlos-trabajar-juntos" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Aquí la metáfora del equipo se vuelve literal. Un solo agente es útil. Múltiples agentes desde un plan compartido es un equipo.&lt;/p>
&lt;h3 id="subagentes-vs-equipos-de-agentes">Subagentes vs equipos de agentes
&lt;a class="heading-anchor" href="#subagentes-vs-equipos-de-agentes" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Hay dos modelos de coordinación distintos, y elegir el correcto importa.&lt;/p>
&lt;p>Los &lt;strong>subagentes&lt;/strong> se ejecutan dentro de una misma sesión. Hacen trabajo enfocado y devuelven resultados al agente principal. No pueden hablar entre sí. El agente principal lo gestiona todo.&lt;/p>
&lt;p>Los &lt;strong>equipos de agentes&lt;/strong> son diferentes. Cada miembro es una sesión de Claude Code independiente con su propia ventana de contexto. Se comunican a través de un buzón compartido, reclaman tareas de una lista compartida y se coordinan sin pasar por un cuello de botella central.&lt;/p>
&lt;p>La arquitectura tiene cuatro componentes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Team lead&lt;/strong>: la sesión principal que crea el equipo y orquesta el trabajo&lt;/li>
&lt;li>&lt;strong>Teammates&lt;/strong>: instancias separadas de Claude Code, cada una con tareas específicas&lt;/li>
&lt;li>&lt;strong>Lista de tareas&lt;/strong>: elementos de trabajo compartidos con seguimiento de dependencias. Las tareas bloqueadas se desbloquean automáticamente cuando sus dependencias se completan&lt;/li>
&lt;li>&lt;strong>Buzón&lt;/strong>: mensajería directa entre agentes, incluyendo broadcasts a todo el equipo&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Los subagentes son trabajadores que reportan. Los equipos de agentes son colaboradores que piensan juntos.&lt;/p>
&lt;/blockquote>
&lt;p>Usa subagentes cuando solo importa el resultado. Usa equipos de agentes cuando los miembros necesitan compartir hallazgos, cuestionar al resto y coordinarse por su cuenta.&lt;/p>
&lt;h3 id="empezando-con-equipos-de-agentes">Empezando con equipos de agentes
&lt;a class="heading-anchor" href="#empezando-con-equipos-de-agentes" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Los equipos de agentes son aún experimentales. Actívalos añadiendo esto a &lt;code>~/.claude/settings.json&lt;/code>:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="json">&lt;span class="giallo-l">&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">env&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">1&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Crear un equipo es conversacional. Describes lo que quieres: &lt;em>“Crea un equipo de agentes para refactorizar el módulo de auth. Genera tres miembros: uno para cambios de API backend, uno para componentes frontend, uno para escribir tests.”&lt;/em> Claude configura la lista de tareas, genera los miembros y coordina el trabajo.&lt;/p>
&lt;p>Puedes ver el equipo en un mismo proceso (un terminal, navega con Shift+Up/Down) o dividido en paneles (cada miembro en una ventana tmux o iTerm2 separada). Usa Shift+Tab para activar el modo delegado, que restringe al lead a solo coordinación.&lt;/p>
&lt;p>&lt;strong>Advertencia sobre consumo de tokens.&lt;/strong> Los equipos de agentes queman tokens rápidamente. Cada miembro tiene su propia ventana de contexto, y cada mensaje entre agentes suma. Empieza con tareas de investigación y revisión antes de pasar a implementación. Tres miembros explorando en paralelo cuesta aproximadamente 3x. Asegúrate de que el paralelismo se paga a sí mismo.&lt;/p>
&lt;p>Los miembros cargan automáticamente el contexto del proyecto (&lt;code>CLAUDE.md&lt;/code>, servidores MCP, skills) pero no heredan el historial de conversación del lead. Al crear un miembro, sé específico sobre qué archivos revisar y qué restricciones aplican. Un prompt de creación vago produce trabajo vago.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-02-07/middle.webp" alt="blog-middle" />&lt;/p>
&lt;h3 id="primero-planificar-despues-ejecutar">Primero planificar, después ejecutar
&lt;a class="heading-anchor" href="#primero-planificar-despues-ejecutar" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Describes el problema. El agente explora el código, mapea dependencias y propone un enfoque antes de cambiar nada. Lo apruebas, modificas o rechazas. Pensar primero, programar después.&lt;/p>
&lt;p>Con equipos de agentes, la &lt;strong>aprobación de plan&lt;/strong> permite exigir que los miembros diseñen su enfoque antes de implementar. El agente trabaja en modo solo lectura hasta que el lead aprueba. Puedes moldear el criterio del lead: &lt;em>“solo aprueba planes que incluyan cobertura de tests”&lt;/em> o &lt;em>“rechaza planes que modifiquen el esquema de base de datos.”&lt;/em>&lt;/p>
&lt;p>El &lt;strong>modo delegado&lt;/strong> restringe al lead a solo coordinación. Sin él, el lead a veces empieza a implementar en lugar de esperar a los miembros. El modo delegado lo mantiene centrado en la orquestación, no en la ejecución.&lt;/p>
&lt;h3 id="hipotesis-competitivas">Hipótesis competitivas
&lt;a class="heading-anchor" href="#hipotesis-competitivas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Cuando la causa raíz no está clara, un solo agente tiende a encontrar una explicación plausible y dejar de buscar. Los equipos de agentes combaten esto haciendo que los miembros sean adversarios. Cada uno investiga su propia teoría mientras intenta refutar las de los demás.&lt;/p>
&lt;p>La investigación secuencial sufre de anclaje: una vez que se explora una teoría, todo lo posterior está sesgado hacia ella. Con múltiples investigadores cuestionándose mutuamente, la teoría que sobrevive tiene más probabilidades de ser la causa raíz real.&lt;/p>
&lt;h3 id="dimensiona-las-tareas-para-trabajo-en-paralelo">Dimensiona las tareas para trabajo en paralelo
&lt;a class="heading-anchor" href="#dimensiona-las-tareas-para-trabajo-en-paralelo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>No todo el trabajo se beneficia del paralelismo. La pregunta clave: ¿pueden los miembros trabajar de forma independiente?&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Demasiado pequeñas&lt;/strong>: el overhead de coordinación supera el beneficio&lt;/li>
&lt;li>&lt;strong>Demasiado grandes&lt;/strong>: los miembros trabajan demasiado tiempo sin revisión, aumentando el esfuerzo desperdiciado&lt;/li>
&lt;li>&lt;strong>El punto justo&lt;/strong>: unidades autocontenidas que producen un entregable claro. Una función, un archivo de tests, una revisión&lt;/li>
&lt;/ul>
&lt;p>Tener 5-6 tareas por miembro mantiene a todos productivos. Que cada miembro sea dueño de archivos diferentes. Sin aislamiento, dos editando el mismo archivo lleva a sobreescrituras. Los worktrees cambian esto.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Backend + Frontend en paralelo&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Imagina una funcionalidad que toca backend y frontend. Después de planificar:&lt;/p>
&lt;ul>
&lt;li>Un &lt;strong>agente de backend&lt;/strong> genera la capa de dominio: entidades, value objects, interfaces de repositorio, handlers. Todo hexagonal, todo test-first.&lt;/li>
&lt;li>Un &lt;strong>agente de frontend&lt;/strong> construye la página React, componentes, hooks y factories. Cada uno sigue sus propias reglas y opera de forma independiente.&lt;/li>
&lt;/ul>
&lt;p>No se pisan porque el plan ya definió los límites. Propiedad clara. Sin conflictos de merge. Sin esperas.&lt;/p>
&lt;/div>
&lt;/details>
&lt;h3 id="aislamiento-con-worktrees">Aislamiento con worktrees
&lt;a class="heading-anchor" href="#aislamiento-con-worktrees" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>La mayor fricción con agentes en paralelo eran los conflictos de archivos. Dos agentes editando el mismo archivo significaba sobreescrituras y trabajo perdido. Los git worktrees eliminan esto dándole a cada agente su propia copia de trabajo del repositorio.&lt;/p>
&lt;p>Inicia Claude Code con &lt;code>--worktree&lt;/code> para ejecutarlo en un worktree aislado. Múltiples sesiones, mismo repositorio, sin pisarse. Añade &lt;code>--tmux&lt;/code> para lanzarlo en su propia sesión tmux.&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">claude&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">-worktree&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">-tmux&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Los subagentes también soportan worktrees. Pídele a Claude que use worktrees para sus agentes, o añade &lt;code>isolation: worktree&lt;/code> en el frontmatter de tu agente personalizado para que sea el comportamiento por defecto.&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="yaml">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">---&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#22863A, #85E89D);">i&lt;/span>&lt;span style="color: light-dark(#22863A, #85E89D);">solation&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> w&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">orktree&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">---&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>La app de escritorio tiene la misma funcionalidad: activa el modo worktree en la pestaña Code.&lt;/p>
&lt;p>Para control de versiones no-git (Mercurial, Perforce, SVN), puedes definir worktree hooks para obtener los mismos beneficios de aislamiento sin necesidad de usar git.&lt;/p>
&lt;blockquote>
&lt;p>Los worktrees convierten “propiedad clara de archivos” de una restricción de planificación en una garantía de infraestructura. Los agentes pueden solaparse en los mismos archivos sin pisarse.&lt;/p>
&lt;/blockquote>
&lt;h3 id="revision-tras-la-ejecucion">Revisión tras la ejecución
&lt;a class="heading-anchor" href="#revision-tras-la-ejecucion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Tras la implementación, los agentes de revisión toman el relevo. En lugar de un revisor que lo pille todo, tienes especialistas: violaciones SOLID, patrones de componentes, calidad de tests, límites de módulos.&lt;/p>
&lt;blockquote>
&lt;p>Un solo agente es un asistente. Múltiples agentes trabajando desde un plan compartido es un equipo.&lt;/p>
&lt;/blockquote>
&lt;h2 id="tu-sigues-siendo-el-lead">Tú sigues siendo el lead
&lt;a class="heading-anchor" href="#tu-sigues-siendo-el-lead" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Por muy bien configurados que estén, los agentes trabajan para ti. Tú estableces los estándares, escribes las reglas, revisas los planes y apruebas el resultado antes de que salga. Puedes enviar un mensaje a cualquier miembro mientras trabaja para redirigir su enfoque o añadir restricciones. Si alguien va por mal camino, intervienes directamente.&lt;/p>
&lt;p>Como escribí en &lt;a href="/es/blog/ai-gives-you-speed-not-quality/">La IA te da velocidad, no calidad&lt;/a>, el código que produce el agente es tu responsabilidad. Más paralelismo sin supervisión es solo más caos, más rápido.&lt;/p>
&lt;h3 id="puertas-de-calidad">Puertas de calidad
&lt;a class="heading-anchor" href="#puertas-de-calidad" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Los hooks y git hooks actúan como la última red de seguridad. En mi setup, nada se commitea a menos que los linters pasen, el análisis estático esté limpio, los tests sean verdes y la cobertura supere el 90%. El agente no puede saltarse esto. Nadie puede.&lt;/p>
&lt;p>Los equipos de agentes añaden sus propios hooks: &lt;code>TeammateIdle&lt;/code> mantiene activos a los miembros inactivos, &lt;code>TaskCompleted&lt;/code> impide completar tareas prematuramente. Políticas automatizadas que nadie puede saltarse.&lt;/p>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Hooks, permisos y barandillas&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Los git hooks ejecutan linters, análisis estático y tests antes de cada commit. Claude Code añade sus propios hooks (&lt;code>.claude/hooks/&lt;/code>): comandos shell que se disparan ante eventos del agente como llamadas a herramientas o escritura de archivos.&lt;/p>
&lt;p>&lt;code>.claude/settings.json&lt;/code> controla lo que los agentes pueden ejecutar. Autoriza herramientas y comandos específicos, deniega operaciones destructivas. Controlas no solo lo que los agentes saben (reglas, skills) sino lo que pueden hacer (permisos). Las reglas definen la cultura. Los permisos definen los límites.&lt;/p>
&lt;/div>
&lt;/details>
&lt;h3 id="la-base-importa">La base importa
&lt;a class="heading-anchor" href="#la-base-importa" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Los agentes te ayudan a llegar más rápido, pero ese “allí” tiene que estar bien definido. Si no sabes cómo es la arquitectura hexagonal, los agentes no la van a descubrir por ti.&lt;/p>
&lt;p>No construyes todo esto el primer día. Empiezas con un &lt;code>CLAUDE.md&lt;/code>. Luego notas que repites instrucciones, y escribes un comando. Un agente rompe una convención, y añades una regla. El setup crece orgánicamente a partir de fricción real. Cada adición resuelve un problema que realmente tuviste. Lo mismo con los equipos de agentes: empieza con tareas que no requieran escribir código. Revisa un PR, investiga una librería, analiza un bug. Aprende el modelo de coordinación antes de implementar en paralelo.&lt;/p>
&lt;p>Si quieres un punto de partida, preparé &lt;a rel="external" href="https://github.com/Chemaclass/laravel-claude-toolkit">laravel-claude-toolkit&lt;/a>: un starter kit de Laravel con reglas, comandos, skills, agentes, hooks y permisos ya configurados.&lt;/p>
&lt;blockquote>
&lt;p>No solo estás usando IA. Estás construyendo un equipo. Y como cualquier equipo, la calidad de su resultado refleja la calidad de su liderazgo.&lt;/p>
&lt;/blockquote>
&lt;h2 id="recursos">Recursos
&lt;a class="heading-anchor" href="#recursos" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;a rel="external" href="https://claude.com/product/claude-code">Claude Code&lt;/a> | claude.com&lt;/li>
&lt;li>&lt;a rel="external" href="https://code.claude.com/docs/en/agent-teams">Claude Code: Agent Teams&lt;/a> | claude.com&lt;/li>
&lt;li>&lt;a rel="external" href="https://rfrolov.me/en/blog/claude-code-tips">Claude Code Tips: Workflow Boosters&lt;/a> | rfrolov.me&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="/images/blog/2026-02-07/footer.webp" alt="blog-footer" />&lt;/p></content></entry><entry xml:lang="es"><title>MCP: Dándole a tu Agente IA el Contexto Adecuado</title><subtitle>Por qué el contexto es el verdadero superpoder</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software-architecture" scheme="https://chemaclass.com/tags/software-architecture/" label="Software Architecture"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><published>2026-01-11T00:00:00+00:00</published><updated>2026-01-11T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/mcp-giving-your-ai-agent-the-right-context/"/><id>https://chemaclass.com/es/blog/mcp-giving-your-ai-agent-the-right-context/</id><summary type="html">MCP conecta agentes de IA con tus herramientas, bases de datos y APIs mediante un protocolo estándar. Dale el contexto que necesita.</summary><content type="html">&lt;p>Los asistentes de código con IA modernos son muy buenos entendiendo contexto. Modelos como Claude Opus con ventanas de contexto amplias (unos 200k tokens) pueden tener porciones sustanciales de tu código en mente, razonar sobre arquitectura y mantener coherencia en conversaciones largas. No el proyecto entero en codebases grandes, pero sí lo suficiente para trabajar bien.&lt;/p>
&lt;p>Pero entender no es lo mismo que acceder.&lt;/p>
&lt;p>La IA puede razonar sobre el esquema de tu base de datos si lo pegas. Puede sugerir cambios a archivos que compartes. Conoce patrones del código que le muestras. La limitación no es la inteligencia, sino el alcance.&lt;/p>
&lt;p>Ahí entra MCP.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="lo-que-mcp-habilita">Lo que MCP habilita
&lt;a class="heading-anchor" href="#lo-que-mcp-habilita" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>La IA moderna puede entender tu código cuando lo compartes. Pero entender y actuar son cosas distintas.&lt;/p>
&lt;p>Muchos asistentes integrados en IDEs como VS Code Copilot o Cursor ya acceden a los archivos de tu proyecto mediante su propio indexado. El acceso a archivos no es nuevo. Lo que MCP aporta es estandarización. En lugar de que cada herramienta construya su propia integración, MCP ofrece un protocolo común. Configuras un servidor una vez, y cualquier cliente compatible con MCP puede usarlo. Es portable, configurable, y va más allá de archivos: bases de datos, APIs y herramientas personalizadas.&lt;/p>
&lt;blockquote>
&lt;p>MCP transforma a la IA de interlocutor a participante activo en tu entorno de desarrollo.&lt;/p>
&lt;/blockquote>
&lt;p>Con MCP le das a la IA acceso directo a herramientas y recursos. Puede leer archivos, ejecutar comandos, consultar bases de datos, obtener documentación. La inteligencia siempre estuvo ahí. MCP le da manos.&lt;/p>
&lt;h2 id="que-es-realmente-mcp">Qué es realmente MCP
&lt;a class="heading-anchor" href="#que-es-realmente-mcp" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>MCP es un protocolo, no un producto. Un estándar abierto que define cómo los agentes de IA pueden conectarse a fuentes de datos y herramientas externas. Piensa en ello como un puente entre el modelo de IA y tu entorno de desarrollo.&lt;/p>
&lt;p>La arquitectura es simple: los servidores MCP exponen capacidades y los clientes de IA las consumen. Claude Desktop y Claude Code soportan MCP oficialmente, y cada vez más herramientas adoptan el protocolo.&lt;/p>
&lt;p>Por ejemplo, en Claude Code puedes añadir servidores a un archivo &lt;code>.mcp.json&lt;/code> en la raíz de tu proyecto. Claude Code lee este archivo al abrir el proyecto e inicia los servidores configurados automáticamente:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="json">&lt;span class="giallo-l">&lt;span>{&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">mcpServers&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">filesystem&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">command&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">npx&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">args&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">-y&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">@modelcontextprotocol/server-filesystem&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">./&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">github&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">command&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">npx&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">args&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">-y&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">@modelcontextprotocol/server-github&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>]&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">env&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">GITHUB_TOKEN&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">tu-token&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">postgres&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">command&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">npx&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">args&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> [&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">-y&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>,&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">@modelcontextprotocol/server-postgres&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span>]&lt;/span>&lt;span>,&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">env&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span> {&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">DATABASE_URL&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">&amp;quot;&lt;/span>&lt;span>:&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> &amp;quot;&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">postgresql://localhost/mydb&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);">&amp;quot;&lt;/span>&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> }&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>}&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Cada servidor le da a la IA diferentes capacidades:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>filesystem&lt;/strong>: Leer y navegar los archivos de tu proyecto. La IA puede explorar tu código, verificar patrones existentes y entender la estructura de directorios antes de sugerir cambios.&lt;/li>
&lt;li>&lt;strong>github&lt;/strong>: Acceder a issues, pull requests y metadatos del repositorio. Pídele a la IA que resuma los issues abiertos, revise comentarios de PRs o entienda en qué trabaja tu equipo.&lt;/li>
&lt;li>&lt;strong>postgres&lt;/strong>: Consultar tu base de datos directamente. La IA puede inspeccionar tu esquema, ejecutar consultas de lectura y entender tu modelo de datos sin que copies definiciones de tablas.&lt;/li>
&lt;/ul>
&lt;p>Distintas herramientas, mismo protocolo. Configuras una vez, y cualquier cliente compatible con MCP puede usar estos servidores.&lt;/p>
&lt;h2 id="donde-destaca-mcp">Dónde destaca MCP
&lt;a class="heading-anchor" href="#donde-destaca-mcp" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="trabajando-con-tu-codigo">Trabajando con tu código
&lt;a class="heading-anchor" href="#trabajando-con-tu-codigo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>El beneficio más inmediato es el acceso al sistema de archivos. La IA puede navegar tu proyecto, leer archivos fuente, entender tu estructura de directorios. Cuando sugiere código, puede verificar patrones existentes primero.&lt;/p>
&lt;p>La integración con Git va más allá. La IA puede ver tu historial de commits, entender qué cambió recientemente y sugerir modificaciones alineadas con la evolución de tu código.&lt;/p>
&lt;p>El acceso al esquema de base de datos significa que la IA entiende tu modelo de datos. No hace falta explicar relaciones entre tablas o tipos de columnas. Ve la estructura y genera consultas que funcionan de verdad.&lt;/p>
&lt;h3 id="documentacion-y-conocimiento">Documentación y conocimiento
&lt;a class="heading-anchor" href="#documentacion-y-conocimiento" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Conecta tu documentación interna y la IA conocerá las decisiones de tu equipo. Especificaciones de API, documentos de arquitectura, guías de código. Todo disponible como contexto.&lt;/p>
&lt;p>Aquí es donde MCP empieza a notarse. La IA ya no genera código genérico. Genera código que encaja en tu proyecto.&lt;/p>
&lt;blockquote>
&lt;p>La mejor asistencia de IA viene de entender no solo qué construyes, sino cómo lo construye tu equipo.&lt;/p>
&lt;/blockquote>
&lt;h3 id="integraciones-externas">Integraciones externas
&lt;a class="heading-anchor" href="#integraciones-externas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>La integración con GitHub permite que la IA lea issues, entienda discusiones de PRs y vea el contexto más amplio de en qué trabaja tu equipo. Slack u otras herramientas de comunicación pueden aportar aún más contexto sobre decisiones en curso.&lt;/p>
&lt;p>Las integraciones personalizadas te permiten conectar herramientas internas específicas de tu flujo de trabajo. El protocolo es extensible por diseño.&lt;/p>
&lt;h2 id="usando-mcp-efectivamente">Usando MCP efectivamente
&lt;a class="heading-anchor" href="#usando-mcp-efectivamente" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>MCP amplifica lo que conectes. Si tu documentación está desactualizada, la IA usará información desactualizada. Si tu código es desordenado, la IA aprenderá patrones desordenados.&lt;/p>
&lt;p>Es el efecto espejo que mencioné en &lt;a href="/es/blog/ai-gives-you-speed-not-quality">La IA te da velocidad, no calidad&lt;/a>. La IA refleja el contexto que le das. Buen contexto da resultados útiles. Mal contexto produce basura que suena convincente.&lt;/p>
&lt;blockquote>
&lt;p>Darle a la IA acceso a tu código no reemplaza tu responsabilidad de mantenerlo. Hace que la buena higiene sea más valiosa.&lt;/p>
&lt;/blockquote>
&lt;p>Algunas prácticas que ayudan:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Conecta solo lo que la IA necesita.&lt;/strong> Más contexto no siempre es mejor. Contexto enfocado sí.&lt;/li>
&lt;li>&lt;strong>Mantén tu documentación actualizada.&lt;/strong> Si la IA lee tus docs, esos docs importan más que antes.&lt;/li>
&lt;li>&lt;strong>Revisa tu configuración MCP de vez en cuando.&lt;/strong> A medida que tu proyecto evoluciona, también debería hacerlo tu configuración de contexto.&lt;/li>
&lt;li>&lt;strong>Empieza pequeño.&lt;/strong> Uno o dos servidores. Ve qué funciona. Expande desde ahí.&lt;/li>
&lt;/ul>
&lt;p>La seguridad también importa. Sé intencional sobre lo que expones. Los servidores MCP pueden acceder a información sensible. Trátalos como cualquier otra decisión de control de acceso.&lt;/p>
&lt;h2 id="lo-que-viene">Lo que viene
&lt;a class="heading-anchor" href="#lo-que-viene" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>MCP es la base. Pero el ecosistema construye encima.&lt;/p>
&lt;p>&lt;strong>Flujos de trabajo agénticos.&lt;/strong> Herramientas como Claude Code y Cursor funcionan en “modo agente” donde la IA planifica y ejecuta tareas de múltiples pasos de forma autónoma. Lee archivos, hace cambios, ejecuta tests, corrige errores. Los servidores MCP son las manos. El bucle del agente es el cerebro que decide qué hacer.&lt;/p>
&lt;p>&lt;strong>Skills y comandos personalizados.&lt;/strong> Claude Code introdujo skills: comandos slash personalizados que encadenan herramientas MCP en flujos reutilizables. &lt;code>/deploy&lt;/code>, &lt;code>/test&lt;/code>, &lt;code>/review&lt;/code>. Los defines una vez y se convierten en parte de tu toolkit de desarrollo.&lt;/p>
&lt;p>&lt;strong>Protocolo A2A.&lt;/strong> El protocolo Agent-to-Agent de Google. Mientras MCP conecta IA con herramientas, A2A conecta agentes de IA entre sí. Múltiples agentes especializados colaborando en tareas complejas. Un agente escribe código, otro lo revisa, un tercero ejecuta tests.&lt;/p>
&lt;p>El patrón es claro: la IA está pasando de asistente a colaborador. De responder preguntas a ejecutar flujos de trabajo. MCP le dio a la IA acceso a tu entorno. Lo que viene es IA que sabe usar ese acceso de forma autónoma.&lt;/p>
&lt;blockquote>
&lt;p>La pregunta está cambiando de “¿a qué puede acceder la IA?” a “¿qué debería decidir la IA por su cuenta?”&lt;/p>
&lt;/blockquote>
&lt;p>El juicio humano no desaparece. Se mueve hacia arriba. En lugar de revisar cada línea que escribe la IA, diseñamos el contexto y los límites que moldean lo que produce.&lt;/p>
&lt;p>Ese sigue siendo nuestro trabajo. Y vale la pena hacerlo bien.&lt;/p>
&lt;p>&lt;img src="/images/blog/2026-01-11/footer.webp" alt="mcp conectando la ia con herramientas" />&lt;/p></content></entry><entry xml:lang="es"><title>La IA te Da Velocidad, No Calidad</title><subtitle>El factor humano en la era del vibe-coding</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="software-architecture" scheme="https://chemaclass.com/tags/software-architecture/" label="Software Architecture"/><category term="craftsmanship" scheme="https://chemaclass.com/tags/craftsmanship/" label="Craftsmanship"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><published>2025-10-10T00:00:00+00:00</published><updated>2025-10-10T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/ai-gives-you-speed-not-quality/"/><id>https://chemaclass.com/es/blog/ai-gives-you-speed-not-quality/</id><summary type="html">La IA acelera tu producción pero no garantiza calidad. Eres responsable de cada línea que commiteas. Velocidad sin dirección es caos.</summary><content type="html">&lt;p>He estado usando asistentes de codificación IA extensivamente: ChatGPT, Codex, Claude con Sonnet y Opus. Son increíblemente útiles. Te dan velocidad como nada más.&lt;/p>
&lt;p>Pero la velocidad no es calidad.&lt;/p>
&lt;span id="continue-reading">&lt;/span>&lt;h2 id="la-trampa-del-vibe-coding">La trampa del vibe-coding
&lt;a class="heading-anchor" href="#la-trampa-del-vibe-coding" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Los modelos de IA son excelentes imitando su entorno. Dales contexto, y harán lo que sea necesario para completar la tarea. Esto se ha conocido como &lt;em>“vibe-coding”&lt;/em>: describes lo que quieres, y la IA produce algo que funciona. Rápido.&lt;/p>
&lt;p>¿El problema? La IA felizmente generará código desordenado si eso es lo que hace el trabajo. No le importa la mantenibilidad. No piensa en qué pasa cuando los requisitos cambien el próximo mes. Solo produce output.&lt;/p>
&lt;blockquote>
&lt;p>La IA es un espejo que refleja el contexto que le das. Si tu codebase está desordenado, generará más desorden. Si tus prompts son vagos, hará suposiciones.&lt;/p>
&lt;/blockquote>
&lt;p>Sin guía cuidadosa, terminas con parches sobre parches. Código legacy recién creado. Una codebase donde cada cambio se siente arriesgado y el equipo pasa más tiempo luchando contra el código que construyendo features.&lt;/p>
&lt;h2 id="el-arte-de-preguntar">El arte de preguntar
&lt;a class="heading-anchor" href="#el-arte-de-preguntar" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>¿Recuerdas Stack Overflow? ¿Las búsquedas en Google que te llevaban a hilos de foros de 2011 donde alguien tenía exactamente el mismo problema?&lt;/p>
&lt;p>Hace diez años, ser desarrollador significaba aprender a hacer buenas preguntas. Elaborabas tu post de Stack Overflow cuidadosamente: describe el problema, muestra lo que intentaste, explica lo que esperabas versus lo que pasó. Si tu pregunta era vaga o perezosa, la comunidad te lo hacía saber. A veces duramente.&lt;/p>
&lt;p>Pero esa fricción nos enseñó algo valioso: &lt;strong>la calidad de tu respuesta depende de la calidad de tu pregunta&lt;/strong>.&lt;/p>
&lt;p>El mismo principio aplica a la IA. Un prompt vago obtiene una respuesta vaga. Un prompt bien estructurado con contexto claro, restricciones y ejemplos obtiene algo útil. La habilidad de formular buenas preguntas no se volvió obsoleta. Se volvió más importante.&lt;/p>
&lt;blockquote>
&lt;p>Aprender a hacer prompts a la IA efectivamente es el equivalente moderno de aprender a buscar en Google y preguntar en Stack Overflow. Los desarrolladores que dominen esto obtendrán mejores resultados.&lt;/p>
&lt;/blockquote>
&lt;p>Incluso cuando la IA te da una respuesta rápida e impresionante, &lt;strong>nunca aceptes código que no entiendas completamente&lt;/strong>. Es tentador. La respuesta aparece en segundos, se ve profesional, incluso podría funcionar. Pero si no puedes explicar qué hace y por qué, estás plantando una bomba de tiempo en tu codebase. Y cuando explote a las 2am, estarás debuggeando código que no escribiste sin modelo mental de por qué existe.&lt;/p>
&lt;p>Cuestiona el resultado. Pregunta: &lt;em>“¿Puedes simplificar esto?”&lt;/em> o &lt;em>“¿Hay código repetitivo aquí que podamos eliminar?”&lt;/em> La IA por defecto añade, no mejora. Generará abstracciones, funciones auxiliares y patrones que no pediste. No refactorizará a menos que se lo digas. Cuestiónala.&lt;/p>
&lt;p>Esto es especialmente crítico con los tests. Pide a la IA que genere tests y a menudo obtendrás tests que reflejan detalles de implementación en lugar de comportamiento. Se romperán en el momento que refactorices, incluso si la lógica permanece igual. Si quieres tests que verifiquen comportamiento, necesitas decirlo explícitamente. La IA no hará esa elección por ti.&lt;/p>
&lt;blockquote>
&lt;p>No te dejes seducir por la velocidad. A veces, una respuesta rápida que no entiendes es peor que una respuesta lenta que sí entiendes.&lt;/p>
&lt;/blockquote>
&lt;h2 id="el-factor-humano">El factor humano
&lt;a class="heading-anchor" href="#el-factor-humano" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>La IA puede escribir código rápido, pero no puede entender la arquitectura general. No sabe por qué ciertas decisiones se tomaron hace meses. No puede ver el panorama general de hacia dónde va el producto. Solo ve lo que le muestras, tomando decisiones locales sin entender las implicaciones globales. Ese es nuestro trabajo.&lt;/p>
&lt;p>Como exploré en &lt;a href="/es/blog/different-beliefs-about-software-quality">diferentes creencias sobre la calidad del software&lt;/a>, los equipos a menudo tienen estándares variables sobre qué significa &lt;em>“suficientemente bueno”&lt;/em>. Cuando añades IA a la mezcla, mantener ese entendimiento compartido se vuelve aún más crítico. La IA no comparte los valores de tu equipo. Solo genera código.&lt;/p>
&lt;blockquote>
&lt;p>La disciplina para mantener arquitectura limpia, para decir &lt;em>“no”&lt;/em> a hacks rápidos, para refactorizar antes de que las cosas empeoren. Eso es únicamente humano.&lt;/p>
&lt;/blockquote>
&lt;p>Libros como &lt;a href="/es/readings/clean-code/">Clean Code&lt;/a> y &lt;a href="/es/readings/clean-architecture/">Clean Architecture&lt;/a> no son menos relevantes en la era de la IA. Son más relevantes. Te ayudan a detectar cuando la IA va en la dirección equivocada.&lt;/p>
&lt;h2 id="colaboracion-sobre-automatizacion">Colaboración sobre automatización
&lt;a class="heading-anchor" href="#colaboracion-sobre-automatizacion" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Hay algo más que la IA no puede reemplazar: el equipo.&lt;/p>
&lt;p>Una conversación con un colega sobre &lt;em>“¿deberíamos extraer esto en un servicio?”&lt;/em> a menudo lleva a insights que ningún prompt de IA sacaría a la luz. Ese ida y vuelta, el cuestionar, el &lt;em>“¿qué si intentamos esto en su lugar?”&lt;/em>. Ahí es donde ocurre el entendimiento real.&lt;/p>
&lt;p>&lt;a href="/es/readings/extreme-programming-explained/">Extreme Programming Explained&lt;/a> enfatiza prácticas como pair programming y propiedad colectiva del código por buenas razones. Estas no son ineficiencias para automatizar. Son cómo los equipos construyen calidad en su proceso.&lt;/p>
&lt;p>Cuando saltas la discusión humana y solo dejas que la IA genere soluciones, pierdes la oportunidad de aprender, de desafiar suposiciones y de crecer como equipo.&lt;/p>
&lt;h2 id="tu-eres-dueno-del-codigo">Tú eres dueño del código
&lt;a class="heading-anchor" href="#tu-eres-dueno-del-codigo" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Cuando la IA escribe código y tú lo commiteas, lo revisas, lo apruebas, lo mergeas y lo deployeas, &lt;strong>es tu código&lt;/strong>. No puedes culpar a la IA cuando algo se rompe en producción. No puedes señalar a Claude o Copilot cuando la arquitectura se vuelve imposible de mantener.&lt;/p>
&lt;p>Como escribí sobre &lt;a href="/es/blog/the-art-of-testing/">el arte del testing&lt;/a>, la calidad es una elección que hacemos en cada paso. Cada commit es una decisión. Cada revisión es una oportunidad de detectar problemas. Cada merge es un respaldo de la calidad del código.&lt;/p>
&lt;blockquote>
&lt;p>Somos la última parte responsable del código que la IA escribe. El commit, la revisión, la aprobación, el merge, el deploy. Todo eso somos nosotros.&lt;/p>
&lt;/blockquote>
&lt;p>Moverse rápido en la dirección equivocada solo te lleva a perderte más rápido. Las líneas de código apareciendo en pantalla no es progreso. El valor que aportamos como desarrolladores no es la velocidad tecleando. Nuestro valor está en entender hacia dónde vamos, mantener disciplina sobre el caos, y asegurar que el código que entregamos hoy no se convierta en la pesadilla de mañana.&lt;/p>
&lt;p>Usa la IA. Abraza la velocidad. Pero nunca olvides: &lt;strong>tú eres quien conduce&lt;/strong>. Si sueltas el volante, terminarás en una pila de código imposible de mantener más rápido de lo que esperabas.&lt;/p>
&lt;p>Y cuando eso pase, no hay nadie más a quien culpar.&lt;/p>
&lt;p>&lt;img src="/images/blog/2025-10-10/footer.webp" alt="tú eres quien conduce" />&lt;/p></content></entry></feed>