<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Codigoencasa.com ]]></title><description><![CDATA[Aprende a programar desde casa #stayhome | Leifer Méndez]]></description><link>https://codigoencasa.com/</link><image><url>https://codigoencasa.com/favicon.png</url><title>Codigoencasa.com </title><link>https://codigoencasa.com/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Thu, 29 Oct 2026 05:19:39 GMT</lastBuildDate><atom:link href="https://codigoencasa.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Claude Fable 5.1 ya está disponible. La propia documentación de Anthropic te dice que no lo uses.]]></title><description><![CDATA[Otro desarrollador calculó que, con una tasa de aciertos de caché del 95 %, el contexto utilizable antes de activar la compactación automática prácticamente se duplica, pasando de 200.000 a 400.000 tokens.]]></description><link>https://codigoencasa.com/claude-fable-5-1-ya-esta-disponible-la-propia-documentacion-de-anthropic-te-dice-que-no-lo-uses/</link><guid isPermaLink="false">6ae2163f748397230974c2d1</guid><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 28 Oct 2026 20:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/clement-proust-ZLyIolZInFQ-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h1></h1><img src="https://codigoencasa.com/content/images/2026/10/clement-proust-ZLyIolZInFQ-unsplash-transformed.jpeg" alt="Claude Fable 5.1 ya est&#xE1; disponible. La propia documentaci&#xF3;n de Anthropic te dice que no lo uses."><p>Anthropic lanz&#xF3; Claude Fable 5.1 y <a href="https://codigoencasa.com/">Claude</a> Mythos 5.1 el 1 de septiembre, tres meses despu&#xE9;s de la llegada del Fable 5 original, que fue suspendido poco despu&#xE9;s por el Departamento de Comercio de Estados Unidos.</p><p>En el anuncio oficial, la compa&#xF1;&#xED;a los presenta como los modelos m&#xE1;s avanzados del mundo para programaci&#xF3;n y trabajo intelectual. Los resultados de las pruebas de rendimiento respaldan buena parte de esa afirmaci&#xF3;n. De hecho, una de las m&#xE9;tricas m&#xE1;s que duplic&#xF3; su puntuaci&#xF3;n.</p><p>Sin embargo, al revisar la documentaci&#xF3;n para desarrolladores, encontramos algo sorprendente. La segunda frase de la descripci&#xF3;n general recomienda comenzar con <a href="https://codigoencasa.com/">Claude Opus 5</a> para la mayor&#xED;a de las cargas de trabajo.</p><p>Es decir, Anthropic est&#xE1; recomendando, desde su propia documentaci&#xF3;n y el mismo d&#xED;a del lanzamiento, que probablemente su modelo m&#xE1;s avanzado no sea la mejor opci&#xF3;n para la mayor&#xED;a de las personas.</p><p>Vale la pena detenerse en esta contradicci&#xF3;n, porque ayuda a entender pr&#xE1;cticamente todo lo que hay detr&#xE1;s de este lanzamiento.</p><h2 id="qu%C3%A9-mejor%C3%B3-realmente">Qu&#xE9; mejor&#xF3; realmente</h2><p>Las mejoras son reales, pero no se distribuyen de manera uniforme. Dos pruebas de rendimiento registraron avances extraordinarios, mientras que el resto mostr&#xF3; incrementos de apenas unos puntos porcentuales.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-8.png" class="kg-image" alt="Claude Fable 5.1 ya est&#xE1; disponible. La propia documentaci&#xF3;n de Anthropic te dice que no lo uses." loading="lazy" width="1100" height="296" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-8.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-8.png 1000w, https://codigoencasa.com/content/images/2026/10/image-8.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Terminal Bench Science es el resultado m&#xE1;s destacado.</p><p>Fable 5 obtuvo una puntuaci&#xF3;n del 24,7 %, mientras que Fable 5.1 alcanz&#xF3; el 52,6 %.</p><p>Anthropic se&#xF1;ala que el error est&#xE1;ndar se sit&#xFA;a aproximadamente entre 3,5 y 4,5 puntos por modelo, por lo que la diferencia no puede atribuirse simplemente a variaciones estad&#xED;sticas.</p><p>La automatizaci&#xF3;n de procesos empresariales tambi&#xE9;n estuvo cerca de duplicar su rendimiento.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-9.png" class="kg-image" alt="Claude Fable 5.1 ya est&#xE1; disponible. La propia documentaci&#xF3;n de Anthropic te dice que no lo uses." loading="lazy" width="1100" height="690" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-9.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-9.png 1000w, https://codigoencasa.com/content/images/2026/10/image-9.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Pero cuando comparamos los resultados con <a href="https://codigoencasa.com/">Opus 5</a>, la situaci&#xF3;n se vuelve bastante m&#xE1;s interesante.</p><p>En tareas de conocimiento, Opus 5 obtiene 1824 puntos frente a los 1853 de Fable 5.1.</p><p>En Humanity&apos;s Last Exam, utilizando herramientas, las puntuaciones son de 63,6 frente a 65,0.</p><p>Y en CursorBench, una de las pruebas de programaci&#xF3;n m&#xE1;s exigentes del conjunto, <a href="https://codigoencasa.com/">Opus 5</a> queda apenas tres puntos por detr&#xE1;s.</p><p>Desarrolladores de Hacker News se&#xF1;alan que Fable cuesta aproximadamente el doble que Opus.</p><p><strong>Pagar el doble por una diferencia de tres puntos en CursorBench no parece una decisi&#xF3;n estrat&#xE9;gica de producto. Es pagar una factura considerable por una mejora casi imperceptible.</strong></p><p>Donde Fable 5.1 realmente consigue diferenciarse es en investigaci&#xF3;n cient&#xED;fica y automatizaci&#xF3;n.</p><p>Si trabajas con agentes aut&#xF3;nomos que realizan investigaciones complejas durante per&#xED;odos prolongados, una mejora de 28 puntos en Terminal Bench Science representa un avance importante.</p><p>Pero si tu trabajo consiste principalmente en desarrollar operaciones <a href="https://codigoencasa.com/">CRUD</a> o endpoints convencionales, probablemente est&#xE9;s gastando mucho m&#xE1;s dinero del necesario.</p><h2 id="el-precio-el-cambio-m%C3%A1s-importante-no-est%C3%A1-donde-imaginas">El precio: el cambio m&#xE1;s importante no est&#xE1; donde imaginas</h2><h3 id="la-reducci%C3%B3n-del-costo-de-lectura-de-cach%C3%A9-es-la-verdadera-novedad">La reducci&#xF3;n del costo de lectura de cach&#xE9; es la verdadera novedad</h3><p>El precio de entrada permanece en 10 d&#xF3;lares por mill&#xF3;n de tokens.</p><p>El de salida contin&#xFA;a en 50 d&#xF3;lares por mill&#xF3;n.</p><p>Lo que s&#xED; cambi&#xF3; es el costo de lectura de cach&#xE9;, que pas&#xF3; de representar una d&#xE9;cima parte del precio de entrada a una cuadrag&#xE9;sima parte.</p><p>En t&#xE9;rminos concretos, baj&#xF3; de 1 d&#xF3;lar a 0,25 d&#xF3;lares.</p><p>Anthropic estima que esto puede generar un ahorro del 25 % en cargas de trabajo habituales y de hasta un 45 % en sistemas que utilizan agentes de manera intensiva, donde los prefijos almacenados en cach&#xE9; representan buena parte del consumo.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-10.png" class="kg-image" alt="Claude Fable 5.1 ya est&#xE1; disponible. La propia documentaci&#xF3;n de Anthropic te dice que no lo uses." loading="lazy" width="1100" height="429" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-10.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-10.png 1000w, https://codigoencasa.com/content/images/2026/10/image-10.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Estas estimaciones coinciden con los primeros resultados compartidos por profesionales del sector pocas horas despu&#xE9;s del lanzamiento.</p><p>Un equipo que ejecutaba evaluaciones afirm&#xF3; haber medido una reducci&#xF3;n aproximada del 30 % en el costo real por tarea.</p><p>Otro desarrollador calcul&#xF3; que, con una tasa de aciertos de cach&#xE9; del 95 %, el contexto utilizable antes de activar la compactaci&#xF3;n autom&#xE1;tica pr&#xE1;cticamente se duplica, pasando de 200.000 a 400.000 tokens.</p><p>Sin embargo, hay un detalle importante si utilizas <a href="https://codigoencasa.com/">Claude</a> mediante una suscripci&#xF3;n y no directamente a trav&#xE9;s de la API.</p><p>Los ahorros anunciados se aplican a los entornos donde el consumo se factura por tokens.</p><p>Varias personas suscritas a los planes Pro y Max preguntaron el d&#xED;a del lanzamiento si estos cambios ampliar&#xED;an sus l&#xED;mites de uso.</p><p>La interpretaci&#xF3;n del anuncio es que no.</p><p>Anthropic s&#xED; reinici&#xF3; las ventanas de uso de todas las cuentas, lo que ayud&#xF3; a suavizar el impacto de esta limitaci&#xF3;n.</p><h3 id="el-problema-que-anthropic-resolvi%C3%B3-solo-a-medias">El problema que Anthropic resolvi&#xF3; solo a medias</h3><p>Desde junio, el principal problema de Fable nunca ha sido su capacidad.</p><p>El verdadero inconveniente es que muchas veces no puedes utilizarlo, aunque creas que s&#xED;.</p><p>Los mecanismos de seguridad de Anthropic redirigen determinadas solicitudes consideradas de doble uso hacia un modelo <a href="https://codigoencasa.com/">Opus</a>.</p><p>Y para una cantidad considerable de desarrolladores, esta redirecci&#xF3;n ocurre constantemente.</p><p>El anuncio aborda directamente esta situaci&#xF3;n.</p><p>Ahora, las protecciones relacionadas con biolog&#xED;a se activan un 85 % menos en consultas benignas sobre biolog&#xED;a b&#xE1;sica y cuestiones m&#xE9;dicas.</p><p>Fable 5.1 tambi&#xE9;n puede identificar vulnerabilidades de software, una actividad que forma parte del trabajo defensivo en ciberseguridad.</p><p>Adem&#xE1;s, Anthropic asegura que quienes utilizan <a href="https://codigoencasa.com/">Claude Code</a> deber&#xED;an experimentar aproximadamente un 60 % menos de intervenciones de seguridad por sesi&#xF3;n.</p><p>Es una mejora importante.</p><p>Pero sigue sin ser la soluci&#xF3;n que esperaban los profesionales de ciberseguridad.</p><p>Las pruebas de penetraci&#xF3;n, la generaci&#xF3;n de exploits y el an&#xE1;lisis de vulnerabilidades en archivos binarios contin&#xFA;an siendo redirigidos a <a href="https://codigoencasa.com/">Opus</a>.</p><p>La conversaci&#xF3;n del d&#xED;a del lanzamiento en Hacker News revel&#xF3; una situaci&#xF3;n todav&#xED;a m&#xE1;s llamativa.</p><p>Un ingeniero de seguridad que hab&#xED;a pasado meses completando procesos de verificaci&#xF3;n de identidad, conocidos como KYC, y procedimientos de adquisici&#xF3;n para inscribir a su organizaci&#xF3;n en el Cyber Verification Program descubri&#xF3; que este programa no habilita el acceso a Fable.</p><p>Para conseguirlo, es necesario pertenecer a Project Glasswing, que proporciona acceso a Mythos.</p><p>Anthropic afirma que el <a href="https://codigoencasa.com/">Cyber</a> Verification Program incluir&#xE1; modelos de la clase Mythos en un futuro pr&#xF3;ximo.</p><p>El problema es que &#xAB;futuro pr&#xF3;ximo&#xBB; sigue siendo una expresi&#xF3;n bastante imprecisa.</p><p><strong>La observaci&#xF3;n que m&#xE1;s se repiti&#xF3; durante el lanzamiento no estuvo relacionada con la calidad del modelo, sino con personas que descubrieron que llevaban semanas creyendo que utilizaban Fable cuando, en realidad, sus solicitudes hab&#xED;an sido redirigidas silenciosamente a Opus.</strong></p><p>Un desarrollador estim&#xF3; que realmente estaba utilizando Fable aproximadamente el 20 % de las veces que pensaba estar haci&#xE9;ndolo.</p><p>Finalmente, decidi&#xF3; utilizar <a href="https://codigoencasa.com/">Opus</a> de forma predeterminada.</p><p>Otras personas compartieron experiencias completamente diferentes y afirmaron haber resuelto problemas complejos en un solo intento, con redirecciones ocasionales.</p><p>Las respuestas muestran un patr&#xF3;n que depende del &#xE1;mbito de trabajo.</p><p>El desarrollo web y la programaci&#xF3;n general rara vez activan estas restricciones.</p><p>En cambio, los proyectos relacionados con autenticaci&#xF3;n, seccomp, ingenier&#xED;a inversa o servicios financieros las activan con mucha m&#xE1;s frecuencia.</p><p>Si tu actividad pertenece a alguna de estas categor&#xED;as, las mejoras anunciadas en las pruebas de rendimiento pueden no llegar a beneficiarte.</p><p>Tambi&#xE9;n es importante considerar el contexto comercial.</p><p>Financial Times inform&#xF3; que Fable 5 hab&#xED;a registrado una demanda limitada entre clientes corporativos, mientras que las herramientas m&#xE1;s econ&#xF3;micas segu&#xED;an ganando terreno.</p><p>Ese es el escenario en el que <a href="https://codigoencasa.com/">Anthropic</a> presenta una actualizaci&#xF3;n cuyo cambio econ&#xF3;mico m&#xE1;s importante es, precisamente, una reducci&#xF3;n de precios.</p><h2 id="la-mitad-de-los-cambios-est%C3%A1n-relacionados-con-mecanismos-de-protecci%C3%B3n">La mitad de los cambios est&#xE1;n relacionados con mecanismos de protecci&#xF3;n</h2><p>Migrar de <code>claude-fable-5</code> a <code>claude-fable-5-1</code> introduce tres cambios que pueden afectar a las aplicaciones existentes.</p><p>Los tres funcionan, en la pr&#xE1;ctica, como mecanismos de protecci&#xF3;n frente a la destilaci&#xF3;n de modelos.</p><h3 id="1-el-uso-forzado-de-herramientas-devuelve-un-error-400">1. El uso forzado de herramientas devuelve un error 400</h3><p>Configurar <code>tool_choice</code> con el valor <code>any</code> o con el nombre de una herramienta espec&#xED;fica ahora provoca que la solicitud sea rechazada.</p><p>La explicaci&#xF3;n oficial de Anthropic es que forzar una llamada a herramientas omite el proceso de razonamiento y reduce la calidad de los argumentos generados.</p><p>Al mismo tiempo, este cambio bloquea una t&#xE9;cnica conocida que utilizaba una herramienta de razonamiento falsa para extraer directamente la cadena de pensamiento del modelo.</p><h3 id="2-los-bloques-de-razonamiento-quedan-vinculados-al-modelo-que-los-gener%C3%B3">2. Los bloques de razonamiento quedan vinculados al modelo que los gener&#xF3;</h3><p>Fable 5.1 puede leer bloques de razonamiento producidos por modelos anteriores.</p><p>Sin embargo, los modelos anteriores no pueden leer los bloques generados por <a href="https://codigoencasa.com/">Fable 5.1.</a></p><p>Cuando el modelo de destino no puede interpretar uno de estos bloques, se descarta silenciosamente.</p><p>La excepci&#xF3;n es utilizar un encabezado beta espec&#xED;fico que permite recibir informaci&#xF3;n sobre los bloques descartados.</p><h3 id="3-modificar-mensajes-anteriores-invalida-los-bloques-de-razonamiento">3. Modificar mensajes anteriores invalida los bloques de razonamiento</h3><p>Si modificas el prompt del sistema, el conjunto de herramientas o cualquier mensaje anterior de la conversaci&#xF3;n, la siguiente solicitud devuelve un error.</p><p>Las conversaciones deben construirse ahora de manera acumulativa: se pueden agregar mensajes nuevos, pero no modificar los anteriores.</p><p>Esta restricci&#xF3;n se aplica a las cuentas creadas a partir del 31 de agosto.</p><p>Las cuentas existentes est&#xE1;n exentas por el momento, aunque Anthropic afirma que la comprobaci&#xF3;n se extender&#xE1; a todas en futuras versiones de sus modelos.</p><p><a href="https://codigoencasa.com/">Claude Code</a>, claude.ai y Agent SDK gestionan autom&#xE1;ticamente este comportamiento.</p><p>Pero si tu aplicaci&#xF3;n construye manualmente el arreglo <code>messages</code>, tendr&#xE1;s que adaptar tu implementaci&#xF3;n.</p><p>Anthropic tambi&#xE9;n ha explicado los motivos detr&#xE1;s de estas decisiones.</p><p>En febrero, la compa&#xF1;&#xED;a identific&#xF3; m&#xE1;s de 16 millones de intercambios con Claude vinculados a campa&#xF1;as de destilaci&#xF3;n realizadas mediante aproximadamente 24.000 cuentas falsas.</p><p>La manipulaci&#xF3;n del contexto de conversaciones era una t&#xE9;cnica documentada para intentar extraer el razonamiento interno del modelo.</p><p>Bloquear este mecanismo tiene una justificaci&#xF3;n t&#xE9;cnica.</p><p>Sin embargo, tambi&#xE9;n es la segunda vez en tres meses que Anthropic introduce restricciones adicionales junto con mejoras de capacidad.</p><p>Y la comunidad de desarrolladores lo ha notado.</p><p>Una de las interpretaciones m&#xE1;s apoyadas del lanzamiento fue especialmente cr&#xED;tica: al menos la mitad de los cambios parecen estar destinados a impedir la destilaci&#xF3;n.</p><p>A esto se suma una nueva capa de procedencia del contenido.</p><p>Todas las salidas de texto de estos modelos incorporan ahora una marca de agua estad&#xED;stica de <a href="https://codigoencasa.com/">Anthropic</a>.</p><p>Seg&#xFA;n el anuncio, esta medida responde a los compromisos del C&#xF3;digo de Buenas Pr&#xE1;cticas de la Ley de Inteligencia Artificial de la Uni&#xF3;n Europea, al que Anthropic se adhiri&#xF3; en julio y que se aplica a los modelos lanzados despu&#xE9;s del 2 de agosto.</p><p>Las im&#xE1;genes y los videos incluyen credenciales C2PA firmadas digitalmente.</p><p>La API para detectar estas marcas se encuentra en una versi&#xF3;n preliminar privada, actualmente limitada a organismos reguladores, investigadores, verificadores de informaci&#xF3;n y organizaciones con obligaciones espec&#xED;ficas de cumplimiento normativo.</p><h2 id="el-avance-cient%C3%ADfico-del-que-casi-nadie-est%C3%A1-hablando">El avance cient&#xED;fico del que casi nadie est&#xE1; hablando</h2><p>Si dejamos a un lado los precios y las discusiones sobre restricciones de seguridad, aparece una de las partes m&#xE1;s interesantes de este lanzamiento: las aplicaciones cient&#xED;ficas.</p><p><a href="https://codigoencasa.com/">Mythos 5.1</a> recibi&#xF3; acceso a herramientas de c&#xF3;digo abierto para el dise&#xF1;o y plegamiento de prote&#xED;nas.</p><p>Su tarea consist&#xED;a en dise&#xF1;ar mol&#xE9;culas capaces de unirse a objetivos biol&#xF3;gicos espec&#xED;ficos, conocidas como <em>binders</em>.</p><p>Los dise&#xF1;os fueron enviados a dos organizaciones externas para su validaci&#xF3;n en laboratorio.</p><p>En tres objetivos, las afinidades de uni&#xF3;n fueron diez veces superiores a las mejores propuestas presentadas en las competiciones de dise&#xF1;o de prote&#xED;nas de Adaptyv Bio.</p><p>La tasa de &#xE9;xito en un conjunto de 12 objetivos se acerc&#xF3; al 50 %, frente a un promedio habitual del sector de entre el 10 % y el 15 %.</p><p>Por otro lado, <a href="https://codigoencasa.com/">Fable 5.1</a> entren&#xF3; una red neuronal utilizando datos de radar de la misi&#xF3;n Magellan, recopilados hace aproximadamente 30 a&#xF1;os.</p><p>El resultado fue un nuevo mapa de elevaci&#xF3;n que cubre un tercio de la superficie de Venus.</p><p>El modelo consigui&#xF3; identificar caracter&#xED;sticas geogr&#xE1;ficas con una resoluci&#xF3;n de entre 2 y 3 kil&#xF3;metros, frente a los 10 a 20 kil&#xF3;metros de las referencias anteriores.</p><p>Anthropic public&#xF3; este trabajo bajo una licencia Creative Commons, antes de las misiones VERITAS de la NASA y EnVision de la Agencia Espacial Europea.</p><p>Pero hay otro resultado que merece especial atenci&#xF3;n.</p><p><a href="https://codigoencasa.com/">Mythos 5.1</a> desarroll&#xF3; kernels personalizados para GPU que aceleraron hasta 2,5 veces la ejecuci&#xF3;n de siete modelos de c&#xF3;digo abierto relacionados con gen&#xF3;mica y prote&#xED;nas, manteniendo resultados id&#xE9;nticos.</p><p>Estas optimizaciones permitieron estimar una reducci&#xF3;n del costo de GPU de entre un 30 % y un 60 % en an&#xE1;lisis gen&#xF3;micos a gran escala.</p><p>Probablemente este sea uno de los avances m&#xE1;s importantes y menos comentados del anuncio.</p><p>Tradicionalmente, optimizar kernels de este nivel requiere semanas de trabajo por parte de equipos especializados en ingenier&#xED;a de rendimiento.</p><p>Para muchos laboratorios acad&#xE9;micos, ese esfuerzo resulta econ&#xF3;micamente inaccesible.</p><p><a href="https://codigoencasa.com/">Anthropic</a> afirma que tiene previsto publicar estas optimizaciones como c&#xF3;digo abierto.</p><p>Si se concreta, podr&#xED;a facilitar el acceso a capacidades de computaci&#xF3;n avanzada que hasta ahora estaban fuera del alcance de numerosos equipos de investigaci&#xF3;n.</p><h2 id="%C2%BFpara-qui%C3%A9n-tiene-sentido-fable-51">&#xBF;Para qui&#xE9;n tiene sentido Fable 5.1?</h2><p><strong>Fable 5.1 representa una actualizaci&#xF3;n valiosa para un grupo espec&#xED;fico de usuarios, pero puede resultar poco relevante para la mayor&#xED;a de quienes est&#xE1;n siguiendo este lanzamiento.</strong></p><p>La decisi&#xF3;n de migrar deber&#xED;a depender de las caracter&#xED;sticas reales de tu trabajo.</p><h3 id="cu%C3%A1ndo-s%C3%AD-conviene-cambiar">Cu&#xE1;ndo s&#xED; conviene cambiar</h3><p>Si ejecutas sesiones prolongadas con agentes de <a href="https://codigoencasa.com/">IA </a>y tienes tasas elevadas de aciertos de cach&#xE9;, la reducci&#xF3;n de los costos de lectura puede representar un ahorro de entre el 25 % y el 45 %.</p><p>Es una diferencia que, acumulada diariamente, puede tener un impacto considerable.</p><p>Tambi&#xE9;n merece la pena considerar la migraci&#xF3;n si trabajas en investigaci&#xF3;n cient&#xED;fica o automatizaci&#xF3;n de procesos complejos con m&#xFA;ltiples etapas.</p><p>En estos escenarios, las diferencias en las pruebas de rendimiento son lo suficientemente grandes como para traducirse en mejoras pr&#xE1;cticas.</p><p>Cognition anunci&#xF3; el mismo d&#xED;a del lanzamiento que trasladar&#xED;a parte del tr&#xE1;fico de Opus utilizado en Devin hacia Fable.</p><p>El motivo principal fue el nuevo precio de cach&#xE9;, que permite utilizar un modelo de esta categor&#xED;a para revisiones de c&#xF3;digo con una estructura de costos m&#xE1;s viable.</p><h3 id="cu%C3%A1ndo-no-conviene-cambiar">Cu&#xE1;ndo no conviene cambiar</h3><p>Si tu trabajo est&#xE1; relacionado con seguridad inform&#xE1;tica, autenticaci&#xF3;n, ingenier&#xED;a inversa u otras actividades que activan los clasificadores de seguridad, la migraci&#xF3;n puede no ofrecerte los beneficios que esperas.</p><p>Seguir&#xE1;s pagando las tarifas de Fable mientras determinadas solicitudes terminan siendo procesadas por <a href="https://codigoencasa.com/">Opus</a>.</p><p>Tampoco parece necesario cambiar si tu actividad se centra en desarrollo de software general.</p><p>En la mayor&#xED;a de las pruebas, Opus 5 se mantiene a pocos puntos de <a href="https://codigoencasa.com/">Fable 5.1</a>, pero con un costo aproximadamente dos veces menor.</p><p>Y si tienes previsto migrar sistemas basados en agentes, conviene revisar cuidadosamente las notas de comportamiento antes de realizar cualquier cambio.</p><p>Fable 5.1 presenta algunas diferencias respecto a <a href="https://codigoencasa.com/">Fable 5</a> que pueden afectar directamente al consumo de tokens y al funcionamiento de tus aplicaciones.</p><p>Por ejemplo:</p><ul><li>Agrupa las llamadas paralelas a herramientas de manera menos consistente.</li><li>Genera menos actualizaciones sobre el progreso de las tareas.</li><li>Recurre con mayor frecuencia a la informaci&#xF3;n almacenada en su conocimiento interno cuando opera con un nivel de esfuerzo bajo.</li><li>Tiende a reescribir archivos completos en situaciones donde bastar&#xED;a con modificar una secci&#xF3;n espec&#xED;fica.</li></ul><p>Cada uno de estos comportamientos puede aumentar el consumo de tokens.</p><p>Y cuando trabajas con aplicaciones en producci&#xF3;n, peque&#xF1;as diferencias repetidas miles de veces pueden convertirse en costos importantes.</p><h3 id="la-recomendaci%C3%B3n-m%C3%A1s-importante-viene-de-la-propia-anthropic">La recomendaci&#xF3;n m&#xE1;s importante viene de la propia Anthropic</h3><p>La documentaci&#xF3;n oficial propone un enfoque bastante sencillo:</p><p>Comienza con <a href="https://codigoencasa.com/">Opus 5</a> y considera cambiar a un modelo superior &#xFA;nicamente cuando tus evaluaciones, incluso utilizando un nivel de esfuerzo alto, demuestren que el rendimiento resulta insuficiente.</p><p>Es una recomendaci&#xF3;n poco habitual para una compa&#xF1;&#xED;a que acaba de presentar sus modelos m&#xE1;s avanzados.</p><p>Pero tambi&#xE9;n es, posiblemente, la conclusi&#xF3;n m&#xE1;s &#xFA;til de todo este lanzamiento.</p><p><strong>No necesitas utilizar el modelo m&#xE1;s potente disponible. Necesitas utilizar el modelo que resuelva tu problema con la calidad adecuada y el menor costo posible.</strong></p><p>La diferencia entre ambas decisiones puede parecer peque&#xF1;a cuando realizas unas cuantas consultas.</p><p>Cuando construyes productos, automatizaciones o sistemas de inteligencia artificial que funcionan todos los d&#xED;as, esa diferencia puede determinar la viabilidad econ&#xF3;mica de toda tu operaci&#xF3;n.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/11MJ-dq0408?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Web profesional con GoHighLevel sin saber dise&#xF1;ar (paso a paso)"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Por qué cambiaría Claude por Qwen3.8-Max]]></title><description><![CDATA[La propuesta se puede resumir en una sola idea: según las pruebas de Artificial Analysis, una tarea con Fable cuesta 3,14 dólares, mientras que con Qwen cuesta 0,91 dólares.]]></description><link>https://codigoencasa.com/por-que-cambiaria-claude-por-qwen3-8-max/</link><guid isPermaLink="false">6ad628b158d2754b02976c86</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 26 Oct 2026 20:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/daniil-silantev-g-_0cain0bY-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/daniil-silantev-g-_0cain0bY-unsplash-transformed.jpeg" alt="Por qu&#xE9; cambiar&#xED;a Claude por Qwen3.8-Max"><p>Alibaba escondi&#xF3; la parte m&#xE1;s interesante del lanzamiento de Qwen3.8-Max en una p&#xE1;gina de documentaci&#xF3;n que pas&#xF3; casi desapercibida: las instrucciones para conectar Claude Code, el propio entorno de programaci&#xF3;n de Anthropic, directamente con Qwen.</p><p>Pi&#xE9;nsalo por un momento. Anthropic desarroll&#xF3; el entorno de programaci&#xF3;n, Alibaba replic&#xF3; la API que funciona por debajo y ahora <a href="https://codigoencasa.com/">Claude Code</a> puede ejecutar Qwen sin notar la diferencia. Y lo m&#xE1;s curioso es que esto funciona en ambas direcciones: durante el lanzamiento, Alibaba utiliz&#xF3; el propio Claude Code para obtener las puntuaciones de Fable 5 que incluy&#xF3; en su tabla comparativa.</p><p>La propuesta se puede resumir en una sola idea: seg&#xFA;n las pruebas de Artificial Analysis, una tarea con Fable cuesta 3,14 d&#xF3;lares, mientras que con Qwen cuesta 0,91 d&#xF3;lares. Eso significa que, por el precio de un intento con Fable, puedes realizar tres intentos con <a href="https://codigoencasa.com/">Qwen</a>. Y cuando trabajas con tareas que pueden evaluarse mediante pruebas automatizadas, tres intentos suelen ofrecer mejores resultados.</p><p>&#xBF;Quieres probarlo ahora mismo? Abre el archivo <code>~/.claude/settings.json</code> e introduce esta configuraci&#xF3;n:</p><pre><code>{
  &quot;env&quot;: {
    &quot;ANTHROPIC_BASE_URL&quot;: &quot;https://token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic&quot;,
    &quot;ANTHROPIC_AUTH_TOKEN&quot;: &quot;your-model-studio-key&quot;,
    &quot;ANTHROPIC_MODEL&quot;: &quot;qwen3.8-max&quot;
  }
}</code></pre><p>Solo necesitas tres valores para cambiar el modelo que funciona dentro de Claude Code. As&#xED; de sencillo.</p><p>Cambias la URL base, a&#xF1;ades tu clave de <a href="https://codigoencasa.com/">API</a> e indicas el modelo Qwen que quieres utilizar. De repente, el entorno de programaci&#xF3;n que usas todos los d&#xED;as est&#xE1; trabajando con un modelo de mezcla de expertos (Mixture of Experts, MoE) de 2,4 billones de par&#xE1;metros, con un precio de entrada cinco veces menor.</p><p>Y sigue siendo, literalmente, <a href="https://codigoencasa.com/">Claude Code</a>.</p><p>Hace unos meses, yo misma ten&#xED;a mis dudas sobre este tipo de afirmaciones. No confiaba demasiado en los sistemas de orquestaci&#xF3;n que combinan varios modelos, porque normalmente el mejor modelo individual termina ganando cuando comparas precisi&#xF3;n y coste.</p><p>Pero aqu&#xED; no estamos hablando de un sistema que decide entre diferentes modelos. Estamos hablando de un &#xFA;nico modelo que realiza varios intentos para mejorar sus propios resultados.</p><p>Y funciona por una raz&#xF3;n puramente matem&#xE1;tica.</p><h2 id="las-cuentas-detr%C3%A1s-del-precio">Las cuentas detr&#xE1;s del precio</h2><p>Primero, veamos los precios por mill&#xF3;n de tokens:</p><!--kg-card-begin: html--><table><tbody><tr><th><p><span>Modelo</span></p></th><th><p><span>Entrada</span></p></th><th><p><span>Salida</span></p></th><th><p><span>Entrada </span><span>en </span><span>cach&#xE9;</span></p></th></tr><tr><td><p><span>Qwen3.8-Max</span></p></td><td><p><span>2,00 </span><span>USD</span></p></td><td><p><span>6,00 </span><span>USD</span></p></td><td><p><span>0,25 </span><span>USD</span></p></td></tr><tr><td><p><span>Claude </span><span>Fable </span><span>5</span></p></td><td><p><span>10,00 </span><span>USD</span></p></td><td><p><span>50,00 </span><span>USD</span></p></td><td><p><span>&#x2248;1,00 </span><span>USD </span><span>(90 </span><span>% </span><span>de </span><span>descuento)</span></p></td></tr><tr><td><p><span>GPT-5.6 </span><span>Sol</span></p></td><td><p><span>4,00 </span><span>USD</span></p></td><td><p><span>20,00 </span><span>USD</span></p></td><td><p><span>0,50 </span><span>USD</span></p></td></tr><tr><td><p><span>Gemini </span><span>3.1 </span><span>Pro</span></p></td><td><p><span>2,00 </span><span>USD</span></p></td><td><p><span>12,00 </span><span>USD</span></p></td><td><p><span>0,20 </span><span>USD</span></p></td></tr></tbody></table><!--kg-card-end: html--><p>Las publicaciones de la semana del lanzamiento promet&#xED;an un descuento enorme: cinco veces menos en tokens de entrada y 8,3 veces menos en tokens de salida.</p><p>En la pr&#xE1;ctica, la diferencia real se acerca m&#xE1;s a tres veces.</p><p>Artificial Analysis evalu&#xF3; todos los modelos utilizando exactamente el mismo conjunto de pruebas y public&#xF3; el coste total: 1.532 d&#xF3;lares para Qwen3.8-Max frente a 5.455 d&#xF3;lares para Fable 5.</p><p>Por tarea, eso representa 0,91 d&#xF3;lares frente a 3,14 d&#xF3;lares.</p><p>La diferencia se reduce porque <a href="https://codigoencasa.com/">Qwen</a> genera mucho m&#xE1;s texto.</p><p>Con exactamente la misma carga de trabajo, produjo 150 millones de tokens de salida, mientras que Fable necesit&#xF3; 83 millones. Y que los tokens sean m&#xE1;s baratos deja de ser tan relevante cuando utilizas casi el doble.</p><p>Kilo Code encontr&#xF3; una proporci&#xF3;n similar en su propia prueba de creaci&#xF3;n de interfaces de usuario, compuesta por diez tareas: 3,05 d&#xF3;lares para Qwen frente a 8,44 d&#xF3;lares para Fable.</p><p>Por tanto, la comparaci&#xF3;n real es bastante sencilla:</p><p>Renuncias a un intento con Fable y, por el mismo presupuesto, puedes realizar tres intentos con <a href="https://codigoencasa.com/">Qwen</a> para resolver la misma tarea.</p><h2 id="las-pruebas-de-rendimiento">Las pruebas de rendimiento</h2><p>Las tablas comparativas que aparecen durante el lanzamiento de un modelo merecen un an&#xE1;lisis riguroso. Veamos qu&#xE9; resultados realmente se sostienen.</p><p>En el Intelligence Index de Artificial Analysis, Fable 5 obtiene 62 puntos y Qwen alcanza 58.</p><p>La diferencia es de solo cuatro puntos, mientras que el coste de Qwen representa aproximadamente un tercio.</p><p>En la clasificaci&#xF3;n Frontend Code de Arena.ai, donde las personas votan sin conocer qu&#xE9; modelo gener&#xF3; cada resultado visual, <a href="https://codigoencasa.com/">Qwen</a> debut&#xF3; en el cuarto puesto con 1.668 puntos Elo y lleg&#xF3; a superar a Fable 5.</p><p>La tabla de lanzamiento de Alibaba tambi&#xE9;n presenta varias victorias adicionales, entre ellas Terminal-Bench 2.1, OSWorld-Verified y pruebas de seguimiento de instrucciones.</p><p>Pero el dato m&#xE1;s interesante es precisamente la derrota que la propia Alibaba reconoce.</p><p>En SWE-bench Pro, una evaluaci&#xF3;n de ingenier&#xED;a de software de nivel profesional que utiliza repositorios reales, Fable obtuvo 80,0 puntos frente a los 67,7 de <a href="https://codigoencasa.com/">Qwen</a>.</p><p>Cuando una empresa presenta una diapositiva en la que su competidor aparece m&#xE1;s de 12 puntos por delante, conviene prestar especial atenci&#xF3;n a ese resultado.</p><p>El patr&#xF3;n es bastante consistente en las distintas evaluaciones.</p><p>Fable es m&#xE1;s inteligente, especialmente en trabajos de ingenier&#xED;a largos, complejos y distribuidos entre varios repositorios.</p><p>Qwen, por su parte, ofrece capacidades cercanas a las de los modelos m&#xE1;s avanzados, pero con un descuento sostenido de aproximadamente tres veces.</p><p>Ninguno de los dos proveedores discute realmente esta diferencia. Simplemente eligen destacar los resultados que mejor respaldan su propuesta.</p><figure class="kg-card kg-image-card"><img src="https://images.openai.com/static-rsc-4/JZyxU2pFNAl-MBHibPDxVFda5k3QeI46oofkq8RwZAkfq_OsifU2cGjiXuPqKaEGCeb_EEiYcBUKDWJDZa4IBk5q9zP-2LaFGl_d-IeCrYAHSWKvLrm618plaBCpxrQIRRjrPzq1-Fmb7ZSFlgs_-xUbjwJowFla3LMvEwQVjVw?purpose=inline" class="kg-image" alt="Por qu&#xE9; cambiar&#xED;a Claude por Qwen3.8-Max" loading="lazy"></figure><p><a href="https://artificialanalysis.ai/articles/artificial-analysis-intelligence-index-v4-1?utm_source=chatgpt.com">artificialanalysis.ai</a></p><p>Una diferencia de cuatro puntos en inteligencia y una diferencia de aproximadamente tres d&#xF3;lares por tarea. Datos: Artificial Analysis, agosto de 2026.</p><h2 id="por-qu%C3%A9-sigue-teniendo-sentido-utilizar-fable-5">Por qu&#xE9; sigue teniendo sentido utilizar Fable 5</h2><p>El modelo m&#xE1;s caro contin&#xFA;a siendo realmente mejor. Y en algunas situaciones, la diferencia es considerable.</p><p>En la comparaci&#xF3;n directa realizada por <a href="https://codigoencasa.com/">Kilo Code</a>, Fable resolvi&#xF3; correctamente las diez tareas en el primer intento, con un promedio de aproximadamente dos minutos por tarea.</p><p>Qwen, en cambio, necesit&#xF3; repetir tres de esas tareas y tard&#xF3; casi ocho minutos de media.</p><p>Esto significa que el modelo m&#xE1;s econ&#xF3;mico result&#xF3; ser 3,6 veces m&#xE1;s lento por cada tarea completada.</p><p>Adem&#xE1;s, en la &#xFA;nica prueba que inclu&#xED;a restricciones estrictas, solo Fable respet&#xF3; completamente las especificaciones.</p><p>Qwen ignor&#xF3; una limitaci&#xF3;n expl&#xED;cita que establec&#xED;a un radio m&#xE1;ximo de ocho p&#xED;xeles para las esquinas.</p><p>Las evaluaciones de referencia indicaban que <a href="https://codigoencasa.com/">Qwen</a> segu&#xED;a mejor las instrucciones, pero las pruebas pr&#xE1;cticas mostraron lo contrario.</p><p>Si una persona del equipo de ingenier&#xED;a est&#xE1; sentada frente a la pantalla, supervisando lo que ocurre en la terminal, su tiempo se convierte en el recurso m&#xE1;s caro.</p><p>En ese escenario, el modelo que termina correctamente en el primer intento puede ser la opci&#xF3;n m&#xE1;s econ&#xF3;mica, independientemente de cu&#xE1;nto cuesten los tokens.</p><p>Esa raz&#xF3;n, por s&#xED; sola, puede justificar utilizar <a href="https://codigoencasa.com/">Fable</a>.</p><p>Sin embargo, existe un principio de escalabilidad que cambia por completo el an&#xE1;lisis.</p><h2 id="los-monos-tienen-un-estudio-cient%C3%ADfico">Los monos tienen un estudio cient&#xED;fico</h2><p>En 2024, un grupo de investigadores public&#xF3; un trabajo titulado Large Language Monkeys, en el que analizaron qu&#xE9; ocurre cuando generamos muchas respuestas diferentes utilizando el mismo modelo.</p><p>Descubrieron que el rendimiento mejora siguiendo una relaci&#xF3;n aproximadamente logar&#xED;tmica-lineal a medida que aumenta el n&#xFA;mero de intentos.</p><p><a href="https://codigoencasa.com/">DeepSeek-Coder-V2-Instruct</a> consigui&#xF3; resolver el 15,9 % de los problemas de SWE-bench Lite en el primer intento.</p><p>Pero cuando se le permitieron 250 intentos, alcanz&#xF3; una tasa de resoluci&#xF3;n del 56 %, superando los mejores resultados de un solo intento disponibles en aquel momento.</p><p>Incluso con apenas cinco muestras, el modelo m&#xE1;s econ&#xF3;mico consegu&#xED;a superar a un &#xFA;nico intento de algunos modelos de frontera, y lo hac&#xED;a con un coste menor.</p><p>Investigaciones posteriores continuaron confirmando este patr&#xF3;n: un modelo m&#xE1;s peque&#xF1;o que dispone de mayor capacidad de procesamiento durante la fase de resoluci&#xF3;n puede superar a otro 14 veces m&#xE1;s grande cuando ambos trabajan con presupuestos equivalentes.</p><p>Adem&#xE1;s, pasar de uno a cuatro intentos puede aumentar las tasas de &#xE9;xito aproximadamente un 50 %.</p><p>Ese es el verdadero secreto: un mismo modelo que genera m&#xFA;ltiples soluciones para un problema.</p><p>Y cuando puedes obtener tres respuestas de <a href="https://codigoencasa.com/">Qwen</a> por el precio de una de Fable, entras directamente en un escenario especialmente interesante.</p><p>Imagina dos personas jugando a los dardos.</p><p>Una tiene una punter&#xED;a excelente, pero solo dispone de un lanzamiento.</p><p>La otra tiene una punter&#xED;a algo peor, pero puede lanzar tres veces.</p><p>En muchos casos, quien dispone de tres oportunidades terminar&#xE1; consiguiendo un mejor resultado, porque puede conservar los aciertos y descartar los errores.</p><p>Pero hay un detalle importante.</p><p>Necesitas poder ver d&#xF3;nde han ca&#xED;do los dardos.</p><h2 id="lo-que-dicen-las-condiciones-de-este-enfoque">Lo que dicen las condiciones de este enfoque</h2><p>La mejora de rendimiento mediante m&#xFA;ltiples intentos solo funciona cuando existe alg&#xFA;n mecanismo independiente capaz de evaluar los resultados.</p><p>Por ejemplo, una bater&#xED;a de pruebas automatizadas, un <a href="https://codigoencasa.com/">compilador</a> o un error que pueda reproducirse de manera consistente.</p><p>Si eliminas esas comprobaciones, toda la teor&#xED;a pierde su fundamento.</p><p>Y las investigaciones son bastante claras al respecto: aumentar la capacidad de procesamiento sin verificar los resultados es una forma de desperdiciar dinero.</p><p>Adem&#xE1;s, cuando el sistema de verificaci&#xF3;n tiene errores, los falsos positivos terminan acumul&#xE1;ndose.</p><p>Tener infinitos monos escribiendo con un &#xE1;rbitro incapaz de distinguir la calidad solo significa que acabar&#xE1;s aceptando cualquier resultado como si fuera una obra de Shakespeare.</p><p>Existe un segundo problema.</p><p>Los errores de un mismo modelo suelen estar correlacionados.</p><p>Si un modelo tiene dificultades para comprender una determinada categor&#xED;a de problemas, realizar 250 intentos no garantiza que consiga resolverlos.</p><p>Y la distancia entre &#xAB;uno de mis intentos fue correcto&#xBB; y &#xAB;entregu&#xE9; la soluci&#xF3;n correcta&#xBB; depende completamente de la calidad del sistema de verificaci&#xF3;n.</p><p>Una bater&#xED;a de pruebas poco fiable no solo deja pasar errores. Tambi&#xE9;n puede descartar soluciones que realmente funcionaban.</p><p>Por tanto, realizar tres intentos resulta ventajoso cuando se cumplen determinadas condiciones: la tarea dispone de una comprobaci&#xF3;n objetiva y econ&#xF3;mica, el modelo tiene capacidad para comprender el problema y el tiempo total de ejecuci&#xF3;n no es una limitaci&#xF3;n importante.</p><h2 id="las-limitaciones-que-debes-conocer">Las limitaciones que debes conocer</h2><p>Hay varios aspectos adicionales que los precios de las <a href="https://codigoencasa.com/">API</a> no muestran.</p><p>Fable 5 te hace esperar.</p><p>Su tiempo mediano hasta generar el primer token es de 126 segundos, porque realiza un proceso de razonamiento interno antes de comenzar a escribir.</p><p><a href="https://codigoencasa.com/">Qwen</a>, en cambio, empieza a generar respuestas en aproximadamente 2,7 segundos.</p><p>As&#xED; que el modelo m&#xE1;s inteligente puede dejarte mirando una terminal vac&#xED;a durante dos minutos y luego terminar antes.</p><p>Mientras tanto, el modelo m&#xE1;s econ&#xF3;mico empieza casi inmediatamente, pero genera respuestas m&#xE1;s largas y necesita m&#xE1;s tiempo para completar el trabajo.</p><p>T&#xFA; decides qu&#xE9; tipo de espera prefieres.</p><p>Alibaba tambi&#xE9;n establece un l&#xED;mite de 15.000 solicitudes por minuto para toda la cuenta, no para cada clave de API.</p><p>Esto significa que una estrategia basada en generar m&#xFA;ltiples respuestas y seleccionar la mejor <a href="https://codigoencasa.com/">(best-of-N)</a> puede alcanzar ese l&#xED;mite r&#xE1;pidamente.</p><p>Otro aspecto importante es la ubicaci&#xF3;n de la infraestructura.</p><p>El endpoint funciona desde Singapur, en infraestructura propiedad de una empresa china.</p><p>Esto introduce consideraciones regulatorias y de cumplimiento normativo que pueden impedir utilizar esta alternativa en sectores como las finanzas, la salud o la administraci&#xF3;n p&#xFA;blica.</p><p>Tambi&#xE9;n hay que tener cuidado con la expresi&#xF3;n pesos abiertos (open weights).</p><p>Alibaba public&#xF3; los pesos del modelo de 2,4 billones de par&#xE1;metros, pero el lanzamiento incluye algunas condiciones.</p><p>El modelo utiliza una licencia personalizada, solo admite texto y necesita aproximadamente un terabyte de memoria para cargarse.</p><p>No estamos hablando de algo que puedas ejecutar f&#xE1;cilmente en una MacBook.</p><p>Por &#xFA;ltimo, hay una limitaci&#xF3;n t&#xE9;cnica importante: <a href="https://codigoencasa.com/">Claude Code</a> fue dise&#xF1;ado para trabajar con Claude.</p><p>Cuando lo conectas a <a href="https://codigoencasa.com/">Qwen</a>, pierdes algunas capacidades, como la posibilidad de forzar el uso de determinadas herramientas. El almacenamiento en cach&#xE9; tambi&#xE9;n se comporta de manera diferente.</p><p>En general, muchas funciones siguen trabajando correctamente, pero la experiencia no es exactamente la misma.</p><h2 id="c%C3%B3mo-organizo-mis-tareas-entre-ambos-modelos">C&#xF3;mo organizo mis tareas entre ambos modelos</h2><p>A septiembre de 2026, esta es la manera en que distribuyo personalmente mis tareas.</p><p>Qwen se encarga de los trabajos en los que puedo comprobar f&#xE1;cilmente el resultado.</p><p>Por ejemplo, refactorizaciones por lotes respaldadas por pruebas automatizadas, scripts de migraci&#xF3;n, iteraciones de interfaces de usuario en las que puedo verificar visualmente el resultado y cualquier proceso que pueda ejecutarse durante la noche.</p><p>En estos casos, el tiempo de ejecuci&#xF3;n no representa un problema importante y disponer de un presupuesto tres veces m&#xE1;s eficiente significa poder realizar tres intentos para cada dificultad relevante.</p><p><a href="https://codigoencasa.com/">Fable 5</a>, en cambio, se encarga de los trabajos donde una decisi&#xF3;n incorrecta puede pasar desapercibida hasta que corregirla resulta costoso.</p><p>Aqu&#xED; incluyo tareas de ingenier&#xED;a que abarcan varios repositorios, decisiones de arquitectura sin pruebas capaces de detectar errores, especificaciones complejas y cualquier situaci&#xF3;n donde una persona deba identificar manualmente un fallo antes de que pueda iniciarse un nuevo intento.</p><p>Elegir un modelo diferente para cada tarea es, en esencia, una forma de enrutamiento.</p><p>Y anteriormente he defendido que un sistema de enrutamiento que toma decisiones equivocadas puede terminar siendo peor que pagar directamente por el mejor modelo.</p><p>Pero aqu&#xED; existe una diferencia fundamental.</p><p>No necesitas adivinar.</p><p>Solo tienes que observar la tarea y preguntarte si dispone de una bater&#xED;a de pruebas capaz de verificar el resultado.</p><h2 id="la-auditor%C3%ADa-que-deber%C3%ADas-realizar">La auditor&#xED;a que deber&#xED;as realizar</h2><p>Antes de cambiar de modelo, conviene revisar algunos aspectos de tu trabajo.</p><p>- Cuenta tus pruebas. Revisa las ejecuciones de tus agentes durante el &#xFA;ltimo mes y calcula cu&#xE1;ntas terminaron con una bater&#xED;a de pruebas superada correctamente. Esa proporci&#xF3;n representa el tipo de tareas que podr&#xED;as asignar a Qwen.</p><p>- Supervisa los tokens de salida. Si Qwen genera m&#xE1;s del doble de tokens que Fable para tu carga de trabajo, el ahorro puede desaparecer.</p><p>- Calcula cu&#xE1;nto vale tu tiempo. Las sesiones interactivas necesitan modelos capaces de resolver correctamente los problemas en el primer intento. Los procesos desatendidos tienen otras prioridades.</p><p>- Comprueba los requisitos de cumplimiento normativo. &#xBF;Puedes procesar tus datos en Singapur? Si la respuesta es negativa, no tiene sentido continuar con esta alternativa.</p><p>- Realiza una comparaci&#xF3;n pr&#xE1;ctica. Prueba ambos modelos con tres tareas reales de tu propio repositorio antes de migrar cualquier proceso.</p><p>La analog&#xED;a de los dardos resume perfectamente la decisi&#xF3;n.</p><p>Tres intentos econ&#xF3;micos para resolver un m&#xF3;dulo que cuenta con buenas pruebas automatizadas pueden representar una excelente oportunidad de ahorro.</p><p>Pero tres intentos econ&#xF3;micos para dise&#xF1;ar una arquitectura que nadie puede verificar no son m&#xE1;s que tres suposiciones.</p><p>&#xBF;C&#xF3;mo distribuir&#xED;as tus tareas entre estos dos modelos?</p><p>Cuenta cu&#xE1;ntas de tus tareas tienen resultados que puedes verificar objetivamente y comparte ese n&#xFA;mero.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/11MJ-dq0408?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Web profesional con GoHighLevel sin saber dise&#xF1;ar (paso a paso)"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Por qué he dejado de usar ChatGPT para todo (y qué uso en su lugar)]]></title><description><![CDATA[Por ejemplo, tengo un prompt que revisa y corrige mis guías, pero que también muestra los cambios realizados. Las eliminaciones deben aparecer en rojo (con el texto tachado) y las inserciones en azul.]]></description><link>https://codigoencasa.com/por-que-he-dejado-de-usar-chatgpt-para-todo-y-que-uso-en-su-lugar/</link><guid isPermaLink="false">6ad9fcb358d2754b029776a7</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Fri, 23 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/enfocus-collective--IZ0wYhJj4g-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/enfocus-collective--IZ0wYhJj4g-unsplash-transformed.jpeg" alt="Por qu&#xE9; he dejado de usar ChatGPT para todo (y qu&#xE9; uso en su lugar)"><p>En 2025, comenc&#xE9; a trasladar algunos de mis proyectos de <a href="https://codigoencasa.com/">ChatGPT a Claude</a> y Gemini.</p><p>Y no soy la &#xFA;nica persona que lo est&#xE1; haciendo.</p><p>&#xA1;La participaci&#xF3;n de ChatGPT en el tr&#xE1;fico web ha ca&#xED;do del 86,7 % al 64,5 % en los &#xFA;ltimos 12 meses!</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-4.png" class="kg-image" alt="Por qu&#xE9; he dejado de usar ChatGPT para todo (y qu&#xE9; uso en su lugar)" loading="lazy" width="870" height="692" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-4.png 600w, https://codigoencasa.com/content/images/2026/10/image-4.png 870w" sizes="(min-width: 720px) 720px"></figure><p>No creo que las personas est&#xE9;n abandonando <a href="https://codigoencasa.com/">ChatGPT</a> por completo (yo tampoco lo he hecho).</p><p>Lo que est&#xE1; ocurriendo es que quienes m&#xE1;s utilizan la inteligencia artificial est&#xE1;n descubriendo que otras herramientas, como Gemini y Claude, son mejores que ChatGPT en determinadas &#xE1;reas.</p><p>En esta gu&#xED;a compartir&#xE9; cu&#xE1;les son los mejores modelos de IA para diferentes casos de uso. Al terminar, comprender&#xE1;s por qu&#xE9; muchas personas est&#xE1;n empezando a utilizar otras herramientas de inteligencia artificial.</p><p>Aqu&#xED; tienes un resumen r&#xE1;pido:</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-5.png" class="kg-image" alt="Por qu&#xE9; he dejado de usar ChatGPT para todo (y qu&#xE9; uso en su lugar)" loading="lazy" width="1100" height="1146" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-5.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-5.png 1000w, https://codigoencasa.com/content/images/2026/10/image-5.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Leyenda: Mejor = &#x2B50; | Bueno = &#x2705; | No = &#x274C;</p><h2 id="seguimiento-de-instrucciones">Seguimiento de instrucciones</h2><p>He probado mis mejores prompts en <a href="https://codigoencasa.com/">ChatGPT</a>, Claude y Gemini.</p><p>Claude es la herramienta que mejor sigue mis instrucciones, incluso despu&#xE9;s de los lanzamientos de GPT-5.2 y Gemini 3. Es capaz de respetar cada detalle, incluso cuando trabajo con prompts largos.</p><p>Por ejemplo, tengo un prompt que revisa y corrige mis gu&#xED;as, pero que tambi&#xE9;n muestra los cambios realizados. Las eliminaciones deben aparecer en rojo (con el texto tachado) y las inserciones en azul.</p><p>Aqu&#xED; tienes una comparaci&#xF3;n entre Claude y ChatGPT.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-6.png" class="kg-image" alt="Por qu&#xE9; he dejado de usar ChatGPT para todo (y qu&#xE9; uso en su lugar)" loading="lazy" width="1100" height="701" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-6.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-6.png 1000w, https://codigoencasa.com/content/images/2026/10/image-6.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Claude resalt&#xF3; correctamente las eliminaciones y las inserciones de texto, mientras que ChatGPT no lo hizo bien.</p><p>Tambi&#xE9;n ped&#xED; una &#xAB;edici&#xF3;n ligera que conservara mi intenci&#xF3;n y mi estilo&#xBB;. Claude sigui&#xF3; mis instrucciones, mientras que <a href="https://codigoencasa.com/">ChatGPT</a>, en algunos casos, cambi&#xF3; completamente mis frases.</p><p>Este es solo un ejemplo de un prompt. Tengo muchos otros en los que Claude demuestra ser muy superior a ChatGPT y Gemini cuando se trata de seguir instrucciones.</p><h2 id="an%C3%A1lisis-de-audio-y-video">An&#xE1;lisis de audio y video</h2><p>Seg&#xFA;n mi experiencia, <a href="https://codigoencasa.com/">Gemini</a> 3 es la mejor herramienta para analizar audio y video.</p><p>Le proporcion&#xE9; a Gemini un video en el que aparec&#xED;a haciendo ejercicios en el gimnasio, y me ofreci&#xF3; recomendaciones basadas en lo que pod&#xED;a observar.</p><p>Tambi&#xE9;n le compart&#xED; una grabaci&#xF3;n de audio hablando en ingl&#xE9;s (no soy hablante nativa de ese idioma), y me dio comentarios sobre mi pronunciaci&#xF3;n y los aspectos que necesitaba mejorar.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/fR4ys9L22_Y?start=10&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Analyze Your Pickleball Video With Gemini 3 Pro"></iframe></figure><p>ChatGPT funciona bien analizando videos, aunque es m&#xE1;s lento que <a href="https://codigoencasa.com/">Gemini</a>, pero no me ha funcionado para analizar audio.</p><p>Sub&#xED; grabaciones de audio y solicit&#xE9; su transcripci&#xF3;n y an&#xE1;lisis, pero recib&#xED; esta respuesta:</p><p>&#xAB;No puedo escuchar el audio ni ejecutar un modelo adecuado de reconocimiento de voz&#xBB;.</p><p>Sin embargo, esto podr&#xED;a cambiar con futuras actualizaciones.</p><h2 id="capacidades-de-los-agentes-de-ia">Capacidades de los agentes de IA</h2><p>Para este apartado, evaluar&#xE9; los agentes que ofrecen estas herramientas para controlar el navegador y gestionar las carpetas de tu computadora.</p><p>ChatGPT, Claude y Gemini cuentan con un modo agente que les permite controlar tu navegador en tu nombre.</p><p>Los tres funcionan bien cuando necesitan realizar acciones en p&#xE1;ginas web, como hacer clic, desplazarse por la pantalla y otras tareas similares.</p><p>Mi opci&#xF3;n favorita es Claude.</p><p>Aqu&#xED; tienes una demostraci&#xF3;n de la extensi&#xF3;n <a href="https://codigoencasa.com/">Claude</a> para Chrome, que permite controlar el navegador, compartida por Emily Lambert en X.</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Um&#x2026; the Claude Chrome Extension that controls my browser is insane. <a href="https://t.co/B2FgziIO6F">pic.twitter.com/B2FgziIO6F</a></p>&#x2014; Emily Lambert (@emilylambert) <a href="https://x.com/emilylambert/status/2002291485870567784?ref_src=twsrc%5Etfw">December 20, 2025</a></blockquote>
<script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

</figure><p>Si quieres probar estas herramientas, puedes activar el modo agente en <a href="https://codigoencasa.com/">ChatGPT</a> o Gemini, o descargar la extensi&#xF3;n de Claude.</p><p>Por otro lado, Claude Cowork es la &#xFA;nica opci&#xF3;n que permite realizar acciones directamente sobre las carpetas de tu computadora, como el escritorio, las descargas y otras ubicaciones.</p><p>Puede explorar carpetas, gestionar archivos y generar entregables completos.</p><p>Aqu&#xED; tienes un ejemplo:</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Cowork just organized 6 months of receipts into a categorized spreadsheet with monthly breakdowns.<br><br>Pointed it at a folder. That&#x2019;s it. <a href="https://t.co/uFpLXFnl0o">pic.twitter.com/uFpLXFnl0o</a></p>&#x2014; Boris Cherny (@bcherny) <a href="https://x.com/bcherny/status/2014440808251064425?ref_src=twsrc%5Etfw">January 22, 2026</a></blockquote>
<script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

</figure><p>Para m&#xED;, Claude es la herramienta ganadora en esta categor&#xED;a.</p><p>Ofrece capacidades de agente tanto para trabajar en el navegador como para gestionar las carpetas de la computadora.</p><h2 id="uso-cotidiano">Uso cotidiano</h2><p>Actualmente, Claude es mi herramienta de inteligencia artificial favorita, pero no puedo utilizarla tanto como me gustar&#xED;a.</p><p>&#xBF;Por qu&#xE9;?</p><p>Porque alcanzo su l&#xED;mite diario de uso con mucha frecuencia.</p><p>Eso casi nunca me ocurre cuando utilizo <a href="https://codigoencasa.com/">ChatGPT</a> o Gemini.</p><p>Estos son los l&#xED;mites diarios de ChatGPT Plus, Claude Pro y Gemini Pro:</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-7.png" class="kg-image" alt="Por qu&#xE9; he dejado de usar ChatGPT para todo (y qu&#xE9; uso en su lugar)" loading="lazy" width="1100" height="567" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-7.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-7.png 1000w, https://codigoencasa.com/content/images/2026/10/image-7.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Aunque prefiero utilizar Claude, ChatGPT y Gemini son mejores alternativas para el uso cotidiano porque ofrecen l&#xED;mites diarios de utilizaci&#xF3;n m&#xE1;s altos.</p><h2 id="modo-de-voz">Modo de voz</h2><p>Utilizo mucho el modo de voz en mi vida diaria.</p><p>Y, con diferencia, el modo de voz de ChatGPT es el mejor.</p><p>Hablar con Gemini se siente rob&#xF3;tico. Tienes la sensaci&#xF3;n de estar conversando con una inteligencia artificial.</p><p>En cambio, hablar con <a href="https://codigoencasa.com/">ChatGPT</a> resulta mucho menos rob&#xF3;tico. Tiene una voz m&#xE1;s natural, una conversaci&#xF3;n fluida y una personalidad propia.</p><p>Una de las cosas para las que utilizo el modo de voz es practicar idiomas extranjeros.</p><p>&#xA1;Es como hacer un intercambio de idiomas con otra persona!</p><p>El modo de voz de ChatGPT comprende las instrucciones que le doy en mis prompts, como la manera en que quiero recibir correcciones sobre el idioma o c&#xF3;mo deseo que contin&#xFA;e la conversaci&#xF3;n.</p><p>Gemini no consigue hacerlo correctamente, mientras que el modo de voz de Claude solo funciona en ingl&#xE9;s.</p><h2 id="generaci%C3%B3n-de-im%C3%A1genes-y-videos">Generaci&#xF3;n de im&#xE1;genes y videos</h2><p>En t&#xE9;rminos generales, la mejor herramienta de inteligencia artificial para generar im&#xE1;genes es Nano Banana, de <a href="https://codigoencasa.com/">Gemini.</a></p><p>Estas son algunas de las razones:</p><p>Comprende bien las instrucciones de los prompts.</p><p>Permite mantener personajes consistentes entre distintas im&#xE1;genes.</p><p>Ofrece buenos resultados est&#xE9;ticos, de dise&#xF1;o gr&#xE1;fico y en otros aspectos visuales.</p><p>Dicho esto, la generaci&#xF3;n de im&#xE1;genes de ChatGPT no est&#xE1; muy lejos de Nano Banana.</p><p>De hecho, tengo algunos prompts que funcionan mejor en ChatGPT.</p><p>En general, utilizo Nano Banana para crear infograf&#xED;as, transformar ideas en elementos visuales de calidad profesional y combinar varias im&#xE1;genes.</p><p>Para el resto de las tareas, prefiero utilizar <a href="https://codigoencasa.com/">ChatGPT.</a></p><p>En cuanto a la generaci&#xF3;n de videos, Sora 2 y Veo 3 est&#xE1;n al mismo nivel.</p><p>He probado diferentes prompts y, en ocasiones, Sora genera mejores videos, pero otras veces Veo 3 consigue resultados muy superiores.</p><p>Aqu&#xED; tienes una comparaci&#xF3;n realizada por TechByMarkandey y compartida en X.</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">Making AI videos used to be a struggle with too many tabs and too many exports.<br><br>Now it&#x2019;s all in one place. <a href="https://t.co/qnGjXffirV">https://t.co/qnGjXffirV</a> lets you use Sora 2, Veo 3.1, and the new Nano Banana 2 together in one smooth flow.<br><br>No switching. No waiting. Just pure creation.<br><br>I tried Sora 2&#x2026; <a href="https://t.co/S3A9ys0oez">pic.twitter.com/S3A9ys0oez</a></p>&#x2014; Markandey Sharma (@TechByMarkandey) <a href="https://x.com/TechByMarkandey/status/1985991783424332100?ref_src=twsrc%5Etfw">November 5, 2025</a></blockquote>
<script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

</figure><p>En la publicaci&#xF3;n, Markandey Sharma explica que antes crear videos con <a href="https://codigoencasa.com/">IA</a> era complicado porque hab&#xED;a que trabajar con demasiadas pesta&#xF1;as y exportar archivos constantemente.</p><p>Ahora es posible utilizar Sora 2, Veo 3.1 y el nuevo Nano Banana 2 dentro de un mismo flujo de trabajo.</p><p>Sin necesidad de cambiar de herramienta ni esperar entre procesos. Simplemente, crear.</p><h2 id="bonus-programaci%C3%B3n">Bonus: Programaci&#xF3;n</h2><p>Para ser completamente transparente, durante 2025 no he utilizado la inteligencia artificial para programar tanto como en a&#xF1;os anteriores.</p><p>Dicho esto, hace seis meses, Peter Yang descubri&#xF3; que <a href="https://codigoencasa.com/">Claude</a> es la mejor herramienta para programar, mientras que Gemini ofrece la mejor relaci&#xF3;n entre costo y rendimiento.</p><p>Dudo que las cosas hayan cambiado demasiado en los &#xFA;ltimos meses, especialmente si tenemos en cuenta la reciente popularidad de Claude Code.</p><p>Es una herramienta fant&#xE1;stica, no solo para quienes se dedican a la programaci&#xF3;n, sino tambi&#xE9;n para cualquier persona que no tenga miedo de interactuar con la terminal de su computadora.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/11MJ-dq0408?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Web profesional con GoHighLevel sin saber dise&#xF1;ar (paso a paso)"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Andrej Karpathy pidió una herramienta. 48 horas después, Graphify se volvió viral.]]></title><description><![CDATA[Esta wiki permanece disponible entre sesiones, acumula conocimiento con el tiempo y permite que cada consulta futura sea más económica.]]></description><link>https://codigoencasa.com/andrej-karpathy-pidio-una-herramienta-48-horas-despues-graphify-se-volvio-viral/</link><guid isPermaLink="false">6ad626c358d2754b02976c3f</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 21 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/queensland-australia-02gPdP6mtpg-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/queensland-australia-02gPdP6mtpg-unsplash-transformed.jpeg" alt="Andrej Karpathy pidi&#xF3; una herramienta. 48 horas despu&#xE9;s, Graphify se volvi&#xF3; viral."><p>El 3 de abril de 2026, Andrej Karpathy public&#xF3; algo que llam&#xF3; &#xAB;<a href="https://codigoencasa.com/">LLM Knowledge Bases</a>&#xBB; (bases de conocimiento para modelos de lenguaje), y en cuesti&#xF3;n de horas la idea comenz&#xF3; a difundirse por toda la comunidad de inteligencia artificial.</p><p>La propuesta central era sorprendentemente sencilla: en lugar de utilizar RAG para recuperar fragmentos de archivos originales cada vez que haces una pregunta, puedes hacer que un modelo de lenguaje convierta esos archivos en una wiki estructurada, interconectada y escrita en Markdown.</p><p>Esta wiki permanece disponible entre sesiones, acumula conocimiento con el tiempo y permite que cada consulta futura sea m&#xE1;s econ&#xF3;mica.</p><p>Karpathy explic&#xF3; que su m&#xE9;todo consist&#xED;a en colocar art&#xED;culos cient&#xED;ficos, capturas de pantalla, repositorios y otros documentos dentro de una carpeta llamada <code>/raw</code>. Despu&#xE9;s, un modelo de lenguaje procesaba todo ese contenido para crear una wiki con res&#xFA;menes, enlaces entre documentos, mapas conceptuales y un archivo &#xED;ndice que el propio modelo pod&#xED;a recorrer de forma aut&#xF3;noma.</p><p>Sin embeddings vectoriales, sin sistemas complejos de recuperaci&#xF3;n de informaci&#xF3;n. Simplemente archivos Markdown cuyo conocimiento se va acumulando.</p><p>La publicaci&#xF3;n se volvi&#xF3; viral, al igual que el <a href="https://codigoencasa.com/">GitHub</a> Gist que comparti&#xF3; posteriormente. De repente, todo el mundo hablaba de utilizar conocimiento previamente estructurado como alternativa a los sistemas tradicionales de recuperaci&#xF3;n de informaci&#xF3;n.</p><p>Mi primera reacci&#xF3;n fue una mezcla de inter&#xE9;s y cierta frustraci&#xF3;n, porque llevaba tiempo explorando ideas similares mientras trabajaba con <a href="https://codigoencasa.com/">Claude Code</a> en repositorios grandes.</p><p>Me encontraba con el mismo problema que muchas personas: el modelo vuelve a descubrir toda la estructura de tu c&#xF3;digo desde cero en cada sesi&#xF3;n, y la ventana de contexto se llena mucho antes de que consiga comprender realmente la arquitectura del proyecto.</p><p>La explicaci&#xF3;n de Karpathy hizo que todo encajara. Sin embargo, &#xE9;l mismo reconoc&#xED;a que su implementaci&#xF3;n era una colecci&#xF3;n improvisada de scripts, y yo no ten&#xED;a ninguna intenci&#xF3;n de construir desde cero mi propio compilador de wikis.</p><p>Entonces, apenas 48 horas despu&#xE9;s, alguien lanz&#xF3; una herramienta que hac&#xED;a precisamente eso.</p><h2 id="qu%C3%A9-es-graphify-y-qu%C3%A9-no-es">Qu&#xE9; es Graphify y qu&#xE9; no es</h2><p>Un desarrollador llamado Safi Shamsi public&#xF3; Graphify, una herramienta de c&#xF3;digo abierto que lleva a la pr&#xE1;ctica el enfoque propuesto por Karpathy, pero orientado espec&#xED;ficamente a bases de c&#xF3;digo.</p><p>Solo necesitas indicarle una carpeta y la herramienta analiza todo su contenido: c&#xF3;digo escrito en 19 lenguajes de programaci&#xF3;n, documentos PDF, archivos Markdown e im&#xE1;genes, incluidas fotograf&#xED;as de pizarras y diagramas mediante <a href="https://codigoencasa.com/">Claude Vision</a>.</p><p>A partir de esa informaci&#xF3;n, construye un grafo de conocimiento completo que incluye detecci&#xF3;n de comunidades, una visualizaci&#xF3;n HTML interactiva, una b&#xF3;veda de Obsidian con enlaces inteligentes entre documentos y una wiki.</p><p>Cualquier agente puede comenzar desde <code>index.md</code> y recorrer el conocimiento sin necesidad de interpretar archivos JSON.</p><p>La instalaci&#xF3;n requiere una sola l&#xED;nea:</p><pre><code>pip install graphifyy &amp;&amp; graphify install</code></pre><p>Despu&#xE9;s, escribes <code>/graphify</code> dentro de <a href="https://codigoencasa.com/">Claude Code</a>, Codex, OpenCode u OpenClaw y se&#xF1;alas el directorio de tu proyecto.</p><p>El resultado se guarda en una carpeta llamada <code>graphify-out/</code>, que contiene varios elementos:</p><p><code>graph.html</code>: permite explorar el grafo de forma interactiva.</p><p><code>GRAPH_REPORT.md</code>: destaca los nodos centrales, tambi&#xE9;n llamados god nodes, y las conexiones inesperadas.</p><p><code>graph.json</code>: almacena el grafo persistente que puede consultarse posteriormente.</p><p>Una cach&#xE9; incremental: evita tener que procesar nuevamente todos los archivos en futuras actualizaciones.</p><p>Ahora bien, tambi&#xE9;n es importante entender lo que <a href="https://codigoencasa.com/">Graphify</a> no es.</p><p>No es un sistema RAG, no es una base de datos vectorial y tampoco es una interfaz de chatbot construida sobre otro modelo.</p><p>Es una etapa de compilaci&#xF3;n, exactamente como la describi&#xF3; Karpathy, que transforma un directorio desorganizado en un recurso de conocimiento estructurado.</p><p>Gracias a ello, cualquier agente de IA puede razonar sobre el proyecto sin tener que leer todos sus archivos.</p><h2 id="la-cifra-de-715-veces-primero-el-escepticismo-despu%C3%A9s-las-matem%C3%A1ticas">La cifra de 71,5 veces: primero el escepticismo, despu&#xE9;s las matem&#xE1;ticas</h2><p>La afirmaci&#xF3;n principal es que Graphify puede reducir hasta 71,5 veces la cantidad de tokens necesarios por consulta en comparaci&#xF3;n con la lectura de los archivos originales.</p><p>La cifra parec&#xED;a demasiado buena para ser cierta, as&#xED; que decid&#xED; revisar c&#xF3;mo estaban dise&#xF1;adas realmente las pruebas de rendimiento.</p><p>A peque&#xF1;a escala, con seis archivos Python que representan una capa de transporte <a href="https://codigoencasa.com/">HTTP</a>, la compresi&#xF3;n es marginal y, en realidad, tampoco es lo m&#xE1;s importante.</p><p>Esos archivos ya caben dentro de una ventana de contexto. En ese escenario, el verdadero valor est&#xE1; en la claridad estructural.</p><p>Puedes identificar que <code>Client</code>, <code>AsyncClient</code>, <code>Response</code> y <code>Request</code> son los nodos centrales del proyecto, y tambi&#xE9;n visualizar los grupos o comunidades que re&#xFA;nen m&#xF3;dulos relacionados.</p><p>Eso resulta &#xFA;til, pero est&#xE1; lejos de representar una mejora de 71 veces.</p><p>La situaci&#xF3;n cambia cuando analizamos un conjunto de 52 archivos compuesto por c&#xF3;digo, art&#xED;culos de investigaci&#xF3;n e im&#xE1;genes.</p><p>En ese caso, la reducci&#xF3;n de tokens s&#xED; alcanza aproximadamente las 71 veces.</p><p>El repositorio incluye ejemplos completos, con los archivos de entrada originales y los resultados reales, de manera que cualquier persona puede comprobar las cifras por su cuenta.</p><p>Ese nivel de transparencia es algo que me gustar&#xED;a encontrar con mayor frecuencia en los proyectos de c&#xF3;digo abierto.</p><p>La raz&#xF3;n por la que la compresi&#xF3;n mejora a medida que aumenta el tama&#xF1;o del proyecto es bastante sencilla.</p><p>El grafo sintetiza toda la informaci&#xF3;n en nodos, conexiones, res&#xFA;menes de comunidades y un informe que el modelo de lenguaje puede recorrer utilizando una fracci&#xF3;n de los tokens que necesitar&#xED;a para leer el contenido original.</p><p>Esto es especialmente importante en los flujos de trabajo basados en agentes de inteligencia artificial.</p><p>Si tienes varios agentes escribiendo c&#xF3;digo en paralelo, o est&#xE1;s trabajando durante una sesi&#xF3;n prolongada de <a href="https://codigoencasa.com/">Claude Code</a> que abarca varios commits, cargar 52 archivos originales en el contexto en cada interacci&#xF3;n representa un desperdicio de recursos.</p><p>En cambio, proporcionar un informe del grafo que contiene la misma informaci&#xF3;n estructural utilizando aproximadamente una septuag&#xE9;sima primera parte de los tokens cambia por completo el perfil de costos.</p><h2 id="c%C3%B3mo-funciona-internamente-no-hay-magia-solo-buena-ingenier%C3%ADa">C&#xF3;mo funciona internamente: no hay magia, solo buena ingenier&#xED;a</h2><p>La arquitectura es sorprendentemente transparente.</p><p>Los archivos de c&#xF3;digo se procesan mediante el an&#xE1;lisis de &#xE1;rboles de sintaxis abstracta (AST) con tree-sitter, compatible con 19 lenguajes:</p><p>Python, JavaScript, TypeScript, Go, Rust, Java, C, C++, Ruby, C#, Kotlin, Scala, PHP, Swift, Lua, Zig, PowerShell, Elixir y Objective-C.</p><p>Todo este procesamiento se realiza de forma local.</p><p>En el caso del c&#xF3;digo, el contenido de los archivos no sale de tu computadora.</p><p>Los documentos y las im&#xE1;genes, por su parte, se procesan mediante la <a href="https://codigoencasa.com/">API</a> del modelo que ya utiliza tu plataforma para realizar la extracci&#xF3;n sem&#xE1;ntica.</p><p>Por ejemplo, Claude si trabajas con Claude Code, o GPT-4 si utilizas Codex.</p><p>NetworkX se encarga de construir el grafo.</p><p>El algoritmo Leiden, a trav&#xE9;s de graspologic, realiza la detecci&#xF3;n de comunidades.</p><p>Y vis.js genera la visualizaci&#xF3;n interactiva.</p><p>No necesitas Neo4j ni un servidor externo. Todo funciona localmente.</p><p>Adem&#xE1;s, cada conexi&#xF3;n del grafo recibe una etiqueta que indica su nivel de confianza:</p><p>EXTRACTED (extra&#xED;da): la relaci&#xF3;n se encontr&#xF3; directamente en el material original.</p><p>INFERRED (inferida): la relaci&#xF3;n fue deducida por el modelo a partir del contexto.</p><p>AMBIGUOUS (ambigua): la relaci&#xF3;n no puede determinarse con suficiente certeza.</p><p>Esto permite distinguir qu&#xE9; informaci&#xF3;n procede realmente de los archivos y qu&#xE9; parte ha sido interpretada o deducida por la inteligencia artificial.</p><p>Donde realmente se aprecia la calidad de la ingenier&#xED;a es en el sistema de actualizaciones incrementales.</p><p>El modo <code>--watch</code> funciona en una terminal en segundo plano y mantiene actualizado el grafo a medida que cambia el <a href="https://codigoencasa.com/">c&#xF3;digo</a> del proyecto.</p><p>Cuando guardas un archivo de c&#xF3;digo, se reconstruye inmediatamente su estructura AST sin realizar ninguna llamada a un modelo de lenguaje.</p><p>En cambio, cuando modificas documentos o im&#xE1;genes, el sistema te indica que ejecutes <code>--update</code> para repetir el an&#xE1;lisis sem&#xE1;ntico.</p><p>Los hooks de Git, que se instalan mediante <code>graphify hook install</code>, reconstruyen el grafo despu&#xE9;s de cada commit y de cada cambio de rama.</p><p>Y si una reconstrucci&#xF3;n falla, el hook termina con un c&#xF3;digo de error distinto de cero, lo que permite que <a href="https://codigoencasa.com/">Git</a> muestre el problema en lugar de continuar silenciosamente con un grafo desactualizado.</p><p>Este &#xFA;ltimo detalle puede parecer menor, pero antes el sistema terminaba con c&#xF3;digo cero incluso cuando se produc&#xED;a un error.</p><p>Eso significaba que el grafo pod&#xED;a quedar desactualizado sin mostrar ninguna advertencia.</p><p>Y precisamente ese tipo de errores silenciosos es el que termina debilitando la confianza en las herramientas de desarrollo.</p><h2 id="c%C3%B3mo-se-ve-en-la-pr%C3%A1ctica-probando-graphify-en-mi-propio-repositorio">C&#xF3;mo se ve en la pr&#xE1;ctica: probando Graphify en mi propio repositorio</h2><p>Leer pruebas de rendimiento est&#xE1; muy bien, pero quer&#xED;a comprobar c&#xF3;mo funcionaba Graphify en un proyecto real.</p><p>As&#xED; que decid&#xED; ejecutarlo sobre un repositorio propio.</p><p>El proyecto era un generador de c&#xF3;digos <a href="https://codigoencasa.com/">QR</a> que hab&#xED;a construido con Claude Code.</p><p>Ten&#xED;a un total de 27 archivos, distribuidos de la siguiente manera:</p><p>18 archivos de c&#xF3;digo repartidos entre <code>src/</code>, <code>test/</code> y carpetas de configuraci&#xF3;n.</p><p>4 documentos, entre ellos <code>AGENTS.md</code>, <code>CLAUDE.md</code> y <code>FLOW.md</code>.</p><p>5 im&#xE1;genes, incluidas capturas de pantalla de la interfaz, el logotipo de Towards Deep Learning y un par de archivos PNG utilizados en las pruebas.</p><p>El proceso se ejecut&#xF3; en cuatro etapas.</p><p>Primera etapa: exploraci&#xF3;n y clasificaci&#xF3;n.</p><p>Graphify recorri&#xF3; la carpeta y clasific&#xF3; todos los archivos seg&#xFA;n su tipo.</p><p>Segunda etapa: an&#xE1;lisis del c&#xF3;digo.</p><p>Proces&#xF3; los 18 archivos de c&#xF3;digo utilizando tree-sitter AST de forma local.</p><p>No intervino ning&#xFA;n modelo de lenguaje, por lo que esta parte no gener&#xF3; costos de uso de <a href="https://codigoencasa.com/">IA</a>.</p><p>Solo esta etapa permiti&#xF3; extraer todas las funciones, clases, importaciones y relaciones de llamadas.</p><p>El resultado inicial fue de 162 nodos y 240 conexiones.</p><p>Por ejemplo, relaciones como:</p><p><code>src_main &#x2192; calls &#x2192; selectPalette()</code></p><p>Tercera etapa: interpretaci&#xF3;n de documentos e im&#xE1;genes.</p><p>El sistema ejecut&#xF3; seis subagentes de <a href="https://codigoencasa.com/">Claude</a> en paralelo para analizar los documentos y las im&#xE1;genes.</p><p>Esta fue la parte que utiliz&#xF3; el modelo de lenguaje y consumi&#xF3; aproximadamente 193.000 tokens.</p><p>Los agentes de visi&#xF3;n examinaron las capturas de pantalla de la interfaz y consiguieron interpretarlas como elementos funcionales.</p><p>Por ejemplo, identificaron una relaci&#xF3;n que indicaba que la zona donde se arrastra el logotipo comparte datos con el panel de vista previa del c&#xF3;digo QR.</p><p>Tambi&#xE9;n reconocieron que la opci&#xF3;n de correcci&#xF3;n de errores de nivel H en la interfaz estaba relacionada con la justificaci&#xF3;n del indicador de verificaci&#xF3;n de decodificaci&#xF3;n.</p><p>Por su parte, el agente encargado de los documentos extrajo conceptos arquitect&#xF3;nicos presentes en <code>AGENTS.md</code> y <code>FLOW.md</code>.</p><p>Entre ellos:</p><p>Scan Verification Gate: mecanismo de verificaci&#xF3;n del escaneo.</p><p>Darken-and-Retry Loop: ciclo de oscurecimiento y nuevo intento.</p><p>Yellow Pitfall: problema o riesgo asociado al color amarillo.</p><p>Cuarta etapa: construcci&#xF3;n del grafo completo.</p><p><a href="https://codigoencasa.com/">Graphify</a> combin&#xF3; toda la informaci&#xF3;n en un &#xFA;nico grafo.</p><p>El resultado final fue:</p><h1 id="229nodos-296conexiones-26comunidades">229Nodos 296Conexiones 26Comunidades</h1><p>El sistema ejecut&#xF3; el algoritmo Leiden para detectar las comunidades, calcul&#xF3; cu&#xE1;les eran los nodos centrales y cu&#xE1;les funcionaban como puentes entre distintas comunidades.</p><p>Tambi&#xE9;n clasific&#xF3; todas las relaciones como <code>EXTRACTED</code>, <code>INFERRED</code> o <code>AMBIGUOUS</code>.</p><p>La visualizaci&#xF3;n interactiva del grafo, que aparece a continuaci&#xF3;n, es la que se genera en <code>graphify-out/graph.html</code>.</p><p>Puedes hacer clic sobre cualquier nodo para consultar su tipo, la comunidad a la que pertenece, el archivo de origen, su grado de conectividad y sus nodos vecinos.</p><p>La barra lateral muestra las 26 comunidades junto con la cantidad de nodos que contiene cada una.</p><p>Tambi&#xE9;n puedes activar o desactivar comunidades para aislar determinados grupos y analizarlos con mayor facilidad.</p><p>Junto con la visualizaci&#xF3;n, <a href="https://codigoencasa.com/">Graphify</a> dej&#xF3; varios archivos almacenados en el disco.</p><p>El archivo <code>graph.json</code> contiene el grafo consultable que utiliza el comando <code>graphify query</code>.</p><p>El documento <code>GRAPH_REPORT.md</code> incluye un informe de auditor&#xED;a con los nodos centrales, los hallazgos inesperados y algunas preguntas sugeridas.</p><p>Adem&#xE1;s, las carpetas <code>cache/</code> y el archivo <code>manifest.json</code> permiten que una futura ejecuci&#xF3;n de <code>--update</code> procese &#xFA;nicamente los archivos que hayan cambiado.</p><p>Sin embargo, lo que m&#xE1;s me sorprendi&#xF3; fue descubrir informaci&#xF3;n que no resultaba evidente simplemente ejecutando <code>ls</code> o leyendo el c&#xF3;digo.</p><p>El verdadero centro de gravedad del repositorio no era la generaci&#xF3;n de c&#xF3;digos QR, sino la ciencia del color.</p><p>La parte m&#xE1;s densamente conectada del grafo estaba formada por las matem&#xE1;ticas relacionadas con el contraste, las paletas y la extracci&#xF3;n de colores.</p><p>Mientras tanto, la generaci&#xF3;n de c&#xF3;digos QR aparec&#xED;a como dos dependencias de bibliotecas situadas en la periferia.</p><p>Los m&#xF3;dulos <code>src_main</code>, <code>src_palette</code> y <code>src_verify</code> resultaron ser los principales centros estructurales.</p><p>El mecanismo de verificaci&#xF3;n de escaneo tambi&#xE9;n ocupaba una posici&#xF3;n central dentro de la arquitectura.</p><p>Eso era exactamente lo que exig&#xED;a <code>AGENTS.md</code>, pero no habr&#xED;a sido tan evidente sin comparar, una al lado de la otra, la especificaci&#xF3;n y la implementaci&#xF3;n.</p><p>Las pruebas estaban conectadas directamente con los m&#xF3;dulos que verificaban, en lugar de aparecer como elementos aislados.</p><p>En otras palabras, el grafo hac&#xED;a visible una buena decisi&#xF3;n de arquitectura.</p><p>Los conceptos presentes en <code>AGENTS.md</code> y <code>FLOW.md</code> formaban su propia comunidad independiente.</p><p>La especificaci&#xF3;n coincid&#xED;a conceptualmente con el c&#xF3;digo, pero no exist&#xED;an conexiones estructurales directas entre ambos.</p><p>Ah&#xED; fue donde aparecieron 19 conexiones colgantes.</p><p>Adem&#xE1;s, las capturas de pantalla de la interfaz conten&#xED;an afirmaciones sobre el producto, como &#xAB;nunca sale de tu navegador&#xBB; y &#xAB;correcci&#xF3;n de errores H&#xBB;.</p><p>El sistema las convirti&#xF3; en nodos del grafo y las relacion&#xF3; con los elementos visuales de la interfaz que justificaban esas afirmaciones.</p><p>Ese fue uno de los resultados m&#xE1;s interesantes del an&#xE1;lisis visual.</p><p>Era algo que jam&#xE1;s se me habr&#xED;a ocurrido hacer manualmente.</p><p>Despu&#xE9;s de la ejecuci&#xF3;n, <a href="https://codigoencasa.com/">Graphify</a> tambi&#xE9;n registr&#xF3; la habilidad <code>/graphify</code>.</p><p>Eso significa que, en cualquier sesi&#xF3;n futura de Claude Code, puedo ejecutar una consulta como esta:</p><pre><code>graphify query &quot;why does the download button start disabled?&quot;</code></pre><p>Es decir: &#xAB;&#xBF;Por qu&#xE9; el bot&#xF3;n de descarga aparece deshabilitado inicialmente?&#xBB;.</p><p>Y obtener una respuesta directamente desde el grafo, sin necesidad de volver a leer todo el repositorio desde cero.</p><p>As&#xED; es como funciona, en la pr&#xE1;ctica, el concepto de conocimiento compilado.</p><p>Pagas una vez el costo de extraer la informaci&#xF3;n y despu&#xE9;s puedes consultarla sin repetir ese procesamiento.</p><h2 id="las-limitaciones-que-debes-conocer">Las limitaciones que debes conocer</h2><p>Graphify se encuentra en la versi&#xF3;n 0.3.1 y evoluciona r&#xE1;pidamente.</p><p>Eso significa que todav&#xED;a debes esperar algunas imperfecciones.</p><p>La calidad de la extracci&#xF3;n sem&#xE1;ntica depende por completo del modelo de lenguaje que utilices.</p><p>En mi experiencia, <a href="https://codigoencasa.com/">Claude</a> Vision interpreta bien los diagramas y las fotograf&#xED;as de pizarras.</p><p>Sin embargo, los resultados pueden variar con otros modelos.</p><p>Si tu proyecto depende mucho de la documentaci&#xF3;n visual, la precisi&#xF3;n del grafo estar&#xE1; limitada por la capacidad del modelo de visi&#xF3;n para interpretar correctamente esas im&#xE1;genes.</p><p>La cifra de compresi&#xF3;n de 71,5 veces tambi&#xE9;n depende del conjunto de archivos analizado.</p><p>Si tu proyecto contiene diez archivos Python y un <a href="https://codigoencasa.com/">README</a> claro, probablemente no necesitas un grafo de conocimiento.</p><p>Lo que necesitas es leer el README.</p><p>La herramienta destaca especialmente en repositorios medianos y grandes, donde la complejidad estructural supera lo que una persona desarrolladora, o incluso un modelo de lenguaje, puede mantener en su memoria de trabajo.</p><p>Tambi&#xE9;n aporta mucho valor cuando el proyecto combina c&#xF3;digo, documentaci&#xF3;n y art&#xED;culos de investigaci&#xF3;n.</p><p>En esos casos, pueden existir conexiones entre diferentes &#xE1;reas que resultan dif&#xED;ciles de descubrir leyendo los archivos de forma secuencial.</p><p>En la versi&#xF3;n m&#xE1;s reciente se incorporaron parches de seguridad para vulnerabilidades relacionadas con SSRF y la inyecci&#xF3;n de YAML en la visualizaci&#xF3;n HTML.</p><p>El proyecto es joven, recibe mantenimiento activo y est&#xE1; siendo revisado por miembros de la comunidad.</p><p>Aun as&#xED;, si vas a utilizarlo sobre repositorios que contienen informaci&#xF3;n sensible, conviene que revises personalmente los posibles riesgos de seguridad.</p><p>No deber&#xED;as asumir que ya cuenta con el nivel de protecci&#xF3;n de una herramienta ampliamente consolidada para entornos de producci&#xF3;n.</p><p>Y existe una limitaci&#xF3;n todav&#xED;a m&#xE1;s importante.</p><p>Un grafo de conocimiento puede mostrarte qu&#xE9; elementos est&#xE1;n conectados entre s&#xED;.</p><p>Pero no necesariamente puede explicarte por qu&#xE9; la persona responsable de la arquitectura tom&#xF3; una determinada decisi&#xF3;n, qu&#xE9; restricciones condicionaron el dise&#xF1;o o qu&#xE9; intentos fallidos llevaron a elegir la soluci&#xF3;n actual.</p><p>Esa informaci&#xF3;n sigue estando en la experiencia y la memoria del equipo, en las conversaciones de las solicitudes de cambios (pull requests) y en los mensajes de los commits.</p><p><a href="https://codigoencasa.com/">Graphify</a> te proporciona el mapa estructural.</p><p>Pero el conocimiento acumulado por las personas de tu organizaci&#xF3;n sigue siendo responsabilidad de tu equipo.</p><h2 id="por-qu%C3%A9-esto-importa-m%C3%A1s-all%C3%A1-de-la-propia-herramienta">Por qu&#xE9; esto importa m&#xE1;s all&#xE1; de la propia herramienta</h2><p>Lo que m&#xE1;s me interesa es el cambio de enfoque que representa.</p><p>Karpathy describi&#xF3; una transici&#xF3;n desde &#xAB;tokens utilizados para generar c&#xF3;digo&#xBB; hacia &#xAB;tokens utilizados para compilar conocimiento&#xBB;.</p><p>Y Graphify es la primera herramienta convincente que lleva ese enfoque a la pr&#xE1;ctica dentro de bases de c&#xF3;digo.</p><p>El hecho de que apareciera apenas 48 horas despu&#xE9;s de la publicaci&#xF3;n original, que ya contara con 1.500 estrellas en <a href="https://codigoencasa.com/">GitHub</a> y una versi&#xF3;n para .NET, y que comenzara a instalarse como una habilidad en diferentes plataformas de programaci&#xF3;n con agentes, demuestra que exist&#xED;a una demanda esperando una soluci&#xF3;n.</p><p>Estamos pasando de una inteligencia artificial que lee tu c&#xF3;digo a una inteligencia artificial que comprende la estructura de tu proyecto.</p><p>Y son dos capacidades fundamentalmente distintas.</p><p>Leer es un proceso lineal.</p><p>El modelo analiza los archivos uno por uno e intenta conservar toda la informaci&#xF3;n posible dentro de su ventana de contexto.</p><p>Comprender es un proceso estructural.</p><p>El modelo identifica qu&#xE9; m&#xF3;dulos dependen de otros, d&#xF3;nde est&#xE1;n los nodos centrales, qu&#xE9; componentes forman comunidades relacionadas y cu&#xE1;les son las conexiones inesperadas entre diferentes &#xE1;reas del proyecto.</p><p>Todav&#xED;a no sabemos si Graphify terminar&#xE1; convirti&#xE9;ndose en el est&#xE1;ndar a largo plazo.</p><p>De hecho, ser&#xED;a sorprendente que este sector se mantuviera tan sencillo durante mucho tiempo.</p><p>Lo que s&#xED; parece claro es que el enfoque de convertir el c&#xF3;digo en representaciones persistentes y consultables del conocimiento tiene mucho futuro.</p><p>Porque la alternativa consiste en volver a cargar los archivos originales en el contexto durante cada sesi&#xF3;n y confiar en que el modelo recuerde lo que aprendi&#xF3; anteriormente.</p><p>Y ese enfoque ya est&#xE1; mostrando sus l&#xED;mites.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/KtOMkHZ1myg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Esta IA no quiere hablar contigo&#x2026; quiere controlar tu software"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Construyendo Claude Code con Harness Engineering]]></title><description><![CDATA[Esta infraestructura, conocida como harness, puede reproducirse. Y eso es precisamente lo que vamos a construir en este artículo.]]></description><link>https://codigoencasa.com/construyendo-claude-code-con-harness-engineering/</link><guid isPermaLink="false">6acf979f784ce1290c503f81</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 19 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/queensland-australia-25BRIManw_U-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/queensland-australia-25BRIManw_U-unsplash-transformed.jpeg" alt="Construyendo Claude Code con Harness Engineering"><p>Gu&#xED;a t&#xE9;cnica para comprender y reconstruir los 23 componentes de la arquitectura de <a href="https://codigoencasa.com/">Claude Code</a>, desde el ciclo b&#xE1;sico de un agente hasta los sistemas multiagente, la gesti&#xF3;n de contexto y la ejecuci&#xF3;n as&#xED;ncrona.</p><p>A principios de 2026, Claude Code super&#xF3; los 1.000 millones de d&#xF3;lares en ingresos anualizados en apenas seis meses desde su lanzamiento.</p><p>No consigui&#xF3; ese resultado gracias a mejores prompts. Lo consigui&#xF3; porque Anthropic construy&#xF3; la infraestructura adecuada alrededor del modelo correcto: un ciclo de ejecuci&#xF3;n de agentes con transmisi&#xF3;n en tiempo real, un sistema de herramientas gobernado por permisos y una capa de gesti&#xF3;n del contexto que permite mantener al modelo enfocado durante sesiones de trabajo prolongadas.</p><p>Esta infraestructura, conocida como harness, puede reproducirse. Y eso es precisamente lo que vamos a construir en este art&#xED;culo.</p><h2 id="la-arquitectura-de-claude-code">La arquitectura de Claude Code</h2><p><a href="https://codigoencasa.com/">Claude Code</a> est&#xE1; construido sobre cinco componentes fundamentales que trabajan de manera coordinada:</p><p>Un ciclo principal de ejecuci&#xF3;n de un solo hilo: dirige al modelo a trav&#xE9;s de ciclos de percepci&#xF3;n, razonamiento y ejecuci&#xF3;n de herramientas, incorporando los resultados al contexto hasta completar la tarea.</p><p>Un registro de herramientas con tipado definido: relaciona nombres de herramientas con sus funciones de ejecuci&#xF3;n, como Bash, Read, Write, Grep o Glob. Cada herramienta cuenta con un esquema de entrada estricto que limita lo que el modelo puede solicitar y lo que la infraestructura puede ejecutar.</p><p>Una capa de gesti&#xF3;n del contexto: combina la carga de habilidades bajo demanda, la compresi&#xF3;n del historial de conversaci&#xF3;n en tres niveles y la memoria persistente en disco para mantener un razonamiento coherente durante sesiones que superan la ventana de contexto del modelo.</p><p>Un sistema de permisos basado en reglas: utiliza tres niveles de evaluaci&#xF3;n &#x2014;denegar siempre, permitir siempre y solicitar aprobaci&#xF3;n del usuario&#x2014; respaldados por un bus de eventos que permite observar e interceptar las llamadas a herramientas.</p><p>Una capa de coordinaci&#xF3;n multiagente: admite aislamiento del contexto de subagentes, delegaci&#xF3;n as&#xED;ncrona, protocolos de comunicaci&#xF3;n controlados mediante m&#xE1;quinas de estados finitos y aislamiento mediante <a href="https://codigoencasa.com/">Git </a>Worktrees para ejecutar tareas en paralelo sin conflictos entre archivos.</p><p>Y dentro de estos cinco componentes existen numerosos mecanismos adicionales que explican el funcionamiento de Claude Code.</p><p>En este art&#xED;culo vamos a construir y probar cada componente individualmente para comprender c&#xF3;mo funcionan juntos y qu&#xE9; ventajas ofrecen frente a otras arquitecturas de agentes de IA.</p><p>El c&#xF3;digo del proyecto est&#xE1; disponible en GitHub:</p><p><a href="https://github.com/FareedKhan-dev/claude-code-from-scratch">Claude Code From Scratch: 23 componentes de la arquitectura de Claude Code</a></p><h3 id="estructura-del-proyecto">Estructura del proyecto</h3><p>El repositorio est&#xE1; organizado de manera que cada componente puede ejecutarse y probarse por separado.</p><pre><code>claude-code-from-scratch/
&#x2502;
&#x251C;&#x2500;&#x2500; core.py
&#x251C;&#x2500;&#x2500; 01_perception_action_loop.py
&#x251C;&#x2500;&#x2500; s02_tool_use.py
&#x251C;&#x2500;&#x2500; s03_todo_write.py
&#x251C;&#x2500;&#x2500; s04_subagent.py
...
&#x251C;&#x2500;&#x2500; s10_team_protocols.py
&#x251C;&#x2500;&#x2500; s11_autonomous_agents.py
&#x251C;&#x2500;&#x2500; s12_worktree_task_isolation.py
&#x2502;
&#x251C;&#x2500;&#x2500; s13_streaming.py
...
&#x251C;&#x2500;&#x2500; s21_mcp_runtime.py
&#x2502;
&#x251C;&#x2500;&#x2500; s22_production_mailbox.py
&#x251C;&#x2500;&#x2500; s23_worktree_advanced.py
...
&#x2514;&#x2500;&#x2500; skills/</code></pre><p>El archivo <code>core.py</code> contiene los fundamentos compartidos, como el cliente del modelo, las herramientas, el sistema de ejecuci&#xF3;n y los permisos.</p><p>Los dem&#xE1;s archivos implementan mecanismos espec&#xED;ficos. Esta separaci&#xF3;n permite ejecutar y probar individualmente cada componente sin duplicar innecesariamente la l&#xF3;gica principal.</p><h2 id="%C2%BFqu%C3%A9-es-harness-engineering">&#xBF;Qu&#xE9; es Harness Engineering?</h2><p>Harness Engineering es la disciplina que consiste en construir el entorno que rodea a un modelo de inteligencia artificial, en lugar de modificar el modelo en s&#xED;.</p><p>El modelo razona y toma decisiones. El <a href="https://codigoencasa.com/">harness</a> ejecuta esas decisiones, establece restricciones y conecta el modelo con las herramientas y los sistemas externos.</p><p>Una infraestructura bien dise&#xF1;ada proporciona al modelo exactamente las herramientas que necesita, sin a&#xF1;adir capacidades innecesarias, y controla las acciones que puede realizar.</p><p>Este enfoque puede resumirse en cuatro principios fundamentales.</p><p>1. El modelo es la &#xFA;nica fuente de decisiones. La infraestructura no introduce una l&#xF3;gica propia para interpretar y decidir qu&#xE9; hacer a partir de las respuestas del modelo. Su responsabilidad consiste en ejecutar las acciones solicitadas.</p><p>2. Las herramientas son la interfaz entre el modelo y el mundo exterior. Todas las operaciones, desde leer un archivo hasta iniciar un subagente, se realizan mediante llamadas a herramientas con esquemas definidos y entradas validadas.</p><p>3. El contexto es un recurso administrado. La informaci&#xF3;n que recibe el modelo en cada interacci&#xF3;n se selecciona, comprime e incorpora deliberadamente. No se acumula todo el historial sin control.</p><p>4. Los permisos son declarativos, no procedimentales. Las acciones permitidas, bloqueadas o sujetas a autorizaci&#xF3;n se definen mediante configuraciones, en lugar de distribuir esas reglas entre m&#xFA;ltiples condiciones dentro del c&#xF3;digo.</p><h2 id="%C2%BFc%C3%B3mo-utiliza-claude-code-el-harness-engineering">&#xBF;C&#xF3;mo utiliza Claude Code el Harness Engineering?</h2><p><a href="https://codigoencasa.com/">Claude Code</a> no es simplemente un framework para agentes. Es una infraestructura de ejecuci&#xF3;n dise&#xF1;ada para que un modelo pueda trabajar con herramientas de manera controlada.</p><p>Anthropic no construy&#xF3; una l&#xF3;gica espec&#xED;fica para decidir cu&#xE1;ndo leer archivos o ejecutar pruebas. Proporcion&#xF3; a Claude las herramientas necesarias para realizar esas operaciones y dej&#xF3; que el modelo decidiera cu&#xE1;ndo utilizarlas.</p><p>Su arquitectura aplica los principios de Harness Engineering de varias maneras.</p><p>El ciclo principal de ejecuci&#xF3;n es gen&#xE9;rico y no conserva un estado propio espec&#xED;fico de cada tarea. Funciona de la misma manera cuando el usuario solicita corregir un error de una l&#xED;nea o realizar una refactorizaci&#xF3;n compleja, porque la inteligencia espec&#xED;fica de cada tarea reside en el modelo.</p><p>El registro de herramientas funciona como punto de extensi&#xF3;n. A&#xF1;adir una capacidad significa registrar una nueva herramienta con su nombre, descripci&#xF3;n y esquema de entrada.</p><p>El contexto se administra activamente. Seg&#xFA;n la arquitectura descrita, cuando el uso de la ventana se aproxima al 92 %, las interacciones anteriores pueden resumirse y almacenarse en disco para mantener la memoria de trabajo enfocada.</p><p>Por &#xFA;ltimo, el sistema de permisos funciona como una capa previa a la ejecuci&#xF3;n: las herramientas deben pasar por una evaluaci&#xF3;n de reglas antes de ejecutarse.</p><p>Esto permite que la seguridad no dependa exclusivamente de c&#xF3;mo se comporte el modelo, sino tambi&#xE9;n de la arquitectura que controla sus acciones.</p><h1 id="fase-1-el-ciclo-principal-del-agente">Fase 1. El ciclo principal del agente</h1><p>El ciclo de ejecuci&#xF3;n es el elemento arquitect&#xF3;nico fundamental sobre el que se construye todo lo dem&#xE1;s.</p><p>Antes de las herramientas, los permisos o la coordinaci&#xF3;n multiagente, existe un ciclo que llama al modelo, identifica lo que quiere hacer, ejecuta la acci&#xF3;n correspondiente y devuelve el resultado.</p><p>Cada componente de esta fase incorpora un mecanismo adicional sin modificar ese principio b&#xE1;sico.</p><h2 id="1-el-ciclo-m%C3%ADnimo-con-while">1. El ciclo m&#xED;nimo con <code>while</code></h2><p>El principio m&#xE1;s importante de cualquier sistema de agentes es el ciclo de percepci&#xF3;n, acci&#xF3;n y observaci&#xF3;n.</p><p>El agente recibe una tarea e intenta resolverla utilizando una herramienta. Despu&#xE9;s observa el resultado y decide si debe continuar o detenerse.</p><p>Estas decisiones est&#xE1;n dirigidas por el modelo, no por el c&#xF3;digo externo.</p><p>No estamos hablando de un mecanismo convencional de reintentos ni de una estrategia de respaldo. Este ciclo constituye el n&#xFA;cleo operativo del sistema.</p><p>El mismo mecanismo puede utilizarse para corregir un peque&#xF1;o error de programaci&#xF3;n o modificar una base de c&#xF3;digo completa.</p><h3 id="inicializar-el-cliente-de-anthropic">Inicializar el cliente de Anthropic</h3><p>Para construir nuestra implementaci&#xF3;n inicial, primero debemos configurar el cliente y el modelo.</p><pre><code>from anthropic import Anthropic# Clave de API necesaria# Obtenla en: https://console.anthropic.com/ANTHROPIC_API_KEY = &quot;sk-ant-xxx&quot;# Identificador del modeloMODEL_ID = &quot;claude-sonnet-4-6&quot;# Inicializar el clienteclient = Anthropic(    base_url=&quot;https://api.anthropic.com&quot;,    api_key=ANTHROPIC_API_KEY)MODEL = MODEL_ID</code></pre><p>En este ejemplo utilizaremos un modelo de Anthropic porque estamos reconstruyendo la arquitectura de <a href="https://codigoencasa.com/">Claude Code</a>.</p><p>Sin embargo, tambi&#xE9;n es posible utilizar LiteLLM para conectar modelos de diferentes proveedores. El repositorio est&#xE1; planteado de manera flexible para permitir esa sustituci&#xF3;n.</p><h3 id="definir-el-prompt-de-sistema">Definir el prompt de sistema</h3><p>El prompt de sistema establece el comportamiento general del agente.</p><pre><code>DEFAULT_SYSTEM = (    f&quot;You are a coding agent at {os.getcwd()}. &quot;    &quot;Use tools to solve tasks. Act, don&apos;t explain.&quot;)</code></pre><p>Aunque el prompt de sistema no siempre requiere una configuraci&#xF3;n compleja, resulta importante para establecer c&#xF3;mo debe abordar las tareas el modelo.</p><h3 id="definir-las-herramientas-iniciales">Definir las herramientas iniciales</h3><p>Claude Code se construye alrededor de herramientas. Por eso necesitamos ofrecer al agente una forma de interactuar con su entorno.</p><pre><code>BASIC_TOOLS = [    {        &quot;name&quot;: &quot;bash&quot;,        &quot;description&quot;: &quot;Run a shell command.&quot;,        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;command&quot;: {&quot;type&quot;: &quot;string&quot;}            },            &quot;required&quot;: [&quot;command&quot;]        }    }]</code></pre><p>Aqu&#xED; definimos una herramienta llamada <code>bash</code> que permite ejecutar comandos de terminal.</p><p>La herramienta incluye un nombre, una descripci&#xF3;n y un esquema que especifica el formato esperado de los par&#xE1;metros.</p><h3 id="crear-el-registro-de-ejecuci%C3%B3n">Crear el registro de ejecuci&#xF3;n</h3><pre><code>BASIC_DISPATCH: dict = {    &quot;bash&quot;: lambda inp: run_bash(inp[&quot;command&quot;])}</code></pre><p>El mecanismo de despacho conecta las llamadas del modelo con funciones reales.</p><p>En lugar de incorporar la l&#xF3;gica de cada herramienta al ciclo principal, utilizamos un diccionario que relaciona nombres con sus correspondientes funciones.</p><p>Esta separaci&#xF3;n facilita incorporar nuevas herramientas sin modificar el funcionamiento del agente.</p><h3 id="ejecutar-las-llamadas-a-herramientas">Ejecutar las llamadas a herramientas</h3><pre><code>def dispatch_tools(    response_content: list,    dispatch: dict) -&gt; List[Dict[str, Any]]:    results = []    for block in response_content:        if block.type != &quot;tool_use&quot;:            continue        tool_name = block.name        tool_input = block.input        tool_use_id = block.id        handler = dispatch.get(tool_name)        first_val = (            str(list(tool_input.values())[0])[:80]            if tool_input else &quot;&quot;        )        print(            f&quot;\033[33m[{tool_name}] &quot;            f&quot;{first_val}...\033[0m&quot;        )        if handler:            try:                output = handler(tool_input)            except Exception as e:                output = (                    f&quot;Error during tool execution: {e}&quot;                )        else:            output = (                f&quot;Error: Unknown tool &apos;{tool_name}&apos;&quot;            )        print(str(output)[:300])        results.append({            &quot;type&quot;: &quot;tool_result&quot;,            &quot;tool_use_id&quot;: tool_use_id,            &quot;content&quot;: str(output),        })    return results</code></pre><p>La funci&#xF3;n <code>dispatch_tools</code> recibe la respuesta del modelo, identifica las llamadas a herramientas, las ejecuta y recopila los resultados.</p><p>Tambi&#xE9;n registra las operaciones para mostrar qu&#xE9; herramientas est&#xE1; utilizando el agente y cu&#xE1;les son sus resultados.</p><h3 id="construir-el-ciclo-principal">Construir el ciclo principal</h3><pre><code>def agent_loop(    messages: List[Dict[str, Any]],    dispatch: Dict) -&gt; None:    while True:        print(&quot;\n\033[36m&gt; Thinking...\033[0m&quot;)        response = client.messages.create(            model=MODEL,            system=DEFAULT_SYSTEM,            messages=messages,            tools=BASIC_TOOLS,            max_tokens=8000,        )        messages.append({            &quot;role&quot;: &quot;assistant&quot;,            &quot;content&quot;: response.content        })        if response.stop_reason != &quot;tool_use&quot;:            break        results = dispatch_tools(            response.content,            dispatch        )        messages.append({            &quot;role&quot;: &quot;user&quot;,            &quot;content&quot;: results        })</code></pre><p>Nuestro agente utiliza un ciclo <code>while</code> que contin&#xFA;a ejecut&#xE1;ndose hasta que el modelo genera una respuesta final.</p><p>El funcionamiento es sencillo: se env&#xED;a el historial al modelo, se recibe su respuesta, se comprueba si solicita herramientas y, en ese caso, se ejecutan para devolver los resultados al contexto.</p><p>El proceso se repite hasta que el modelo considera que ha terminado.</p><h3 id="probar-el-agente">Probar el agente</h3><p>Para comprobar su funcionamiento, creamos un <a href="https://codigoencasa.com/">historial</a> de conversaci&#xF3;n y aceptamos instrucciones desde la terminal.</p><pre><code>history: List[Dict[str, Any]] = []while True:    try:        query = input(&quot;\033[36ms01 &gt;&gt; \033[0m&quot;)    except (EOFError, KeyboardInterrupt):        print(&quot;\nExiting.&quot;)        break    if query.strip().lower() in (&quot;q&quot;, &quot;exit&quot;, &quot;&quot;):        break    history.append({        &quot;role&quot;: &quot;user&quot;,        &quot;content&quot;: query    })    agent_loop(history, BASIC_DISPATCH)    last_message = history[-1]    print(&quot;\n\033[32mFinal Answer:\033[0m&quot;)    for block in last_message.get(&quot;content&quot;, []):        if block.type == &quot;text&quot;:            print(block.text)    print()</code></pre><p>Probemos con la siguiente instrucci&#xF3;n:</p><pre><code>s01 &gt;&gt; Enumera todos los archivos Python
       del directorio actual.</code></pre><p>El agente intenta ejecutar:</p><pre><code>ls *.py</code></pre><p>El sistema devuelve un error porque no encuentra el comando.</p><p>A continuaci&#xF3;n, el modelo cambia de estrategia y utiliza:</p><pre><code>find . -name &quot;*.py&quot; -type f</code></pre><p>Esta vez obtiene los resultados:</p><pre><code>./main.py
./utils.py
./agent.py</code></pre><p>El ejemplo demuestra el ciclo de percepci&#xF3;n, acci&#xF3;n y observaci&#xF3;n.</p><p>El <a href="https://codigoencasa.com/">agente</a> intent&#xF3; ejecutar una operaci&#xF3;n, recibi&#xF3; un error y corrigi&#xF3; su procedimiento sin necesidad de incorporar instrucciones espec&#xED;ficas para ese fallo.</p><h2 id="2-el-patr%C3%B3n-de-despacho-de-herramientas">2. El patr&#xF3;n de despacho de herramientas</h2><p>Uno de los componentes m&#xE1;s interesantes de la arquitectura de <a href="https://codigoencasa.com/">Claude Code</a> es su registro de herramientas.</p><p>El art&#xED;culo original describe una implementaci&#xF3;n con 18 herramientas registradas, entre ellas Bash, Read, Write, Edit, Glob, Grep, WebFetch, AskUserQuestion y TodoWrite.</p><p>Lo importante no es la cantidad de herramientas, sino que agregar una nueva no requiere modificar el ciclo principal.</p><p>El registro funciona como un diccionario que relaciona lo que el modelo quiere hacer con la funci&#xF3;n que realiza esa operaci&#xF3;n.</p><pre><code>EXTENDED_DISPATCH: dict = {    &quot;bash&quot;: lambda inp: run_bash(        inp[&quot;command&quot;]    ),    &quot;read&quot;: lambda inp: run_read(        inp[&quot;path&quot;],        inp.get(&quot;start_line&quot;),        inp.get(&quot;end_line&quot;)    ),    &quot;write&quot;: lambda inp: run_write(        inp[&quot;path&quot;],        inp[&quot;content&quot;]    ),    &quot;grep&quot;: lambda inp: run_grep(        inp[&quot;pattern&quot;],        inp.get(&quot;path&quot;, &quot;.&quot;)    ),    &quot;glob&quot;: lambda inp: run_glob(        inp[&quot;pattern&quot;]    ),    &quot;revert&quot;: lambda inp: run_revert(        inp[&quot;path&quot;]    ),}</code></pre><p>Cada clave corresponde al nombre exacto que utilizar&#xE1; el modelo.</p><p>Cada valor es la funci&#xF3;n Python encargada de ejecutar la operaci&#xF3;n.</p><p>Cuando <a href="https://codigoencasa.com/">Claude</a> necesita leer un archivo, el sistema realiza una b&#xFA;squeda en el diccionario y ejecuta el controlador correspondiente.</p><p>No necesitamos una jerarqu&#xED;a compleja de clases ni m&#xFA;ltiples condiciones para elegir las herramientas.</p><p>La operaci&#xF3;n fundamental puede reducirse a:</p><pre><code>output = handler(tool_input)</code></pre><h3 id="la-importancia-de-las-descripciones">La importancia de las descripciones</h3><p>Las definiciones de herramientas son tan importantes como sus implementaciones.</p><p>El modelo utiliza la descripci&#xF3;n para determinar qu&#xE9; herramienta debe llamar.</p><pre><code>EXTENDED_TOOLS = BASIC_TOOLS + [    {        &quot;name&quot;: &quot;read&quot;,        &quot;description&quot;: (            &quot;Read a file and return numbered lines. &quot;            &quot;Use when you need to inspect file content &quot;            &quot;or reference specific line numbers. &quot;            &quot;Returns up to 50,000 characters. &quot;            &quot;Use start_line/end_line for large files.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;path&quot;: {&quot;type&quot;: &quot;string&quot;},                &quot;start_line&quot;: {&quot;type&quot;: &quot;integer&quot;},                &quot;end_line&quot;: {&quot;type&quot;: &quot;integer&quot;}            },            &quot;required&quot;: [&quot;path&quot;]        }    },    {        &quot;name&quot;: &quot;write&quot;,        &quot;description&quot;: (            &quot;Write content to a file. &quot;            &quot;Automatically snapshots the previous &quot;            &quot;content so you can revert. &quot;            &quot;Creates parent directories if needed.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;path&quot;: {&quot;type&quot;: &quot;string&quot;},                &quot;content&quot;: {&quot;type&quot;: &quot;string&quot;}            },            &quot;required&quot;: [&quot;path&quot;, &quot;content&quot;]        }    },    {        &quot;name&quot;: &quot;grep&quot;,        &quot;description&quot;: (            &quot;Search for a regex pattern across files. &quot;            &quot;Returns file paths and line numbers of matches.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;pattern&quot;: {&quot;type&quot;: &quot;string&quot;},                &quot;path&quot;: {&quot;type&quot;: &quot;string&quot;},                &quot;recursive&quot;: {&quot;type&quot;: &quot;boolean&quot;}            },            &quot;required&quot;: [&quot;pattern&quot;]        }    },    {        &quot;name&quot;: &quot;glob&quot;,        &quot;description&quot;: (            &quot;Find files matching a glob pattern, &quot;            &quot;e.g. &apos;**/*.py&apos;. Returns sorted list &quot;            &quot;of matching paths.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;pattern&quot;: {&quot;type&quot;: &quot;string&quot;}            },            &quot;required&quot;: [&quot;pattern&quot;]        }    },    {        &quot;name&quot;: &quot;revert&quot;,        &quot;description&quot;: (            &quot;Restore a file to its state &quot;            &quot;before the last write call.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;path&quot;: {&quot;type&quot;: &quot;string&quot;}            },            &quot;required&quot;: [&quot;path&quot;]        }    }]</code></pre><p>Una descripci&#xF3;n mal redactada puede hacer que el modelo seleccione la herramienta incorrecta.</p><p>Por ejemplo, si <code>grep</code> se describe simplemente como una herramienta para buscar archivos y <code>bash</code> como una herramienta para ejecutar comandos, el modelo puede utilizar Bash para todas las b&#xFA;squedas.</p><p>Las descripciones espec&#xED;ficas permiten que el modelo relacione con mayor precisi&#xF3;n la intenci&#xF3;n del usuario con las capacidades disponibles.</p><h3 id="controlar-errores-en-los-ejecutores">Controlar errores en los ejecutores</h3><p>Las funciones que ejecutan herramientas deben mantener un contrato consistente: reciben par&#xE1;metros, devuelven resultados y gestionan los errores sin interrumpir el ciclo principal.</p><pre><code>def run_read(    path: str,    start_line: int = None,    end_line: int = None) -&gt; str:    try:        with open(            path,            &quot;r&quot;,            encoding=&quot;utf-8&quot;,            errors=&quot;replace&quot;        ) as f:            lines = f.readlines()        s = (start_line or 1) - 1        e = end_line or len(lines)        numbered = &quot;&quot;.join(            f&quot;{s+1+i:4d}\t{l}&quot;            for i, l in enumerate(lines[s:e])        )        return numbered[:50000] or &quot;(empty file)&quot;    except FileNotFoundError:        return f&quot;Error: file not found: {path}&quot;    except Exception as e:        return f&quot;Error reading {path}: {e}&quot;</code></pre><p>La funci&#xF3;n devuelve l&#xED;neas numeradas deliberadamente.</p><p>Esto permite al modelo identificar secciones concretas de un archivo y realizar modificaciones precisas.</p><p>Por ejemplo, puede utilizar las referencias de una lectura anterior para identificar qu&#xE9; l&#xED;neas necesita reemplazar.</p><p>Tambi&#xE9;n podemos definir una funci&#xF3;n de b&#xFA;squeda:</p><pre><code>def run_grep(    pattern: str,    path: str = &quot;.&quot;,    recursive: bool = True) -&gt; str:    try:        flags = [&quot;-r&quot;] if recursive else []        r = subprocess.run(            [&quot;grep&quot;, &quot;-n&quot;, *flags, pattern, path],            capture_output=True,            text=True,            timeout=30        )        return (            (r.stdout + r.stderr).strip()            or &quot;(no matches)&quot;        )[:10000]    except Exception as e:        return f&quot;Error: {e}&quot;</code></pre><h3 id="prueba-del-sistema-de-herramientas">Prueba del sistema de herramientas</h3><p>Solicitamos al agente:</p><pre><code>Encuentra todos los comentarios TODO del proyecto
e indica en qu&#xE9; archivos aparecen.</code></pre><p>El modelo utiliza <code>grep</code>:</p><pre><code>[grep] TODO

./agents/s03_todo_write.py:45:
# TODO: add priority levels to tasks

./agents/s09_agent_teams.py:112:
# TODO: replace JSONL mailboxes with Redis</code></pre><p>El resultado identifica dos comentarios <code>TODO</code> en dos archivos diferentes.</p><p>El modelo eligi&#xF3; <code>grep</code> en lugar de <code>bash</code> porque la descripci&#xF3;n de la herramienta permit&#xED;a comprender claramente su funci&#xF3;n.</p><p>Esta es la finalidad del registro de ejecuci&#xF3;n: la decisi&#xF3;n sobre qu&#xE9; herramienta utilizar pertenece al modelo, mientras que el harness proporciona capacidades bien definidas y se encarga de ejecutarlas.</p><h2 id="3-planificaci%C3%B3n-con-todowrite-antes-de-ejecutar-tareas">3. Planificaci&#xF3;n con TodoWrite antes de ejecutar tareas</h2><p>Uno de los comportamientos m&#xE1;s interesantes que muestran los registros de ejecuci&#xF3;n de <a href="https://codigoencasa.com/">Claude Code</a> es lo que ocurre antes de que el modelo empiece a trabajar en una tarea compleja.</p><p>En lugar de comenzar inmediatamente a modificar archivos, puede utilizar <code>TodoWrite</code> para establecer un plan de trabajo.</p><p>Primero se define el plan y despu&#xE9;s se ejecutan sus pasos.</p><p>Este comportamiento responde a un problema habitual de los agentes de <a href="https://codigoencasa.com/">IA</a>: cuando trabajan en tareas de varios pasos sin una planificaci&#xF3;n expl&#xED;cita, pueden desviarse del objetivo original.</p><p>El agente empieza ejecutando una operaci&#xF3;n, encuentra un resultado intermedio interesante, decide investigarlo y termina trabajando en algo relacionado, pero diferente de lo que solicit&#xF3; el usuario.</p><p>TodoWrite proporciona un mecanismo de seguimiento que permite mantener el objetivo visible durante toda la ejecuci&#xF3;n.</p><p>En la arquitectura descrita, el estado actual del plan se incorpora nuevamente al contexto despu&#xE9;s de las llamadas a herramientas. De esta manera, el modelo dispone de una referencia continua sobre las tareas pendientes y las completadas.</p><h3 id="implementaci%C3%B3n-de-todowrite">Implementaci&#xF3;n de TodoWrite</h3><pre><code>TODO_FILE = Path(&quot;.agent_todo.json&quot;)def todo_write(tasks: list) -&gt; str:    data = [        {            &quot;id&quot;: i,            &quot;task&quot;: t,            &quot;status&quot;: &quot;pending&quot;        }        for i, t in enumerate(tasks)    ]    TODO_FILE.write_text(        json.dumps(data, indent=2)    )    return &quot;Plan written:\n&quot; + &quot;\n&quot;.join(        f&quot;  [{i}] {t}&quot;        for i, t in enumerate(tasks)    )def todo_read() -&gt; str:    if not TODO_FILE.exists():        return &quot;(no plan)&quot;    data = json.loads(TODO_FILE.read_text())    return &quot;\n&quot;.join(        f&quot;  [{t[&apos;id&apos;]}] &quot;        f&quot;[{t[&apos;status&apos;]:12s}] {t[&apos;task&apos;]}&quot;        for t in data    )def todo_update(index: int, status: str) -&gt; str:</code></pre><p>Estas tres herramientas funcionan conjuntamente:</p><p><code>todo_write</code> registra el plan completo al inicio.</p><p><code>todo_update</code> modifica el estado de cada tarea a medida que avanza el agente.</p><p><code>todo_read</code> permite consultar el progreso en cualquier momento.</p><p>Juntas crean una memoria de trabajo externa que mantiene un registro del proceso de ejecuci&#xF3;n.</p><p>Cada paso tiene un estado persistente, por lo que el sistema puede comprobar qu&#xE9; actividades siguen pendientes.</p><h3 id="hacer-obligatoria-la-planificaci%C3%B3n">Hacer obligatoria la planificaci&#xF3;n</h3><p>Actualizamos el <a href="https://codigoencasa.com/">prompt</a> de sistema para indicar al modelo que debe planificar antes de trabajar en tareas complejas.</p><pre><code>SYSTEM = (    f&quot;You are a coding agent at {os.getcwd()}. &quot;    &quot;Before working on any multi-step task, &quot;    &quot;ALWAYS call todo_write first &quot;    &quot;to write your complete plan. &quot;    &quot;Execute each step in order. &quot;    &quot;Call todo_update after completing each step.&quot;)</code></pre><p>La palabra <code>ALWAYS</code> es importante en este ejemplo.</p><p>Sin una instrucci&#xF3;n firme, el modelo puede decidir planificar en determinadas ocasiones y omitir ese paso en otras.</p><p>Con una instrucci&#xF3;n expl&#xED;cita, el comportamiento tiende a ser m&#xE1;s consistente.</p><h3 id="ejemplo-de-ejecuci%C3%B3n">Ejemplo de ejecuci&#xF3;n</h3><p>Solicitamos:</p><pre><code>Refactoriza la funci&#xF3;n run_bash para incorporar
un tiempo de espera configurable y un l&#xED;mite
en la longitud de la salida.

Despu&#xE9;s, comprueba que no se haya roto nada.</code></pre><p>El agente comienza registrando cinco tareas:</p><pre><code>[todo_write]

[0] Leer la implementaci&#xF3;n actual de run_bash
[1] Agregar un timeout configurable de 120 segundos
[2] Limitar la salida a 50.000 caracteres
[3] Guardar la implementaci&#xF3;n actualizada
[4] Ejecutar las pruebas</code></pre><p>Despu&#xE9;s ejecuta los pasos previstos.</p><pre><code>[read] core.py (lines 45-72)
[todo_update] 0 &#x2192; done

[write] core.py
[todo_update] 1 &#x2192; done
[todo_update] 2 &#x2192; done
[todo_update] 3 &#x2192; done

[bash] python -m pytest tests/test_agents_smoke.py -q

44 passed in 2.1s

[todo_update] 4 &#x2192; done</code></pre><p>El resultado final confirma que la refactorizaci&#xF3;n termin&#xF3; correctamente, se a&#xF1;adi&#xF3; el tiempo de espera configurable y la limitaci&#xF3;n de salida, y las 44 pruebas se completaron sin errores.</p><p>El modelo defini&#xF3; cinco pasos antes de modificar un solo archivo, los ejecut&#xF3; y verific&#xF3; los resultados.</p><p>La clave no es que el modelo sea naturalmente m&#xE1;s cuidadoso, sino que la infraestructura le proporciona una estructura para trabajar de manera organizada.</p><h2 id="4-aislamiento-del-contexto-mediante-subagentes">4. Aislamiento del contexto mediante subagentes</h2><p>Los registros de ejecuci&#xF3;n de <a href="https://codigoencasa.com/">Claude Code</a> muestran otro comportamiento interesante cuando el sistema necesita explorar grandes bases de c&#xF3;digo.</p><p>En lugar de incorporar todos los archivos directamente a la conversaci&#xF3;n principal, el agente puede delegar la exploraci&#xF3;n en varios subagentes.</p><p>Cada subagente trabaja con su propio contexto y devuelve un resumen de los resultados.</p><p>La conversaci&#xF3;n principal no necesita recibir todas las lecturas de archivos, b&#xFA;squedas y operaciones intermedias realizadas para obtener esas conclusiones.</p><p>Este patr&#xF3;n se conoce como aislamiento del contexto de subagentes.</p><p>Permite trabajar con repositorios grandes sin llenar la ventana de contexto principal con informaci&#xF3;n secundaria.</p><p>La implementaci&#xF3;n consiste en proporcionar a cada subagente una lista <code>messages[]</code> completamente independiente.</p><p>El &#xFA;nico estado que se comparte entre el agente principal y el subagente es el resultado final que devuelve este &#xFA;ltimo.</p><h3 id="definir-el-comportamiento-del-subagente">Definir el comportamiento del subagente</h3><pre><code>SUBAGENT_SYSTEM = (    f&quot;You are a subagent working on &quot;    f&quot;a specific subtask at {os.getcwd()}. &quot;    &quot;Complete your task thoroughly &quot;    &quot;and summarise your findings clearly. &quot;    &quot;Your output will be the only thing &quot;    &quot;the parent agent sees.&quot;)</code></pre><h3 id="crear-un-subagente">Crear un subagente</h3><pre><code>def spawn_subagent(prompt: str) -&gt; str:    &quot;&quot;&quot;Run a fresh agent loop with isolated context.&quot;&quot;&quot;    print(        f&quot;\033[35m  [subagent spawned] &quot;        f&quot;{prompt[:60]}\033[0m&quot;    )    sub_messages = [        {            &quot;role&quot;: &quot;user&quot;,            &quot;content&quot;: prompt        }    ]    while True:        resp = client.messages.create(            model=MODEL,            system=SUBAGENT_SYSTEM,            messages=sub_messages,            tools=EXTENDED_TOOLS,            max_tokens=8000,        )        sub_messages.append({            &quot;role&quot;: &quot;assistant&quot;,            &quot;content&quot;: resp.content        })        if resp.stop_reason != &quot;tool_use&quot;:            break        results = dispatch_tools(            resp.content,            EXTENDED_DISPATCH        )</code></pre><p>El subagente ejecuta el mismo ciclo b&#xE1;sico que el agente principal.</p><p>Tambi&#xE9;n dispone de las mismas herramientas.</p><p>La diferencia es que su historial comienza desde cero y su prompt de sistema se concentra en una tarea espec&#xED;fica.</p><p>Cuando termina, los resultados intermedios se descartan y &#xFA;nicamente se devuelve el resumen final.</p><h3 id="registrar-la-herramienta">Registrar la herramienta</h3><p>Para permitir que el modelo decida cu&#xE1;ndo crear un subagente, debemos registrarlo como una herramienta.</p><pre><code>SUBAGENT_TOOLS = EXTENDED_TOOLS + [    {        &quot;name&quot;: &quot;spawn_subagent&quot;,        &quot;description&quot;: (            &quot;Spawn an isolated subagent &quot;            &quot;to handle a subtask in a fresh context. &quot;            &quot;Use for exploration tasks, risky operations, &quot;            &quot;or any work that would generate large &quot;            &quot;amounts of intermediate output &quot;            &quot;that the main conversation does not need. &quot;            &quot;Returns only the subagent&apos;s final summary.&quot;        ),        &quot;input_schema&quot;: {            &quot;type&quot;: &quot;object&quot;,            &quot;properties&quot;: {                &quot;prompt&quot;: {                    &quot;type&quot;: &quot;string&quot;                }            },            &quot;required&quot;: [&quot;prompt&quot;]        }    }]</code></pre><p>Actualizamos el registro de ejecuci&#xF3;n:</p><pre><code>SUBAGENT_DISPATCH = {    **EXTENDED_DISPATCH,    &quot;spawn_subagent&quot;: lambda inp: spawn_subagent(        inp[&quot;prompt&quot;]    ),}</code></pre><h3 id="prueba-con-un-repositorio-completo">Prueba con un repositorio completo</h3><p>Solicitamos:</p><pre><code>Analiza toda la base de c&#xF3;digo y proporciona
un resumen completo de su arquitectura.</code></pre><p>El agente principal crea un subagente para explorar los archivos <a href="https://codigoencasa.com/">Python</a>.</p><p>El subagente encuentra 25 archivos y comienza a analizarlos.</p><pre><code>[subagent] [glob] agents/**/*.py
           &#x2192; 25 files found

[subagent] [read] agents/core.py
[subagent] [read] agents/s01_agent_loop.py
[subagent] [read] agents/s02_tool_use.py

... 22 lecturas adicionales</code></pre><p>Despu&#xE9;s devuelve una conclusi&#xF3;n:</p><pre><code>core.py exporta el cliente, las herramientas
y los registros de ejecuci&#xF3;n.

Cada archivo de sesi&#xF3;n importa la base
compartida y a&#xF1;ade un mecanismo espec&#xED;fico.</code></pre><p>La conversaci&#xF3;n principal registra una sola llamada a herramienta, aunque el subagente realiz&#xF3; 25 operaciones.</p><p>Sin aislamiento, el contexto principal habr&#xED;a acumulado el contenido de todos esos archivos.</p><p>La ventaja es que el agente principal puede seguir razonando sobre la arquitectura general, en lugar de dedicar parte de su contexto a informaci&#xF3;n de bajo nivel.</p><h1 id="fase-2-gesti%C3%B3n-del-conocimiento-y-del-contexto">Fase 2. Gesti&#xF3;n del conocimiento y del contexto</h1><p>En esta fase incorporamos la infraestructura que permite al agente ir m&#xE1;s all&#xE1; de una &#xFA;nica sesi&#xF3;n.</p><p>El objetivo es cargar conocimientos especializados &#xFA;nicamente cuando se necesitan, comprimir el historial antes de que afecte a la calidad del razonamiento y conservar informaci&#xF3;n persistente en disco.</p><p>Estos mecanismos permiten que el agente retome tareas despu&#xE9;s de reinicios y mantenga un contexto de trabajo &#xFA;til durante sesiones prolongadas.</p><h2 id="5-carga-de-habilidades-bajo-demanda">5. Carga de habilidades bajo demanda</h2><p>Uno de los errores m&#xE1;s costosos en Harness Engineering es introducir en el prompt de sistema toda la informaci&#xF3;n que el modelo podr&#xED;a necesitar.</p><p>Imaginemos un prompt que contiene instrucciones sobre procesamiento de PDF, revisi&#xF3;n de c&#xF3;digo, despliegues y auditor&#xED;as de seguridad.</p><p>Ese prompt podr&#xED;a consumir miles de tokens en cada llamada a la API, aunque la mayor parte del contenido no tenga relaci&#xF3;n con la tarea actual.</p><p><a href="https://codigoencasa.com/">Claude Code</a> aborda este problema mediante un patr&#xF3;n conocido como divulgaci&#xF3;n progresiva, o progressive disclosure.</p><p>El prompt de sistema contiene &#xFA;nicamente descripciones breves de las habilidades disponibles.</p><p>Cuando el modelo identifica que necesita una habilidad especializada, llama a una funci&#xF3;n como <code>load_skill()</code> para incorporar las instrucciones completas al contexto.</p><p>De esta forma, el coste de contexto se produce &#xFA;nicamente cuando el conocimiento resulta relevante.</p><p>Es posible tener cientos de habilidades instaladas sin cargar todas sus instrucciones en cada interacci&#xF3;n.</p><h3 id="estructura-de-las-habilidades">Estructura de las habilidades</h3><pre><code>skills/
&#x251C;&#x2500;&#x2500; agent-builder/
&#x2502;   &#x2514;&#x2500;&#x2500; SKILL.md
&#x251C;&#x2500;&#x2500; code-review/
&#x2502;   &#x2514;&#x2500;&#x2500; SKILL.md
&#x2514;&#x2500;&#x2500; pdf/
    &#x2514;&#x2500;&#x2500; SKILL.md</code></pre><p>Una habilidad incluye metadatos que permiten identificarla y un conjunto de instrucciones que indican c&#xF3;mo realizar una tarea.</p><p>Por ejemplo:</p><pre><code>---
name: code-review
description: Use when asked to review code,
             audit a file for bugs,
             check quality, or suggest improvements.
---

# Code Review Skill

## Review process

1. Read the full file before commenting
2. Categorise issues: BUG / SECURITY / PERF / STYLE / SUGGEST
3. Cite file and line number for every finding
4. End with a deploy-readiness summary</code></pre><p>El mecanismo de descubrimiento explora el directorio de habilidades al iniciar el sistema.</p><p>Lee los metadatos de cada archivo <code>SKILL.md</code> y construye un registro ligero que posteriormente se incorpora al prompt de sistema.</p><h3 id="descubrir-las-habilidades-disponibles">Descubrir las habilidades disponibles</h3><pre><code>SKILLS_DIR = Path(__file__).parent.parent / &quot;skills&quot;def discover_skills() -&gt; dict[str, str]:    skills = {}    for skill_dir in sorted(SKILLS_DIR.iterdir()):        skill_md = skill_dir / &quot;SKILL.md&quot;        if skill_dir.is_dir() and skill_md.exists():            lines = skill_md.read_text(                encoding=&quot;utf-8&quot;            ).splitlines()            desc = &quot;&quot;            in_frontmatter = False            for line in lines:                if line.strip() == &quot;---&quot;:                    in_frontmatter = not in_frontmatter                    continue                if (                    not in_frontmatter                    and line.strip()                    and not line.startswith(&quot;#&quot;)                ):                    desc = line.strip()[:100]                    break            skills[skill_dir.name] = (                desc or &quot;No description.&quot;            )    return skills</code></pre><h3 id="cargar-una-habilidad">Cargar una habilidad</h3><pre><code>def load_skill(name: str) -&gt; str:    skill_path = SKILLS_DIR / name / &quot;SKILL.md&quot;    if not skill_path.exists():        return (            f&quot;Error: skill &apos;{name}&apos; not found. &quot;            &quot;Use list_skills to see available.&quot;        )    return (        f&quot;=== SKILL: {name} ===\n&quot;        f&quot;{skill_path.read_text(encoding=&apos;utf-8&apos;)}&quot;    )</code></pre><p>El <a href="https://codigoencasa.com/">prompt</a> de sistema referencia las habilidades sin cargar todo su contenido.</p><pre><code>_skill_list = &quot;\n&quot;.join(    f&quot;  - {n}: {d}&quot;    for n, d in discover_skills().items())SYSTEM = (    f&quot;You are a coding agent at {os.getcwd()}.\n&quot;    &quot;When a task requires specialised knowledge, &quot;    &quot;call load_skill(name) to get full instructions &quot;    &quot;before starting. Do NOT guess.\n\n&quot;    f&quot;Available skills:\n{_skill_list}&quot;)</code></pre><h3 id="prueba-del-sistema-de-habilidades">Prueba del sistema de habilidades</h3><p>Solicitamos:</p><pre><code>Revisa agents/core.py para identificar errores,
problemas de seguridad y calidad del c&#xF3;digo.</code></pre><p>El agente comienza cargando la habilidad correspondiente.</p><pre><code>[load_skill] code-review</code></pre><p>Despu&#xE9;s lee el archivo y realiza b&#xFA;squedas concretas.</p><pre><code>[read] agents/core.py

[grep] def run_bash
[grep] subprocess.run</code></pre><p>El an&#xE1;lisis identifica tres problemas.</p><p>Seguridad: la utilizaci&#xF3;n de <code>shell=True</code> con entradas no validadas puede permitir la inyecci&#xF3;n de comandos.</p><p>Rendimiento: la funci&#xF3;n <code>run_grep</code> crea un proceso nuevo para cada b&#xFA;squeda, sin aprovechar resultados anteriores.</p><p>Estilo: <code>run_read</code> puede devolver una cadena vac&#xED;a para determinados archivos, en lugar de ofrecer una respuesta descriptiva.</p><p>El resultado concluye que existe un problema de seguridad que debe resolverse antes del despliegue.</p><p>La habilidad no aumenta por s&#xED; sola la capacidad del modelo. Su funci&#xF3;n es proporcionar un procedimiento consistente para revisar c&#xF3;digo y presentar resultados con una estructura definida.</p><h2 id="6-compresi%C3%B3n-del-contexto-en-tres-niveles">6. Compresi&#xF3;n del contexto en tres niveles</h2><p>Todas las sesiones prolongadas encuentran el mismo problema: la ventana de contexto termina llen&#xE1;ndose.</p><p>Las salidas de herramientas, resultados intermedios e interacciones anteriores ocupan espacio que podr&#xED;a utilizarse para informaci&#xF3;n relevante de la tarea actual.</p><p>El art&#xED;culo describe un mecanismo de compresi&#xF3;n de <a href="https://codigoencasa.com/">Claude Code</a> que se activa autom&#xE1;ticamente cuando se alcanza aproximadamente el 92 % de utilizaci&#xF3;n de la ventana de contexto.</p><p>En lugar de descartar completamente el historial, el sistema lo resume para conservar la informaci&#xF3;n importante mientras reduce el consumo de tokens.</p><p>El resumen tambi&#xE9;n puede escribirse en un archivo Markdown persistente.</p><h3 id="funcionamiento-de-la-compresi%C3%B3n">Funcionamiento de la compresi&#xF3;n</h3><p>La implementaci&#xF3;n utiliza tres niveles.</p><p>Primero conserva literalmente los mensajes recientes porque contienen el contexto activo.</p><p>Despu&#xE9;s comprime las interacciones anteriores en un resumen generado mediante una llamada al modelo.</p><p>Finalmente guarda ese resumen en <code>.agent_memory.md</code>, permitiendo que una nueva sesi&#xF3;n recupere informaci&#xF3;n importante.</p><h3 id="configuraci%C3%B3n-inicial">Configuraci&#xF3;n inicial</h3><pre><code>COMPRESS_THRESHOLD = 40_000KEEP_RECENT = 6MEMORY_FILE = Path(&quot;.agent_memory.md&quot;)</code></pre><p>En este ejemplo, el umbral se expresa en caracteres y equivale aproximadamente a 10.000 tokens estimados.</p><p>Se conservan los &#xFA;ltimos seis mensajes sin modificaciones.</p><h3 id="estimar-el-tama%C3%B1o-del-contexto">Estimar el tama&#xF1;o del contexto</h3><pre><code>def _estimate_size(messages: list) -&gt; int:    total = 0    for msg in messages:        content = msg.get(&quot;content&quot;, &quot;&quot;)        if isinstance(content, str):            total += len(content)        elif isinstance(content, list):            for block in content:                if isinstance(block, dict):                    total += len(                        str(                            block.get(&quot;text&quot;, &quot;&quot;)                            or block.get(&quot;content&quot;, &quot;&quot;)                        )                    )                elif hasattr(block, &quot;text&quot;):                    total += len(block.text or &quot;&quot;)    return total</code></pre><h3 id="generar-un-resumen">Generar un resumen</h3><pre><code>def _summarize(messages: list) -&gt; str:    text = &quot;\n\n&quot;.join(        f&quot;[{m[&apos;role&apos;]}]: &quot; + (            m[&quot;content&quot;]            if isinstance(m[&quot;content&quot;], str)            else &quot; &quot;.join(                b.get(&quot;text&quot;, &quot;&quot;)                if isinstance(b, dict)                else getattr(b, &quot;text&quot;, &quot;&quot;)                for b in (                    m[&quot;content&quot;]                    if isinstance(m[&quot;content&quot;], list)                    else []                )            )        )        for m in messages    )    resp = client.messages.create(        model=MODEL,        system=(            &quot;Summarise this conversation. &quot;            &quot;Keep all important decisions, &quot;            &quot;code changes, file paths, and context. &quot;            &quot;Be concise but complete.&quot;        ),        messages=[            {                &quot;role&quot;: &quot;user&quot;,                &quot;content&quot;: f&quot;Summarise:\n\n{text[:20000]}&quot;            }        ],        max_tokens=2000,    )</code></pre><p>La funci&#xF3;n de resumen mantiene las decisiones importantes, las modificaciones de c&#xF3;digo, las rutas de archivos y el contexto necesario para continuar.</p><h3 id="activar-la-compresi%C3%B3n-cuando-sea-necesaria">Activar la compresi&#xF3;n cuando sea necesaria</h3><pre><code>def maybe_compress(messages: list) -&gt; bool:    if _estimate_size(messages) &lt; COMPRESS_THRESHOLD:        return False    if len(messages) &lt;= KEEP_RECENT:        return False    old_messages = messages[:-KEEP_RECENT]    recent = messages[-KEEP_RECENT:]    print(        &quot;[compress] context large - &quot;        &quot;summarising older messages...&quot;    )    summary = _summarize(old_messages)    MEMORY_FILE.write_text(        f&quot;# Agent Memory\n&quot;        f&quot;Generated: {datetime.now().isoformat()}\n\n&quot;        f&quot;{summary}\n&quot;    )    messages.clear()    messages.append({        &quot;role&quot;: &quot;user&quot;,        &quot;content&quot;: (            &quot;[Context summary from previous conversation]&quot;            f&quot;\n\n{summary}&quot;        )    })    messages.append({        &quot;role&quot;: &quot;assistant&quot;,        &quot;content&quot;: (            &quot;Understood. I have the full context &quot;            &quot;from our previous work.&quot;        )    })    messages.extend(recent)    return True</code></pre><p>La compresi&#xF3;n no se activa por tiempo transcurrido, sino por el tama&#xF1;o estimado del contexto.</p><h3 id="recuperar-memoria-al-iniciar-una-sesi%C3%B3n">Recuperar memoria al iniciar una sesi&#xF3;n</h3><pre><code>history = []if MEMORY_FILE.exists():    mem = MEMORY_FILE.read_text()    print(        f&quot;[memory] loaded from {MEMORY_FILE}&quot;    )    history = [        {            &quot;role&quot;: &quot;user&quot;,            &quot;content&quot;: f&quot;[Loaded memory]\n\n{mem}&quot;        },        {            &quot;role&quot;: &quot;assistant&quot;,            &quot;content&quot;: &quot;Memory loaded. Ready to continue.&quot;        }    ]</code></pre><h3 id="resultado-de-la-prueba">Resultado de la prueba</h3><p>El agente recibe una tarea para agregar gesti&#xF3;n de errores a las funciones de <code>core.py</code> y crear pruebas.</p><p>Durante la ejecuci&#xF3;n lee archivos, escribe nuevas implementaciones y ejecuta pruebas.</p><p>Despu&#xE9;s de acumular suficiente historial, se activa la compresi&#xF3;n.</p><pre><code>[compress] context large -
summarising older messages...

[compress] 18 messages &#x2192; 1 summary

saved to .agent_memory.md</code></pre><p>Los 18 mensajes anteriores se convierten en un &#xFA;nico bloque de contexto.</p><p>Cuando comienza otra sesi&#xF3;n, ese resumen se recupera desde el archivo persistente.</p><p>El agente puede continuar trabajando sin necesitar que todas las interacciones anteriores se vuelvan a introducir en cada llamada a la API.</p><h2 id="7-grafo-persistente-de-dependencias-entre-tareas">7. Grafo persistente de dependencias entre tareas</h2><p>La compresi&#xF3;n del contexto y el seguimiento de tareas resuelven problemas diferentes.</p><p>La compresi&#xF3;n determina qu&#xE9; informaci&#xF3;n conserva el modelo.</p><p>El grafo de tareas determina qu&#xE9; trabajos debe realizar el agente, cu&#xE1;les ha completado y qu&#xE9; dependencias existen entre ellos.</p><p>A diferencia de un plan limitado a una sesi&#xF3;n, el grafo permite mantener el estado del proyecto despu&#xE9;s de cerrar procesos, reiniciar sesiones o incluso reiniciar el equipo.</p><p>Cada tarea dispone de un identificador, una descripci&#xF3;n, un estado, una prioridad y una lista de tareas que deben completarse previamente.</p><p>El grafo se almacena en <code>.agent_tasks.json</code>.</p><h3 id="configurar-el-almacenamiento">Configurar el almacenamiento</h3><pre><code>TASKS_FILE = Path(&quot;.agent_tasks.json&quot;)_TASKS_LOCK = threading.Lock()def _load() -&gt; list:    if TASKS_FILE.exists():        return json.loads(TASKS_FILE.read_text())    return []def _save(tasks: list):    TASKS_FILE.write_text(        json.dumps(tasks, indent=2)    )</code></pre><h3 id="crear-tareas-con-dependencias">Crear tareas con dependencias</h3><pre><code>def run_task_create(    description: str,    depends_on: list = None,    priority: str = &quot;medium&quot;) -&gt; str:    with _TASKS_LOCK:        tasks = _load()        task = {            &quot;id&quot;: uuid.uuid4().hex[:8],            &quot;description&quot;: description,            &quot;status&quot;: &quot;pending&quot;,            &quot;priority&quot;: priority,            &quot;depends_on&quot;: depends_on or [],            &quot;result&quot;: &quot;&quot;,        }        tasks.append(task)        _save(tasks)    return (        f&quot;created task {task[&apos;id&apos;]}: &quot;        f&quot;{description}&quot;    )</code></pre><h3 id="seleccionar-la-siguiente-tarea-disponible">Seleccionar la siguiente tarea disponible</h3><pre><code>def run_task_next() -&gt; str:    tasks = _load()    done_ids = {        t[&quot;id&quot;]        for t in tasks        if t[&quot;status&quot;] == &quot;done&quot;    }    priorities = {        &quot;high&quot;: 0,        &quot;medium&quot;: 1,        &quot;low&quot;: 2    }    for t in sorted(        tasks,        key=lambda x: priorities[x[&quot;priority&quot;]]    ):        if t[&quot;status&quot;] != &quot;pending&quot;:            continue        if all(            dep in done_ids            for dep in t.get(&quot;depends_on&quot;, [])        ):            return (                f&quot;[{t[&apos;id&apos;]}] &quot;                f&quot;[{t[&apos;priority&apos;]}] &quot;                f&quot;{t[&apos;description&apos;]}&quot;            )    return &quot;(no unblocked tasks available)&quot;</code></pre><h3 id="actualizar-el-estado-de-una-tarea">Actualizar el estado de una tarea</h3><pre><code>def run_task_update(    task_id: str,    status: str,    result: str = &quot;&quot;) -&gt; str:    with _TASKS_LOCK:        tasks = _load()        for t in tasks:            if t[&quot;id&quot;].startswith(task_id):                t[&quot;status&quot;] = status                if result:                    t[&quot;result&quot;] = result                _save(tasks)                return (                    f&quot;task {t[&apos;id&apos;]} &#x2192; {status}&quot;                )    return f&quot;Error: task &apos;{task_id}&apos; not found&quot;</code></pre><p>El bloqueo mediante <code>threading.Lock()</code> es importante porque varios agentes podr&#xED;an intentar modificar el grafo simult&#xE1;neamente.</p><p>Sin un mecanismo de sincronizaci&#xF3;n, dos agentes podr&#xED;an leer el mismo estado, modificarlo de manera independiente y sobrescribir accidentalmente los cambios del otro.</p><p>El bloqueo protege las operaciones concurrentes de lectura y escritura dentro del mismo proceso.</p><h3 id="ejemplo-migrar-las-herramientas-a-ejecuci%C3%B3n-as%C3%ADncrona">Ejemplo: migrar las herramientas a ejecuci&#xF3;n as&#xED;ncrona</h3><p>Solicitamos al agente:</p><pre><code>Necesitamos migrar toda la base de c&#xF3;digo
para utilizar implementaciones as&#xED;ncronas.

Divide el trabajo en tareas, identifica
las dependencias y comienza la ejecuci&#xF3;n.</code></pre><p>El agente crea el siguiente conjunto de tareas:</p><p>Auditar todas las funciones s&#xED;ncronas de <code>core.py</code>.</p><p>Crear versiones as&#xED;ncronas de <code>run_bash</code>, <code>run_read</code> y <code>run_write</code>.</p><p>Crear versiones as&#xED;ncronas de <code>run_grep</code> y <code>run_glob</code>.</p><p>Actualizar el registro <code>ASYNC_DISPATCH</code>.</p><p>Modificar <code>s18_parallel_tools.py</code>.</p><p>Ejecutar todas las pruebas.</p><p>Las tareas de implementaci&#xF3;n dependen de la auditor&#xED;a inicial.</p><p>La actualizaci&#xF3;n del registro depende de que las implementaciones as&#xED;ncronas est&#xE9;n disponibles.</p><p>Las pruebas finales dependen de que las modificaciones anteriores hayan terminado.</p><p>El agente ejecuta los trabajos respetando este orden.</p><pre><code>[task_next]
[a3f2c891] Audit sync functions

[task_update] a3f2c891 &#x2192; done

[task_next]
[b7d1e445] Write async bash/read/write

[task_update] b7d1e445 &#x2192; done

[task_next]
[c9f3a112] Write async grep/glob

[task_update] c9f3a112 &#x2192; done

[task_next]
[d2e8b334] Update ASYNC_DISPATCH

[task_update] d2e8b334 &#x2192; done

[bash] python -m pytest tests/ -q

44 passed in 2.3s</code></pre><p>El resultado confirma que las seis tareas se completaron correctamente y las 44 pruebas finalizaron sin errores.</p><p>Si el proceso se hubiera detenido despu&#xE9;s de la tercera tarea, al reiniciarse podr&#xED;a recuperar el grafo y continuar desde el siguiente trabajo pendiente.</p><p>Esa persistencia es la principal diferencia entre un plan de una sola sesi&#xF3;n y un sistema de gesti&#xF3;n de proyectos basado en dependencias.</p><h1 id="fase-3-ejecuci%C3%B3n-as%C3%ADncrona-y-equipos-multiagente">Fase 3. Ejecuci&#xF3;n as&#xED;ncrona y equipos multiagente</h1><p>La tercera fase aborda las limitaciones de un &#xFA;nico agente y una sola ventana de contexto.</p><p>Cuando una tarea requiere ejecutar procesos lentos, analizar varios componentes o modificar m&#xFA;ltiples archivos, un solo hilo de ejecuci&#xF3;n puede convertirse en un cuello de botella.</p><p>Esta fase incorpora ejecuci&#xF3;n en segundo plano, agentes especializados persistentes, protocolos de comunicaci&#xF3;n, asignaci&#xF3;n aut&#xF3;noma de tareas y aislamiento de archivos mediante <a href="https://codigoencasa.com/">Git</a> Worktrees.</p><h2 id="8-ejecuci%C3%B3n-de-tareas-en-segundo-plano-con-notificaciones">8. Ejecuci&#xF3;n de tareas en segundo plano con notificaciones</h2><p>Cuando Claude ejecuta una bater&#xED;a de pruebas, compila un proyecto o realiza una migraci&#xF3;n de base de datos, no siempre necesita permanecer inactivo hasta recibir el resultado.</p><p>Puede iniciar una operaci&#xF3;n en segundo plano, continuar trabajando y recibir una notificaci&#xF3;n cuando termine.</p><p>Sin esta capacidad, un agente queda limitado por la duraci&#xF3;n de su llamada a herramienta m&#xE1;s lenta.</p><p>Por ejemplo, si ejecutar las pruebas requiere 45 segundos, un sistema bloqueante debe esperar ese tiempo antes de realizar cualquier otra operaci&#xF3;n.</p><p>La ejecuci&#xF3;n en segundo plano permite separar el trabajo operativo del ciclo de razonamiento del agente.</p><h3 id="crear-una-cola-de-notificaciones">Crear una cola de notificaciones</h3><pre><code>import threadingimport queueimport subprocess_BG_QUEUE: queue.Queue = queue.Queue()</code></pre><h3 id="ejecutar-comandos-en-segundo-plano">Ejecutar comandos en segundo plano</h3><pre><code>def run_bash_background(    command: str,    label: str = &quot;&quot;) -&gt; str:    label = label or command[:40]    def _run():        print(f&quot;[bg] started: {label}&quot;)        try:            r = subprocess.run(                command,                shell=True,                capture_output=True,                text=True,                timeout=300,                cwd=os.getcwd()            )            output = (                (r.stdout + r.stderr).strip()[:2000]                or &quot;(no output)&quot;            )            status = &quot;completed&quot;        except subprocess.TimeoutExpired:            output = (                &quot;Error: operation timed out after 300s&quot;            )            status = &quot;timed out&quot;        except Exception as e:            output = f&quot;Error: {e}&quot;            status = &quot;failed&quot;        _BG_QUEUE.put(            f&quot;[Background task &apos;{label}&apos; &quot;            f&quot;{status}]\n{output}&quot;        )        print(f&quot;[bg] {label} {status}&quot;)    thread = threading.Thread(        target=_run,        daemon=True    )    thread.start()    return (        f&quot;Background task started: &apos;{label}&apos;. &quot;        &quot;You will be notified when it completes.&quot;    )</code></pre><p>La implementaci&#xF3;n utiliza un hilo por operaci&#xF3;n y una cola compartida para almacenar las notificaciones.</p><p>Cuando una tarea termina, introduce su resultado en la cola.</p><p>El ciclo principal puede consultar esa cola e incorporar los resultados al historial de conversaci&#xF3;n.</p><h3 id="procesar-las-notificaciones">Procesar las notificaciones</h3><pre><code>def agent_loop_with_bg(messages: list):    stream_loop(        messages,        BG_TOOLS,        BG_DISPATCH,        system=SYSTEM    )    while not _BG_QUEUE.empty():        notification = _BG_QUEUE.get_nowait()        print(&quot;[bg] notification injected&quot;)        messages.append({            &quot;role&quot;: &quot;user&quot;,            &quot;content&quot;: notification        })        stream_loop(            messages,            BG_TOOLS,            BG_DISPATCH,            system=SYSTEM        )</code></pre><p>El agente dispone ahora de una herramienta denominada <code>run_bash_background()</code>.</p><p>Puede utilizarla cuando necesita iniciar una operaci&#xF3;n prolongada sin bloquear el hilo principal.</p><h3 id="ejemplo-de-ejecuci%C3%B3n-simult%C3%A1nea">Ejemplo de ejecuci&#xF3;n simult&#xE1;nea</h3><p>Solicitamos:</p><pre><code>Ejecuta todas las pruebas en segundo plano.

Mientras se ejecutan, a&#xF1;ade docstrings
a las funciones de core.py que no tengan
documentaci&#xF3;n.</code></pre><p>El agente inicia las pruebas:</p><pre><code>[bash_background]
python -m pytest tests/ -v --tb=short

Background task started: &apos;full test suite&apos;</code></pre><p>Mientras se ejecutan, lee el archivo, identifica las funciones sin documentaci&#xF3;n y a&#xF1;ade los docstrings correspondientes.</p><p>Posteriormente recibe la notificaci&#xF3;n:</p><pre><code>[bg] full test suite completed

44 passed in 2.1s</code></pre><p>El resultado indica que se documentaron ocho funciones y que todas las pruebas se completaron correctamente.</p><p>La ejecuci&#xF3;n concurrente permite que el tiempo total se aproxime a la duraci&#xF3;n de la operaci&#xF3;n m&#xE1;s lenta, en lugar de sumar obligatoriamente los tiempos de ambas.</p><h2 id="9-agentes-persistentes-con-buzones-jsonl">9. Agentes persistentes con buzones JSONL</h2><p>Los subagentes convencionales suelen crearse para realizar una tarea espec&#xED;fica y desaparecer cuando terminan.</p><p>Sin embargo, los proyectos de ingenier&#xED;a tambi&#xE9;n se benefician de contar con especialistas que mantengan su contexto durante varias tareas.</p><p>Por ejemplo, podemos utilizar un agente especializado en explorar bases de c&#xF3;digo y otro dedicado a escribir y modificar archivos.</p><p>Los agentes persistentes conservan informaci&#xF3;n sobre el proyecto durante las diferentes actividades que reciben.</p><h3 id="arquitectura-de-comunicaci%C3%B3n">Arquitectura de comunicaci&#xF3;n</h3><p>Cada integrante del equipo ejecuta su propio ciclo de agente en un hilo de segundo plano.</p><p>Dispone de una especializaci&#xF3;n y de un archivo <a href="https://codigoencasa.com/">JSONL</a> que funciona como bandeja de entrada.</p><p>El agente principal env&#xED;a tareas escribiendo mensajes en el buz&#xF3;n del especialista.</p><p>El especialista lee el mensaje, ejecuta el trabajo y devuelve el resultado mediante el buz&#xF3;n del agente principal.</p><p>Esta comunicaci&#xF3;n es as&#xED;ncrona: el agente principal puede continuar trabajando mientras sus colaboradores ejecutan otras tareas.</p><h3 id="configurar-los-buzones">Configurar los buzones</h3><pre><code>MAILBOX_DIR = Path(&quot;.mailboxes&quot;)MAILBOX_DIR.mkdir(exist_ok=True)TEAMMATES = {    &quot;explorer&quot;: (        f&quot;You are an explorer agent specialising &quot;        f&quot;in reading and understanding codebases &quot;        f&quot;at {os.getcwd()}. &quot;        &quot;You excel at mapping architecture, &quot;        &quot;finding patterns, and understanding &quot;        &quot;how components connect. &quot;        &quot;Use read, glob, grep.&quot;    ),    &quot;writer&quot;: (        f&quot;You are a writer agent specialising &quot;        f&quot;in creating and editing code &quot;        f&quot;at {os.getcwd()}. &quot;        &quot;You excel at implementing changes cleanly, &quot;        &quot;following existing patterns, and writing tests. &quot;        &quot;Use write, read, bash.&quot;    )}</code></pre><h3 id="enviar-y-recibir-mensajes">Enviar y recibir mensajes</h3><pre><code>def _inbox(name: str) -&gt; Path:    return MAILBOX_DIR / f&quot;{name}.jsonl&quot;def _send(to: str, frm: str, body: str):    with open(_inbox(to), &quot;a&quot;) as f:        f.write(            json.dumps({                &quot;from&quot;: frm,                &quot;body&quot;: body            }) + &quot;\n&quot;        )def _receive(name: str) -&gt; list[dict]:    path = _inbox(name)    if not path.exists():        return []    messages = [        json.loads(line)        for line in path.read_text().splitlines()        if line.strip()    ]    path.write_text(&quot;&quot;)    return messages</code></pre><p>El sistema de buzones es deliberadamente sencillo.</p><p>Cada mensaje incluye el remitente y su contenido, y se almacena como una l&#xED;nea <a href="https://codigoencasa.com/">JSON.</a></p><p>Cuando el agente recibe los mensajes, vac&#xED;a el archivo para evitar procesarlos nuevamente.</p><h3 id="ejecutar-un-agente-persistente">Ejecutar un agente persistente</h3><pre><code>def _run_teammate(    name: str,    system: str,    stop_event: threading.Event):    print(f&quot;[{name}] ready and listening&quot;)    while not stop_event.is_set():        for msg in _receive(name):            print(                f&quot;[{name}] received: &quot;                f&quot;{msg[&apos;body&apos;][:60]}&quot;            )            sub_messages = [                {                    &quot;role&quot;: &quot;user&quot;,                    &quot;content&quot;: msg[&quot;body&quot;]                }            ]            while True:                resp = client.messages.create(                    model=MODEL,                    system=system,                    messages=sub_messages,                    tools=EXTENDED_TOOLS,                    max_tokens=4000                )                sub_messages.append({                    &quot;role&quot;: &quot;assistant&quot;,                    &quot;content&quot;: resp.content</code></pre><p>El agente comprueba peri&#xF3;dicamente su buz&#xF3;n y procesa las instrucciones recibidas.</p><p>Despu&#xE9;s devuelve el resultado al remitente.</p><h3 id="prueba-de-colaboraci%C3%B3n-multiagente">Prueba de colaboraci&#xF3;n multiagente</h3><p>La tarea consiste en analizar la arquitectura de comunicaci&#xF3;n entre agentes y a&#xF1;adir registros estructurados a las funciones correspondientes.</p><p>El agente principal delega la exploraci&#xF3;n al especialista <code>explorer</code>.</p><p>Este identifica cinco funciones relacionadas con la comunicaci&#xF3;n en dos archivos.</p><p>Despu&#xE9;s, el especialista <code>writer</code> utiliza esa informaci&#xF3;n para a&#xF1;adir registros con fecha, remitente, destinatario, longitud del mensaje y estado de entrega.</p><p>Los dos especialistas colaboran sin incorporar todas sus operaciones intermedias al contexto del agente principal.</p><p>La arquitectura permite separar la investigaci&#xF3;n, la implementaci&#xF3;n y la s&#xED;ntesis de resultados.</p><h2 id="10-protocolo-de-comunicaci%C3%B3n-mediante-m%C3%A1quinas-de-estados-finitos">10. Protocolo de comunicaci&#xF3;n mediante m&#xE1;quinas de estados finitos</h2><p>Cuando varios agentes intercambian mensajes simult&#xE1;neamente, pueden aparecer condiciones de carrera y bloqueos.</p><p>Un agente podr&#xED;a enviar una segunda solicitud antes de recibir la respuesta de la primera.</p><p>Tambi&#xE9;n es posible que dos agentes queden esperando indefinidamente una respuesta del otro.</p><p>Para evitar estos problemas necesitamos establecer reglas sobre cu&#xE1;ndo pueden comunicarse los participantes.</p><p>Una m&#xE1;quina de estados finitos, conocida como <a href="https://codigoencasa.com/">FSM</a> por sus siglas en ingl&#xE9;s, permite controlar esas transiciones.</p><h3 id="los-cuatro-estados-del-agente">Los cuatro estados del agente</h3><p>En nuestra implementaci&#xF3;n, cada agente puede encontrarse en uno de estos estados:</p><p><code>IDLE</code>: disponible, sin una operaci&#xF3;n activa.</p><p><code>REQUESTING</code>: enviando una solicitud.</p><p><code>WAITING</code>: esperando una respuesta.</p><p><code>RESPONDING</code>: procesando una solicitud recibida.</p><p>La regla fundamental del protocolo es que un agente no puede iniciar una nueva solicitud mientras permanece en el estado <code>WAITING</code>.</p><p>Esta restricci&#xF3;n evita determinados conflictos asociados a solicitudes simult&#xE1;neas.</p><h3 id="implementaci%C3%B3n-del-protocolo">Implementaci&#xF3;n del protocolo</h3><pre><code>from enum import Enumclass AgentState(Enum):    IDLE = &quot;idle&quot;    REQUESTING = &quot;requesting&quot;    WAITING = &quot;waiting&quot;    RESPONDING = &quot;responding&quot;class ProtocolAgent:    def __init__(self, name: str, system: str):        self.name = name        self.system = system        self.state = AgentState.IDLE        self._inbox = (            MAILBOX_DIR / f&quot;{name}_proto.jsonl&quot;        )        self._lock = threading.Lock()    def send(        self,        to: &quot;ProtocolAgent&quot;,        message: str    ):        with self._lock:            if self.state == AgentState.WAITING:                return (                    &quot;Error: cannot send while &quot;                    &quot;waiting for a response&quot;                )            self.state = AgentState.REQUESTING</code></pre><h3 id="probar-el-protocolo">Probar el protocolo</h3><p>Solicitamos analizar la cobertura de pruebas de <code>core.py</code> y crear pruebas adicionales para las funciones que no alcancen un 80 % de cobertura de ramas.</p><p>El primer agente analiza la cobertura:</p><p>El resultado muestra una cobertura del 71 % e identifica tres funciones con ramas insuficientemente probadas.</p><p>El segundo agente recibe la tarea de escribir pruebas para esos casos:</p><p>Las transiciones de estado se registran durante todo el proceso.</p><p>El protocolo impide que un agente env&#xED;e una segunda solicitud mientras espera la respuesta de la primera.</p><p>La coordinaci&#xF3;n queda incorporada a la arquitectura y no depende &#xFA;nicamente de que el modelo recuerde c&#xF3;mo debe comunicarse.</p><h2 id="11-asignaci%C3%B3n-aut%C3%B3noma-de-tareas">11. Asignaci&#xF3;n aut&#xF3;noma de tareas</h2><p>El protocolo <a href="https://codigoencasa.com/">FSM</a> controla la comunicaci&#xF3;n, pero todav&#xED;a requiere que un agente principal distribuya el trabajo.</p><p>En proyectos grandes, el coordinador tambi&#xE9;n puede convertirse en un cuello de botella.</p><p>La asignaci&#xF3;n aut&#xF3;noma elimina la necesidad de que un agente central asigne cada tarea.</p><p>Cada integrante examina peri&#xF3;dicamente el grafo compartido y, cuando encuentra una tarea disponible, intenta reservarla para ejecutarla.</p><p>La reserva debe ser at&#xF3;mica para impedir que dos agentes seleccionen el mismo trabajo simult&#xE1;neamente.</p><h3 id="reclamar-una-tarea-de-manera-segura">Reclamar una tarea de manera segura</h3><p>El principio consiste en proteger las operaciones de selecci&#xF3;n y modificaci&#xF3;n del estado mediante un bloqueo.</p><p>De esta forma, el primer agente que obtiene el bloqueo puede reservar la tarea.</p><p>Cuando el siguiente agente consulta el grafo, esa tarea ya no figura como pendiente.</p><p>Esto evita ejecuciones duplicadas y reduce la posibilidad de conflictos.</p><h3 id="ejecuci%C3%B3n-mediante-trabajadores-aut%C3%B3nomos">Ejecuci&#xF3;n mediante trabajadores aut&#xF3;nomos</h3><p>Cada trabajador mantiene un ciclo en el que consulta las tareas disponibles.</p><p>Cuando encuentra una, la reclama y ejecuta el trabajo utilizando su propio contexto y las herramientas registradas.</p><p>Despu&#xE9;s actualiza el resultado en el grafo compartido.</p><p>La asignaci&#xF3;n aut&#xF3;noma permite distribuir tareas sin que el agente principal tenga que intervenir constantemente.</p><p>Tambi&#xE9;n facilita aumentar o reducir el n&#xFA;mero de trabajadores disponibles seg&#xFA;n la carga del proyecto.</p><p>El principio sigue siendo el mismo: el modelo decide c&#xF3;mo resolver cada tarea, pero la infraestructura controla las reservas y los cambios de estado.</p><h2 id="12-aislamiento-de-tareas-mediante-git-worktrees">12. Aislamiento de tareas mediante Git Worktrees</h2><p>La asignaci&#xF3;n aut&#xF3;noma permite que varios agentes trabajen simult&#xE1;neamente, pero genera un problema adicional.</p><p>&#xBF;Qu&#xE9; ocurre cuando dos agentes necesitan modificar archivos del mismo repositorio?</p><p>Si todos comparten el mismo directorio de trabajo, sus operaciones pueden interferir entre s&#xED;.</p><p>Un agente podr&#xED;a modificar un archivo mientras otro est&#xE1; leyendo una versi&#xF3;n anterior.</p><p>Tambi&#xE9;n podr&#xED;an producirse sobrescrituras o cambios dif&#xED;ciles de integrar.</p><p>La soluci&#xF3;n consiste en utilizar <a href="https://codigoencasa.com/">Git</a> Worktrees.</p><p>Un Worktree permite crear un directorio de trabajo independiente asociado al mismo repositorio Git.</p><p>Cada agente dispone de su propia rama y de sus propios archivos, evitando que las modificaciones paralelas afecten directamente a los dem&#xE1;s trabajadores.</p><h2 id="crear-un-worktree-para-una-tarea">Crear un Worktree para una tarea</h2><p>Podemos crear un Worktree de <a href="https://codigoencasa.com/">Git</a> aislado para cada tarea mediante la siguiente funci&#xF3;n:</p><pre><code>def create_worktree(task_id: str) -&gt; tuple[str, str]:    &quot;&quot;&quot;Create an isolated git worktree for a task.&quot;&quot;&quot;    branch = f&quot;task/{task_id}&quot;    path = str(        Path(os.getcwd()).parent        / f&quot;.worktree-{task_id[:8]}&quot;    )    if Path(path).exists():        shutil.rmtree(path, ignore_errors=True)        _git(&quot;worktree&quot;, &quot;remove&quot;, &quot;--force&quot;, path)    # Gestionar conflictos con ramas de ejecuciones anteriores    if _branch_exists(branch):        _git(&quot;branch&quot;, &quot;-D&quot;, branch)    rc, _, err = _git(        &quot;worktree&quot;, &quot;add&quot;, &quot;-b&quot;, branch, path    )    if rc != 0:        raise RuntimeError(            f&quot;Failed to create worktree: {err}&quot;        )    return path, branch</code></pre><p>La funci&#xF3;n crea un directorio de trabajo independiente asociado a una rama espec&#xED;fica de <a href="https://codigoencasa.com/">Git</a>.</p><p>El nombre de la rama se construye a partir del identificador de la tarea. Si existe un directorio anterior, se intenta eliminar antes de crear uno nuevo.</p><p>Tambi&#xE9;n se comprueba si ya existe una rama con ese nombre para evitar conflictos con ejecuciones anteriores.</p><h3 id="ejecutar-un-agente-dentro-de-un-worktree">Ejecutar un agente dentro de un Worktree</h3><pre><code>def run_task_in_worktree(task: dict) -&gt; str:    &quot;&quot;&quot;Run an agent loop in an isolated worktree directory.&quot;&quot;&quot;    task_id = task[&quot;id&quot;]    wt_path, wt_branch = create_worktree(task_id)    system = (        f&quot;You are a coding agent working in isolated directory: {wt_path}. &quot;        f&quot;Task: {task[&apos;description&apos;]}. &quot;        &quot;Your changes are on a separate git branch - you cannot affect other agents. &quot;        &quot;When done, summarise every file you changed.&quot;    )    messages = [        {            &quot;role&quot;: &quot;user&quot;,            &quot;content&quot;: task[&quot;description&quot;]        }    ]    try:        while True:            resp = client.messages.create(</code></pre><p>La funci&#xF3;n ejecuta el ciclo completo de un agente dentro del entorno de trabajo aislado.</p><p>Cada agente tiene acceso a las mismas herramientas, pero trabaja en una rama independiente.</p><p>Cuando termina, la infraestructura elimina el Worktree y realiza las operaciones de limpieza correspondientes, incluso si la ejecuci&#xF3;n falla.</p><h3 id="prueba-dos-agentes-modificando-el-mismo-archivo">Prueba: dos agentes modificando el mismo archivo</h3><p>Podemos probar este mecanismo creando dos tareas que necesiten modificar <code>core.py</code> y ejecutando dos agentes simult&#xE1;neamente.</p><p>Cada agente crear&#xE1; su propio <a href="https://codigoencasa.com/">Worktree</a>, realizar&#xE1; cambios en <code>core.py</code> de manera aislada y ejecutar&#xE1; sus pruebas.</p><p>Cuando ambos terminen, la infraestructura detectar&#xE1; que las dos ramas modificaron el mismo archivo y se&#xF1;alar&#xE1; la necesidad de una revisi&#xF3;n humana antes de fusionarlas.</p><p>La instrucci&#xF3;n utilizada es:</p><pre><code>s12 &gt;&gt; Ejecuta dos tareas en paralelo:

Tarea A:
A&#xF1;adir validaci&#xF3;n de entrada a todas las
funciones de herramientas en core.py.

Tarea B:
A&#xF1;adir instrucciones de registro a todas las
funciones de herramientas en core.py.</code></pre><h3 id="resultado-de-la-ejecuci%C3%B3n">Resultado de la ejecuci&#xF3;n</h3><pre><code>&gt; Thinking...

Running 2 tasks in parallel worktrees...

[task-a] worktree created:
.worktree-a1b2c3d4
(branch: task/a1b2c3d4)

[task-b] worktree created:
.worktree-e5f6a7b8
(branch: task/e5f6a7b8)

[a1b2c3][read] agents/core.py
[e5f6a7][read] agents/core.py

[a1b2c3][write] agents/core.py
(added input validation to run_bash)

[e5f6a7][write] agents/core.py
(added logging to run_bash)

[a1b2c3][write] agents/core.py
(added input validation to run_read)

[e5f6a7][write] agents/core.py
(added logging to run_read)

[a1b2c3][bash]
python -m pytest tests/ -q
&#x2192; 44 passed

[e5f6a7][bash]
python -m pytest tests/ -q
&#x2192; 44 passed

[task-a] completed
[task-b] completed

Conflict detection:

Both branches modified: agents/core.py

Overlap detected on 1 file -
human review required before merging.</code></pre><h3 id="resultados">Resultados</h3><p>Tarea A: se a&#xF1;adi&#xF3; validaci&#xF3;n de entrada a seis funciones de herramientas. Todas las pruebas se completaron correctamente.</p><p>Tarea B: se a&#xF1;adieron registros de actividad a seis funciones de herramientas. Todas las pruebas se completaron correctamente.</p><p>Se detect&#xF3; un conflicto de integraci&#xF3;n: ambas tareas modificaron <code>core.py</code> en ramas diferentes.</p><p>Los cambios son compatibles, pero requieren una revisi&#xF3;n manual antes de integrarse.</p><p>Las ramas <code>task/a1b2c3d4</code> y <code>task/e5f6a7b8</code> est&#xE1;n listas para su revisi&#xF3;n, seg&#xFA;n el resultado mostrado en el art&#xED;culo.</p><h3 id="%C2%BFqu%C3%A9-demuestra-este-ejemplo">&#xBF;Qu&#xE9; demuestra este ejemplo?</h3><p>Ambos agentes leyeron y modificaron <code>core.py</code> simult&#xE1;neamente.</p><p>Sin embargo, como trabajaban en <a href="https://codigoencasa.com/">Worktrees</a> separados, las escrituras de uno no interfirieron con las del otro.</p><p>Cada agente ejecut&#xF3; sus pruebas sobre su propia rama y obtuvo resultados correctos.</p><p>La detecci&#xF3;n de conflictos se ejecut&#xF3; despu&#xE9;s de que ambas tareas terminaran y se&#xF1;al&#xF3; correctamente que una persona debe revisar la integraci&#xF3;n antes de incorporar cualquiera de las ramas a <code>main</code>.</p><p>Este es el modelo de aislamiento m&#xE1;s s&#xF3;lido del repositorio: ejecuci&#xF3;n paralela sin interferencias entre los archivos durante el desarrollo de las tareas.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/KtOMkHZ1myg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Esta IA no quiere hablar contigo&#x2026; quiere controlar tu software"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[10 extensiones, skills y herramientas de Claude Code que pueden mantener tu gasto en tokens por debajo de $13 al día]]></title><description><![CDATA[Esto significa que el trabajo realizado por el subagente no tiene que incorporarse íntegramente a la conversación principal.]]></description><link>https://codigoencasa.com/10-extensiones-skills-y-herramientas-de-claude-code-que-pueden-mantener-tu-gasto-en-tokens-por-debajo-de-13-al-dia/</link><guid isPermaLink="false">6acf7ef2784ce1290c503a2d</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Wed, 14 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/portraits-of-modern-dairy-szwFoeZGY0U-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/portraits-of-modern-dairy-szwFoeZGY0U-unsplash-transformed.jpeg" alt="10 extensiones, skills y herramientas de Claude Code que pueden mantener tu gasto en tokens por debajo de $13 al d&#xED;a"><p>Hola a todos, soy Nitin Gavhane. En este art&#xED;culo analizo habilidades (skills), plugins y herramientas pr&#xE1;cticas para Claude Code que ayudan a reducir el desperdicio de tokens, de modo que una jornada habitual de programaci&#xF3;n se mantenga por debajo de aproximadamente 13 d&#xF3;lares en consumo de API o permita aprovechar durante m&#xE1;s tiempo los l&#xED;mites de una suscripci&#xF3;n.</p><p>Los costos de tokens en <a href="https://codigoencasa.com/">Claude Code</a> provienen principalmente de la acumulaci&#xF3;n excesiva de contexto: archivos CLAUDE.md demasiado grandes que se cargan en cada interacci&#xF3;n, salidas completas de la terminal, lecturas repetidas de archivos, historiales de conversaci&#xF3;n extensos y respuestas demasiado detalladas del modelo.</p><p>Las recomendaciones de Anthropic para gestionar sesiones y varias pruebas de rendimiento realizadas por la comunidad muestran que las sesiones sin control suelen consumir entre 200.000 y 400.000 tokens durante una jornada de trabajo intensa. Con las tarifas actuales de Opus y Sonnet, estos costos pueden acumularse r&#xE1;pidamente. Las herramientas que se presentan a continuaci&#xF3;n est&#xE1;n dise&#xF1;adas para abordar las principales fuentes de ese consumo innecesario.</p><p>Las cifras proceden de archivos <a href="https://codigoencasa.com/">README</a> de los proyectos, pruebas de rendimiento independientes y recomendaciones publicadas por Anthropic. Los resultados var&#xED;an seg&#xFA;n el tama&#xF1;o del c&#xF3;digo base y la forma de trabajar, por lo que los porcentajes deben considerarse puntos de referencia y no garant&#xED;as.</p><h3 id="1-codesight">1. codesight</h3><p><a href="https://github.com/Houseofmvps/codesight">codesight</a> es una herramienta de l&#xED;nea de comandos (CLI) que no requiere dependencias adicionales. Analiza tu proyecto una sola vez y genera un paquete compacto de contexto que incluye un mapa de la estructura, las funciones y exportaciones principales, el grafo de dependencias, las rutas, los esquemas y los puntos de entrada.</p><p>Puedes incorporar el contexto generado a una nueva sesi&#xF3;n de <a href="https://codigoencasa.com/">Claude Code</a> para que el modelo comprenda la organizaci&#xF3;n del proyecto desde el principio, en lugar de consumir entre 25.000 y 60.000 tokens explorando archivos.</p><p>Las reducciones de consumo reportadas se sit&#xFA;an entre 9 y 13 veces en bases de c&#xF3;digo medianas y grandes.</p><p>Instalaci&#xF3;n y uso</p><p>Ejecuta el siguiente comando desde la carpeta ra&#xED;z del proyecto:</p><pre><code>npx codesight</code></pre><p>Para utilizarlo espec&#xED;ficamente con Claude Code:</p><pre><code>npx codesight --profile claude-code</code></pre><p>O bien:</p><pre><code>npx codesight --mcp</code></pre><p>La segunda opci&#xF3;n permite exponer herramientas a trav&#xE9;s de MCP.</p><p>Al comenzar una sesi&#xF3;n, pega el contexto generado o indica a <a href="https://codigoencasa.com/">Claude</a> que consulte los archivos de salida de <code>.codesight</code>.</p><p>Tambi&#xE9;n puedes utilizar opciones adicionales:</p><p><code>--wiki</code>: para generar documentaci&#xF3;n.</p><p><code>--init</code>: para inicializar la configuraci&#xF3;n.</p><p><code>--hook</code>: para configurar la actualizaci&#xF3;n autom&#xE1;tica del contexto.</p><h3 id="2-superpowers-framework">2. Superpowers Framework</h3><p><a href="https://github.com/obra/superpowers">obra/superpowers</a> re&#xFA;ne un conjunto de habilidades para organizar los flujos de trabajo, como brainstorming, planificaci&#xF3;n, desarrollo guiado por pruebas, depuraci&#xF3;n sistem&#xE1;tica y otras tareas.</p><p>Estas habilidades obligan a <a href="https://codigoencasa.com/">Claude</a> a seguir una secuencia de trabajo estructurada:</p><p>Aclarar &#x2192; Dise&#xF1;ar &#x2192; Planificar &#x2192; Programar &#x2192; Verificar.</p><p>Las comparaciones controladas han mostrado un consumo de tokens aproximadamente entre un 9 % y un 14 % menor, adem&#xE1;s de reducir los ciclos innecesarios de iteraci&#xF3;n, porque el agente planifica y realiza pruebas antes de efectuar modificaciones importantes en el c&#xF3;digo.</p><p>Instalaci&#xF3;n y uso</p><p>Dentro de Claude Code, ejecuta:</p><pre><code>/plugin install superpowers@claude-plugins-official</code></pre><p>Tambi&#xE9;n puedes registrar primero el marketplace:</p><pre><code>/plugin marketplace add obra/superpowers-marketplace</code></pre><p>Y despu&#xE9;s instalar el plugin:</p><pre><code>/plugin install superpowers@superpowers-marketplace</code></pre><p>Una vez instalado, las habilidades se activan autom&#xE1;ticamente cuando las tareas son relevantes.</p><p>Tambi&#xE9;n puedes invocarlas expl&#xED;citamente mediante estos comandos:</p><pre><code>/brainstorm
/write-plan
/execute-plan</code></pre><p>Si las habilidades no aparecen, reinicia <a href="https://codigoencasa.com/">Claude</a> Code o inicia una sesi&#xF3;n nueva.</p><h3 id="3-cost-mode-skill">3. cost-mode Skill</h3><p><a href="https://github.com/Sagargupta16/claude-cost-optimizer">Sagargupta16/claude-cost-optimizer</a> incluye una habilidad instalable llamada <code>cost-mode</code>, dise&#xF1;ada para optimizar el consumo de tokens.</p><p>Esta herramienta elimina contenido innecesario de las respuestas, recomienda modelos m&#xE1;s econ&#xF3;micos para tareas sencillas, recuerda cu&#xE1;ndo conviene compactar el contexto y prioriza los cambios puntuales mediante diferencias de c&#xF3;digo (diffs) en lugar de reescribir archivos completos.</p><p>Los ahorros habituales reportados se sit&#xFA;an entre el 30 % y el 60 % en cargas de trabajo variadas.</p><p>Instalaci&#xF3;n y uso</p><p>Primero, registra el marketplace:</p><pre><code>/plugin marketplace add Sagargupta16/claude-cost-optimizer</code></pre><p>Despu&#xE9;s, instala la habilidad:</p><pre><code>/plugin install cost-mode@claude-cost-optimizer</code></pre><p>Como alternativa, puedes instalarla mediante:</p><pre><code>npx skills add Sagargupta16/claude-cost-optimizer</code></pre><p>Una vez instalada, puedes activar diferentes modos dentro de cualquier sesi&#xF3;n:</p><pre><code>/cost-mode
/cost-mode lite
/cost-mode strict
/cost-mode off</code></pre><p>El primer comando activa el modo est&#xE1;ndar. Los modos <code>lite</code> y <code>strict</code> permiten ajustar el nivel de optimizaci&#xF3;n, mientras que <code>off</code> desactiva la habilidad.</p><p>La configuraci&#xF3;n permanece activa durante toda la sesi&#xF3;n hasta que decidas desactivarla.</p><h3 id="4-rtk-rust-token-killer">4. rtk (Rust Token Killer)</h3><p><a href="https://github.com/rtk-ai/rtk">rtk-ai/rtk</a> funciona como una capa intermedia entre <a href="https://codigoencasa.com/">Claude Code</a> y la terminal.</p><p>Intercepta comandos habituales, como <code>git status</code>, herramientas de ejecuci&#xF3;n de pruebas, <code>ls</code>, <code>grep</code> y otros, para devolver res&#xFA;menes comprimidos en lugar de mostrar toda la salida original.</p><p>Seg&#xFA;n las cifras publicadas por el proyecto, permite reducir entre un 60 % y un 90 % los tokens consumidos por los resultados de esos comandos.</p><p>Sin embargo, las pruebas de rendimiento independientes han mostrado resultados variados, por lo que conviene medir su impacto en tu propia carga de trabajo.</p><p>Instalaci&#xF3;n y uso</p><p>Puedes instalarlo con el siguiente comando:</p><pre><code>curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/master/install.sh | sh</code></pre><p>Otra opci&#xF3;n es utilizar Homebrew:</p><pre><code>brew install rtk</code></pre><p>O instalarlo mediante Cargo:</p><pre><code>cargo install --git https://github.com/rtk-ai/rtk</code></pre><p>Para verificar la instalaci&#xF3;n, ejecuta:</p><pre><code>rtk gain</code></pre><p>Este comando debe mostrar el panel de ahorro de tokens y no un mensaje indicando que el comando no existe.</p><p>Despu&#xE9;s, ejecuta:</p><pre><code>rtk init -g</code></pre><p>Cuando el sistema solicite autorizaci&#xF3;n para modificar el archivo <code>settings.json</code>, responde <code>y</code>.</p><p>Reinicia <a href="https://codigoencasa.com/">Claude Code</a>.</p><p>A partir de ese momento, los comandos habituales se reescribir&#xE1;n autom&#xE1;ticamente para optimizar sus resultados.</p><p>Para confirmar que el hook est&#xE1; activo, utiliza:</p><pre><code>rtk init --show</code></pre><h3 id="5-headroom">5. Headroom</h3><p><a href="https://extraheadroom.com/">Headroom</a> y su herramienta de l&#xED;nea de comandos de c&#xF3;digo abierto, disponible en <a href="https://github.com/headroomlabs-ai/headroom">headroomlabs-ai/headroom</a>, funcionan como un proxy local que comprime las salidas extensas de herramientas, registros de actividad (logs) y contenido repetitivo antes de que ingresen al contexto de la conversaci&#xF3;n.</p><p>Los ahorros reportados a nivel de sesi&#xF3;n se sit&#xFA;an aproximadamente entre el 40 % y el 50 % en cargas de trabajo reales con agentes de IA.</p><p>Instalaci&#xF3;n y uso</p><p>Puedes instalar Headroom mediante:</p><pre><code>pip install &quot;headroom-ai[all]&quot;</code></pre><p>Tambi&#xE9;n puedes utilizar la aplicaci&#xF3;n de escritorio disponible en su sitio web o instalarla mediante Homebrew Cask.</p><p>Despu&#xE9;s de la instalaci&#xF3;n, ejecuta:</p><pre><code>headroom wrap claude</code></pre><p>Este comando inicia el proxy y ejecuta <a href="https://codigoencasa.com/">Claude Code.</a></p><p>Si &#xFA;nicamente deseas utilizarlo con herramientas MCP, ejecuta:</p><pre><code>headroom mcp install</code></pre><p>Despu&#xE9;s, inicia <a href="https://codigoencasa.com/">Claude Code</a> normalmente.</p><p>La compresi&#xF3;n es reversible, por lo que Claude puede recuperar el contenido original cuando sea necesario.</p><h3 id="6-habilidades-progresivas-en-lugar-de-un-archivo-claudemd-demasiado-grande">6. Habilidades progresivas en lugar de un archivo CLAUDE.md demasiado grande</h3><p>La documentaci&#xF3;n de Anthropic y varias gu&#xED;as de optimizaci&#xF3;n coinciden en una misma recomendaci&#xF3;n: el archivo <code>CLAUDE.md</code> se carga en cada interacci&#xF3;n.</p><p>Por este motivo, conviene trasladar cualquier instrucci&#xF3;n que ocupe m&#xE1;s de un par de frases a habilidades independientes.</p><p>Las habilidades &#xFA;nicamente cargan una descripci&#xF3;n breve al iniciar la sesi&#xF3;n, generalmente de unas pocas decenas de tokens cada una. Su contenido completo se incorpora al contexto &#xFA;nicamente cuando Claude determina que la habilidad resulta relevante para la tarea.</p><p>Un proyecto que contenga veinte procedimientos habituales puede recuperar entre 10.000 y 15.000 tokens por sesi&#xF3;n utilizando este enfoque.</p><p>Configuraci&#xF3;n y uso</p><p>Mant&#xE9;n el archivo <code>CLAUDE.md</code> limitado a la informaci&#xF3;n esencial:</p><p>Tecnolog&#xED;as utilizadas en el proyecto.</p><p>Mapa de directorios.</p><p>Algunas reglas obligatorias de funcionamiento.</p><p>El objetivo recomendado es mantenerlo por debajo de 150 a 200 l&#xED;neas.</p><p>Crea las habilidades como carpetas dentro de alguno de estos directorios:</p><p>Para habilidades disponibles a nivel de usuario:</p><pre><code>~/.claude/skills/</code></pre><p>Para habilidades espec&#xED;ficas del proyecto:</p><pre><code>.claude/skills/</code></pre><p>Cada habilidad debe incluir un archivo:</p><pre><code>SKILL.md</code></pre><p>Este archivo debe contener una descripci&#xF3;n breve en formato <a href="https://codigoencasa.com/">YAML</a>, junto con las instrucciones detalladas correspondientes.</p><p>Claude descubre estas habilidades y las carga cuando las necesita.</p><p>No se requiere ninguna instalaci&#xF3;n adicional, aparte de colocar los archivos en las carpetas correspondientes.</p><h3 id="7-h%C3%A1bitos-de-uso-de-compact-clear-y-context">7. H&#xE1;bitos de uso de /compact, /clear y /context</h3><p>Anthropic explica claramente la importancia de estos comandos en sus recomendaciones oficiales para aprovechar mejor <a href="https://codigoencasa.com/">Claude Code.</a></p><p>Los tres comandos est&#xE1;n integrados directamente en la herramienta.</p><p>C&#xF3;mo utilizarlos</p><p>Utiliza:</p><pre><code>/clear</code></pre><p>Entre tareas que no est&#xE9;n relacionadas.</p><p>Esto evita que el contexto de trabajos anteriores siga incorpor&#xE1;ndose a cada nueva solicitud.</p><p>Ejecuta:</p><pre><code>/context</code></pre><p>Al comenzar una sesi&#xF3;n nueva para comprobar qu&#xE9; informaci&#xF3;n se encuentra cargada.</p><p>Esto incluye el prompt del sistema, las herramientas <a href="https://codigoencasa.com/">MCP</a> y las habilidades disponibles.</p><p>Tambi&#xE9;n puedes utilizar:</p><pre><code>/compact</code></pre><p>Antes de interrumpir tu trabajo.</p><p>Compactar la conversaci&#xF3;n mientras la cach&#xE9; del prompt todav&#xED;a est&#xE1; activa resulta m&#xE1;s econ&#xF3;mico que tener que reconstruir el contexto posteriormente.</p><p>Estos tres comandos tienen un costo pr&#xE1;cticamente insignificante y ayudan a eliminar una de las principales fuentes de crecimiento silencioso del consumo de tokens.</p><h3 id="8-subagentes-para-tareas-exigentes">8. Subagentes para tareas exigentes</h3><p>Cuando Claude necesita buscar informaci&#xF3;n en numerosos archivos, ejecutar pruebas largas o explorar una parte extensa del <a href="https://codigoencasa.com/">c&#xF3;digo</a>, es recomendable delegar ese trabajo a un subagente.</p><p>Los subagentes disponen de su propia ventana de contexto.</p><p>Esto significa que el trabajo realizado por el subagente no tiene que incorporarse &#xED;ntegramente a la conversaci&#xF3;n principal.</p><p>&#xDA;nicamente se devuelve el resumen final o el resultado de la tarea.</p><p>C&#xF3;mo utilizarlos</p><p>Puedes solicitar expl&#xED;citamente a <a href="https://codigoencasa.com/">Claude</a> que utilice un subagente o la herramienta <code>Task</code> para realizar la parte m&#xE1;s exigente del trabajo.</p><p>Por ejemplo:</p><blockquote>Utiliza un subagente para buscar en todo el c&#xF3;digo cada llamada a X y devuelve &#xFA;nicamente las ubicaciones encontradas y un breve resumen.</blockquote><p>De esta forma, la sesi&#xF3;n principal mantiene un contexto reducido y evita acumular informaci&#xF3;n innecesaria.</p><p>No es necesario instalar ning&#xFA;n componente adicional, ya que se trata de una funcionalidad nativa de <a href="https://codigoencasa.com/">Claude Code</a>.</p><h3 id="9-plugins-de-inteligencia-de-c%C3%B3digo">9. Plugins de inteligencia de c&#xF3;digo</h3><p>Anthropic recomienda utilizar plugins de inteligencia de c&#xF3;digo para trabajar con lenguajes de programaci&#xF3;n que cuentan con sistemas de tipos.</p><p>Estos plugins permiten a <a href="https://codigoencasa.com/">Claude</a> navegar directamente entre s&#xED;mbolos, funciones, clases y definiciones, en lugar de depender de b&#xFA;squedas repetitivas de texto o de la lectura completa de archivos.</p><p>Reducir la cantidad de lecturas exploratorias tambi&#xE9;n disminuye los tokens necesarios simplemente para localizar una funci&#xF3;n o un tipo de dato.</p><p>Instalaci&#xF3;n y uso</p><p>Puedes explorar los plugins disponibles mediante:</p><pre><code>/plugin</code></pre><p>Tambi&#xE9;n puedes instalar directamente el plugin del servidor de lenguaje correspondiente.</p><p>Por ejemplo, para TypeScript:</p><pre><code>/plugin install typescript-lsp@claude-plugins-official</code></pre><p>Existen alternativas equivalentes para otros lenguajes:</p><p>Python: Pyright.</p><p>Go: gopls.</p><p>Rust: rust-analyzer.</p><p>El ejecutable del servidor de lenguaje debe estar previamente instalado y disponible en la variable de entorno <code>PATH</code>.</p><p>Despu&#xE9;s de instalarlo, <a href="https://codigoencasa.com/">Claude</a> utiliza autom&#xE1;ticamente las herramientas de navegaci&#xF3;n estructurada y recibe diagn&#xF3;sticos tras modificar el c&#xF3;digo.</p><h3 id="10-cambiar-de-modelo-y-nivel-de-esfuerzo-seg%C3%BAn-la-tarea">10. Cambiar de modelo y nivel de esfuerzo seg&#xFA;n la tarea</h3><p>No todas las tareas requieren utilizar el modelo m&#xE1;s costoso o la configuraci&#xF3;n de esfuerzo m&#xE1;s elevada.</p><p>Para generar c&#xF3;digo repetitivo, corregir errores sencillos, dar formato a archivos o realizar consultas b&#xE1;sicas, puedes utilizar Haiku o un nivel de esfuerzo medio.</p><p>Una serie de pruebas publicada mostr&#xF3; una reducci&#xF3;n aproximada del 45 % en los tokens de salida al pasar de un nivel de esfuerzo alto a uno medio, utilizando el mismo conjunto de tareas y con una p&#xE9;rdida de calidad reducida en trabajos rutinarios.</p><p>Configuraci&#xF3;n y uso</p><p>Selecciona el modelo y el nivel de esfuerzo al comenzar la sesi&#xF3;n.</p><p>Por ejemplo, puedes utilizar:</p><pre><code>/model</code></pre><p>Tambi&#xE9;n puedes establecer estas opciones mediante los par&#xE1;metros de inicio de la sesi&#xF3;n.</p><p>Cambiar el modelo o el nivel de esfuerzo durante una conversaci&#xF3;n puede invalidar la cach&#xE9; del prompt y aumentar el costo.</p><p>Por este motivo, es recomendable decidir qu&#xE9; configuraci&#xF3;n utilizar antes de comenzar.</p><p>Utiliza Haiku para trabajos sencillos y reserva los modelos de mayor capacidad para tareas de arquitectura de software o depuraci&#xF3;n compleja.</p><h3 id="conclusi%C3%B3n">Conclusi&#xF3;n</h3><p>Combinar varias de estas t&#xE9;cnicas puede generar un efecto acumulativo considerable en el consumo de tokens.</p><p>Mantener un archivo <code>CLAUDE.md</code> reducido y complementarlo con habilidades, utilizar codesight para comprender la estructura del proyecto, incorporar cost-mode o Headroom para eliminar informaci&#xF3;n innecesaria, delegar la exploraci&#xF3;n a subagentes y seleccionar cuidadosamente el modelo permite reducir de forma importante el consumo durante las sesiones.</p><p>Aplicadas conjuntamente, estas pr&#xE1;cticas pueden reducir sesiones que normalmente consumen alrededor de 300.000 tokens hasta niveles que permitan mantenerse c&#xF3;modamente por debajo de un objetivo de 13 d&#xF3;lares diarios para un uso moderado de la <a href="https://codigoencasa.com/">API</a>, o prolongar el aprovechamiento de los l&#xED;mites de un plan Max.</p><p>&#xBF;Cu&#xE1;les de estas herramientas has utilizado en un proyecto real? &#xBF;Qu&#xE9; diferencias observaste en el consumo de tokens antes y despu&#xE9;s de implementarlas?</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/KtOMkHZ1myg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Esta IA no quiere hablar contigo&#x2026; quiere controlar tu software"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Probé las Skills de Claude Code hasta dar con el oro (las 4 mejores Skills de Claude)]]></title><description><![CDATA[En lugar de limitarse a leer artículos o publicaciones de blogs indexadas, envía a Claude a los lugares donde las personas están hablando activamente sobre la idea o el mercado que estás investigando.]]></description><link>https://codigoencasa.com/probe-las-skills-de-claude-code-hasta-dar-con-el-oro-las-4-mejores-skills-de-claude/</link><guid isPermaLink="false">6ac3b99d58337b38d11b9e76</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 12 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/matthias-cho-HAx5VJPw9CQ-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/matthias-cho-HAx5VJPw9CQ-unsplash-transformed.jpeg" alt="Prob&#xE9; las Skills de Claude Code hasta dar con el oro (las 4 mejores Skills de Claude)"><p>Si has estado usando Claude Code, creo que todas podemos estar de acuerdo en algo: es una herramienta excelente, pero viene con varias limitaciones.</p><ol><li>No puede ver un video.</li><li>Escribe de una forma que se nota que fue generada por IA.</li><li>Cuando le pides que dise&#xF1;e una aplicaci&#xF3;n, muchas veces entrega resultados gen&#xE9;ricos o de baja calidad.</li><li>Y, adem&#xE1;s de todo eso, puedes agotar tu l&#xED;mite de uso mucho m&#xE1;s r&#xE1;pido de lo que imaginas.</li></ol><p>GitHub est&#xE1; lleno de habilidades para <a href="https://codigoencasa.com/">Claude</a> que prometen solucionar estos problemas y muchos otros. El problema es que hay cientos, y la mayor&#xED;a no merecen tu tiempo.</p><p>He pasado meses probando estos repositorios y creando mis propias soluciones para cubrir lo que faltaba.</p><p>Estas son cuatro habilidades que solucionan gran parte de los problemas con los que Claude Code suele tener dificultades. Son las que me habr&#xED;a gustado que alguien me hubiera recomendado desde el primer d&#xED;a.</p><h2 id="1-ponytail-reduce-el-desperdicio-de-tokens-en-claude-code">#1 | Ponytail: reduce el desperdicio de tokens en Claude Code</h2><p>Si est&#xE1;s creando una aplicaci&#xF3;n, haciendo vibe coding y viendo c&#xF3;mo aumenta r&#xE1;pidamente tu consumo de tokens, <a href="https://github.com/DietrichGebert/ponytail">Ponytail</a> puede ser muy &#xFA;til.</p><p>El nombre viene del t&#xED;pico clich&#xE9; cinematogr&#xE1;fico del hacker de la dark web: una persona desarrolladora con una larga coleta, una lata de <a href="https://codigoencasa.com/">Mountain Dew</a> y una bolsa roja de Doritos sobre el escritorio.</p><p>Alguien necesita que consiga entrar en una base de datos gubernamental secreta y extremadamente protegida.</p><p>La mira, no dice nada, escribe una sola l&#xED;nea de c&#xF3;digo y entra.</p><p>De ah&#xED; viene el nombre: <a href="https://github.com/DietrichGebert/ponytail">Ponytail</a>.</p><p>Ponytail, b&#xE1;sicamente, pone a ese personaje dentro de Claude Code.</p><p>Esta es la habilidad de Claude que necesitas si quieres construir algo ligero y eficiente, reduciendo al mismo tiempo el consumo de tokens.</p><p>Si has estado haciendo <a href="https://codigoencasa.com/">vibe coding</a>, probablemente habr&#xE1;s notado que Claude tiende a construir m&#xE1;s de lo necesario. Le pides una cosa sencilla y, con frecuencia, termina entregando bastante m&#xE1;s de lo que pediste.</p><p>Eso tiene un doble costo.</p><p>Primero, en tokens, porque cada l&#xED;nea adicional de c&#xF3;digo que no necesitabas igualmente se genera y consume recursos. Segundo, porque esas l&#xED;neas extra comienzan a acumularse.</p><p>A medida que el proyecto crece, Claude puede empezar a confundirse con su propia complejidad, hasta el punto en que modificar una cosa termina rompiendo otra.</p><p>Ponytail intenta evitarlo haciendo que Claude se plantee algunas preguntas antes de escribir cualquier cosa:</p><ul><li>&#xBF;Esto realmente necesita existir?</li><li>&#xBF;Ya constru&#xED; algo parecido en otra parte del proyecto?</li><li>&#xBF;El navegador ya puede resolver esto de forma nativa?</li><li>&#xBF;Se puede hacer en una l&#xED;nea en lugar de cincuenta?</li></ul><p>El beneficio aparece en dos &#xE1;reas.</p><p>Consumes menos tokens y mantienes una base de c&#xF3;digo m&#xE1;s peque&#xF1;a, limpia y f&#xE1;cil de entender para <a href="https://codigoencasa.com/">Claude</a> a medida que el proyecto crece.</p><p>Hay una limitaci&#xF3;n de Ponytail que he notado.</p><p>Como est&#xE1; optimizado para ahorrar tokens, tambi&#xE9;n tiende a comprimir las respuestas que recibes en el chat.</p><p>En ocasiones, las respuestas llegan tan resumidas que tienes que leerlas dos o tres veces para entenderlas, especialmente cuando se trata de temas t&#xE9;cnicos.</p><p>Por suerte, es f&#xE1;cil solucionarlo.</p><p>Cuando necesites una explicaci&#xF3;n m&#xE1;s detallada, puedes pedirle que te lo explique como si fueras una estudiante de quinto grado.</p><p>Claude seguir&#xE1; manteniendo el c&#xF3;digo eficiente, pero dejar&#xE1; de comprimir tanto la explicaci&#xF3;n.</p><h2 id="2-claude-video-ver-y-analizar-videos">#2 | Claude Video: ver y analizar videos</h2><p>Cuando se trata de ver videos, <a href="https://codigoencasa.com/">Claude</a> pr&#xE1;cticamente trabaja a ciegas.</p><p>Si le das un enlace de YouTube, probablemente tendr&#xE1; dificultades.</p><p>Puede llegar a obtener la transcripci&#xF3;n, pero no podr&#xE1; ver realmente lo que aparece en pantalla. Y si necesitas comprender el contexto visual del video, una transcripci&#xF3;n por s&#xED; sola no es suficiente.</p><p>La habilidad <a href="https://github.com/bradautomates/claude-video">Claude Video</a> aborda directamente este problema.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image.png" class="kg-image" alt="Prob&#xE9; las Skills de Claude Code hasta dar con el oro (las 4 mejores Skills de Claude)" loading="lazy" width="1100" height="511" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image.png 1000w, https://codigoencasa.com/content/images/2026/10/image.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Esta habilidad permite que Claude pueda analizar un video y entender qu&#xE9; se muestra en pantalla, obteniendo as&#xED; el contexto completo del contenido.</p><p>Como creadora de contenido, veo muchos tutoriales de YouTube, pero no siempre puedo dedicar treinta minutos completos a escuchar un podcast.</p><p>Con esta habilidad instalada, <a href="https://codigoencasa.com/">Claude</a> puede leer la transcripci&#xF3;n, analizar el video y reunir todo el contexto, incluyendo la informaci&#xF3;n visual.</p><p>Adem&#xE1;s, no funciona &#xFA;nicamente con YouTube.</p><p>Tambi&#xE9;n puede utilizarse con Loom, TikTok, X, Instagram y otras plataformas.</p><p>Para instalar Claude Video, puedes copiar el enlace de la habilidad y pas&#xE1;rselo a Claude Code:</p><p><strong>Claude Code &#x2014; opci&#xF3;n recomendada, con actualizaciones autom&#xE1;ticas mediante marketplace:</strong></p><pre><code>/plugin marketplace add bradautomates/claude-video
/plugin install watch@claude-video</code></pre><p>Tambi&#xE9;n puedes pedirle directamente a <a href="https://codigoencasa.com/">Claude</a> que lo instale utilizando la URL.</p><p>Copia y pega lo siguiente en Claude:</p><pre><code>Instala este repositorio:
https://github.com/bradautomates/claude-video</code></pre><p>Una vez instalado, cuando quieras que Claude analice un video, puedes utilizar el comando:</p><pre><code>/watch</code></pre><p>Despu&#xE9;s, pega la URL del video de YouTube, Instagram u otra plataforma compatible y deja que haga el an&#xE1;lisis.</p><p>Y una &#xFA;ltima observaci&#xF3;n.</p><p>Antes de instalar cualquier cosa procedente de GitHub, conviene tener cuidado con posibles inyecciones de prompts ocultas dentro de un repositorio.</p><p>Cuando no conf&#xED;o completamente en una fuente, le pido primero a Claude que analice el repositorio y extraiga &#xFA;nicamente aquello que necesita.</p><p>De esta forma, si existe alg&#xFA;n contenido malicioso oculto, reduces las posibilidades de que termine incorpor&#xE1;ndose a tu sistema.</p><h2 id="3-last30days-investigaci%C3%B3n-de-mercado-actualizada">#3 | Last30Days: investigaci&#xF3;n de mercado actualizada</h2><p><a href="https://github.com/mvanhorn/last30days-skill/tree/main">Last30Days</a> es la habilidad de <a href="https://codigoencasa.com/">Claude</a> m&#xE1;s grande de esta lista.</p><p>El repositorio tiene alrededor de 50.000 estrellas en GitHub y resuelve un problema con el que probablemente ya te hayas encontrado muchas veces.</p><p>Imagina que quieres crear una aplicaci&#xF3;n de citas para personas divorciadas y le pides a Claude que investigue a la competencia o encuentre oportunidades que todav&#xED;a no est&#xE1;n cubiertas en el mercado.</p><p>Cuando le pides a <a href="https://codigoencasa.com/">Claude </a>que haga esta tarea, muchas veces devuelve investigaciones basadas en art&#xED;culos populares de Google, algunos publicados hace meses o incluso a&#xF1;os.</p><p>Eso puede resultar bastante poco &#xFA;til en una &#xE9;poca en la que una nueva tecnolog&#xED;a puede hacer que algo quede obsoleto en cuesti&#xF3;n de semanas.</p><p>La habilidad <a href="https://github.com/mvanhorn/last30days-skill/tree/main">Last30Days</a> intenta solucionar precisamente ese problema.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-2.png" class="kg-image" alt="Prob&#xE9; las Skills de Claude Code hasta dar con el oro (las 4 mejores Skills de Claude)" loading="lazy" width="1100" height="399" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-2.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-2.png 1000w, https://codigoencasa.com/content/images/2026/10/image-2.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>En lugar de limitarse a leer art&#xED;culos o publicaciones de blogs indexadas, env&#xED;a a Claude a los lugares donde las personas est&#xE1;n hablando activamente sobre la idea o el mercado que est&#xE1;s investigando.</p><p>Por ejemplo:</p><ul><li>Reddit</li><li>X, antes Twitter</li><li>YouTube</li><li>TikTok</li><li>Instagram</li><li>Threads</li><li>GitHub</li><li>Y cualquier otra fuente que le indiques</li></ul><p>El verdadero valor de <a href="https://github.com/mvanhorn/last30days-skill/tree/main">Last30Days</a> est&#xE1; en que tambi&#xE9;n analiza los comentarios.</p><p>Una b&#xFA;squeda normal de Claude puede encontrar una publicaci&#xF3;n de <a href="https://codigoencasa.com/">Reddit</a> y obtener una idea general del tema.</p><p>Pero normalmente no entra en la secci&#xF3;n de comentarios, que es precisamente donde aparecen muchos de los detalles m&#xE1;s interesantes.</p><p>Esta habilidad s&#xED; entra en los comentarios y obtiene informaci&#xF3;n de all&#xED;.</p><p>Adem&#xE1;s, contrasta los resultados que encuentra.</p><p>Por ejemplo, si alguien se queja de algo en Reddit, aparece la misma queja en X y vuelve a repetirse en un comentario de YouTube, la herramienta puede reconocer ese patr&#xF3;n y asignarle mayor importancia.</p><p>Un comentario negativo aislado de una sola persona puede ignorarse.</p><p>Tres quejas independientes sobre el mismo problema en tres plataformas diferentes pueden considerarse una se&#xF1;al relevante.</p><p>De esta forma, tu investigaci&#xF3;n no depende &#xFA;nicamente de art&#xED;culos publicados en Internet, muchos de los cuales pueden tener intereses comerciales detr&#xE1;s.</p><p><a href="https://codigoencasa.com/">Claude</a> puede ayudarte a encontrar directamente a las personas que tienen m&#xE1;s posibilidades de comprar tu producto y entender qu&#xE9; est&#xE1;n diciendo realmente, en lugar de basarse solamente en una publicaci&#xF3;n escrita por alguien con una determinada perspectiva.</p><p>Para utilizarlo, ejecuta el comando:</p><pre><code>/last30days</code></pre><p>seguido del tema que quieras investigar.</p><p>Por ejemplo:</p><ul><li>Encontrar informaci&#xF3;n sobre un tema antes de que alcance su punto m&#xE1;ximo:</li></ul><pre><code>/last30days qu&#xE9; est&#xE1; creciendo r&#xE1;pidamente en inteligencia artificial</code></pre><ul><li>Obtener noticias actuales sobre cualquier tema:</li></ul><pre><code>/last30days Kendrick Lamar</code></pre><ul><li>Comparar herramientas:</li></ul><pre><code>/last30days OpenClaw vs Hermes vs Paperclip</code></pre><ul><li>Entender acontecimientos internacionales:</li></ul><pre><code>/last30days Ir&#xE1;n vs Estados Unidos</code></pre><ul><li>Aprender r&#xE1;pidamente sobre un tema:</li></ul><pre><code>/last30days prompting para Nano Banana Pro</code></pre><p>Yo utilizo esta habilidad todas las semanas, ya sea para investigar ideas de aplicaciones o para comprobar si un tema merece la pena incluirlo en mi newsletter.</p><h2 id="4-humanizer-elimina-el-estilo-de-ia-de-tus-textos">#4 | Humanizer: elimina el estilo de IA de tus textos</h2><p><a href="https://github.com/blader/humanizer">Humanizer</a> es una habilidad de Claude pensada para eliminar del texto muchos de los patrones habituales de la escritura generada por inteligencia artificial.</p><p>A estas alturas, muchas ya conocemos algunas de las se&#xF1;ales m&#xE1;s comunes de un texto generado por IA.</p><p>Por ejemplo:</p><ul><li>Uso excesivo de rayas largas.</li><li>Construcciones del tipo &#x201C;no es esto, sino aquello&#x201D;.</li><li>Frases introductorias como &#x201C;esto es lo que realmente importa&#x201D;.</li><li>Palabras y expresiones utilizadas constantemente por modelos de <a href="https://codigoencasa.com/">IA</a>.</li></ul><p>Cada vez que le pides a Claude que escriba algo, puedes terminar record&#xE1;ndole constantemente que quieres un tono m&#xE1;s natural, m&#xE1;s casual y menos parecido al de un texto generado por una m&#xE1;quina.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/10/image-3.png" class="kg-image" alt="Prob&#xE9; las Skills de Claude Code hasta dar con el oro (las 4 mejores Skills de Claude)" loading="lazy" width="1100" height="670" srcset="https://codigoencasa.com/content/images/size/w600/2026/10/image-3.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/10/image-3.png 1000w, https://codigoencasa.com/content/images/2026/10/image-3.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Humanizer intenta eliminar la necesidad de repetir esas instrucciones una y otra vez.</p><p>Fue creado tomando como referencia las propias reglas documentadas de Wikipedia para identificar textos generados por inteligencia artificial, y analiza el contenido utilizando 33 patrones diferentes para detectar y eliminar este tipo de se&#xF1;ales.</p><p>La forma en la que yo lo utilizo consiste en darle primero a <a href="https://codigoencasa.com/">Claude</a> algunos ejemplos de mis propios textos para que pueda aprender el estilo que quiero conservar.</p><p>Cuando le pido que escriba algo, primero genera un borrador intentando imitar mi voz y despu&#xE9;s pasa el resultado por Humanizer para eliminar aquellas partes que todav&#xED;a suenan demasiado artificiales.</p><p>Hay algo importante que conviene entender sobre Humanizer.</p><p>No es una herramienta para escribir.</p><p>Es una herramienta de limpieza.</p><p>No puede darte autom&#xE1;ticamente una gran idea, crear una historia interesante desde cero o convertir un texto aburrido en una reflexi&#xF3;n filos&#xF3;fica brillante.</p><p>Si el texto original es malo, Humanizer no puede salvarlo.</p><p>Su funci&#xF3;n consiste principalmente en eliminar palabras, estructuras y patrones comunes de la escritura generada por IA que podr&#xED;an hacer que el contenido parezca artificial.</p><h2 id="%C2%BFqu%C3%A9-habilidad-de-claude-code-deber%C3%ADas-instalar-primero">&#xBF;Qu&#xE9; habilidad de Claude Code deber&#xED;as instalar primero?</h2><p>Ninguna de estas herramientas requiere que abandones Claude Code ni que pagues una segunda suscripci&#xF3;n completa.</p><p>Video, investigaci&#xF3;n, escritura y tendencia a construir m&#xE1;s de lo necesario.</p><p>Son cuatro &#xE1;reas diferentes en las que <a href="https://codigoencasa.com/">Claude Code</a> puede quedarse corto cuando lo utilizas sin herramientas adicionales, y para cada una de ellas ya existe una soluci&#xF3;n espec&#xED;fica.</p><p>Instala primero aquella que est&#xE9; haci&#xE9;ndote perder m&#xE1;s tiempo esta semana.</p><p>Las dem&#xE1;s seguir&#xE1;n disponibles cuando las necesites.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/rPz8WzIl448?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Deja de perder clientes en tu Software: Gu&#xED;a de M&#xE9;tricas y Automatizaci&#xF3;n"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Buenas prácticas para la estructura de proyectos en Claude Code]]></title><description><![CDATA[Como regla general, si notas que el archivo supera aproximadamente las 200 líneas de texto, deberías dividirlo en varios archivos.]]></description><link>https://codigoencasa.com/buenas-practicas-para-la-estructura-de-proyectos-en-claude-code/</link><guid isPermaLink="false">6ac3b79758337b38d11b9e4d</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Fri, 09 Oct 2026 17:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/queensland-australia-7WVpQhFGUqQ-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/queensland-australia-7WVpQhFGUqQ-unsplash-transformed.jpeg" alt="Buenas pr&#xE1;cticas para la estructura de proyectos en Claude Code"><p>Cuando trabajas con <a href="https://codigoencasa.com/">Claude Code</a>, organizar bien tus proyectos marca una gran diferencia. Claude funciona mejor cuando tiene un contexto claro, una estructura consistente e instrucciones expl&#xED;citas.</p><p>A continuaci&#xF3;n encontrar&#xE1;s 5 principios fundamentales que deber&#xED;as seguir para crear una excelente estructura de proyecto:</p><h2 id="1-coloca-claudemd-en-la-ra%C3%ADz">1. Coloca <code>CLAUDE.md</code> en la ra&#xED;z</h2><p><code>CLAUDE.md</code> es un archivo fundamental para proporcionar a <a href="https://codigoencasa.com/">Claude Code</a> contexto espec&#xED;fico sobre tu proyecto. Funciona como una gu&#xED;a de incorporaci&#xF3;n para que la IA entienda los requisitos de tu proyecto y tu base de c&#xF3;digo.</p><p>Claude lee autom&#xE1;ticamente el archivo <code>CLAUDE.md</code> al iniciar.</p><p>Este es un ejemplo de lo que puedes incluir en este archivo:</p><pre><code># Descripci&#xF3;n general del proyecto
Breve descripci&#xF3;n del proyecto.

# Arquitectura
Explicaci&#xF3;n de los componentes principales.

# Stack tecnol&#xF3;gico
Next.js
TypeScript
ShadCN UI
Tailwind

# Convenciones de c&#xF3;digo
- Usar el modo estricto de TypeScript
- Preferir componentes funcionales
- Evitar exportaciones por defecto

# Estructura de carpetas
Explicaci&#xF3;n de los directorios.

# Comandos
npm run dev
npm run build

# Reglas importantes
Requisitos de rendimiento
Requisitos de accesibilidad
Estrategia de testing</code></pre><p>El archivo deber&#xED;a colocarse en la carpeta ra&#xED;z de tu proyecto:</p><pre><code>my-project/
&#x251C;&#x2500;&#x2500; CLAUDE.md
&#x251C;&#x2500;&#x2500; package.json
&#x251C;&#x2500;&#x2500; src/
&#x251C;&#x2500;&#x2500; docs/
&#x2514;&#x2500;&#x2500; scripts/</code></pre><p>Nota r&#xE1;pida: si ya tienes una base de c&#xF3;digo existente en tu proyecto, no tienes que empezar desde cero al crear <code>CLAUDE.md</code>.</p><p>En su lugar, puedes escribir el comando <code>/init</code> en <a href="https://codigoencasa.com/">Claude Code</a> y este generar&#xE1; un primer borrador del archivo:</p><pre><code>/init</code></pre><h2 id="2-divide-las-instrucciones-grandes-de-claudemd-en-archivos-importados">2. Divide las instrucciones grandes de <code>CLAUDE.md</code> en archivos importados</h2><p>El archivo <code>CLAUDE.md</code> puede crecer r&#xE1;pidamente.</p><p>Como <a href="https://codigoencasa.com/">Claude Code</a> lee este archivo constantemente y su contenido se a&#xF1;ade al contexto, no es recomendable tener archivos demasiado grandes.</p><p>Como regla general, si notas que el archivo supera aproximadamente las 200 l&#xED;neas de texto, deber&#xED;as dividirlo en varios archivos.</p><p>Claude Code permite realizar importaciones dentro de <code>CLAUDE.md</code>:</p><pre><code>@path/to/import.md</code></pre><p>Solo necesitas proporcionar el contexto necesario para indicar cu&#xE1;ndo Claude deber&#xED;a utilizar cada archivo importado.</p><p>As&#xED; podr&#xED;a verse un archivo <code>CLAUDE.md</code> actualizado utilizando importaciones:</p><pre><code># CLAUDE.md

# Arquitectura
Para consultar la arquitectura del proyecto, revisa:
@claude/architecture.md

# Convenciones de c&#xF3;digo
Para consultar las convenciones de c&#xF3;digo, revisa:
@claude/coding_conventions.md

# Gu&#xED;as de interfaz
Para consultar las gu&#xED;as de interfaz, revisa:
@claude/ui_guidelines.md</code></pre><p>Y dentro del directorio del proyecto, la estructura de archivos ser&#xED;a:</p><pre><code>CLAUDE.md

claude/
    architecture.md
    coding_conventions.md
    ui_guidelines.md</code></pre><p>Esta estructura resulta &#xFA;til tanto para ti como para la <a href="https://codigoencasa.com/">IA</a> porque:</p><ul><li>Es m&#xE1;s f&#xE1;cil de mantener cuando quieres modificar algo.</li><li>Permite una carga de contexto m&#xE1;s r&#xE1;pida para Claude.</li><li>Los archivos pueden reutilizarse entre diferentes proyectos, especialmente en proyectos de desarrollo web.</li></ul><h2 id="3-a%C3%B1ade-una-carpeta-docs-para-proporcionar-contexto">3. A&#xF1;ade una carpeta <code>/docs</code> para proporcionar contexto</h2><p>Si quieres ayudar a Claude a comprender mejor tu proyecto y sus particularidades, es recomendable a&#xF1;adir una carpeta <code>docs/</code>.</p><p>Claude entiende especialmente bien la documentaci&#xF3;n escrita en formato Markdown.</p><p>Por ejemplo, puedes a&#xF1;adir informaci&#xF3;n sobre funcionalidades que planeas incorporar a tu producto durante el trimestre o sobre las llamadas actuales a la <a href="https://codigoencasa.com/">API</a> que ofrece tu producto.</p><pre><code>docs/
    project_roadmap.md
    api.md</code></pre><p>Despu&#xE9;s puedes pedirle a <a href="https://codigoencasa.com/">Claude</a> que consulte esa documentaci&#xF3;n cuando implemente una funcionalidad concreta.</p><p>Por ejemplo, si quieres crear un sistema de comprobaci&#xF3;n del estado de tu servicio web:</p><pre><code>Lee docs/api.md e implementa nuestro monitor de estado del servicio disponible mediante llamadas a la API.</code></pre><p>De esta manera, Claude puede trabajar utilizando como referencia la documentaci&#xF3;n espec&#xED;fica de tu proyecto.</p><h2 id="4-a%C3%B1ade-una-carpeta-workflows-para-los-flujos-de-trabajo">4. A&#xF1;ade una carpeta <code>/workflows</code> para los flujos de trabajo</h2><p>Si quieres que <a href="https://codigoencasa.com/">Claude</a> siga un flujo de trabajo espec&#xED;fico al realizar determinadas tareas, deber&#xED;as guardar esos procesos en un directorio dedicado.</p><p>Por ejemplo, en un proyecto de desarrollo web puedes utilizar una estructura como esta:</p><pre><code>claude/
    workflows/
        build-new-component.md
        code-refactoring.md
        write-auto-tests.md
        migrate-db.md</code></pre><p>As&#xED; podr&#xED;a verse el workflow <code>build-new-component.md</code>.</p><p>Ten en cuenta que este es &#xFA;nicamente un ejemplo y que un flujo de trabajo real puede ser mucho m&#xE1;s complejo:</p><pre><code># build-component.md

Cuando se te pida crear un nuevo componente para un servicio web,
cr&#xE9;alo siguiendo estos requisitos:

- TypeScript
- ShadCN UI
- Accesible
- Mobile-first
- Estilos con Tailwind</code></pre><p>Despu&#xE9;s puedes ejecutarlo con una instrucci&#xF3;n como esta:</p><pre><code>Sigue claude/prompts/build-component.md para crear una tarjeta para el dashboard.</code></pre><p>Una de las ventajas de esta estructura es que puedes activar un flujo de trabajo desde otro.</p><p>Por ejemplo, si <a href="https://codigoencasa.com/">Claude</a> crea un nuevo componente siguiendo <code>build-new-component.md</code>, puedes indicarle desde ese mismo archivo que tambi&#xE9;n genere pruebas autom&#xE1;ticas para validar el nuevo c&#xF3;digo.</p><p>El archivo podr&#xED;a verse as&#xED;:</p><pre><code># build-component.md

Cuando se te pida crear un nuevo componente para un servicio web,
cr&#xE9;alo siguiendo estos requisitos:

- TypeScript
- ShadCN UI
- Accesible
- Mobile-first
- Estilos con Tailwind

Aseg&#xFA;rate tambi&#xE9;n de escribir pruebas autom&#xE1;ticas para este componente
siguiendo las instrucciones de:

@workflows/write-auto-tests.md</code></pre><p>De esta manera puedes crear flujos de trabajo compuestos y reutilizables.</p><h2 id="5-utiliza-una-carpeta-tools-para-las-tareas-de-servicio-de-claude">5. Utiliza una carpeta <code>/tools</code> para las tareas de servicio de Claude</h2><p>Una de las grandes ventajas de <a href="https://codigoencasa.com/">Claude Code</a> es que puede escribir scripts de servicio espec&#xED;ficos para agilizar determinados flujos de trabajo.</p><p>Por ejemplo, si le pides que organice una migraci&#xF3;n de base de datos definida en <code>migrate-db.md</code>, Claude probablemente escribir&#xE1; un script en Python encargado de ejecutar parte de esas acciones.</p><p>Mi recomendaci&#xF3;n es guardar todos estos scripts de servicio dentro de una &#xFA;nica carpeta llamada <code>/tools</code>.</p><pre><code>tools/
    migrate-db.py
    seed-data.py
    export-data.py</code></pre><p>Nota r&#xE1;pida: quiz&#xE1;s te preguntes por qu&#xE9; utilizar <code>/tools</code> en lugar de <code>/scripts</code>.</p><p>Si est&#xE1;s trabajando en un proyecto de desarrollo web, normalmente el t&#xE9;rmino <code>scripts</code> se asocia con scripts de frontend o backend utilizados directamente por el servicio.</p><p>Por eso prefiero utilizar el nombre <code>/tools</code> para las herramientas auxiliares que utilizamos durante el desarrollo.</p><p>Esto ayuda a reducir confusiones cuando diferentes personas del equipo revisan la estructura del proyecto.</p><p>Una estructura de proyecto bien organizada no solo hace que el c&#xF3;digo sea m&#xE1;s sencillo de mantener.</p><p>Tambi&#xE9;n permite que <a href="https://codigoencasa.com/">Claude Code</a> tenga un contexto m&#xE1;s claro, entienda mejor las reglas del proyecto y siga flujos de trabajo de una forma mucho m&#xE1;s consistente.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/bOMQREKkQlg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="NO PAGUES M&#xC1;S POR BACKEND"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[9 patrones de código para ingenieros senior]]></title><description><![CDATA[Eliminaban la complejidad innecesaria. Hacían que los fallos fueran predecibles. Mantenían las funciones pequeñas.]]></description><link>https://codigoencasa.com/9-patrones-de-codigo-para-ingenieros-senior/</link><guid isPermaLink="false">6ac3b00958337b38d11b9e26</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 07 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/10/dmytro-koplyk-KhqdjmAvumU-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://codigoencasa.com/content/images/2026/10/dmytro-koplyk-KhqdjmAvumU-unsplash-transformed.jpeg" alt="9 patrones de c&#xF3;digo para ingenieros senior"><p>La mayor&#xED;a de los desarrolladores no mejoran por aprender m&#xE1;s sintaxis. Mejoran cuando aprenden a pensar como ingenieros con experiencia.</p><p>Durante mucho tiempo pens&#xE9; que convertirme en una mejor desarrolladora significaba aprender m&#xE1;s.</p><p>M&#xE1;s <a href="https://codigoencasa.com/">Python</a>. M&#xE1;s frameworks. M&#xE1;s librer&#xED;as. M&#xE1;s patrones de dise&#xF1;o.</p><p>Pero despu&#xE9;s de pasar m&#xE1;s tiempo rodeada de ingenieros con experiencia, not&#xE9; algo que cambi&#xF3; mi forma de abordar la programaci&#xF3;n.</p><p>Los mejores desarrolladores no necesariamente escrib&#xED;an c&#xF3;digo m&#xE1;s complicado.</p><p>De hecho, muchas veces hac&#xED;an exactamente lo contrario.</p><p>Eliminaban la complejidad innecesaria. Hac&#xED;an que los fallos fueran predecibles. Manten&#xED;an las funciones peque&#xF1;as. Cuestionaban las abstracciones. Escrib&#xED;an c&#xF3;digo que otra persona pudiera entender sin necesidad de organizar una reuni&#xF3;n para explicarlo.</p><p>Con el tiempo, empec&#xE9; a adoptar esos h&#xE1;bitos.</p><p>Estos son nueve patrones de programaci&#xF3;n que aprend&#xED; de ingenieros senior y que han tenido un impacto mucho mayor en mis habilidades como desarrolladora que aprender otro truco de sintaxis.</p><h2 id="1-haz-que-el-camino-principal-sea-evidente">1. Haz que el camino principal sea evidente</h2><p>Una de las primeras cosas que not&#xE9; fue lo poco que les gusta a los ingenieros senior el anidamiento innecesario.</p><p>Quienes est&#xE1;n empezando suelen escribir c&#xF3;digo como este:</p><pre><code>if user:
    if user.is_active:
        if user.has_permission:
            process_request(user)</code></pre><p>Funciona, pero la operaci&#xF3;n importante queda escondida entre varias capas de condiciones.</p><p>Un enfoque basado en cl&#xE1;usulas de guarda hace que el flujo normal sea mucho m&#xE1;s f&#xE1;cil de seguir:</p><pre><code>if not user:
    return

if not user.is_active:
    return

if not user.has_permission:
    return

process_request(user)</code></pre><p>Ahora la funci&#xF3;n se lee casi como una lista de comprobaci&#xF3;n.</p><p>Primero verificas las condiciones que pueden detener la ejecuci&#xF3;n y despu&#xE9;s realizas el trabajo real.</p><p>No se trata de seguir una regla que diga que todas las funciones deben utilizar cl&#xE1;usulas de guarda. Se trata de reducir la carga mental innecesaria.</p><p>Cuando alguien abra tu c&#xF3;digo seis meses despu&#xE9;s, deber&#xED;a poder entender el flujo principal sin tener que desenredar mentalmente un laberinto de sentencias <code>if</code>.</p><p>El buen c&#xF3;digo hace que lo importante sea f&#xE1;cil de ver.</p><h2 id="2-valida-los-datos-en-los-l%C3%ADmites-del-sistema">2. Valida los datos en los l&#xED;mites del sistema</h2><p>Una cantidad sorprendentemente grande de la complejidad de una aplicaci&#xF3;n aparece porque permitimos que datos no v&#xE1;lidos avancen demasiado dentro del sistema.</p><p>Imagina una <a href="https://codigoencasa.com/">API</a> que recibe informaci&#xF3;n de usuarios.</p><p>En lugar de aceptar un diccionario cualquiera y comprobar su contenido en diferentes partes de la aplicaci&#xF3;n:</p><pre><code>def create_user(data):
    # validaci&#xF3;n distribuida por toda la funci&#xF3;n
    ...</code></pre><p>define desde el principio c&#xF3;mo deben ser los datos v&#xE1;lidos.</p><p>Por ejemplo, utilizando <a href="https://codigoencasa.com/">Pydantic</a>:</p><pre><code>from pydantic import BaseModel, EmailStr

class User(BaseModel):
    name: str
    email: EmailStr
    age: int</code></pre><p>De esta forma, las entradas no v&#xE1;lidas pueden rechazarse antes de que lleguen a la l&#xF3;gica de negocio.</p><p>El mismo principio se aplica a la configuraci&#xF3;n, los argumentos de l&#xED;nea de comandos, los registros de bases de datos, los archivos subidos y las respuestas de servicios externos.</p><p>Cuanto antes establezcas un contrato fiable, menos c&#xF3;digo defensivo necesitar&#xE1;s en el resto de la aplicaci&#xF3;n.</p><p>Valida una sola vez en el l&#xED;mite del sistema, en lugar de cuestionar constantemente los datos en toda la aplicaci&#xF3;n.</p><h2 id="3-mant%C3%A9n-las-funciones-aburridas">3. Mant&#xE9;n las funciones aburridas</h2><p>Antes pensaba que una funci&#xF3;n capaz de hacer cinco cosas era eficiente.</p><p>Normalmente, solo era dif&#xED;cil de mantener.</p><p>Por ejemplo:</p><pre><code>def process_order(order):
    # validar pedido
    # calcular precio
    # guardar en la base de datos
    # enviar correo electr&#xF3;nico
    # escribir registro
    ...</code></pre><p>T&#xE9;cnicamente, la funci&#xF3;n funciona, pero tiene demasiadas responsabilidades.</p><p>Un dise&#xF1;o m&#xE1;s limpio separa las operaciones:</p><pre><code>def validate_order(order):
    ...

def calculate_total(order):
    ...

def save_order(order, total):
    ...

def send_confirmation(order):
    ...

def process_order(order):
    validate_order(order)

    total = calculate_total(order)
    save_order(order, total)
    send_confirmation(order)</code></pre><p>Ninguna de estas funciones resulta especialmente impresionante.</p><p>Y precisamente por eso me gusta este patr&#xF3;n.</p><p>Cada funci&#xF3;n tiene un prop&#xF3;sito claro. Cada una puede probarse de manera independiente. Y cuando cambian los requisitos, tienes menos elementos que desenredar.</p><p>Los ingenieros senior suelen escribir <a href="https://codigoencasa.com/">c&#xF3;digo</a> que, cuando lo ves por primera vez, puede parecer incluso aburrido.</p><p>Normalmente, eso es una ventaja, no un defecto.</p><p>Si una funci&#xF3;n es f&#xE1;cil de explicar en una sola frase, probablemente tambi&#xE9;n sea m&#xE1;s f&#xE1;cil de mantener.</p><h2 id="4-dale-a-cada-componente-una-responsabilidad-clara">4. Dale a cada componente una responsabilidad clara</h2><p>Una lecci&#xF3;n relacionada con la anterior consiste en saber d&#xF3;nde debe vivir cada funcionalidad.</p><p>Observa este ejemplo:</p><pre><code>def get_users():
    response = requests.get(API_URL)
    users = response.json()

    with open(&quot;users.json&quot;, &quot;w&quot;) as file:
        json.dump(users, file)

    return users</code></pre><p>Es pr&#xE1;ctico, pero la funci&#xF3;n est&#xE1; realizando dos trabajos que no est&#xE1;n directamente relacionados:</p><ol><li>Obtener los usuarios.</li><li>Guardar los usuarios.</li></ol><p>Separar esas responsabilidades crea l&#xED;mites m&#xE1;s claros:</p><pre><code>def fetch_users():
    response = requests.get(API_URL)
    response.raise_for_status()
    return response.json()

def save_users(users):
    with open(&quot;users.json&quot;, &quot;w&quot;) as file:
        json.dump(users, file)</code></pre><p>Ahora puedes cambiar el mecanismo de almacenamiento sin tocar la l&#xF3;gica relacionada con la red.</p><p>Quiz&#xE1;s ma&#xF1;ana los datos deban almacenarse en <a href="https://codigoencasa.com/">PostgreSQL</a> en lugar de en un archivo JSON.</p><p>Ese cambio no deber&#xED;a obligarte a reescribir el c&#xF3;digo responsable de comunicarse con la API.</p><p>Esta es una de las ideas m&#xE1;s sencillas de la ingenier&#xED;a de software, pero se vuelve cada vez m&#xE1;s importante a medida que las aplicaciones crecen.</p><p>Un componente deber&#xED;a tener un motivo para cambiar, no cinco motivos diferentes.</p><h2 id="5-trata-los-fallos-como-un-resultado-normal">5. Trata los fallos como un resultado normal</h2><p>El c&#xF3;digo de quienes est&#xE1;n empezando suele asumir que todo va a funcionar.</p><p>El c&#xF3;digo en producci&#xF3;n no puede permitirse esa suposici&#xF3;n.</p><p>Piensa en una petici&#xF3;n a una <a href="https://codigoencasa.com/">API</a>:</p><pre><code>response = client.get(url)
data = response.json()</code></pre><p>&#xBF;Qu&#xE9; ocurre si el servidor no est&#xE1; disponible?</p><p>&#xBF;Qu&#xE9; pasa si la solicitud supera el tiempo de espera?</p><p>&#xBF;Qu&#xE9; sucede si el servidor devuelve un error 500?</p><p>&#xBF;Y si la respuesta no contiene un <a href="https://codigoencasa.com/">JSON</a> v&#xE1;lido?</p><p>Una implementaci&#xF3;n m&#xE1;s cuidadosa podr&#xED;a verse as&#xED;:</p><pre><code>try:
    response = client.get(url, timeout=10)
    response.raise_for_status()
    data = response.json()

except TimeoutError:
    logger.error(&quot;La solicitud super&#xF3; el tiempo de espera&quot;)

except ValueError:
    logger.error(&quot;Se recibi&#xF3; una respuesta no v&#xE1;lida&quot;)</code></pre><p>Las excepciones exactas y la estrategia de recuperaci&#xF3;n depender&#xE1;n de cada aplicaci&#xF3;n.</p><p>Lo importante es la forma de pensar.</p><p>Las redes fallan.</p><p>Los archivos desaparecen.</p><p>Los usuarios introducen datos inesperados.</p><p>Las bases de datos dejan de estar disponibles.</p><p>Los servicios externos cambian.</p><p>Los ingenieros con experiencia no tratan estas situaciones como casos extremos imposibles. Deciden qu&#xE9; debe hacer la aplicaci&#xF3;n cuando ocurren.</p><p>Un software fiable no es un software que nunca falla. Es un software que falla de manera predecible.</p><h2 id="6-mant%C3%A9n-la-configuraci%C3%B3n-separada-de-la-l%C3%B3gica-de-negocio">6. Mant&#xE9;n la configuraci&#xF3;n separada de la l&#xF3;gica de negocio</h2><p>Una configuraci&#xF3;n escrita directamente en el c&#xF3;digo rara vez parece peligrosa al principio.</p><pre><code>API_URL = &quot;https://api.example.com&quot;
TIMEOUT = 10
MAX_RETRIES = 3</code></pre><p>El problema empieza cuando la configuraci&#xF3;n se extiende por todo el proyecto.</p><p>Con el tiempo, terminas teniendo URLs de bases de datos en un m&#xF3;dulo, endpoints de <a href="https://codigoencasa.com/">APIs </a>en otro, indicadores de funcionalidades en otro lugar y valores espec&#xED;ficos de cada entorno escondidos dentro de funciones.</p><p>Un enfoque m&#xE1;s limpio consiste en establecer un l&#xED;mite claro para la configuraci&#xF3;n.</p><p>Por ejemplo:</p><pre><code>import os

API_URL = os.getenv(&quot;API_URL&quot;)
TIMEOUT = int(os.getenv(&quot;TIMEOUT&quot;, &quot;10&quot;))
MAX_RETRIES = int(os.getenv(&quot;MAX_RETRIES&quot;, &quot;3&quot;))</code></pre><p>Ahora la l&#xF3;gica de la aplicaci&#xF3;n no necesita saber en qu&#xE9; entorno se est&#xE1; ejecutando.</p><p>Desarrollo, pruebas y producci&#xF3;n pueden proporcionar valores diferentes sin necesidad de modificar el c&#xF3;digo fuente.</p><p>El principio general es importante:</p><p>El c&#xF3;digo deber&#xED;a describir el comportamiento. La configuraci&#xF3;n deber&#xED;a describir el entorno.</p><h2 id="7-prefiere-la-composici%C3%B3n-antes-que-las-abstracciones-prematuras">7. Prefiere la composici&#xF3;n antes que las abstracciones prematuras</h2><p>Una de las trampas m&#xE1;s f&#xE1;ciles en las que podemos caer mientras crecemos como desarrolladores es intentar que el c&#xF3;digo parezca demasiado &#x201C;arquitect&#xF3;nico&#x201D; demasiado pronto.</p><p>Descubres las clases, la herencia, las factor&#xED;as, las interfaces y los patrones de dise&#xF1;o.</p><p>De repente, un problema de 30 l&#xED;neas termina teniendo 12 clases.</p><p>Los ingenieros con experiencia suelen ser mucho m&#xE1;s cuidadosos con esto.</p><p>Muchas veces empiezan con componentes peque&#xF1;os y los combinan:</p><pre><code>validator = Validator()
repository = Repository()
notifier = Notifier()

service = UserService(
    validator=validator,
    repository=repository,
    notifier=notifier,
)</code></pre><p>Cada componente tiene una responsabilidad concreta, pero la aplicaci&#xF3;n los combina para realizar una operaci&#xF3;n m&#xE1;s grande.</p><p>Esto tambi&#xE9;n facilita las pruebas.</p><p>Puedes sustituir el repositorio por una implementaci&#xF3;n falsa sin modificar el resto del servicio.</p><p>La lecci&#xF3;n importante no es &#x201C;evita las clases&#x201D;.</p><p>Es esta:</p><p>No construyas una abstracci&#xF3;n hasta que entiendas el problema que esa abstracci&#xF3;n necesita resolver.</p><p>Una buena arquitectura deber&#xED;a surgir de requisitos reales, no del deseo de hacer que un proyecto peque&#xF1;o parezca sofisticado.</p><h2 id="8-escribe-c%C3%B3digo-que-sea-f%C3%A1cil-de-reemplazar">8. Escribe c&#xF3;digo que sea f&#xE1;cil de reemplazar</h2><p>Esta es una de las ideas m&#xE1;s &#xFA;tiles que aprend&#xED; de desarrolladores con experiencia.</p><p>Normalmente pensamos en hacer que el <a href="https://codigoencasa.com/">c&#xF3;digo </a>sea f&#xE1;cil de ampliar.</p><p>Pero conseguir que tambi&#xE9;n sea f&#xE1;cil de reemplazar es igual de importante.</p><p>Supongamos que tu aplicaci&#xF3;n se comunica con un servicio externo mediante una &#xFA;nica funci&#xF3;n claramente definida:</p><pre><code>def get_exchange_rate(currency):
    ...</code></pre><p>El resto de la aplicaci&#xF3;n no necesita saber c&#xF3;mo funciona ese servicio.</p><p>Si m&#xE1;s adelante cambias de proveedor, el resto del sistema puede permanecer intacto.</p><p>Comp&#xE1;ralo con tener llamadas a la <a href="https://codigoencasa.com/">API</a> repartidas por decenas de archivos.</p><p>Cambiar de proveedor se convierte en un proyecto enorme.</p><p>Por eso son importantes las interfaces peque&#xF1;as y los l&#xED;mites bien definidos.</p><p>El objetivo no es predecir todos los requisitos futuros.</p><p>Eso es imposible.</p><p>El objetivo es conseguir que los cambios razonables sean baratos.</p><p>El buen c&#xF3;digo no elimina los cambios. Hace que cambiar sea menos doloroso.</p><h2 id="9-optimiza-el-c%C3%B3digo-pensando-en-la-persona-que-vendr%C3%A1-despu%C3%A9s">9. Optimiza el c&#xF3;digo pensando en la persona que vendr&#xE1; despu&#xE9;s</h2><p>Este puede ser el patr&#xF3;n m&#xE1;s importante de todos.</p><p>Cuando escribes c&#xF3;digo, sabes lo que estabas pensando.</p><p>La siguiente persona que trabaje con ese c&#xF3;digo no lo sabe.</p><p>Puede encontrarse con una variable llamada:</p><pre><code>x = d[a]</code></pre><p>y tendr&#xE1; que averiguar qu&#xE9; significa.</p><p>Comp&#xE1;ralo con:</p><pre><code>user_email = users[user_id]</code></pre><p>La segunda versi&#xF3;n comunica inmediatamente cu&#xE1;l es su prop&#xF3;sito.</p><p>El mismo principio se aplica a los nombres de las funciones, los mensajes de error, la estructura de los m&#xF3;dulos, los comentarios y la configuraci&#xF3;n.</p><p>Antes de terminar una funcionalidad, ahora intento hacerme estas preguntas:</p><p>&#xBF;Esto tendr&#xED;a sentido para alguien que no conoce mi forma de trabajar?</p><p>&#xBF;Los nombres son descriptivos?</p><p>&#xBF;La l&#xF3;gica poco habitual est&#xE1; explicada?</p><p>&#xBF;Los errores realmente proporcionan informaci&#xF3;n &#xFA;til?</p><p>&#xBF;La estructura es predecible?</p><p>El mejor c&#xF3;digo no siempre es el c&#xF3;digo m&#xE1;s corto.</p><p>Muchas veces es el c&#xF3;digo que necesita menos explicaciones.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa</a>.<br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/QFdxl0gIVqg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="As&#xED; convierto una LANDING en LEADS con GoHighLevel (sin Zapier)"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[GPT-6 Astra acaba de acabar con el software.]]></title><description><![CDATA[En 2026, casi la mitad de los consumidores canceló al menos una suscripción.
En 2024 era aproximadamente un tercio.
El hogar promedio ahora administra 11 o más suscripciones y subestima su coste real aproximadamente 2,5 veces.]]></description><link>https://codigoencasa.com/gpt-6-astra-acaba-de-acabar-con-el-software/</link><guid isPermaLink="false">6ab68d72db4eb67eb47cde33</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 05 Oct 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/casper-westera-fY_HVbvYVKI-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h3 id="y-la-programaci%C3%B3n-no-tiene-nada-que-ver-con-eso">Y la programaci&#xF3;n NO tiene nada que ver con eso.</h3><img src="https://codigoencasa.com/content/images/2026/09/casper-westera-fY_HVbvYVKI-unsplash-transformed.jpeg" alt="GPT-6 Astra acaba de acabar con el software."><p><a href="https://codigoencasa.com/">OpenAI</a> ha lanzado su nuevo modelo Astra.</p><p>Lo present&#xF3; con un anuncio de est&#xE9;tica retro y muy centrado en las personas. En &#xE9;l se mostraba al modelo utilizando aplicaciones, incluso algunas tan complejas como Blender, y cambiando de contexto sobre la marcha para hacer cosas como pedir comida.</p><p>La presentaci&#xF3;n parec&#xED;a sacada de una pel&#xED;cula sobre inteligencia artificial.</p><p>Y ya era hora.</p><p>Internet se llen&#xF3; inmediatamente de anuncios diciendo que, finalmente, la AGI hab&#xED;a llegado.</p><p>OpenAI necesitaba desesperadamente dirigirse a todo el mercado y no solamente a los desarrolladores.</p><p>Pero la parte de Astra relacionada con el desarrollo de software es mucho m&#xE1;s interesante. Y ah&#xED; es donde quiero explicar por qu&#xE9;, de alguna manera, Astra acaba de matar al software y c&#xF3;mo, parad&#xF3;jicamente, tambi&#xE9;n podr&#xED;a intentar revivirlo.</p><h2 id="sol-astra">Sol, Astra</h2><p>Sol era NUESTRA estrella.</p><p>Astra significa &#x201C;todas las estrellas&#x201D;.</p><p>Es dif&#xED;cil superar eso.</p><p><em>Per aspera, ad astra.</em></p><p>&#xA1;Hacia las estrellas!</p><p>Incluso los nombres sugieren que estamos hablando de otra magnitud.</p><p>Pero no se preocupen. Todav&#xED;a pueden avanzar hacia una galaxia y despu&#xE9;s hacia algo todav&#xED;a mayor.</p><p>&#xBF;<a href="https://codigoencasa.com/">GPT</a> Universe, quiz&#xE1;s?</p><p>El modelo destroza pr&#xE1;cticamente todos los benchmarks y la gente comparte juegos 3D &#x201C;impresionantes&#x201D; programados con &#xE9;l en 30 minutos.</p><p>Pero esa no es la raz&#xF3;n por la que el software se encuentra en una situaci&#xF3;n tan extra&#xF1;a.</p><p>En 2026 hemos llegado a un punto en el que tenemos m&#xE1;s aplicaciones creadas que nunca y, al mismo tiempo, el mayor desinter&#xE9;s hacia el software nuevo.</p><p>El modelo SaaS basado en <a href="https://codigoencasa.com/">MRR</a> est&#xE1; perdiendo fuerza a medida que cada vez m&#xE1;s usuarios buscan alternativas de pago &#xFA;nico.</p><p>En 2026, casi la mitad de los consumidores cancel&#xF3; al menos una suscripci&#xF3;n.</p><p>En 2024 era aproximadamente un tercio.</p><p>El hogar promedio ahora administra 11 o m&#xE1;s suscripciones y subestima su coste real aproximadamente 2,5 veces.</p><p>Mientras tanto, las compras &#xFA;nicas y las licencias de por vida pasaron de representar el 6,4 % al 10,3 % de los modelos de monetizaci&#xF3;n de aplicaciones en apenas dos a&#xF1;os.</p><p>Estamos en uno de los puntos m&#xE1;s bajos.</p><p>&#xBF;La calidad se recuperar&#xE1; o continuar&#xE1; descendiendo?</p><p>No tengo idea.</p><p>Y luego tenemos el problema de la ca&#xED;da de calidad.</p><p>No estoy hablando de alguien que hace <em><a href="https://codigoencasa.com/">vibe coding</a></em> un domingo por diversi&#xF3;n.</p><p>Estoy hablando de grandes marcas, empresas respetadas, utilizando inteligencia artificial y entregando aut&#xE9;ntica basura digital.</p><p>En alg&#xFA;n momento, incluso el consumidor que no entiende de tecnolog&#xED;a empieza a notar el deterioro.</p><p>Astra podr&#xED;a representar un punto de inflexi&#xF3;n en todo esto, pero antes tenemos que revisar algunos ejemplos de c&#xF3;mo el software ha empezado a salir mal durante esta d&#xE9;cada.</p><h2 id="slopware">SLOPware</h2><p>El software se est&#xE1; convirtiendo progresivamente en <em>slopware</em>.</p><p>Poca supervisi&#xF3;n.</p><p>Aceptar lo primero que entrega la inteligencia artificial simplemente porque parece suficientemente bueno.</p><p>Publicar m&#xE1;s cosas, pero sin control, sin planificaci&#xF3;n y sin criterio.</p><h2 id="amazon">Amazon</h2><p>Amazon tuvo cuatro interrupciones de nivel Sev-1 en apenas una semana entre febrero y marzo de 2026.</p><p>Sus informes internos se&#xF1;alaban cambios de c&#xF3;digo &#x201C;asistidos por <a href="https://codigoencasa.com/">IA</a>&#x201D; como una de las principales causas.</p><p>Una interrupci&#xF3;n de seis horas les cost&#xF3; aproximadamente 6,3 millones de d&#xF3;lares en pedidos perdidos.</p><p>El problema se origin&#xF3; en un despliegue que lleg&#xF3; a producci&#xF3;n sin aprobaci&#xF3;n y pr&#xE1;cticamente sin documentaci&#xF3;n.</p><p>Sus propios informes internos describ&#xED;an literalmente estos cambios como modificaciones &#x201C;asistidas por IA generativa&#x201D; con un &#x201C;alto radio de impacto&#x201D;.</p><h2 id="microsoft">Microsoft</h2><p>Microsoft quer&#xED;a convertir Windows en una especie de sistema operativo superpotenciado por inteligencia artificial.</p><p>El resultado vino acompa&#xF1;ado de problemas molestos de rendimiento y una sensaci&#xF3;n general de falta de pulido.</p><p>Algo parecido a la &#xE9;poca de Windows Vista.</p><p>Windows empieza a sentirse como una capa construida alrededor de funciones de inteligencia artificial que no siempre son necesarias, en lugar de sentirse simplemente como un buen sistema operativo.</p><p>Y en este caso ni siquiera estamos hablando necesariamente de inteligencia artificial escribiendo el c&#xF3;digo de <a href="https://codigoencasa.com/">Windows</a>.</p><p>El problema tiene m&#xE1;s que ver con construir toda la hoja de ruta del producto alrededor del entusiasmo generado por la IA, mientras que muchos usuarios normales utilizan la inteligencia artificial simplemente para buscar la mejor receta de tarta de queso.</p><h2 id="claude-code">Claude Code</h2><p>Tres errores superpuestos provocaron que la calidad de las respuestas de Claude Code disminuyera durante aproximadamente seis semanas.</p><p>Usuarios avanzados cancelaron sus suscripciones.</p><p>Investigadores de seguridad publicaron an&#xE1;lisis.</p><p>La gente se enfad&#xF3;.</p><h2 id="sonos-antes-de-la-ia">Sonos, antes de la IA</h2><p>La reescritura de la aplicaci&#xF3;n de Sonos en 2024 lleg&#xF3; al mercado completamente rota.</p><p>Fueron necesarios aproximadamente doce meses de correcciones y decenas de millones de d&#xF3;lares para solucionar sus problemas.</p><p>Incluso acabaron reemplazando al <a href="https://codigoencasa.com/">CEO</a>.</p><p>Muchos usuarios descontentos nunca regresaron a la marca.</p><p>Y esto demuestra algo importante:</p><p>La confianza no siempre regresa despu&#xE9;s de perderla debido a errores de baja calidad.</p><h2 id="instagram">Instagram</h2><p>Instagram es un enorme desastre.</p><p>Un desastre asistido por inteligencia artificial, por supuesto.</p><p>Y ni siquiera estoy hablando de los miles de litigios que Meta tiene abiertos.</p><p>Aqu&#xED; tenemos un ejemplo particularmente absurdo.</p><p>Durante siete semanas, atacantes aprovecharon el asistente de soporte con <a href="https://codigoencasa.com/">IA</a> de Meta para secuestrar cuentas de Instagram.</p><p>El m&#xE9;todo pr&#xE1;cticamente no requer&#xED;a conocimientos t&#xE9;cnicos.</p><p>Siete semanas.</p><p>B&#xE1;sicamente, alguien pod&#xED;a abrir un chat con el bot, pedirle que a&#xF1;adiera una nueva direcci&#xF3;n de correo electr&#xF3;nico a la cuenta de otra persona, recibir un c&#xF3;digo de verificaci&#xF3;n en su propio correo, devolverle ese c&#xF3;digo al bot y obtener un bot&#xF3;n para &#x201C;Restablecer contrase&#xF1;a&#x201D;.</p><p>Eso, por s&#xED; solo, ya supone un problema enorme para la reputaci&#xF3;n de una marca.</p><p>Despu&#xE9;s puedes a&#xF1;adir una larga lista de errores de interfaz, molestias y problemas de estabilidad.</p><p>Meta realmente se ha convertido en una compa&#xF1;&#xED;a donde la inteligencia artificial parece estar primero en pr&#xE1;cticamente todo.</p><h2 id="youtube">YouTube</h2><p>Mira c&#xF3;mo se comporta YouTube en un ordenador.</p><p>Hay problemas que aparecieron hace aproximadamente seis meses y todav&#xED;a no han sido corregidos.</p><p>Algunos ocurren alrededor de la mitad de las veces.</p><p>Y, por supuesto, innumerables startups tambi&#xE9;n publican productos incompletos y rotos.</p><p>Pero eso siempre ha sido bastante habitual.</p><h2 id="abundancia-%E2%86%92-fatiga">Abundancia &#x2192; fatiga</h2><p>El <em>vibe coding</em> provoc&#xF3; un aumento del 84 % en el n&#xFA;mero de nuevas aplicaciones enviadas a la App Store de <a href="https://codigoencasa.com/">Apple</a> durante un &#xFA;nico trimestre.</p><p>Fue el mayor incremento registrado en una d&#xE9;cada.</p><p>Los tiempos de revisi&#xF3;n llegaron en algunos casos hasta los 30 d&#xED;as.</p><p>Apple tambi&#xE9;n empez&#xF3; a eliminar lo que podr&#xED;amos llamar aplicaciones basura o <em>slop apps</em>.</p><p>La mayor&#xED;a de las aplicaciones creadas durante esta ola consiguieron descargas de un solo d&#xED;gito.</p><p>Puedes construirlo.</p><p>Pero eso no significa que a alguien le importe.</p><p>Una publicaci&#xF3;n de Reddit resum&#xED;a perfectamente la situaci&#xF3;n:</p><p>Mis usuarios totales son, aproximadamente, mi esposa y un tipo de Finlandia que sospecho que la descarg&#xF3; por accidente.</p><p>Eso es lo que ocurre cuando la sobreabundancia se encuentra con la sobreestimulaci&#xF3;n.</p><h2 id="la-curva-de-vulnerabilidades">La curva de vulnerabilidades</h2><p>El proyecto Vibe Security Radar de Georgia Tech detect&#xF3; que las vulnerabilidades de software causadas directamente por programaci&#xF3;n con inteligencia artificial generativa pasaron de 6 en enero a 15 en febrero y posteriormente a 35 en marzo de 2026.</p><p>Publicar tantas cosas tan r&#xE1;pidamente tambi&#xE9;n significa abrir m&#xE1;s agujeros en todas partes.</p><h2 id="la-filtraci%C3%B3n-de-tea">La filtraci&#xF3;n de Tea</h2><p>Los chistes pr&#xE1;cticamente se escriben solos.</p><p>&#xBF;Recuerdas Tea?</p><p>La aplicaci&#xF3;n de seguridad exclusiva para mujeres.</p><p>Su backend era b&#xE1;sicamente una base de datos p&#xFA;blica de Firebase sin autenticaci&#xF3;n.</p><p>Se filtraron m&#xE1;s de 70.000 im&#xE1;genes, incluyendo escaneos de pasaportes.</p><p>Se convirti&#xF3; r&#xE1;pidamente en uno de los principales ejemplos utilizados para defender la idea de que:</p><p>&#x201C;<em>Vibe coding</em> = <a href="https://codigoencasa.com/">software</a> inseguro&#x201D;.</p><p>Los modelos actuales han mejorado en este sentido.</p><p>Pero sabes lo que ocurre.</p><p>T&#xFA; lo sabes.</p><p>Yo lo s&#xE9;.</p><p>Vivimos dentro de nuestra propia burbuja tecnol&#xF3;gica.</p><p>Convencer nuevamente a la poblaci&#xF3;n general, incluyendo a personas afectadas por incidentes como el de Tea, de que pueden confiar en un producto creado mediante <em>vibe coding</em> puede llevar a&#xF1;os.</p><p>Una vez que las personas empiezan a identificar patrones asociados con productos de baja calidad, comienzan a reconocer esos mismos patrones en muchas otras cosas.</p><p>En ocasiones, incluso cuando no est&#xE1;n realmente ah&#xED;.</p><h2 id="el-dilema-del-virtuoso">El dilema del virtuoso</h2><p>Tambi&#xE9;n existe otro problema: la percepci&#xF3;n del esfuerzo.</p><p>Imagina a Les <a href="https://codigoencasa.com/">Claypool</a> tocando el bajo.</p><p>Probablemente sea uno de los mejores bajistas del mundo.</p><p>Y cuando lo ves tocar, entiendes r&#xE1;pidamente por qu&#xE9;.</p><p>Para una persona normal, lo que hace representa maestr&#xED;a.</p><p>Al mismo tiempo, para muchas personas, un DJ extremadamente habilidoso simplemente est&#xE1; &#x201C;reproduciendo m&#xFA;sica desde unos vinilos&#x201D;.</p><p>No significa que el DJ no tenga talento.</p><p>Puede tener un nivel de creatividad y habilidad musical equivalente al de un virtuoso.</p><p>Pero simplemente la cantidad de &#x201C;tecnolog&#xED;a&#x201D; que existe dentro de su configuraci&#xF3;n cambia la manera en que muchas personas perciben y comparan a esos dos m&#xFA;sicos.</p><p>Eso mismo est&#xE1; empezando a ocurrir con la programaci&#xF3;n y el dise&#xF1;o.</p><p>Con el arte ya ha sucedido.</p><p>La gente empieza a reconocer el <em><a href="https://codigoencasa.com/">slop</a></em>.</p><p>Empieza a identificar cosas que parecen hechas con poco esfuerzo.</p><p>Y en ocasiones percibe falta de esfuerzo incluso cuando realmente hubo much&#xED;simo trabajo detr&#xE1;s.</p><p>Entonces, &#xBF;se acab&#xF3; el software?</p><p>&#xBF;O simplemente estamos alcanzando el punto m&#xE1;ximo de la curva de degradaci&#xF3;n del software?</p><h2 id="ad-astra">Ad Astra</h2><p>Los modelos est&#xE1;n mejorando.</p><p>Las personas con experiencia est&#xE1;n creando cosas extraordinarias.</p><p>Y no, no estoy hablando de clones de <a href="https://codigoencasa.com/">GTA</a> 6 creados mediante <em>vibe coding</em> en 30 minutos.</p><p>Un gran videojuego no se construir&#xE1; de esa manera.</p><p>Pero Astra ha avanzado un paso m&#xE1;s.</p><p>Puede probar el frontend y realizar sus propias comprobaciones de control de calidad.</p><p>En teor&#xED;a, eso significa interfaces con menos errores.</p><p>Mayor calidad tanto en backend como en frontend.</p><p>Mejor seguridad.</p><p>Una calidad de c&#xF3;digo impresionante.</p><p>Incluso algunos desarrolladores extremadamente experimentados est&#xE1;n sorprendidos por lo que pueden hacer actualmente estos agentes.</p><p>Pero aqu&#xED; aparece algo bastante tr&#xE1;gico.</p><p>Modelos como <a href="https://codigoencasa.com/">Mythos</a> y Astra podr&#xED;an ser una soluci&#xF3;n que llega ligeramente tarde.</p><p>Ser&#xED;a como reemplazar a un mal actor dentro de una obra de teatro por uno extraordinario cuando el p&#xFA;blico ya abandon&#xF3; el teatro despu&#xE9;s de dejar cr&#xED;ticas de una estrella.</p><p>Bien.</p><p>S&#xED;.</p><p>Estoy siendo dram&#xE1;tico para que contin&#xFA;es leyendo.</p><p>Me descubriste.</p><p>Ahora podemos volver a hablar en serio.</p><p>Todav&#xED;a existe una audiencia.</p><p>Nosotros, los que vivimos dentro del mundo tecnol&#xF3;gico, somos una audiencia que no est&#xE1; dispuesta a abandonar.</p><p>Pero eso no es suficiente.</p><p>Los laboratorios que desarrollan los modelos de inteligencia artificial m&#xE1;s avanzados ya se han dado cuenta.</p><p>Y probablemente no est&#xE9;n demasiado contentos con que Susan, una abuela de 80 a&#xF1;os, no est&#xE9; haciendo <em><a href="https://codigoencasa.com/">vibe coding</a></em> para crear sus propias aplicaciones y gastando enormes cantidades de tokens.</p><p>&#xBF;Por qu&#xE9; sigue utilizando la inteligencia artificial simplemente para investigar recetas de tarta de queso?</p><p>Recuperar la confianza de las personas que no pertenecen al mundo tecnol&#xF3;gico llevar&#xE1; tiempo.</p><h2 id="%C2%BFtenemos-tiempo">&#xBF;Tenemos tiempo?</h2><p>No tengo idea.</p><p>La inteligencia artificial ya est&#xE1; empezando a comerse al SaaS.</p><p>Quiz&#xE1;s ni siquiera exista tiempo suficiente para arreglar el modelo <a href="https://codigoencasa.com/">SaaS</a> antes de que eso ocurra.</p><h2 id="estoy-en-contra-y-a-favor-de-la-ia-al-mismo-tiempo">Estoy en contra y a favor de la IA al mismo tiempo</h2><p>No me malinterpretes.</p><p>Programar con inteligencia artificial puede ser fascinante si entiendes de arquitectura de software.</p><p>Definitivamente PUEDES construir cosas.</p><p>Para ti mismo.</p><p>O para otras personas.</p><p>El problema es que el SaaS, especialmente cuando depende de precios mensuales, tambi&#xE9;n est&#xE1; atravesando un momento complicado.</p><p>Las personas buscan alternativas m&#xE1;s econ&#xF3;micas o productos que puedan comprar mediante un &#xFA;nico pago.</p><h2 id="hiperpersonalizaci%C3%B3n">Hiperpersonalizaci&#xF3;n</h2><p>Estoy escribiendo esto en un MacBook de 12 pulgadas de 2017.</p><p>Instal&#xE9; Omarchy Linux y el ordenador ha recuperado una nueva vida.</p><p>Ahora tambi&#xE9;n es &#x201C;ag&#xE9;ntico&#x201D;, con inteligencia artificial profundamente integrada dentro del sistema operativo.</p><p>&#xBF;Por qu&#xE9; es importante?</p><p>El MacBook tiene un trackpad bastante grande situado muy cerca del teclado.</p><p>Los deslizamientos accidentales mov&#xED;an el cursor mientras escrib&#xED;a y, ocasionalmente, terminaba escribiendo en mitad de una frase anterior.</p><p>Era extremadamente molesto.</p><p>As&#xED; que le ped&#xED; al agente que ARREGLARA EL SISTEMA OPERATIVO.</p><p>Y lo hizo.</p><p>Se acabaron los movimientos accidentales.</p><p>Tambi&#xE9;n cre&#xE9; algunos plugins para el sistema operativo con el objetivo de mejorar todav&#xED;a m&#xE1;s mi flujo de trabajo.</p><p>&#xBF;Ves?</p><p>La inteligencia artificial no es necesariamente mala.</p><p>El problema es que como sociedad tendemos a concentrarnos principalmente en los malos ejemplos porque los seres humanos recordamos mejor ese tipo de historias.</p><p>Yo mismo he construido productos utilizando inteligencia artificial.</p><p>Y quiz&#xE1;s simplemente he tenido suerte, o quiz&#xE1;s mi experiencia en dise&#xF1;o me ha ayudado a conseguir que las cosas que he creado realmente cumplan sus objetivos.</p><p>Algunas han tenido cientos de usuarios.</p><p>Otras, miles.</p><p>Pero esa NO es la situaci&#xF3;n habitual.</p><p>Adem&#xE1;s, reconozco que me encuentro en una posici&#xF3;n privilegiada debido al alcance que ya tengo.</p><h2 id="per-aspera">Per aspera</h2><p>&#xBF;Salvar&#xE1; Astra al software?</p><p>&#xBF;O quiz&#xE1;s lo har&#xE1; el siguiente paso?</p><p>&#xBF;Galaxy?</p><p>No lo sabemos.</p><p>Todo est&#xE1; aceler&#xE1;ndose extremadamente r&#xE1;pido.</p><p>&#xBF;Por qu&#xE9; ahora todo ocurre tan r&#xE1;pido?</p><p>En cierta medida, porque los laboratorios de inteligencia artificial necesitan enormes cantidades de dinero.</p><p>Las <a href="https://codigoencasa.com/">GPU</a> que utilizan actualmente est&#xE1;n envejeciendo y eventualmente deber&#xE1;n ser reemplazadas.</p><p>Los inversores empiezan a desconfiar de ciertos modelos de financiaci&#xF3;n circular y de la posibilidad de que exista una burbuja.</p><p>Pero aqu&#xED; y ahora tenemos m&#xE1;s software que nunca.</p><p>Y gran parte de &#xE9;l es simplemente malo.</p><p>Incluso cuando viene de marcas respetadas.</p><p>Puede que sea demasiado tarde para que los modelos consigan revertir esta tendencia de desconfianza.</p><p>La gente seguir&#xE1; necesitando software.</p><p>Pero el mayor cambio no est&#xE1; ocurriendo dentro del c&#xF3;digo.</p><p>Est&#xE1; ocurriendo en la percepci&#xF3;n p&#xFA;blica sobre el buen gusto, el esfuerzo dedicado a crear algo y la atenci&#xF3;n a los detalles.</p><p>Y todav&#xED;a no estoy seguro de que podamos colocar un signo de igualdad entre un gran bajista y un gran <a href="https://codigoencasa.com/">DJ.</a></p><p>Al menos no en la mente del p&#xFA;blico.</p><p>Las personas seguir&#xE1;n considerando que la artesan&#xED;a, el cuidado y el trabajo bien hecho son cosas por las que vale la pena pagar.</p><p>El <em>vibe coding</em> todav&#xED;a no est&#xE1; asociado con esa idea de artesan&#xED;a.</p><p>Quiz&#xE1;s alg&#xFA;n d&#xED;a los modelos consigan resolver tambi&#xE9;n esa parte.</p><p>Hasta ahora, todav&#xED;a no lo han hecho.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/hmUpPJ3vTDY?start=2&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Conect&#xE9; Chatwoot a mi Bot de WhatsApp en 13 minutos &#x2014; gestiona todo desde un panel"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Cómo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento]]></title><description><![CDATA[Todo el flujo de trabajo de CodeGraph está diseñado para ejecutarse de forma local, privada y perfectamente integrada con los asistentes de programación con IA que ya utilizas.]]></description><link>https://codigoencasa.com/untitled-3/</link><guid isPermaLink="false">6ab688a4db4eb67eb47cddd5</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 30 Sep 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/karsten-winegeart-2QYSxxV4F0o-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h3 id="una-gu%C3%ADa-paso-a-paso-para-usar-codegraph-la-herramienta-open-source-que-crea-un-grafo-de-conocimiento-consultable-para-tus-agentes-de-programaci%C3%B3n-con-ia">Una gu&#xED;a paso a paso para usar CodeGraph, la herramienta open source que crea un grafo de conocimiento consultable para tus agentes de programaci&#xF3;n con IA.</h3><img src="https://codigoencasa.com/content/images/2026/09/karsten-winegeart-2QYSxxV4F0o-unsplash-transformed.jpeg" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento"><p>Cada vez que inicias una nueva sesi&#xF3;n con un asistente de programaci&#xF3;n con IA como <a href="https://codigoencasa.com/">Claude Code o Cursor</a>, comienza una secuencia bastante predecible. Haces una pregunta sobre alguna funcionalidad y el agente entra en un ciclo fren&#xE9;tico: <code>ls</code>, <code>grep</code>, <code>read_file</code>, repetir.</p><p>Est&#xE1; &#x201C;explorando&#x201D;.</p><p>Y t&#xFA; est&#xE1;s pagando por cada token que consume mientras intenta descubrir d&#xF3;nde se encuentra la l&#xF3;gica de autenticaci&#xF3;n de tu proyecto.</p><p>Esta fase de descubrimiento es uno de los costes ocultos del desarrollo con agentes. B&#xE1;sicamente, estamos pidi&#xE9;ndole a una inteligencia de nivel extremadamente avanzado que se comporte como un bibliotecario que revisa todos los libros del edificio simplemente para encontrar el &#xED;ndice.</p><p><strong>CodeGraph</strong> cambia por completo esta din&#xE1;mica.</p><p>Al proporcionar un mapa estructural previamente indexado de tu base de c&#xF3;digo mediante un servidor Model Context Protocol (<a href="https://codigoencasa.com/">MCP</a>), permite que los agentes se salten gran parte del proceso de b&#xFA;squeda y vayan directamente a la respuesta.</p><p>En promedio, esto puede reducir las llamadas a herramientas en m&#xE1;s de un 70 % y disminuir el consumo de tokens casi a la mitad.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-13.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-13.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-13.png 1000w, https://codigoencasa.com/content/images/2026/09/image-13.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="la-ingenier%C3%ADa-detr%C3%A1s-del-grafo">La ingenier&#xED;a detr&#xE1;s del grafo</h2><p><a href="https://codigoencasa.com/">CodeGraph</a> es una herramienta t&#xE9;cnicamente sofisticada, dise&#xF1;ada espec&#xED;ficamente para ofrecer inteligencia de c&#xF3;digo de alto rendimiento.</p><h3 id="1-el-pipeline-de-an%C3%A1lisis-con-tree-sitter">1. El pipeline de an&#xE1;lisis con Tree-Sitter</h3><p>En el coraz&#xF3;n de CodeGraph se encuentra el pipeline de an&#xE1;lisis basado en Tree-Sitter.</p><p>A diferencia de las herramientas tradicionales de b&#xFA;squeda basadas en expresiones regulares, CodeGraph utiliza un parser real basado en gram&#xE1;ticas para comprender con gran precisi&#xF3;n los componentes fundamentales de tu c&#xF3;digo.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-14.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1650" height="875" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-14.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-14.png 1000w, https://codigoencasa.com/content/images/size/w1600/2026/09/image-14.png 1600w, https://codigoencasa.com/content/images/2026/09/image-14.png 1650w" sizes="(min-width: 720px) 720px"></figure><h2 id="2-el-puente-de-infraestructura-mcp">2. El puente de infraestructura MCP</h2><p>CodeGraph se comunica con tu agente de IA mediante <a href="https://codigoencasa.com/">MCP.</a></p><p>Este protocolo funciona como un puente de infraestructura que estandariza la comunicaci&#xF3;n entre el agente y el grafo utilizando JSON-RPC.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-15.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-15.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-15.png 1000w, https://codigoencasa.com/content/images/2026/09/image-15.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="3-el-esquema-de-grafo-optimizado-en-sqlite">3. El esquema de grafo optimizado en SQLite</h2><p>Todos los datos y relaciones extra&#xED;dos se almacenan en un esquema de grafo optimizado sobre <a href="https://codigoencasa.com/">SQLite</a>, dise&#xF1;ado para realizar consultas de grafos de alto rendimiento directamente en tu m&#xE1;quina local.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-16.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-16.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-16.png 1000w, https://codigoencasa.com/content/images/2026/09/image-16.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="las-ventajas-principales-densidad-de-contexto-y-privacidad">Las ventajas principales: densidad de contexto y privacidad</h2><p>M&#xE1;s all&#xE1; de la velocidad, CodeGraph ofrece dos ventajas fundamentales que pueden convertirlo en una herramienta especialmente &#xFA;til para el desarrollo profesional: <strong>densidad de contexto</strong> y <strong>privacidad</strong>.</p><h3 id="densidad-de-contexto-mejores-datos-con-menos-tokens">Densidad de contexto: mejores datos con menos tokens</h3><p>Los agentes de <a href="https://codigoencasa.com/">IA</a> tradicionales suelen verse afectados por el llamado &#x201C;context bloat&#x201D; o saturaci&#xF3;n del contexto.</p><p>Esto ocurre cuando se introducen archivos grandes y desordenados dentro del contexto del modelo simplemente para encontrar una &#xFA;nica funci&#xF3;n.</p><p>CodeGraph intenta resolver este problema ofreciendo una <strong>alta densidad de contexto</strong>.</p><p>En lugar de enviar archivos completos, extrae &#xFA;nicamente los s&#xED;mbolos relevantes y las relaciones existentes entre ellos, asegurando que el modelo reciba la mayor cantidad posible de informaci&#xF3;n &#xFA;til utilizando la menor cantidad posible de tokens.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-17.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-17.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-17.png 1000w, https://codigoencasa.com/content/images/2026/09/image-17.png 1100w" sizes="(min-width: 720px) 720px"></figure><h3 id="privacidad-tu-c%C3%B3digo-sigue-siendo-tuyo">Privacidad: tu c&#xF3;digo sigue siendo tuyo</h3><p>En una &#xE9;poca dominada por herramientas de inteligencia artificial basadas en la nube, la privacidad es un aspecto fundamental.</p><p><a href="https://codigoencasa.com/">CodeGraph</a> funciona completamente dentro de un <strong>entorno local de privacidad</strong>.</p><p>Tu c&#xF3;digo fuente y el grafo SQLite resultante nunca abandonan tu m&#xE1;quina.</p><p>El agente de IA realiza consultas al servidor local, evitando que tu propiedad intelectual tenga que exponerse a sistemas externos de indexaci&#xF3;n o entrenamiento.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-18.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-18.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-18.png 1000w, https://codigoencasa.com/content/images/2026/09/image-18.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="c%C3%B3mo-funciona-codegraph">C&#xF3;mo funciona CodeGraph</h2><p>La eficiencia de <a href="https://codigoencasa.com/">CodeGraph</a> es el resultado de un pipeline interno preciso dividido en cuatro etapas, encargado de transformar c&#xF3;digo fuente sin procesar en un grafo de conocimiento optimizado para consultas de alto rendimiento.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-19.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="731" height="274" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-19.png 600w, https://codigoencasa.com/content/images/2026/09/image-19.png 731w" sizes="(min-width: 720px) 720px"></figure><h2 id="c%C3%B3mo-empezar">C&#xF3;mo empezar</h2><p>&#xBF;Listo para convertir una carpeta en un grafo de conocimiento?</p><p>El proceso est&#xE1; dise&#xF1;ado para ser sencillo, local y extremadamente r&#xE1;pido.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-20.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="403" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-20.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-20.png 1000w, https://codigoencasa.com/content/images/2026/09/image-20.png 1100w" sizes="(min-width: 720px) 720px"></figure><h3 id="1-instalaci%C3%B3n">1. Instalaci&#xF3;n</h3><p>CodeGraph es una herramienta CLI ligera.</p><p>Puedes instalarla globalmente utilizando npm en apenas unos segundos:</p><pre><code class="language-bash">npm install -g @colbymchenry/codegraph
</code></pre><h3 id="2-indexar-tu-base-de-c%C3%B3digo">2. Indexar tu base de c&#xF3;digo</h3><p>Accede a la carpeta de tu proyecto y ejecuta el comando <code>init</code>.</p><p>CodeGraph analizar&#xE1; tus archivos, interpretar&#xE1; su estructura utilizando Tree-Sitter y construir&#xE1; un grafo <a href="https://codigoencasa.com/">SQLite</a> local.</p><pre><code class="language-bash">codegraph init -i
</code></pre><h3 id="3-conectar-tu-agente-de-ia">3. Conectar tu agente de IA</h3><p>Una vez que el proyecto est&#xE9; indexado, puedes conectar tu asistente de programaci&#xF3;n con <a href="https://codigoencasa.com/">IA</a> favorito, como Claude Code o Cursor, mediante el puente MCP.</p><p>Esto permite que el agente consulte directamente el grafo y evite gran parte de la costosa fase inicial de exploraci&#xF3;n.</p><pre><code class="language-bash">codegraph install
</code></pre><h3 id="flujo-de-trabajo-colaborativo-desarrollador-agente-y-grafo">Flujo de trabajo colaborativo: desarrollador, agente y grafo</h3><p>El verdadero potencial de CodeGraph aparece dentro de un <strong>flujo de trabajo colaborativo</strong>.</p><p>El desarrollador aporta la intenci&#xF3;n.</p><p>El agente de IA aporta el razonamiento.</p><p>Y CodeGraph proporciona el mapa estructural.</p><p>Este flujo circular permite que cada soluci&#xF3;n se base en la realidad concreta de la base de c&#xF3;digo.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-21.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-21.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-21.png 1000w, https://codigoencasa.com/content/images/2026/09/image-21.png 1100w" sizes="(min-width: 720px) 720px"></figure><h3 id="el-panorama-de-la-inteligencia-basada-en-agentes-codegraph-frente-al-resto">El panorama de la inteligencia basada en agentes: CodeGraph frente al resto</h3><p>Aunque <a href="https://codigoencasa.com/">CodeGraph</a> es una herramienta potente para crear mapas estructurales del c&#xF3;digo, forma parte de un ecosistema m&#xE1;s amplio de herramientas dise&#xF1;adas para hacer que los agentes de IA sean m&#xE1;s inteligentes.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-22.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-22.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-22.png 1000w, https://codigoencasa.com/content/images/2026/09/image-22.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="el-flujo-completo-de-codegraph">El flujo completo de CodeGraph</h2><p>Todo el flujo de trabajo de <a href="https://codigoencasa.com/">CodeGraph</a> est&#xE1; dise&#xF1;ado para ejecutarse de forma local, privada y perfectamente integrada con los asistentes de programaci&#xF3;n con IA que ya utilizas.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-23.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="695" height="228" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-23.png 600w, https://codigoencasa.com/content/images/2026/09/image-23.png 695w"></figure><p>Al mapear los s&#xED;mbolos y las relaciones existentes entre ellos, CodeGraph proporciona una comprensi&#xF3;n profunda de la arquitectura del proyecto, permitiendo que tu agente de IA pueda actuar con mucha m&#xE1;s precisi&#xF3;n.</p><p>Gracias a su &#x201C;Toolkit&#x201D; especializado de comandos <a href="https://codigoencasa.com/">MCP</a>, el agente puede navegar por bases de c&#xF3;digo complejas y realizar an&#xE1;lisis de <strong>&#x201C;Blast Radius&#x201D;</strong>, o radio de impacto, para identificar dependencias antes de que se conviertan en problemas.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-24.png" class="kg-image" alt="C&#xF3;mo usar CodeGraph: Convierte cualquier carpeta en un grafo de conocimiento" loading="lazy" width="1100" height="619" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-24.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-24.png 1000w, https://codigoencasa.com/content/images/2026/09/image-24.png 1100w" sizes="(min-width: 720px) 720px"></figure><h2 id="conclusiones">Conclusiones</h2><p>CodeGraph es una herramienta interesante para abordar el desarrollo asistido por inteligencia artificial.</p><p>Cuando los agentes de <a href="https://codigoencasa.com/">IA</a> dedican tiempo y recursos valiosos a &#x201C;explorar&#x201D; tu base de c&#xF3;digo, ese proceso termina cost&#xE1;ndote dinero.</p><p>CodeGraph intenta solucionar este problema proporcionando a los agentes un mapa preciso y previamente indexado, transform&#xE1;ndolos de bibliotecarios digitales en solucionadores de problemas mucho m&#xE1;s eficientes.</p><p>Puedes considerar CodeGraph como un componente importante dentro de tu <strong>stack de agentes</strong>.</p><p>Mientras herramientas como Graphify destacan a la hora de extraer significado sem&#xE1;ntico y <strong>lat.md</strong> ayuda a gestionar la intenci&#xF3;n, <a href="https://codigoencasa.com/">CodeGraph</a> proporciona el mapa estructural fundamental de tu base de c&#xF3;digo.</p><p>En conjunto, estas herramientas pueden crear una combinaci&#xF3;n muy potente, permitiendo que los agentes de IA trabajen con un nivel de precisi&#xF3;n y eficiencia mucho mayor.</p><p>La filosof&#xED;a central es sencilla:</p><p><strong>Una de las cosas m&#xE1;s costosas que puede hacer un agente de IA es &#x201C;mirar alrededor&#x201D;. CodeGraph le entrega un mapa para que pueda simplemente &#x201C;mirar donde debe&#x201D;.</strong></p><p>Esto permite aprovechar mucho mejor el potencial real de la inteligencia artificial basada en agentes, convirti&#xE9;ndola en un compa&#xF1;ero m&#xE1;s fluido e inteligente dentro de tu flujo de trabajo de desarrollo.</p><p>Gracias por leer.</p><p>Nos vemos en el pr&#xF3;ximo.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/rPz8WzIl448?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Deja de perder clientes en tu Software: Gu&#xED;a de M&#xE9;tricas y Automatizaci&#xF3;n"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Di adiós al doomscrolling: 10 webs que sí merecen tu tiempo]]></title><description><![CDATA[Probablemente termines esa hora habiendo aprendido algo, habiendo descubierto algo o simplemente sonriendo.]]></description><link>https://codigoencasa.com/di-adios-al-doomscrolling-10-webs-que-si-merecen-tu-tiempo/</link><guid isPermaLink="false">6ab17522db4eb67eb47cd3ca</guid><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 28 Sep 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/sandisk-JdBPlDgQoTg-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h3 id="10-sitios-web-para-dejar-de-hacer-doomscrolling-y-volver-a-disfrutar-de-internet">10 sitios web para dejar de hacer doomscrolling y volver a disfrutar de Internet</h3><img src="https://codigoencasa.com/content/images/2026/09/sandisk-JdBPlDgQoTg-unsplash-transformed.jpeg" alt="Di adi&#xF3;s al doomscrolling: 10 webs que s&#xED; merecen tu tiempo"><p>Hace unas semanas me di cuenta de que hab&#xED;a desarrollado un talento muy espec&#xED;fico.</p><p>Pod&#xED;a desbloquear mi tel&#xE9;fono simplemente para consultar el clima y, de alguna manera, terminar viendo a alguien reorganizar su despensa, hacer una rese&#xF1;a de los ba&#xF1;os de un aeropuerto o explicar por qu&#xE9; levantarse exactamente a las 4:37 de la ma&#xF1;ana era, aparentemente, el secreto del &#xE9;xito.</p><p>Al principio era una sesi&#xF3;n inocente de veinte minutos.</p><p>Despu&#xE9;s fueron cuarenta.</p><p>Y luego tres horas.</p><p>Lo peor no era que estuviera perdiendo el tiempo.</p><p>Lo peor era que ya ni siquiera lo estaba disfrutando.</p><p>Terminaba con dolor de cabeza, pero aun as&#xED; parec&#xED;a incapaz de detenerme.</p><p>Como alguien que realmente disfruta de <a href="https://codigoencasa.com/">Internet</a>, darme cuenta de esto me sorprendi&#xF3;.</p><p>Me encanta descubrir cosas interesantes.</p><p>Me gusta leer datos completamente aleatorios.</p><p>Puedo pasar tranquilamente una hora investigando por qu&#xE9; los pulpos tienen tres corazones o c&#xF3;mo organizaban sus libros las bibliotecas antiguas.</p><p>Sin embargo, en alg&#xFA;n momento Internet termin&#xF3; convirti&#xE9;ndose en algo parecido a esto:</p><p><strong>Tres aplicaciones.</strong></p><p>Incluso los libros dejaron de ser una soluci&#xF3;n definitiva.</p><p>Terminaba un cap&#xED;tulo, me sent&#xED;a completamente relajado y, casi inmediatamente despu&#xE9;s, tomaba el tel&#xE9;fono pensando:</p><p>&#x201C;Solo un minuto&#x201D;.</p><p>Ya sabes c&#xF3;mo termina esa historia.</p><p>As&#xED; que, en lugar de intentar utilizar menos Internet, decid&#xED; intentar utilizarlo de una manera diferente.</p><p>Durante los &#xFA;ltimos meses he ido guardando sitios web que despiertan mi curiosidad en lugar de dejarme agotado.</p><p>Lugares que me permiten aprender algo, re&#xED;rme de algo o simplemente recordar que Internet todav&#xED;a est&#xE1; lleno de sorpresas incre&#xED;bles.</p><p>Estos son algunos de ellos.</p><h2 id="1-radio-garden">1. Radio Garden</h2><p>La primera vez que abr&#xED; <strong>Radio Garden</strong>, realmente pensaba quedarme cinco minutos.</p><p>Una hora despu&#xE9;s ya hab&#xED;a escuchado jazz desde Nueva Orleans, una peque&#xF1;a estaci&#xF3;n de radio en Islandia y un programa matutino en alg&#xFA;n lugar de Jap&#xF3;n que no entend&#xED;a en absoluto, pero que de alguna manera segu&#xED;a disfrutando.</p><p>La idea es maravillosamente sencilla.</p><p>Aparece un globo terr&#xE1;queo digital.</p><p>Lo haces girar.</p><p>Seleccionas pr&#xE1;cticamente cualquier lugar del planeta.</p><p>Y puedes escuchar inmediatamente estaciones de radio que est&#xE1;n transmitiendo en directo desde esa zona.</p><p>Resulta extra&#xF1;amente reconfortante.</p><p>A veces dejo alguna estaci&#xF3;n reproduci&#xE9;ndose suavemente mientras preparo caf&#xE9; y, durante unos minutos, mi cocina parece estar conectada con alg&#xFA;n lugar situado a miles de kil&#xF3;metros.</p><h2 id="2-window-swap">2. Window Swap</h2><p>Si las redes sociales muestran las versiones cuidadosamente editadas de la vida de otras personas, <strong><a href="https://codigoencasa.com/">Window Swap</a></strong> ofrece algo bastante diferente.</p><p>Muestra la realidad.</p><p>Personas de todo el mundo env&#xED;an videos grabados desde sus ventanas.</p><p>Algunas tienen vistas a calles llenas de actividad.</p><p>Otras muestran bosques, playas, tejados bajo la lluvia o barrios completamente tranquilos.</p><p>No s&#xE9; exactamente por qu&#xE9; observar el martes lluvioso de otra persona puede resultar tan relajante.</p><p>Tal vez sea porque, en una &#xE9;poca dominada por el consumo y por plataformas que constantemente intentan captar nuestra atenci&#xF3;n, resulta agradable encontrar un sitio que simplemente muestra una ventana.</p><p>Nada m&#xE1;s.</p><p>Y, curiosamente, eso es suficiente.</p><h2 id="3-earthfm">3. Earth.fm</h2><p>Cuando siento que mi cerebro tiene cuarenta pesta&#xF1;as abiertas al mismo tiempo, suelo visitar <strong><a href="https://codigoencasa.com/">Earth.fm</a></strong>.</p><p>Es una colecci&#xF3;n de grabaciones de sonidos naturales procedentes de bosques, r&#xED;os, playas, monta&#xF1;as y parques nacionales de diferentes lugares del mundo.</p><p>No hay discursos motivacionales.</p><p>No hay trucos de productividad.</p><p>Solo p&#xE1;jaros.</p><p>Viento.</p><p>Lluvia.</p><p>A menudo lo utilizo como sonido de fondo mientras leo y realmente me ayuda a concentrarme en un libro en lugar de sentir la necesidad de revisar mi tel&#xE9;fono cada diez minutos.</p><h2 id="4-internet-archive">4. Internet Archive</h2><p>Llamar a <strong>Internet Archive</strong> simplemente <a href="https://codigoencasa.com/">&#x201C;un sitio web&#x201D;</a> probablemente sea quedarse corto.</p><p>Se parece m&#xE1;s a un enorme museo digital.</p><p>Puedes consultar libros, explorar revistas antiguas, ver pel&#xED;culas cl&#xE1;sicas, escuchar m&#xFA;sica e incluso visitar versiones archivadas de sitios web que desaparecieron hace muchos a&#xF1;os.</p><p>Cada vez que entro termino descubriendo algo que originalmente ni siquiera estaba buscando.</p><p>Es uno de esos agujeros de conejo de Internet en los que puedes perderte durante horas.</p><p>Pero existe una diferencia importante.</p><p>Cuando sales, normalmente sientes que aprendiste algo en lugar de preguntarte por qu&#xE9; acabas de perder dos horas de tu vida.</p><h2 id="5-atlas-obscura">5. Atlas Obscura</h2><p>La mayor&#xED;a de los sitios de viajes te ense&#xF1;an los lugares que visita todo el mundo.</p><p><strong>Atlas Obscura</strong> hace pr&#xE1;cticamente lo contrario.</p><p>Te muestra los lugares a los que casi nadie va.</p><p>Puedes encontrar t&#xFA;neles secretos, museos diminutos, castillos abandonados, monumentos extra&#xF1;os y bibliotecas escondidas dentro de antiguos monasterios.</p><p>Incluso si no est&#xE1;s planeando ning&#xFA;n viaje, es muy f&#xE1;cil terminar leyendo durante mucho tiempo sobre lugares extraordinarios que existen en diferentes rincones del planeta.</p><p>Uno de esos ejemplos es el <strong>Osario de Sedlec</strong>, en Rep&#xFA;blica Checa.</p><p>Se trata de una peque&#xF1;a capilla cuya decoraci&#xF3;n interior utiliza los restos de decenas de miles de esqueletos humanos.</p><p>Es inquietante.</p><p>Extra&#xF1;o.</p><p>Y, precisamente por eso, resulta dif&#xED;cil dejar de leer sobre lugares as&#xED;.</p><h2 id="6-geoguessr">6. GeoGuessr</h2><p>Este puede ser peligroso.</p><p><strong>GeoGuessr</strong> te coloca en alg&#xFA;n lugar del mundo utilizando im&#xE1;genes similares a las de Google <a href="https://codigoencasa.com/">Street View</a>.</p><p>Tu misi&#xF3;n es descubrir d&#xF3;nde est&#xE1;s.</p><p>Al principio probablemente adivines completamente al azar.</p><p>Pero despu&#xE9;s empiezas a prestar atenci&#xF3;n.</p><p>Se&#xF1;ales de tr&#xE1;fico.</p><p>Idiomas.</p><p>Matr&#xED;culas.</p><p>Vegetaci&#xF3;n.</p><p>Arquitectura.</p><p>Carreteras.</p><p>La forma de las monta&#xF1;as.</p><p>Peque&#xF1;os detalles que inicialmente ignorabas empiezan a convertirse en pistas.</p><p>Y sin darte cuenta terminas aprendiendo geograf&#xED;a mientras intentas ganar una partida.</p><h2 id="7-quick-draw">7. Quick, Draw!</h2><p>Antes de abrir <strong>Quick, Draw!</strong>, quiz&#xE1; tengas demasiada confianza en tus capacidades art&#xED;sticas.</p><p>Eso puede cambiar r&#xE1;pidamente.</p><p>Por suerte, dibujar bien no es realmente necesario.</p><p>Esa es precisamente parte de la gracia.</p><p>La inteligencia artificial de <a href="https://codigoencasa.com/">Google</a> te propone diferentes objetos y tienes veinte segundos para dibujarlos mientras el sistema intenta descubrir qu&#xE9; est&#xE1;s haciendo.</p><p>Puede pedirte que dibujes un gato.</p><p>Una bicicleta.</p><p>Una taza.</p><p>Un avi&#xF3;n.</p><p>T&#xFA; intentas representarlo lo mejor posible mientras la inteligencia artificial empieza a lanzar hip&#xF3;tesis.</p><p>Es ca&#xF3;tico.</p><p>Es divertido.</p><p>Y puede resultar sorprendentemente adictivo.</p><h2 id="8-nealfun">8. Neal.fun</h2><p>Si existe un sitio que conserva gran parte de aquello que hac&#xED;a tan divertido al Internet de hace a&#xF1;os, probablemente sea <strong><a href="https://codigoencasa.com/">Neal.fun</a></strong>.</p><p>Cada p&#xE1;gina parece surgir de una idea extra&#xF1;a que alguien tuvo y simplemente decidi&#xF3; convertir en realidad.</p><p>Puedes gastar virtualmente la fortuna de una persona extremadamente rica.</p><p>Explorar las partes m&#xE1;s profundas del oc&#xE9;ano.</p><p>Comparar el tama&#xF1;o de diferentes planetas.</p><p>Descubrir acontecimientos hist&#xF3;ricos extra&#xF1;os.</p><p>Experimentar con escalas dif&#xED;ciles de imaginar.</p><p>Y entrar en peque&#xF1;as experiencias interactivas que no parecen existir por ning&#xFA;n motivo particular m&#xE1;s all&#xE1; de ser interesantes.</p><p>Es muy f&#xE1;cil entrar pensando que vas a permanecer cinco minutos y descubrir una hora despu&#xE9;s que todav&#xED;a sigues all&#xED;.</p><h2 id="9-little-alchemy-2">9. Little Alchemy 2</h2><p>El concepto no podr&#xED;a ser m&#xE1;s sencillo.</p><p>Empiezas con cuatro elementos b&#xE1;sicos.</p><p>Los combinas.</p><p>Y observas qu&#xE9; ocurre.</p><p>A partir de esas combinaciones comienzan a aparecer nuevos elementos que, a su vez, puedes volver a mezclar.</p><p>Varias horas despu&#xE9;s puedes terminar creando dinosaurios, planetas, <a href="https://codigoencasa.com/">robots</a> y toda clase de cosas que jam&#xE1;s imaginabas cuando comenzaste la partida.</p><p><strong>Little Alchemy 2</strong> es uno de esos juegos que recuerdan lo satisfactoria que puede ser la curiosidad cuando simplemente te permites experimentar.</p><p>No necesitas ganar nada.</p><p>No necesitas completar una misi&#xF3;n importante.</p><p>Simplemente pruebas cosas para descubrir qu&#xE9; sucede.</p><h2 id="10-the-useless-web">10. The Useless Web</h2><p>Un bot&#xF3;n.</p><p>Un clic.</p><p>Un sitio web completamente aleatorio.</p><p>Esa es pr&#xE1;cticamente toda la idea detr&#xE1;s de <strong>The Useless Web</strong>.</p><p>Presionas un bot&#xF3;n y el sistema te env&#xED;a a alg&#xFA;n rinc&#xF3;n extra&#xF1;o de Internet.</p><p>Algunos sitios son rid&#xED;culos.</p><p>Otros son sorprendentemente ingeniosos.</p><p>Y algunos no tienen absolutamente ning&#xFA;n sentido.</p><p>Pero precisamente ah&#xED; est&#xE1; parte de la diversi&#xF3;n.</p><p>Te recuerda una &#xE9;poca en la que Internet estaba lleno de personas que constru&#xED;an peque&#xF1;as cosas extra&#xF1;as simplemente porque pod&#xED;an hacerlo.</p><p>Sin estrategias de crecimiento.</p><p>Sin embudos.</p><p>Sin intentar convertir cada interacci&#xF3;n en una compra.</p><p>Alguien simplemente ten&#xED;a una idea absurda y decid&#xED;a crearla.</p><p>Quiz&#xE1;s Internet necesite un poco m&#xE1;s de eso.</p><h3 id="el-problema-no-es-necesariamente-que-seamos-flojos">El problema no es necesariamente que seamos flojos</h3><p>No creo que el <em><a href="https://codigoencasa.com/">doomscrolling</a></em> ocurra simplemente porque somos perezosos o porque nos falta fuerza de voluntad.</p><p>Creo que ocurre, en gran medida, porque los algoritmos han conseguido que la opci&#xF3;n m&#xE1;s f&#xE1;cil parezca tambi&#xE9;n la &#xFA;nica opci&#xF3;n.</p><p>Abres el tel&#xE9;fono.</p><p>Instagram.</p><p>Reddit.</p><p>TikTok.</p><p>YouTube.</p><p>X.</p><p>Deslizas.</p><p>Sigues deslizando.</p><p>Y veinte minutos despu&#xE9;s ni siquiera recuerdas exactamente qu&#xE9; acabas de ver.</p><p>Pero Internet sigue siendo enorme.</p><p>Sigue estando lleno de personas construyendo cosas hermosas.</p><p>Cosas inteligentes.</p><p>Educativas.</p><p>Creativas.</p><p>Extra&#xF1;as.</p><p>Y maravillosamente in&#xFA;tiles.</p><p>El problema es que muchas veces esas cosas ya no aparecen autom&#xE1;ticamente frente a nosotros.</p><p>Tenemos que buscarlas.</p><h2 id="cambiar-el-doomscrolling-por-curiosidad">Cambiar el doomscrolling por curiosidad</h2><p>La pr&#xF3;xima vez que tu pulgar abra autom&#xE1;ticamente una red social, puedes probar algo diferente.</p><p>Escuchar una estaci&#xF3;n de radio situada al otro lado del planeta.</p><p>Mirar durante unos minutos por la ventana de alguien que vive en Noruega.</p><p>Escuchar la lluvia de un bosque.</p><p>Explorar un archivo digital de hace cincuenta a&#xF1;os.</p><p>Intentar descubrir en qu&#xE9; pa&#xED;s est&#xE1;s observando simplemente las se&#xF1;ales de tr&#xE1;fico.</p><p>Crear un dinosaurio combinando elementos.</p><p>O entrar en alg&#xFA;n sitio completamente absurdo construido por una persona que probablemente un d&#xED;a pens&#xF3;:</p><p>&#x201C;Esto ser&#xED;a divertido&#x201D;.</p><p>Puede que tambi&#xE9;n termines perdiendo una hora.</p><p>Pero existe una diferencia.</p><p>Probablemente termines esa hora habiendo aprendido algo, habiendo descubierto algo o simplemente sonriendo.</p><p>Y eso recuerda algo importante:</p><p><strong>Internet no se convirti&#xF3; en aburrido.</strong></p><p>Simplemente dejamos que los algoritmos decidieran qu&#xE9; parte de Internet ve&#xED;amos.</p><p>Todav&#xED;a existe una web enorme, extra&#xF1;a, educativa y fascinante m&#xE1;s all&#xE1; del <em>scroll</em> infinito.</p><p>Solo tenemos que volver a explorarla.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/bOMQREKkQlg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="NO PAGUES M&#xC1;S POR BACKEND"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Las carreras se desmoronan. Los empleos mueren. Esto es lo que está haciendo la gente más lista en este momento.]]></title><description><![CDATA[Por primera vez en la historia, una persona con una computadora portátil puede llegar a millones de personas, construir un producto que sigue funcionando mientras duerme o escribir algo capaz de cambiar la manera en la que un desconocido piensa sobre su propia vida.]]></description><link>https://codigoencasa.com/las-carreras-se-desmoronan-los-empleos-mueren-esto-es-lo-que-esta-haciendo-la-gente-mas-lista-en-este-momento/</link><guid isPermaLink="false">6ab16d69db4eb67eb47cd387</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 23 Sep 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/pawel-czerwinski-VVqwAplQ9NU-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h3 id="de-empleado-a-propietario-c%C3%B3mo-convertirte-en-tu-propio-producto">De empleado a propietario: c&#xF3;mo convertirte en tu propio producto</h3><img src="https://codigoencasa.com/content/images/2026/09/pawel-czerwinski-VVqwAplQ9NU-unsplash-transformed.jpeg" alt="Las carreras se desmoronan. Los empleos mueren. Esto es lo que est&#xE1; haciendo la gente m&#xE1;s lista en este momento."><p>Durante la mayor parte de mi vida pens&#xE9; que el objetivo era conseguir un buen empleo.</p><p>Entrar en la escalera profesional. Mantenerme leal. Conseguir un ascenso si trabajaba lo suficiente. Construir una pensi&#xF3;n durante el proceso. Y, finalmente, jubilarme con una cantidad de dinero razonable.</p><p>Justo antes de conseguir el &#x201C;<a href="https://codigoencasa.com/">trabajo correcto</a>&#x201D;, cambi&#xE9; de opini&#xF3;n.</p><p>Las personas m&#xE1;s cercanas a m&#xED; se sorprendieron.</p><p>Decid&#xED; <strong>&#x201C;convertirme en un producto&#x201D;</strong>.</p><p>Tom&#xE9; esa decisi&#xF3;n despu&#xE9;s de una conversaci&#xF3;n dif&#xED;cil con algunos amigos que estaban varios pasos por delante de m&#xED;. Result&#xF3; que esa mentalidad de &#x201C;subir la escalera&#x201D; no hab&#xED;a funcionado para ellos como esperaban.</p><p>As&#xED; que asum&#xED; un riesgo calculado y decid&#xED; <strong>elegirme a m&#xED; mismo</strong>.</p><p>Tambi&#xE9;n hubo una reflexi&#xF3;n de Thomas Merton que me hizo pensar. Dijo:</p><blockquote>&#x201C;Las personas pueden pasar toda su vida subiendo la escalera del &#xE9;xito, solo para descubrir, cuando llegan arriba, que la escalera estaba apoyada contra la pared equivocada.&#x201D;</blockquote><p>Me aterraba la idea de terminar en la <strong>&#x201C;pared equivocada&#x201D;</strong>.</p><h3 id="la-carrera-profesional-tal-como-la-conocemos-est%C3%A1-desapareciendo">La carrera profesional, tal como la conocemos, est&#xE1; desapareciendo</h3><p>Ve a la escuela.</p><p>Consigue un empleo estable.</p><p>Sube por la escalera profesional.</p><p>Y despu&#xE9;s jub&#xED;late c&#xF3;modamente.</p><p>Ese modelo ten&#xED;a sentido cuando la riqueza proven&#xED;a principalmente del trabajo.</p><p>Pero para muchas personas ya no est&#xE1; funcionando.</p><p>Y ahora, todav&#xED;a menos.</p><p>La <a href="https://codigoencasa.com/">l&#xF3;gica</a> que manten&#xED;a unido ese sistema est&#xE1; empezando a desmoronarse.</p><p>El techo est&#xE1; fijado.</p><p>Y muchas de las opciones no est&#xE1;n bajo tu control.</p><p>Tienes 24 horas.</p><p>Un cuerpo.</p><p>Un empleo.</p><p>Por mucho que trabajaras, no pod&#xED;as multiplicarte.</p><p>Tu jefe lo sab&#xED;a.</p><p>El sistema lo sab&#xED;a.</p><p>Y utilizaba ese conocimiento para mantener los salarios predecibles y tus opciones limitadas.</p><p>Tu capacidad de apalancamiento era pr&#xE1;cticamente cero.</p><p>Pero algo cambi&#xF3;.</p><h3 id="las-puertas-se-abrieron-y-la-mayor%C3%ADa-de-las-personas-no-se-dio-cuenta">Las puertas se abrieron y la mayor&#xED;a de las personas no se dio cuenta</h3><p>La tecnolog&#xED;a no solo cambi&#xF3; lo que hacemos.</p><p>Cambi&#xF3; las reglas f&#xED;sicas del trabajo.</p><p>Por primera vez en la historia, una persona con una computadora port&#xE1;til puede llegar a millones de personas, construir un producto que sigue funcionando mientras duerme o escribir algo capaz de cambiar la manera en la que un desconocido piensa sobre su propia vida.</p><p>Eso era nuevo.</p><p>Pero las personas acostumbradas a depender exclusivamente de un salario no prestaron demasiada atenci&#xF3;n.</p><p>De repente ten&#xED;an un nivel de apalancamiento que no hab&#xED;a existido para la mayor&#xED;a de las personas una generaci&#xF3;n atr&#xE1;s.</p><p>Pero &#xBF;por qu&#xE9; iban a elegir un camino con poca o ninguna certeza?</p><p>Avancemos hasta hoy.</p><p>Ahora mismo.</p><h3 id="la-tecnolog%C3%ADa-tiene-inteligencia">La tecnolog&#xED;a tiene inteligencia</h3><p>Y una gran parte de ella todav&#xED;a es gratuita.</p><p>Balaji ten&#xED;a raz&#xF3;n:</p><blockquote>&#x201C;La tecnolog&#xED;a es la fuerza impulsora de la historia. Estar en contra de la tecnolog&#xED;a es estar en el lado equivocado de la historia. No puedes volver a meter al genio dentro de la botella.&#x201D;</blockquote><p>Hoy puedes escribir algo una sola vez y llegar a personas al otro lado del oc&#xE9;ano.</p><p>Puedes construir una aplicaci&#xF3;n una vez y venderla indefinidamente.</p><p>Puedes grabar una clase y despertarte al d&#xED;a siguiente con ventas.</p><p>Pero muchas personas siguen limit&#xE1;ndose a intercambiar tiempo por dinero.</p><p>Siguen jugando con reglas que antes eran inevitables.</p><p>Pero ya no lo son.</p><p>Warren Buffett dijo:</p><blockquote>&#x201C;Si no encuentras una manera de ganar dinero mientras duermes, trabajar&#xE1;s hasta que mueras.&#x201D;</blockquote><p>Hoy tambi&#xE9;n puedes poseer capital.</p><p>Dinero que trabaja mientras t&#xFA; descansas.</p><p>Y eso ya no est&#xE1; reservado exclusivamente para las personas ricas.</p><p>El acceso al capital, incluso en cantidades peque&#xF1;as, se ha ampliado a trav&#xE9;s de fondos indexados, activos digitales y plataformas de <a href="https://codigoencasa.com/">microinversi&#xF3;n</a>.</p><p>El capital puede seguir creciendo incluso cuando no lo est&#xE1;s observando.</p><p>Sin embargo, muchas personas siguen sin aprovecharlo.</p><p>Pero hay m&#xE1;s.</p><h3 id="tambi%C3%A9n-existe-el-c%C3%B3digo">Tambi&#xE9;n existe el c&#xF3;digo</h3><p>Un producto que construyes una sola vez puede escalar con muy poco esfuerzo adicional.</p><p>Una aplicaci&#xF3;n.</p><p>Una plantilla.</p><p>Una herramienta.</p><p>La construyes un martes a las dos de la madrugada.</p><p>Despu&#xE9;s la lanzas.</p><p>La colocas frente a usuarios reales y empiezas a recibir feedback.</p><p>En manos de los usuarios adecuados, puede empezar a propagarse por s&#xED; sola mientras duermes.</p><p>Tambi&#xE9;n existen los medios.</p><p>Ideas capaces de difundirse pr&#xE1;cticamente sin l&#xED;mite.</p><p>Un newsletter.</p><p>Un canal de video.</p><p>Un hilo que las personas empiezan a compartir.</p><p>Las palabras y las ideas no se cansan.</p><p>No piden que les pagues horas extra.</p><p>Podr&#xED;as empezar a crear apalancamiento mediante contenido ahora mismo.</p><p>Las barreras de entrada son pr&#xE1;cticamente inexistentes.</p><p>El apalancamiento est&#xE1; disponible para personas comunes de una manera que simplemente no exist&#xED;a antes.</p><p>Y si todav&#xED;a est&#xE1;s intercambiando exclusivamente tu tiempo por dinero, quiz&#xE1; sea momento de replantearte tu manera de trabajar y de vivir.</p><p>Yo he invertido en las tres cosas.</p><p>Capital.</p><p>C&#xF3;digo.</p><p>Medios.</p><p>La diversificaci&#xF3;n ha sido, desde el principio, la estrategia que mejor me ha funcionado.</p><h3 id="t%C3%BA-eres-el-producto">T&#xFA; eres el producto</h3><p>Convi&#xE9;rtete en un producto.</p><p>Un empleo te paga por tus horas.</p><p>Un producto te paga por el valor que <a href="https://codigoencasa.com/">genera</a>.</p><p>Naval dijo una vez:</p><blockquote>&#x201C;Si tuviera que resumir c&#xF3;mo tener &#xE9;xito en la vida en dos palabras, simplemente dir&#xED;a: convi&#xE9;rtete en un producto.&#x201D;</blockquote><p>Eso significa tratar tus conocimientos, tu perspectiva y tus habilidades como algo que puedes empaquetar, distribuir y escalar.</p><p>Significa convertir lo que sabes en algo capaz de funcionar sin que tengas que estar permanentemente a su lado.</p><p>Un curso.</p><p>Una herramienta.</p><p>Un libro.</p><p>Un newsletter.</p><p>Una aplicaci&#xF3;n de nicho.</p><p>Una metodolog&#xED;a.</p><p>Algo espec&#xED;fico.</p><p>Algo &#xFA;til.</p><p>No tienes por qu&#xE9; alquilar tu tiempo a un solo empleador a la vez.</p><p>Si has pasado a&#xF1;os volvi&#xE9;ndote bueno en algo, entendiendo determinado problema o viendo patrones que otras personas no detectan, ese conocimiento no tiene por qu&#xE9; ser &#xFA;til &#xFA;nicamente dentro de una empresa.</p><p>Eso es algo.</p><p>Y las cosas pueden empaquetarse.</p><h3 id="el-conocimiento-puede-convertirse-en-un-producto">El conocimiento puede convertirse en un producto</h3><p>Un consultor que trabaja exclusivamente con clientes uno a uno sigue intercambiando tiempo por dinero.</p><p>Pero &#xBF;qu&#xE9; ocurre cuando ese consultor convierte su metodolog&#xED;a en un curso?</p><p>&#xBF;O en un libro?</p><p>&#xBF;O en un sistema que otras personas pueden utilizar bajo licencia?</p><p>Eso es convertir el conocimiento en un producto.</p><p>No significa necesariamente trabajar m&#xE1;s.</p><p>Significa cambiar la manera en la que tu conocimiento se distribuye por el mundo.</p><p>Tampoco necesitas empezar a lo grande.</p><p>Ni tienes que abandonar tu empleo para comenzar a convertir tus conocimientos en productos.</p><p>Una profesora podr&#xED;a empezar escribiendo un correo semanal sobre estrategias de aprendizaje.</p><p>Dos a&#xF1;os despu&#xE9;s podr&#xED;a tener 5.000 <a href="https://codigoencasa.com/">suscriptores </a>y una peque&#xF1;a comunidad de pago.</p><p>Seguir&#xED;a siendo profesora.</p><p>Pero tambi&#xE9;n tendr&#xED;a algo que construy&#xF3; ella misma.</p><p>Algo cuya existencia no depende de que est&#xE9; f&#xED;sicamente dentro de un aula a las ocho de la ma&#xF1;ana.</p><h3 id="el-verdadero-problema-encontrar-tu-conocimiento-espec%C3%ADfico">El verdadero problema: encontrar tu conocimiento espec&#xED;fico</h3><p>La parte m&#xE1;s dif&#xED;cil para muchas personas es descubrir qu&#xE9; conocimiento espec&#xED;fico pueden convertir en producto.</p><p>Naval dice:</p><blockquote>&#x201C;El conocimiento espec&#xED;fico se encuentra persiguiendo tu curiosidad y tu pasi&#xF3;n genuinas, en lugar de perseguir aquello que est&#xE1; de moda en este momento.&#x201D;</blockquote><p>Y tambi&#xE9;n dijo:</p><blockquote>&#x201C;Nadie puede competir contigo en ser t&#xFA;, y gran parte de la vida consiste en buscar qui&#xE9;n y qu&#xE9; necesita m&#xE1;s aquello que t&#xFA; eres.&#x201D;</blockquote><p>Tu conocimiento espec&#xED;fico es aquello que sabes y que no resulta sencillo ense&#xF1;ar mediante una capacitaci&#xF3;n convencional.</p><p>Est&#xE1; relacionado con tu curiosidad genuina.</p><p>Con combinaciones inusuales de intereses.</p><p>Con tus obsesiones extra&#xF1;as.</p><p>El conocimiento espec&#xED;fico normalmente no se parece a la descripci&#xF3;n de un puesto de trabajo.</p><p>Se parece a ti.</p><p>Puede ser la persona obsesionada tanto con la econom&#xED;a <a href="https://codigoencasa.com/">conductual</a> como con el dise&#xF1;o y que empieza a descubrir conexiones que nadie m&#xE1;s observa.</p><p>Puede ser una antigua enfermera que entiende el sistema sanitario desde dentro y comienza a escribir sobre sus experiencias personales y las lecciones que pueden resultar &#xFA;tiles para cualquier persona.</p><p>Puede ser un historiador aficionado que explica la historia de una manera que hace que la gente realmente quiera prestarle atenci&#xF3;n.</p><p>El conocimiento espec&#xED;fico tambi&#xE9;n puede esconderse dentro de tus propias frustraciones.</p><p>Dentro de aquello que has vivido.</p><p>De ah&#xED; suelen surgir muchas ideas de producto.</p><p>Es dif&#xED;cil externalizar ese conocimiento porque est&#xE1; construido sobre tus intereses, tus experiencias y tus combinaciones particulares.</p><p>T&#xFA; m&#xE1;s programaci&#xF3;n.</p><p>T&#xFA; m&#xE1;s escritura.</p><p>La combinaci&#xF3;n importa.</p><h3 id="las-habilidades-gen%C3%A9ricas-compiten">Las habilidades gen&#xE9;ricas compiten</h3><p>El conocimiento espec&#xED;fico se acumula.</p><p>La palabra m&#xE1;s importante aqu&#xED; es<a href="https://codigoencasa.com/"> <strong>genuino</strong>.</a></p><p>&#xBF;Qu&#xE9; es aquello que realmente te entusiasma?</p><p>No lo que est&#xE1; de moda.</p><p>No aquello que otra persona te dijo que ser&#xED;a valioso.</p><p>Sino eso que har&#xED;as feliz incluso aunque nadie te pagara por hacerlo.</p><p>Existe una forma m&#xE1;s concreta de encontrarlo.</p><p>Preg&#xFA;ntate:</p><p>&#xBF;Sobre qu&#xE9; cosas las personas suelen pedirte opini&#xF3;n?</p><p>&#xBF;Qu&#xE9; sabes t&#xFA; que te parece completamente obvio, pero que parece confundir a pr&#xE1;cticamente todos los dem&#xE1;s?</p><p>Ese espacio entre lo que resulta evidente para ti y lo que permanece invisible para otras personas puede ser tu conocimiento espec&#xED;fico.</p><p>Empieza a prestar atenci&#xF3;n a lo que sabes.</p><p>Y mejor todav&#xED;a:</p><p>Convi&#xE9;rtelo en un producto y haz que se convierta en otra opci&#xF3;n profesional para ti.</p><h3 id="los-resultados-no-aparecen-al-principio">Los resultados no aparecen al principio</h3><p>Naval tambi&#xE9;n dijo:</p><blockquote>&#x201C;Todos los retornos de la vida &#x2014;ya sea en riqueza, relaciones o conocimiento&#x2014; provienen del inter&#xE9;s compuesto.&#x201D;</blockquote><p>Eso significa participar en juegos que puedan repetirse.</p><p>Ser constante con aquello que comienzas.</p><p>Permitir que las cosas se construyan unas sobre otras.</p><p>Una sola edici&#xF3;n de un newsletter probablemente no tenga demasiado valor.</p><p>Pero 200 <a href="https://codigoencasa.com/">ediciones</a> publicadas durante tres a&#xF1;os pueden acumular confianza y construir una audiencia.</p><p>Convi&#xE9;rtelo en un juego infinito.</p><p>El inter&#xE9;s compuesto solamente funciona si permaneces dentro del juego.</p><p>Cuando conviertes tu conocimiento en productos est&#xE1;s construyendo activos.</p><p>Los activos se acumulan.</p><p>Las habilidades se acumulan.</p><p>La audiencia tambi&#xE9;n.</p><p>Y la reputaci&#xF3;n.</p><p>A&#xF1;o tras a&#xF1;o.</p><p>No est&#xE1;s intentando ganar una sola vez.</p><p>Est&#xE1;s intentando permanecer en el juego el tiempo suficiente para que el inter&#xE9;s compuesto pueda hacer su trabajo.</p><h3 id="la-mayor%C3%ADa-de-las-personas-abandona-demasiado-pronto">La mayor&#xED;a de las personas abandona demasiado pronto</h3><p>Prueban algo durante seis meses.</p><p>Obtienen resultados modestos.</p><p>Y concluyen que estaban equivocadas.</p><p>Pero durante los primeros meses el crecimiento compuesto pr&#xE1;cticamente no se nota.</p><p>La curva permanece plana.</p><p>Plana.</p><p>Plana.</p><p>Y entonces empieza a doblarse.</p><p>Esta es tambi&#xE9;n la raz&#xF3;n por la que perseguir &#x201C;lo que est&#xE1; de moda ahora&#x201D; puede convertirse en una trampa.</p><p>Cuando algo ya es evidentemente popular, las posiciones m&#xE1;s fuertes probablemente ya han sido ocupadas.</p><p>La persona que comenz&#xF3; a seguir su inter&#xE9;s genuino hace tres a&#xF1;os ahora tiene tres a&#xF1;os de ventaja.</p><p>Y eso es extremadamente dif&#xED;cil de alcanzar.</p><h3 id="el-objetivo-es-la-libertad">El objetivo es la libertad</h3><p>La libertad de trabajar en cosas que realmente reflejen qui&#xE9;n eres.</p><p>No necesitar permiso externo para dedicarte a aquello que consideras importante.</p><p>Dise&#xF1;ar tu trabajo alrededor de tu vida, en lugar de dise&#xF1;ar tu vida alrededor del trabajo.</p><p>La riqueza, si llega, es una consecuencia secundaria de esa alineaci&#xF3;n.</p><p>Surge de convertirte de una manera tan aut&#xE9;ntica en ti mismo, tan espec&#xED;fico, tan curioso y tan constante, que eventualmente el mundo comienza a prestar atenci&#xF3;n.</p><p>Eso es lo que buscas.</p><p>Pasar de empleado a propietario.</p><p>De reemplazable a dif&#xED;cil de sustituir.</p><p>De alquilar tu tiempo a construir cosas.</p><p>Hoy tienes apalancamiento.</p><p>Y tienes suficiente tecnolog&#xED;a disponible como para empezar a experimentar.</p><p>No ignores lo que sabes.</p><p>No ignores aquello que has aprendido.</p><p>No ignores las cosas que para ti parecen evidentes.</p><p>Elige un medio y empieza a experimentar.</p><p>Escribe.</p><p>Graba.</p><p>Ense&#xF1;a.</p><p>Construye.</p><p>Dise&#xF1;a.</p><p>Crea.</p><p>Haz cosas capaces de escalar m&#xE1;s all&#xE1; de ti.</p><p>Encontrar&#xE1;s tu voz utiliz&#xE1;ndola.</p><h3 id="no-tienes-que-sentirte-preparado">No tienes que sentirte preparado</h3><p>Piensa en a&#xF1;os, no en meses.</p><p>La mayor&#xED;a de las cosas importantes tardan m&#xE1;s de lo que nos resulta c&#xF3;modo aceptar.</p><p>Dale tiempo a tu trabajo para crecer mediante el efecto compuesto.</p><p>Y recuerda:</p><p>El objetivo es hacer un trabajo que realmente sientas como tuyo.</p><p>El objetivo es la libertad.</p><p>Libertad significa poder decidir c&#xF3;mo quieres utilizar una tarde cualquiera de martes.</p><p>Significa no necesitar permiso para tomarte una semana libre.</p><p>Libertad tambi&#xE9;n significa que tu trabajo refleja tu manera de pensar y no solamente aquello que otra persona necesita que hagas.</p><p>Significa sustituir la direcci&#xF3;n externa por direcci&#xF3;n interna.</p><p>Me gusta algo que dijo <a href="https://codigoencasa.com/">Seth Godin</a>:</p><blockquote>&#x201C;En lugar de preguntarte cu&#xE1;ndo ser&#xE1;n tus pr&#xF3;ximas vacaciones, quiz&#xE1; deber&#xED;as construir una vida de la que no necesites escapar.&#x201D;</blockquote><p>No est&#xE1;s haciendo esto para escapar del trabajo.</p><p>Todos tenemos que trabajar.</p><p>Pero si consigues hacerlo desde la perspectiva de tu <strong>conocimiento espec&#xED;fico</strong>, puedes encontrar algo que realmente despierte una energ&#xED;a diferente dentro de ti.</p><p>Eso es lo que buscas.</p><p>La transici&#xF3;n del trabajo al apalancamiento.</p><p>De tener simplemente un empleo a convertirte en una persona que ha construido algo.</p><p>Bajo tus propias condiciones.</p><p>La pregunta no es qui&#xE9;n va a permitirte hacerlo.</p><p>La pregunta es:</p><p><strong>&#xBF;Qui&#xE9;n va a detenerte?</strong></p><p>El conocimiento espec&#xED;fico es el que genera los mejores intereses.</p><h3 id="no-necesitas-dejar-tu-trabajo">No necesitas dejar tu trabajo</h3><p>Pero s&#xED; puedes comenzar tu propio experimento de apalancamiento.</p><p>Elige un &#xE1;rea que despierte una curiosidad genuina en ti.</p><p>Trabaja sobre aquello que sabes y sobre aquello que descubres p&#xFA;blicamente.</p><p>Convierte ideas &#xFA;tiles en peque&#xF1;os productos.</p><p>Repite.</p><p>Empieza con algo peque&#xF1;o.</p><p>Una gu&#xED;a breve.</p><p>Un newsletter de nicho.</p><p>Una herramienta sencilla que resuelva un &#xFA;nico problema molesto.</p><p>No est&#xE1;s intentando hacerte famoso.</p><p>Est&#xE1;s intentando crear apalancamiento.</p><p>El mercado laboral seguir&#xE1; cambiando.</p><p>Ahora mismo muchas personas est&#xE1;n aterradas ante la posibilidad de perder sus empleos debido a la inteligencia del software.</p><p>Algunos puestos desaparecer&#xE1;n.</p><p>Los nombres de los cargos cambiar&#xE1;n.</p><p>Pero si posees conocimiento espec&#xED;fico y sabes c&#xF3;mo empaquetarlo, ya no eres simplemente alguien empleable.</p><p>Eres independiente.</p><p>Y tienes mucho m&#xE1;s control sobre la direcci&#xF3;n de tu vida y de tu carrera.</p><p>Como dice Naval:</p><blockquote><strong>&#x201C;Gana dinero con tu mente, no con tu tiempo.&#x201D;</strong></blockquote><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/bOMQREKkQlg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="NO PAGUES M&#xC1;S POR BACKEND"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Cómo exprimir un rendimiento 5 veces mayor en nuestras API quitando JSON]]></title><description><![CDATA[Ese fin de semana me costó varias horas de sueño. Pero también cambió para siempre mi forma de pensar sobre el rendimiento.]]></description><link>https://codigoencasa.com/como-exprimir-un-rendimiento-5-veces-mayor-en-nuestras-api-quitando-json/</link><guid isPermaLink="false">6ab12cdedb4eb67eb47cd352</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><dc:creator><![CDATA[Begoña Echegoyen ]]></dc:creator><pubDate>Mon, 21 Sep 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/sandisk-UKtuLKxjRfk-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h3 id="estaba-orgullosa-de-mi-api-hasta-que-hice-un-benchmark">Estaba orgullosa de mi API. Hasta que hice un benchmark.</h3><img src="https://codigoencasa.com/content/images/2026/09/sandisk-UKtuLKxjRfk-unsplash-transformed.jpeg" alt="C&#xF3;mo exprimir un rendimiento 5 veces mayor en nuestras API quitando JSON"><p>Tres a&#xF1;os construyendo una arquitectura limpia, rutas bien nombradas y un manejo s&#xF3;lido de errores&#x2026; y, mientras tanto, los tiempos de respuesta estaban perjudicando silenciosamente la experiencia de usuario.</p><p>No era por una mala l&#xF3;gica.</p><p>No era por una base de datos lenta.</p><p>Era por <a href="https://codigoencasa.com/"><strong>JSON</strong>.</a></p><p>Todo sali&#xF3; a la luz durante una reuni&#xF3;n de seguimiento un lunes.</p><p>El problema estaba en mis propias suposiciones.</p><p>Ese fin de semana me cost&#xF3; varias horas de sue&#xF1;o. Pero tambi&#xE9;n cambi&#xF3; para siempre mi forma de pensar sobre el rendimiento.</p><h2 id="tldr-%E2%80%94-qu%C3%A9-encontrar%C3%A1s-en-este-art%C3%ADculo">TL;DR &#x2014; Qu&#xE9; encontrar&#xE1;s en este art&#xED;culo</h2><p>Usa JSON en los l&#xED;mites p&#xFA;blicos de tu sistema.</p><p>Para todo lo dem&#xE1;s, cuando son m&#xE1;quinas comunic&#xE1;ndose con m&#xE1;quinas, considera utilizar estos formatos.</p><h3 id="el-problema-del-que-casi-nadie-habla">El problema del que casi nadie habla</h3><p><a href="https://codigoencasa.com/">JSON</a> es c&#xF3;modo.</p><p>Es legible.</p><p>A la consola de tu navegador le encanta.</p><p>Tus compa&#xF1;eras y compa&#xF1;eros pueden abrirlo en el Bloc de notas y entender perfectamente lo que est&#xE1;n viendo.</p><p>Pero esa comodidad tiene un precio.</p><p>En producci&#xF3;n puedes estar haciendo esto miles de veces por segundo y asumir que est&#xE1; bien.</p><p>Y no siempre est&#xE1; bien.</p><p>Aqu&#xED; tienes un dato real de uno de mis servicios:</p><p>Un payload con <strong>10.000 registros de usuarios en JSON pesaba 2,3 MB</strong> y tardaba aproximadamente <strong>180 ms en serializarse</strong>.</p><p>&#xBF;Los mismos datos utilizando un formato binario?</p><p><strong>620 KB y aproximadamente 34 ms.</strong></p><p>Los mismos datos.</p><p>Casi <strong>5 veces m&#xE1;s r&#xE1;pido</strong>.</p><p>D&#xE9;jame ense&#xF1;arte qu&#xE9; empec&#xE9; a utilizar.</p><h2 id="1-protocol-buffers-protobuf">1. Protocol Buffers (Protobuf)</h2><p>Google utiliz&#xF3; Protobuf internamente durante a&#xF1;os antes de convertirlo en c&#xF3;digo abierto.</p><p>La idea es sencilla: defines una vez el esquema de tus datos en un archivo <code>.proto</code>, y la biblioteca se encarga de codificar y decodificar la informaci&#xF3;n utilizando un formato binario muy compacto.</p><pre><code>// user.proto
syntax = &quot;proto3&quot;;

message User {
  int32 id    = 1;
  string name  = 2;
  string email = 3;
}
</code></pre><p>Despu&#xE9;s puedes codificar y decodificar los datos en <a href="https://codigoencasa.com/">Node.js</a>:</p><pre><code>const protobuf = require(&apos;protobufjs&apos;);

async function run() {
  const root = await protobuf.load(&apos;user.proto&apos;);
  const User = root.lookupType(&apos;User&apos;);
  const msg = User.create({ id: 1, name: &apos;Arjun&apos;, email: &apos;a@dev.io&apos; });
  const buf = User.encode(msg).finish();   // buffer binario
  const decoded = User.decode(buf);        // vuelve a convertirse en objeto
}
</code></pre><p>Los n&#xFA;meros de los campos &#x2014;1, 2 y 3&#x2014; son lo que realmente se transmite.</p><p>No se transmiten los nombres de los campos.</p><p>Por ejemplo, <code>&quot;name&quot;</code> como cadena de texto ocupa 4 bytes cada vez que aparece en <a href="https://codigoencasa.com/">JSON.</a></p><p>En Protobuf, como etiqueta de campo, puede ocupar solo 1 byte.</p><p>Ahora multiplica esa diferencia por <strong>un mill&#xF3;n de solicitudes al d&#xED;a</strong>.</p><p>Esto ya no es una microoptimizaci&#xF3;n.</p><p>Estamos hablando de una reducci&#xF3;n real de los costes de infraestructura.</p><p><strong>Ideal para:</strong> comunicaci&#xF3;n interna entre servicios, APIs gRPC y pipelines de datos con un gran volumen de tr&#xE1;fico.</p><h2 id="2-messagepack">2. MessagePack</h2><p>Piensa en MessagePack como si <a href="https://codigoencasa.com/">JSON</a> hubiera empezado a ir al gimnasio.</p><p>Sigue siendo un formato basado en pares clave-valor.</p><p>Admite pr&#xE1;cticamente los mismos tipos de datos.</p><p>Pero, en lugar de utilizar texto, codifica todo en binario.</p><p>Y no necesita un esquema.</p><p>Eso significa que puedes tomar los objetos <a href="https://codigoencasa.com/">JSON</a> que ya utilizas y empezar a serializarlos con MessagePack pr&#xE1;cticamente hoy mismo, con un esfuerzo de migraci&#xF3;n m&#xED;nimo.</p><p>De hecho, esta fue la primera opci&#xF3;n que prob&#xE9;.</p><p>Y, sinceramente, lo hice porque no ten&#xED;a paciencia para ponerme a escribir esquemas <code>.proto</code>.</p><p>En una sola tarde cambi&#xE9; los payloads de nuestros WebSockets de JSON a MessagePack.</p><p>El tama&#xF1;o de los payloads se redujo un <strong>38 %</strong>, sin modificar una sola l&#xED;nea de la l&#xF3;gica de negocio.</p><pre><code>const msgpack = require(&apos;@msgpack/msgpack&apos;);

const data = { id: 1, name: &apos;Arjun&apos;, score: 98.5 };
const encoded = msgpack.encode(data);    // Uint8Array, ~20 bytes
const decoded = msgpack.decode(encoded); // vuelve a ser un objeto normal
</code></pre><p>Comp&#xE1;ralo con:</p><pre><code>JSON.stringify(data)
</code></pre><p>que genera:</p><pre><code>{&quot;id&quot;:1,&quot;name&quot;:&quot;Arjun&quot;,&quot;score&quot;:98.5}
</code></pre><p>Son aproximadamente <strong>37 caracteres, 37 bytes en ASCII</strong>.</p><p>MessagePack gana en tama&#xF1;o porque puede utilizar un solo byte para representar valores comunes como n&#xFA;meros enteros peque&#xF1;os, booleanos o <code>null</code>, en lugar de utilizar las representaciones completas en texto que necesita <a href="https://codigoencasa.com/">JSON</a>.</p><p>Pero hay una contrapartida.</p><p>Pierdes la facilidad de lectura para una persona.</p><p>Por eso, antes de hacer el cambio, aseg&#xFA;rate de que tus sistemas de logging y debugging pueden trabajar correctamente con datos binarios.</p><p><strong>Ideal para:</strong> payloads de WebSocket, cach&#xE9; en Redis y, en general, cualquier escenario donde controles ambos extremos de la comunicaci&#xF3;n.</p><h3 id="arquitectura-d%C3%B3nde-encajan-estos-formatos">Arquitectura: d&#xF3;nde encajan estos formatos</h3><p>Este fue el modelo mental que hizo que todo encajara para m&#xED;.</p><p>El formato que utilizas deber&#xED;a depender de <strong>qui&#xE9;n va a leer esos datos</strong>:</p><p>&#xBF;una persona o una m&#xE1;quina?</p><pre><code>Aplicaci&#xF3;n cliente
     |
     |  (REST/HTTP &#x2014; JSON est&#xE1; bien aqu&#xED;, las personas pueden depurarlo)
     v
 API Gateway
     |
     |  (MessagePack o Protobuf &#x2014; solo m&#xE1;quinas)
     v
 Servicio A ------&gt; Servicio B ------&gt; Servicio C
     |                                    |
     |  (Avro &#x2014; streaming de eventos)     |
     v                                    v
 Kafka / Redpanda               Cach&#xE9; (MessagePack)
</code></pre><p>El l&#xED;mite importa.</p><p>Las APIs p&#xFA;blicas necesitan ser f&#xE1;ciles de leer.</p><p>Las comunicaciones internas necesitan velocidad.</p><p>Muchos equipos utilizan <a href="https://codigoencasa.com/">JSON</a> absolutamente para todo y despu&#xE9;s se preguntan por qu&#xE9; determinados procesos son lentos.</p><p>En ocasiones, la respuesta est&#xE1; literalmente delante de nosotros:</p><p>en la cabecera <code>Content-Type</code>.</p><h2 id="3-apache-avro">3. Apache Avro</h2><p>Avro es pr&#xE1;cticamente el formato que Kafka espera silenciosamente que utilices, aunque nadie te lo haya explicado cuando configuraste tu pipeline.</p><p>Al igual que Protobuf, est&#xE1; basado en esquemas.</p><p>Pero Avro permite trabajar con el esquema junto con los datos, lo que lo convierte en una opci&#xF3;n especialmente interesante para sistemas de streaming de eventos donde el esquema va evolucionando con el tiempo.</p><p>Imagina que un consumidor necesita leer eventos generados hace seis meses.</p><p>La semana pasada a&#xF1;adiste tres campos nuevos.</p><p>Ese consumidor deber&#xED;a seguir funcionando.</p><p>Avro est&#xE1; dise&#xF1;ado precisamente para manejar este tipo de evoluci&#xF3;n de esquemas de forma elegante.</p><pre><code>const avro = require(&apos;avsc&apos;);

const UserEvent = avro.Type.forSchema({
  type: &apos;record&apos;,
  name: &apos;UserEvent&apos;,
  fields: [
    { name: &apos;id&apos;,    type: &apos;int&apos; },
    { name: &apos;event&apos;, type: &apos;string&apos; },
    { name: &apos;ts&apos;,    type: &apos;long&apos; }
  ]
});

const buf = UserEvent.toBuffer({
  id: 42,
  event: &apos;login&apos;,
  ts: Date.now()
});

const obj = UserEvent.fromBuffer(buf);
</code></pre><p>Despu&#xE9;s de migrar nuestro bus interno de eventos a Avro, el retraso de los consumidores de Kafka pas&#xF3; de <strong>40 segundos en momentos de carga m&#xE1;xima a menos de 4 segundos</strong>.</p><p>Mismo hardware.</p><p>Mismas particiones del topic.</p><p>Lo &#xFA;nico que cambi&#xF3; fue el formato utilizado para transmitir los datos.</p><p>La integraci&#xF3;n con registros de esquemas &#x2014;ya sea utilizando Confluent o <a href="https://codigoencasa.com/">AWS</a> Glue&#x2014; hace que Avro est&#xE9; preparado para entornos de producci&#xF3;n donde los equipos gestionan pipelines de datos serios y a gran escala.</p><p><strong>Ideal para:</strong> streaming de eventos con Kafka, data lakes y cualquier entorno donde la evoluci&#xF3;n del esquema sea una preocupaci&#xF3;n real a lo largo del tiempo.</p><h2 id="4-flatbuffers">4. FlatBuffers</h2><p>Este probablemente sea el formato m&#xE1;s infravalorado de toda la lista.</p><p>Y tambi&#xE9;n uno de los m&#xE1;s malinterpretados.</p><p>FlatBuffers, tambi&#xE9;n desarrollado por Google, utiliza un enfoque completamente diferente.</p><p>En lugar de codificar un objeto en bytes y despu&#xE9;s decodificarlo en el otro extremo, construye el buffer de bytes de manera que tu c&#xF3;digo pueda leer directamente los datos.</p><p>Sin necesidad de realizar un proceso tradicional de deserializaci&#xF3;n.</p><p>No est&#xE1;s abriendo una caja para sacar lo que hay dentro.</p><p><strong>Est&#xE1;s leyendo directamente la caja.</strong></p><pre><code>// Despu&#xE9;s de generar el c&#xF3;digo JS desde tu esquema .fbs:
const flatbuffers = require(&apos;flatbuffers&apos;);
const { Monster }  = require(&apos;./monster_generated&apos;);

const builder = new flatbuffers.Builder(128);
const name    = builder.createString(&apos;Orc&apos;);

Monster.startMonster(builder);
Monster.addHp(builder, 300);
Monster.addName(builder, name);

const orc = Monster.endMonster(builder);

builder.finish(orc);

const buf = builder.asUint8Array();

const monster = Monster.getRootAsMonster(
  new flatbuffers.ByteBuffer(buf)
);

console.log(monster.name());  // &apos;Orc&apos; - le&#xED;do directamente del buffer, zero copy
console.log(monster.hp());    // 300
</code></pre><p><strong>Zero copy.</strong></p><p>Pr&#xE1;cticamente ninguna asignaci&#xF3;n adicional de memoria durante la lectura.</p><p>Para sistemas donde la latencia es cr&#xED;tica &#x2014;feeds en tiempo real, datos financieros de mercado, backends de videojuegos&#x2014; estamos hablando de otra categor&#xED;a de rendimiento.</p><p>El tiempo de deserializaci&#xF3;n que aparece en el benchmark siguiente no es un error.</p><h3 id="el-benchmark-n%C3%BAmeros-reales">El benchmark: n&#xFA;meros reales</h3><p>Hice estas pruebas con un payload de <strong>5.000 registros</strong>, cada uno con <strong>8 campos</strong>, utilizando Node.js 20:</p><pre><code>Formato       | Tama&#xF1;o   | Serializaci&#xF3;n | Deserializaci&#xF3;n
------------- | -------- | ------------- | ----------------
JSON          | 1,8 MB   | 142 ms        | 98 ms
MessagePack   | 1,1 MB   | 61 ms         | 44 ms
Protobuf      | 680 KB   | 38 ms         | 29 ms
Avro          | 590 KB   | 35 ms         | 31 ms
FlatBuffers   | 720 KB   | 28 ms         | ~2 ms *
</code></pre><p>*El tiempo de deserializaci&#xF3;n de FlatBuffers es pr&#xE1;cticamente cero porque no existe una deserializaci&#xF3;n tradicional: tu c&#xF3;digo lee directamente desde el buffer de memoria sin procesarlo previamente como un objeto completo.</p><h3 id="entonces-%C2%BFdeber%C3%ADas-abandonar-json-por-completo">Entonces, &#xBF;deber&#xED;as abandonar JSON por completo?</h3><p>No.</p><p>Y esa ser&#xED;a precisamente la conclusi&#xF3;n equivocada.</p><p>Lo digo despu&#xE9;s de haber pasado un fin de semana entero intentando convencerme de lo contrario.</p><p><a href="https://codigoencasa.com/">JSON</a> es excelente para APIs p&#xFA;blicas, archivos de configuraci&#xF3;n y cualquier situaci&#xF3;n en la que una persona pueda necesitar leer los datos directamente.</p><p>La facilidad para depurar un sistema tiene un valor real.</p><p>El soporte de herramientas tambi&#xE9;n tiene un valor real.</p><p>La primera vez que tengas un incidente en producci&#xF3;n y descubras que tus logs son una colecci&#xF3;n de blobs binarios imposibles de leer a simple vista, entender&#xE1;s perfectamente a qu&#xE9; me refiero.</p><p>El verdadero cambio consiste en <strong>aprender a elegir el formato de manera consciente</strong>.</p><p><a href="https://codigoencasa.com/">JSON</a> en los l&#xED;mites del sistema, donde las personas necesitan interactuar, inspeccionar o depurar la informaci&#xF3;n.</p><p>Formatos binarios en las capas internas, donde las m&#xE1;quinas se comunican con otras m&#xE1;quinas y el volumen de datos realmente importa.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/QFdxl0gIVqg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="As&#xED; convierto una LANDING en LEADS con GoHighLevel (sin Zapier)"></iframe></figure>]]></content:encoded></item><item><title><![CDATA[Todos le hicieron benchmarks a Opus 5. Nadie leyó la lista de borrado que venía]]></title><description><![CDATA[Busca en toda la biblioteca de prompts instrucciones relacionadas con verificación, autocomprobación, volver a verificar y resúmenes obligatorios de progreso.]]></description><link>https://codigoencasa.com/todos-le-hicieron-benchmarks-a-opus-5-nadie-leyo-la-lista-de-borrado-que-venia/</link><guid isPermaLink="false">6aa80178db4eb67eb47ccde8</guid><category><![CDATA[programacion]]></category><category><![CDATA[programación]]></category><category><![CDATA[noticias]]></category><dc:creator><![CDATA[Marianna Rolfo]]></dc:creator><pubDate>Wed, 16 Sep 2026 19:00:00 GMT</pubDate><media:content url="https://codigoencasa.com/content/images/2026/09/the-metropolitan-museum-of-art-xCZlVxrGxV4-unsplash-transformed.jpeg" medium="image"/><content:encoded><![CDATA[<h1></h1><img src="https://codigoencasa.com/content/images/2026/09/the-metropolitan-museum-of-art-xCZlVxrGxV4-unsplash-transformed.jpeg" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a"><p>La propia gu&#xED;a de migraci&#xF3;n de <a href="https://codigoencasa.com/">Anthropic</a> te dice que elimines las instrucciones de verificaci&#xF3;n que llevas dos a&#xF1;os escribiendo.</p><p>Ocho cambios de comportamiento, una nueva gu&#xED;a de prompting y la silenciosa llegada de capas de orquestaci&#xF3;n con fecha de caducidad.</p><p>La frase m&#xE1;s extra&#xF1;a del lanzamiento de ayer no est&#xE1; en la p&#xE1;gina de precios ni en el gr&#xE1;fico de benchmarks. Est&#xE1; escondida en un documento de migraci&#xF3;n y te dice, literalmente, que elimines parte de tu propio trabajo: quita las instrucciones de verificaci&#xF3;n y autocomprobaci&#xF3;n heredadas de modelos anteriores, porque provocan una verificaci&#xF3;n excesiva en Claude <a href="https://codigoencasa.com/">Opus 5.</a></p><p>Vuelve a leerlo con tus prompts de producci&#xF3;n abiertos.</p><p>La l&#xED;nea &#xAB;incluye un paso final de verificaci&#xF3;n&#xBB;, que hac&#xED;a que Opus 4.8 resultara confiable, ahora se convierte en un centro de coste.</p><p>La instrucci&#xF3;n &#xAB;s&#xE9; conservador y reporta &#xFA;nicamente problemas de alta gravedad&#xBB; dentro de tu prompt de revisi&#xF3;n de c&#xF3;digo ahora puede hacer que el modelo reporte menos problemas.</p><p>Y el nivel de effort que utilizabas para acortar las respuestas ya no necesariamente las acorta.</p><p>Nadie quiere tocar una biblioteca de prompts heredada.</p><p>Esta es la que Anthropic acaba de dejar obsoleta.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1560" height="786" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image.png 1000w, https://codigoencasa.com/content/images/2026/09/image.png 1560w" sizes="(min-width: 720px) 720px"></figure><p>Foto de Sally Crierie en Unsplash.</p><h3 id="%C2%BFqu%C3%A9-te-pidi%C3%B3-realmente-anthropic-que-eliminaras">&#xBF;Qu&#xE9; te pidi&#xF3; realmente Anthropic que eliminaras?</h3><p>Dos documentos contienen pr&#xE1;cticamente toda la historia, y ninguno recibi&#xF3; demasiada atenci&#xF3;n durante el lanzamiento.</p><p>La secci&#xF3;n dedicada a <a href="https://codigoencasa.com/">Opus 5</a> dentro de la gu&#xED;a de migraci&#xF3;n parece una lista de cosas que debes quitar. Y la gu&#xED;a de prompting, publicada esa misma ma&#xF1;ana, es uno de los documentos espec&#xED;ficos sobre comportamiento de modelos m&#xE1;s extensos que Anthropic ha publicado.</p><p>Casi todas sus secciones describen algo que el modelo ahora hace por s&#xED; solo.</p><p>Si colocas ambos documentos uno al lado del otro, aparecen ocho cambios de comportamiento.</p><p>Los ocho est&#xE1;n verificados utilizando documentaci&#xF3;n oficial, no deducidos a partir de impresiones, y pueden organizarse claramente en tres grandes grupos.</p><h3 id="cosas-que-el-modelo-ahora-hace-sin-que-se-lo-pidas-as%C3%AD-que-puedes-eliminar-la-instrucci%C3%B3n">Cosas que el modelo ahora hace sin que se lo pidas, as&#xED; que puedes eliminar la instrucci&#xF3;n</h3><p>Verificaci&#xF3;n.</p><p>Autocorrecci&#xF3;n.</p><p>Narraci&#xF3;n del progreso.</p><p>Cada una de estas tareas ten&#xED;a un patr&#xF3;n de prompting que hace ocho meses pod&#xED;a considerarse una buena pr&#xE1;ctica y que ahora puede convertirse simplemente en consumo innecesario de tokens.</p><h3 id="cosas-que-el-modelo-ahora-hace-demasiado-as%C3%AD-que-debes-limitarlas">Cosas que el modelo ahora hace demasiado, as&#xED; que debes limitarlas</h3><p>Alcance de las tareas.</p><p>Delegaci&#xF3;n a subagentes.</p><p>Conservadurismo en las revisiones de c&#xF3;digo.</p><p>Cada una necesita ahora una nueva instrucci&#xF3;n que probablemente no exista en tu biblioteca actual, porque ese comportamiento antes no formaba parte del modelo.</p><h3 id="controles-que-se-han-desacoplado-y-necesitan-volver-a-ajustarse">Controles que se han desacoplado y necesitan volver a ajustarse</h3><p>El nivel de effort ya no controla la longitud de la respuesta.</p><p>Los niveles de effort fueron recalibrados, por lo que reutilizar una configuraci&#xF3;n anterior es incorrecto por definici&#xF3;n.</p><p>Y el razonamiento, que ahora est&#xE1; activado de forma predeterminada, puede producir nuevos artefactos de salida cuando decides desactivarlo.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-1.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="728" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-1.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-1.png 1000w, https://codigoencasa.com/content/images/2026/09/image-1.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Esto es lo que hace que esta migraci&#xF3;n sea diferente de pr&#xE1;cticamente todas las notas de migraci&#xF3;n de modelos anteriores.</p><p>Antes te dec&#xED;an que cambiaras un par&#xE1;metro.</p><p>Esta vez te est&#xE1;n diciendo que cambies tu propio criterio sobre c&#xF3;mo debe ser un buen prompt.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-2.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="783" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-2.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-2.png 1000w, https://codigoencasa.com/content/images/2026/09/image-2.png 1100w" sizes="(min-width: 720px) 720px"></figure><h3 id="%C2%BFqu%C3%A9-hace-ahora-el-modelo-sin-necesidad-de-que-se-lo-pidas">&#xBF;Qu&#xE9; hace ahora el modelo sin necesidad de que se lo pidas?</h3><p>Empecemos por el cambio que probablemente pueda ahorrarte m&#xE1;s dinero.</p><p>Opus 5 verifica su propio trabajo sin necesidad de que se lo indiques, y la gu&#xED;a de prompting es bastante clara sobre las consecuencias.</p><p>Instrucciones como &#xAB;incluye un paso final de verificaci&#xF3;n para cualquier tarea que no sea trivial&#xBB; o &#xAB;utiliza un subagente para verificar el resultado&#xBB; pueden provocar una verificaci&#xF3;n excesiva.</p><p>Eliminarlas reduce el gasto innecesario de tokens sin que se produzca una p&#xE9;rdida de calidad. Esto est&#xE1; verificado.</p><p>La gu&#xED;a extiende exactamente la misma recomendaci&#xF3;n a lo que denomina <em>legacy harness <a href="https://codigoencasa.com/">scaffolding</a></em>: el andamiaje heredado dentro de la capa de orquestaci&#xF3;n.</p><p>Es decir, no se refiere &#xFA;nicamente a lo que escribiste dentro del prompt. Tambi&#xE9;n incluye pasos independientes de verificaci&#xF3;n que hayas incorporado en la l&#xF3;gica de orquestaci&#xF3;n de tu sistema.</p><p>La autocorrecci&#xF3;n entra en la misma categor&#xED;a.</p><p>El modelo detecta y corrige sus propios errores, de modo que instrucciones como &#xAB;comprueba nuevamente tu respuesta&#xBB; o &#xAB;vuelve a verificar antes de responder&#xBB; se acumulan sobre un comportamiento que ya est&#xE1; ocurriendo.</p><p>El resultado puede ser m&#xE1;s coste sin una mejora real de la respuesta. Tambi&#xE9;n est&#xE1; verificado.</p><p>Ahora viene la parte que convierte este consejo en un argumento mucho m&#xE1;s serio.</p><p>La propia <em>system card</em> de Anthropic documenta qu&#xE9; ocurre cuando la autoverificaci&#xF3;n funciona sin l&#xED;mites a gran escala.</p><p>Durante tareas abiertas de investigaci&#xF3;n biol&#xF3;gica, Opus 5 lleg&#xF3; a quedarse atrapado verificando repetidamente su propio trabajo y termin&#xF3; abandonando campa&#xF1;as de dise&#xF1;o de prote&#xED;nas de 24 horas a mitad de ejecuci&#xF3;n. Est&#xE1; verificado.</p><p>Es decir, el propio proveedor est&#xE1; describiendo a su modelo estrella fallando por verificar demasiado.</p><p>Si tu prompt le dice que verifique todav&#xED;a m&#xE1;s, est&#xE1;s empuj&#xE1;ndolo justamente en la direcci&#xF3;n de ese fallo.</p><p>La narraci&#xF3;n del progreso completa esta primera familia de cambios.</p><p>El modelo tiende a explicar con facilidad lo que est&#xE1; haciendo durante trabajos ag&#xE9;nticos. Anuncia qu&#xE9; est&#xE1; a punto de hacer y, durante sesiones con agentes, genera m&#xE1;s contenido por mensaje que modelos anteriores. Esto tambi&#xE9;n est&#xE1; verificado.</p><p>Si tu capa de orquestaci&#xF3;n contiene una regla como &#xAB;despu&#xE9;s de cada tres llamadas a herramientas, resume el progreso&#xBB;, ese andamiaje puede haberse vuelto redundante frente al comportamiento incorporado en el propio modelo.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-3.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="841" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-3.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-3.png 1000w, https://codigoencasa.com/content/images/2026/09/image-3.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Piensa en el prompt de un agente como si fuera el conjunto de instrucciones permanentes que entregas a una nueva persona que entra a trabajar en tu equipo.</p><p>Opus 5 lleg&#xF3; haciendo ya por s&#xED; solo tres de las cosas que tus instrucciones permanentes siguen exigi&#xE9;ndole.</p><p>De pronto, esas &#xF3;rdenes empiezan a parecer insistencia innecesaria.</p><p>El modelo las cumple, porque est&#xE1; entrenado para hacerlo.</p><p>Y t&#xFA; terminas pagando dos veces por el mismo comportamiento.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-4.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="714" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-4.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-4.png 1000w, https://codigoencasa.com/content/images/2026/09/image-4.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Si solo recuerdas una cosa de esta secci&#xF3;n, que sea esta:</p><p>Cada instrucci&#xF3;n del tipo &#xAB;verifica tu trabajo&#xBB; dentro de tu biblioteca puede haberse convertido ahora en una factura, no en una medida de seguridad.</p><h3 id="%C2%BFqu%C3%A9-hace-ahora-demasiado">&#xBF;Qu&#xE9; hace ahora demasiado?</h3><p>La segunda familia de cambios es m&#xE1;s complicada, porque exige instrucciones que probablemente nunca hab&#xED;as necesitado escribir.</p><p>Opus 5 puede ampliar el alcance de una tarea.</p><p>Puede a&#xF1;adir pasos que no fueron solicitados y aplicar su propio criterio sobre lo que considera que deber&#xED;a incluir la tarea. Esto est&#xE1; verificado.</p><p>La soluci&#xF3;n recomendada en la gu&#xED;a de prompting es introducir expl&#xED;citamente disciplina sobre el alcance.</p><p>Entrega exactamente lo que se solicit&#xF3; y con el alcance previsto.</p><p>Toma por tu cuenta las decisiones rutinarias necesarias.</p><p>Si consideras que la solicitud contiene un posible error, ind&#xED;calo brevemente.</p><p>Y despu&#xE9;s contin&#xFA;a realizando la tarea solicitada en lugar de ampliarla silenciosamente.</p><p>Puedes observar ese mismo comportamiento en algunas de las declaraciones utilizadas durante el lanzamiento, aunque all&#xED; aparece presentado como una ventaja.</p><p>Un ingeniero principal de uno de los clientes que tuvo acceso anticipado describe c&#xF3;mo el modelo cuestion&#xF3; un dise&#xF1;o propuesto y mantuvo su objeci&#xF3;n incluso despu&#xE9;s de que &#xE9;l insistiera.</p><p>Finalmente, el modelo redujo su objeci&#xF3;n a una &#xFA;nica pregunta y propuso una soluci&#xF3;n intermedia. Esta informaci&#xF3;n procede del proveedor.</p><p>El criterio propio y la expansi&#xF3;n del alcance son dos caras del mismo comportamiento.</p><p>Una puede mejorar tu producto.</p><p>La otra puede terminar reescribiendo tu ticket.</p><p>La delegaci&#xF3;n es el segundo punto, y su evoluci&#xF3;n resulta especialmente reveladora.</p><p>Opus 4.7 generaba menos subagentes que <a href="https://codigoencasa.com/">Opus 4.6</a>.</p><p>Opus 5, en cambio, vuelve a delegar con m&#xE1;s facilidad que modelos anteriores.</p><p>Ambos comportamientos est&#xE1;n verificados.</p><p>La recomendaci&#xF3;n cambi&#xF3; de direcci&#xF3;n dos veces en aproximadamente ocho meses.</p><p>Ahora la soluci&#xF3;n consiste en indicar expl&#xED;citamente en qu&#xE9; escenarios est&#xE1; justificada la delegaci&#xF3;n o establecer un l&#xED;mite determinista sobre cu&#xE1;ntos agentes pueden lanzarse.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-5.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="825" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-5.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-5.png 1000w, https://codigoencasa.com/content/images/2026/09/image-5.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>El tercer punto es uno que yo pondr&#xED;a en la pared de cualquier equipo que trabaje con revisiones autom&#xE1;ticas de c&#xF3;digo.</p><p>Si tu prompt de revisi&#xF3;n dice &#xAB;reporta &#xFA;nicamente problemas de alta gravedad&#xBB; o &#xAB;s&#xE9; conservador&#xBB;, <a href="https://codigoencasa.com/">Opus 5</a> puede seguir esa instrucci&#xF3;n literalmente y reportar menos problemas.</p><p>Esto est&#xE1; verificado.</p><p>La recomendaci&#xF3;n de Anthropic es pedirle que reporte todo lo que encuentre y realizar el filtrado en una segunda pasada.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-6.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="735" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-6.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-6.png 1000w, https://codigoencasa.com/content/images/2026/09/image-6.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Detente un momento a pensar en lo que acaba de ocurrir.</p><p>La instrucci&#xF3;n original se escribi&#xF3; para reducir falsos positivos en un modelo que generaba demasiados.</p><p>El nuevo modelo encuentra errores reales con una tasa elevada y produce pocos falsos positivos.</p><p>Por lo tanto, esa misma instrucci&#xF3;n ahora puede estar suprimiendo descubrimientos que s&#xED; quer&#xED;as recibir.</p><p>Tu prompt defensivo se convirti&#xF3; en el problema.</p><p>Y probablemente nada dentro de tu suite de pruebas te avisar&#xE1;, porque una revisi&#xF3;n que simplemente reporta menos resultados puede seguir pasando todos tus tests.</p><h3 id="%C2%BFqu%C3%A9-controles-dejaron-de-significar-lo-mismo">&#xBF;Qu&#xE9; controles dejaron de significar lo mismo?</h3><p>El par&#xE1;metro <em>effort</em> es uno de los lugares donde reutilizar configuraciones anteriores puede provocar errores silenciosos.</p><p>Para <a href="https://codigoencasa.com/">Opus 4.7 y Opus 4.8</a>, la recomendaci&#xF3;n de Anthropic era comenzar utilizando <code>xhigh</code> en tareas de programaci&#xF3;n y trabajos ag&#xE9;nticos.</p><p>Para Opus 5, la recomendaci&#xF3;n es comenzar en <code>high</code>, que adem&#xE1;s es el valor predeterminado, y utilizar <code>low</code> y <code>medium</code> con mucha m&#xE1;s libertad como controles principales del coste de tokens y del tiempo de respuesta siempre que tus evaluaciones indiquen que la calidad se mantiene.</p><p>Esto est&#xE1; verificado.</p><p>El punto de partida recomendado baj&#xF3; un nivel en una sola generaci&#xF3;n.</p><p>Si eso fuera todo, simplemente estar&#xED;amos hablando de ajustar una configuraci&#xF3;n.</p><p>Pero aqu&#xED; aparece la verdadera tarea de migraci&#xF3;n.</p><p>La cantidad de tokens asignada internamente a cada nivel de effort cambia en <a href="https://codigoencasa.com/">Opus 5</a>. Tambi&#xE9;n est&#xE1; verificado.</p><p>La etiqueta permaneci&#xF3;.</p><p>Su significado interno cambi&#xF3;.</p><p>Una carga de trabajo configurada en <code>xhigh</code> porque una evaluaci&#xF3;n realizada con <a href="https://codigoencasa.com/">Opus 4.8</a> indicaba que era la mejor opci&#xF3;n ahora est&#xE1; ejecut&#xE1;ndose con una configuraci&#xF3;n que nunca has probado, aunque el nombre te resulte familiar.</p><p>Por eso la documentaci&#xF3;n recomienda realizar una nueva evaluaci&#xF3;n completa en lugar de reutilizar directamente la configuraci&#xF3;n anterior.</p><p>Hay otros dos detalles m&#xE1;s peque&#xF1;os que tambi&#xE9;n merece la pena tener presentes.</p><p>Configurar <code>effort</code> como <code>high</code> es exactamente equivalente a no enviar el par&#xE1;metro. Est&#xE1; verificado.</p><p>Eso significa que buena parte de las configuraciones expl&#xED;citas de effort que probablemente existen en muchas bases de c&#xF3;digo no est&#xE1;n haciendo nada.</p><p>Adem&#xE1;s, cambiar el nivel de effort entre solicitudes no conserva los prefijos almacenados en cach&#xE9;.</p><p>Por eso la documentaci&#xF3;n establece ahora una recomendaci&#xF3;n clara: elige un nivel al inicio de una sesi&#xF3;n con cach&#xE9; y mantenlo constante durante esa sesi&#xF3;n.</p><p>Esto tambi&#xE9;n est&#xE1; verificado.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-7.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="864" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-7.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-7.png 1000w, https://codigoencasa.com/content/images/2026/09/image-7.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Despu&#xE9;s tenemos un control que directamente dej&#xF3; de hacer lo que muchas personas cre&#xED;an que hac&#xED;a.</p><p>El effort controla el volumen de razonamiento, no la longitud visible de la respuesta.</p><p>En <a href="https://codigoencasa.com/">Opus 5</a>, reducir el effort no reduce de forma confiable la extensi&#xF3;n de la respuesta. Est&#xE1; verificado.</p><p>Si estabas utilizando effort como control de verbosidad, ya no puedes confiar en ese comportamiento.</p><p>La sustituci&#xF3;n es una instrucci&#xF3;n expl&#xED;cita sobre la longitud.</p><p>En realidad, necesitas dos.</p><p>Las respuestas visibles para el usuario son, por defecto, m&#xE1;s extensas que en modelos Opus anteriores.</p><p>Y, de forma independiente, los archivos que el modelo escribe en disco tambi&#xE9;n tienden a ser m&#xE1;s largos.</p><p>Ambos comportamientos est&#xE1;n verificados.</p><p>La verbosidad de una conversaci&#xF3;n y la longitud de un entregable escrito pasan a ser dos instrucciones distintas, no una sola.</p><p>El &#xFA;ltimo elemento de esta lista es una aut&#xE9;ntica trampilla.</p><p>El razonamiento est&#xE1; activado de forma predeterminada en <a href="https://codigoencasa.com/">Opus 5</a> y solo puede desactivarse cuando el effort est&#xE1; configurado en <code>high</code> o en un nivel inferior.</p><p>Combinar razonamiento desactivado con <code>xhigh</code> o <code>max</code> devuelve un error 400.</p><p>Esto se valida de manera independiente en cada solicitud y est&#xE1; verificado.</p><p>Si decides desactivar el razonamiento, pueden aparecer dos tipos de artefactos.</p><p>El modelo puede escribir una llamada a una herramienta como texto visible en lugar de emitir una llamada estructurada.</p><p>En ese caso, la herramienta nunca se ejecuta y el texto filtrado permanece dentro del historial de la conversaci&#xF3;n, contaminando potencialmente los turnos posteriores.</p><p>Tambi&#xE9;n puede ocurrir que etiquetas internas aparezcan directamente en la respuesta visible.</p><p>Ambos comportamientos est&#xE1;n verificados.</p><p>La mitigaci&#xF3;n es bastante contraintuitiva.</p><p>Una regla dentro del prompt de sistema que indique al modelo que &#xAB;no piense&#xBB; puede aumentar la filtraci&#xF3;n de etiquetas internas.</p><p>Adem&#xE1;s, las instrucciones que mencionan espec&#xED;ficamente los nombres de esas etiquetas son menos eficaces que una instrucci&#xF3;n general que proh&#xED;ba mostrar etiquetas internas.</p><p>Esto est&#xE1; verificado.</p><p>La propia recomendaci&#xF3;n de Anthropic es dejar de desactivar el razonamiento y utilizar effort bajo en su lugar, porque el razonamiento activado con effort bajo obtiene mejores resultados que el razonamiento desactivado con un coste similar.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-8.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="702" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-8.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-8.png 1000w, https://codigoencasa.com/content/images/2026/09/image-8.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Si recuerdas una sola cosa de esta secci&#xF3;n, que sea esta:</p><p>La etiqueta de effort sobrevivi&#xF3; a la actualizaci&#xF3;n.</p><p>La calibraci&#xF3;n que existe detr&#xE1;s de esa etiqueta no.</p><p>Y ning&#xFA;n error te avisar&#xE1;.</p><h3 id="%C2%BFqu%C3%A9-puede-romperse-en-producci%C3%B3n-si-ignoras-todo-esto">&#xBF;Qu&#xE9; puede romperse en producci&#xF3;n si ignoras todo esto?</h3><p>Nada de lo anterior necesariamente genera una excepci&#xF3;n.</p><p>Y esa es precisamente la caracter&#xED;stica operativa m&#xE1;s peligrosa de esta migraci&#xF3;n.</p><p>Todos estos modos de fallo pueden ser silenciosos, caros y capaces de superar tus pruebas.</p><p>La verificaci&#xF3;n excesiva puede parecer simplemente una factura un poco m&#xE1;s grande.</p><p>La expansi&#xF3;n del alcance puede parecer que el modelo est&#xE1; intentando ayudarte.</p><p>Una revisi&#xF3;n de c&#xF3;digo que est&#xE1; suprimiendo hallazgos puede parecer simplemente que tu base de c&#xF3;digo est&#xE1; muy limpia.</p><p>Hay tres m&#xE9;tricas que deber&#xED;an estar en alg&#xFA;n dashboard durante esta semana.</p><p>La primera es tokens por tarea completada, no tokens por solicitud.</p><p>La verificaci&#xF3;n excesiva y la delegaci&#xF3;n agresiva inflan todo el bucle de ejecuci&#xF3;n, no necesariamente cada turno individual.</p><p>La segunda es el n&#xFA;mero de subagentes lanzados.</p><p>El comportamiento predeterminado de delegaci&#xF3;n cambi&#xF3;, y un l&#xED;mite solo existe si t&#xFA; lo configuraste.</p><p>La tercera es la cantidad de hallazgos detectados por cada pasada de revisi&#xF3;n antes y despu&#xE9;s de modificar tus prompts.</p><p>Esa puede ser la &#xFA;nica forma de descubrir que la l&#xF3;gica de tu revisi&#xF3;n se ha invertido.</p><p>Existe adem&#xE1;s un cuarto punto que no tiene que ver directamente con el comportamiento del modelo, pero podr&#xED;a arruinarle la semana a m&#xE1;s de un equipo.</p><p>Opus 5 presenta dos regresiones funcionales frente a <a href="https://codigoencasa.com/">Opus 4.8</a>:</p><p><code>web fetch</code> no est&#xE1; disponible.</p><p>Y <code>Priority Tier</code> tampoco est&#xE1; soportado.</p><p>Ambos puntos est&#xE1;n verificados.</p><p>La propia lista de migraci&#xF3;n de Anthropic indica que, si tu organizaci&#xF3;n tiene un compromiso relacionado con Priority Tier, debes planificar la capacidad de forma independiente, porque Opus 4.8 todav&#xED;a conserva esa funcionalidad.</p><p>El modelo del que te est&#xE1;n recomendando migrar es, al mismo tiempo, el que mantiene tu garant&#xED;a de capacidad.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-9.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="791" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-9.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-9.png 1000w, https://codigoencasa.com/content/images/2026/09/image-9.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Existe adem&#xE1;s un dato relacionado con cumplimiento que puede decidir qu&#xE9; modelo utilizar incluso antes de abrir cualquier benchmark.</p><p><a href="https://codigoencasa.com/">Fable 5 y Mythos 5</a> requieren una retenci&#xF3;n de datos de 30 d&#xED;as, est&#xE1;n clasificados como <em>Covered Models</em> y no est&#xE1;n disponibles bajo configuraciones de retenci&#xF3;n cero de datos.</p><p>Una solicitud a Fable 5 realizada desde una organizaci&#xF3;n cuya configuraci&#xF3;n de retenci&#xF3;n no cumpla ese requisito devuelve un error 400.</p><p>Esto est&#xE1; verificado.</p><p>Opus 5, en cambio, no exige un requisito general de retenci&#xF3;n de datos para poder acceder al modelo. Esta informaci&#xF3;n procede del proveedor.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-10.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="790" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-10.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-10.png 1000w, https://codigoencasa.com/content/images/2026/09/image-10.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Para una empresa regulada, esto deja de ser una comparaci&#xF3;n de precios.</p><p>Fable no es caro.</p><p>Simplemente puede ser inaccesible.</p><p>Opus 5 se convierte en el primer modelo de ese nivel de capacidad que determinadas organizaciones pueden utilizar realmente.</p><p>Eso cambia por completo el argumento de &#xAB;capacidad cercana a la frontera por la mitad del precio&#xBB; para cualquier empresa que opere bajo una pol&#xED;tica de retenci&#xF3;n cero de datos.</p><h3 id="%C2%BFpor-qu%C3%A9-la-capa-de-orquestaci%C3%B3n-est%C3%A1-ahora-acoplada-a-la-versi%C3%B3n-del-modelo">&#xBF;Por qu&#xE9; la capa de orquestaci&#xF3;n est&#xE1; ahora acoplada a la versi&#xF3;n del modelo?</h3><p>Al&#xE9;jate un poco de estos ocho cambios y observa el patr&#xF3;n.</p><p>Anthropic no se limit&#xF3; a lanzar un modelo mejor.</p><p>Tambi&#xE9;n public&#xF3; un documento que te explica cu&#xE1;les de tus propios artefactos de ingenier&#xED;a dejan de tener sentido con ese nuevo modelo.</p><p>Y todos esos artefactos viven en la capa de orquestaci&#xF3;n:</p><p>Prompts.</p><p>Andamiaje.</p><p>Pasos de verificaci&#xF3;n.</p><p>Pol&#xED;ticas de delegaci&#xF3;n.</p><p>Configuraciones de effort.</p><p>Sigue un &#xFA;nico comportamiento a trav&#xE9;s de tres versiones y el patr&#xF3;n resulta dif&#xED;cil de ignorar.</p><p>La delegaci&#xF3;n a subagentes disminuy&#xF3; de Opus 4.6 a Opus 4.7.</p><p>Despu&#xE9;s volvi&#xF3; a aumentar de Opus 4.7 a Opus 5.</p><p>La recomendaci&#xF3;n sobre effort pas&#xF3; de utilizar <code>xhigh</code> como punto de partida en 4.7 y 4.8 a comenzar en <code>high</code> en Opus 5.</p><p>Adem&#xE1;s, las asignaciones internas de tokens fueron recalibradas.</p><p>La longitud de las respuestas cambi&#xF3; en <a href="https://codigoencasa.com/">Opus 4.7.</a></p><p>Despu&#xE9;s volvi&#xF3; a cambiar en <a href="https://codigoencasa.com/">Opus 5</a> y, adem&#xE1;s, qued&#xF3; desacoplada del effort.</p><p>Un harness o capa de orquestaci&#xF3;n optimizada espec&#xED;ficamente para cualquiera de esos puntos puede quedar mal ajustada en la siguiente versi&#xF3;n.</p><p>La admisi&#xF3;n m&#xE1;s clara de este problema probablemente sea una herramienta.</p><p>Anthropic lanz&#xF3; una <em>skill</em> de <a href="https://codigoencasa.com/">Claude Code</a> espec&#xED;ficamente para realizar esta migraci&#xF3;n.</p><p>Ejecutas un comando y la herramienta aplica el cambio del identificador del modelo, modifica los par&#xE1;metros incompatibles, sustituye configuraciones de <em>prefill</em> y ajusta la calibraci&#xF3;n del effort a lo largo de tu base de c&#xF3;digo.</p><p>Despu&#xE9;s te entrega una lista de elementos que debes verificar manualmente.</p><p>Esto est&#xE1; verificado.</p><p>No construyes un agente para realizar tu propia migraci&#xF3;n a menos que esperes que esa migraci&#xF3;n sea suficientemente grande y que tenga que repetirse.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-11.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="790" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-11.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-11.png 1000w, https://codigoencasa.com/content/images/2026/09/image-11.png 1100w" sizes="(min-width: 720px) 720px"></figure><p>Aqu&#xED; aparece la lectura inc&#xF3;moda para cualquiera que, como yo, est&#xE9; convencida de que la ventaja duradera de un sistema de <a href="https://codigoencasa.com/">IA</a> vive en su capa de orquestaci&#xF3;n y no &#xFA;nicamente en los pesos del modelo.</p><p>Sigo creyendo que es as&#xED;.</p><p>Pero esa capa de orquestaci&#xF3;n ahora tiene un problema de acoplamiento con la versi&#xF3;n que los propios pesos del modelo no tienen.</p><p>Cada mejora de comportamiento incorporada al modelo elimina alg&#xFA;n patr&#xF3;n compensatorio que antes hab&#xED;as a&#xF1;adido a tu infraestructura.</p><p>Los equipos que ganen durante el pr&#xF3;ximo a&#xF1;o probablemente no ser&#xE1;n aquellos que tengan la capa de orquestaci&#xF3;n m&#xE1;s elaborada.</p><p>Ser&#xE1;n aquellos capaces de simplificarla m&#xE1;s r&#xE1;pido cuando el propio modelo absorba una de sus capas.</p><p>Trata tu biblioteca de prompts como una dependencia que tiene su propio calendario de versiones.</p><p>Porque eso es exactamente en lo que se ha convertido.</p><p>F&#xED;jala.</p><p>Versiona los cambios.</p><p>Comp&#xE1;rala con las notas de comportamiento del proveedor cada vez que cambies de modelo.</p><p>Y reserva presupuesto y tiempo para realizar nuevas evaluaciones exactamente igual que lo har&#xED;as al actualizar un framework.</p><h3 id="el-briefing-del-lunes">El briefing del lunes</h3><p>Esto es lo que debes decirle a tu equipo, en el mismo orden en que probablemente te lo preguntar&#xE1;.</p><figure class="kg-card kg-image-card"><img src="https://codigoencasa.com/content/images/2026/09/image-12.png" class="kg-image" alt="Todos le hicieron benchmarks a Opus 5. Nadie ley&#xF3; la lista de borrado que ven&#xED;a" loading="lazy" width="1100" height="855" srcset="https://codigoencasa.com/content/images/size/w600/2026/09/image-12.png 600w, https://codigoencasa.com/content/images/size/w1000/2026/09/image-12.png 1000w, https://codigoencasa.com/content/images/2026/09/image-12.png 1100w" sizes="(min-width: 720px) 720px"></figure><h3 id="elimina">Elimina</h3><p>Busca en toda la biblioteca de prompts instrucciones relacionadas con verificaci&#xF3;n, autocomprobaci&#xF3;n, volver a verificar y res&#xFA;menes obligatorios de progreso.</p><p>Elim&#xED;nalas de los flujos que utilicen <a href="https://codigoencasa.com/">Opus 5.</a></p><p>Revisa tambi&#xE9;n la capa de orquestaci&#xF3;n, no &#xFA;nicamente las cadenas de texto de tus prompts.</p><p>Los pasos independientes de verificaci&#xF3;n implementados dentro de la orquestaci&#xF3;n tambi&#xE9;n cuentan.</p><h3 id="limita">Limita</h3><p>A&#xF1;ade instrucciones expl&#xED;citas sobre el alcance para tareas que deben permanecer acotadas.</p><p>Define una pol&#xED;tica clara de delegaci&#xF3;n o establece un l&#xED;mite estricto sobre el n&#xFA;mero de subagentes que pueden lanzarse.</p><p>Reescribe los prompts conservadores utilizados en revisiones de c&#xF3;digo.</p><p>Pide al modelo que reporte todo y filtra los resultados en una segunda pasada.</p><h3 id="recalibra">Recalibra</h3><p>Ejecuta una evaluaci&#xF3;n completamente nueva de los niveles de effort en lugar de reutilizar configuraciones anteriores.</p><p>A&#xF1;ade instrucciones expl&#xED;citas sobre la longitud de las respuestas de <a href="https://codigoencasa.com/">chat </a>y utiliza una instrucci&#xF3;n diferente para los entregables escritos.</p><p>Audita cualquier solicitud que desactive el razonamiento, porque desactivar el razonamiento utilizando <code>xhigh</code> o <code>max</code> ahora devuelve un error 400.</p><h3 id="vuelve-a-establecer-tu-l%C3%ADnea-base">Vuelve a establecer tu l&#xED;nea base</h3><p>Mide tokens por tarea completada antes y despu&#xE9;s de realizar los cambios.</p><p>No te limites a medir tokens por solicitud.</p><p>Despu&#xE9;s comprueba si <code>Priority Tier</code> o <code>web fetch</code> aparecen en alguna de las cargas de trabajo que estabas a punto de migrar.</p><h2 id="preguntas-frecuentes">Preguntas frecuentes</h2><h3 id="%C2%BFdeber%C3%ADa-reescribir-mis-prompts-hoy-mismo">&#xBF;Deber&#xED;a reescribir mis prompts hoy mismo?</h3><p>Primero elimina antes de reescribir.</p><p>Quitar las instrucciones de verificaci&#xF3;n y autocomprobaci&#xF3;n es el cambio de menor riesgo de toda la lista.</p><p>Es una recomendaci&#xF3;n directa de Anthropic y puede reducir inmediatamente el consumo de tokens.</p><p>Guarda las nuevas instrucciones relacionadas con alcance y delegaci&#xF3;n para despu&#xE9;s de haber medido una l&#xED;nea base.</p><p>Esas instrucciones a&#xF1;aden complejidad y merecen estar respaldadas por evidencia.</p><h3 id="%C2%BFse-aplica-todo-esto-tambi%C3%A9n-a-sonnet-5">&#xBF;Se aplica todo esto tambi&#xE9;n a Sonnet 5?</h3><p>No directamente.</p><p>Cada nota de comportamiento incluida en este art&#xED;culo procede espec&#xED;ficamente de documentaci&#xF3;n relacionada con <a href="https://codigoencasa.com/">Opus 5.</a></p><p>Adem&#xE1;s, ambos modelos presentan diferencias importantes.</p><p>Sonnet 5 permite utilizar razonamiento desactivado con cualquier nivel de effort.</p><p>No admite mensajes de sistema en mitad de una conversaci&#xF3;n.</p><p>Y sigue teniendo <code>web fetch</code>.</p><p>Consulta siempre la documentaci&#xF3;n espec&#xED;fica de tu modelo en lugar de generalizar el comportamiento de otro.</p><p>Esa es, precisamente, una de las principales lecciones de todo este art&#xED;culo.</p><h3 id="%C2%BFqu%C3%A9-deber%C3%ADan-modificar-primero-quienes-utilizan-claude-code">&#xBF;Qu&#xE9; deber&#xED;an modificar primero quienes utilizan Claude Code?</h3><p>La misma lista de elementos que debes eliminar, pero aplicada a las instrucciones de tu proyecto en lugar de &#xFA;nicamente a los prompts de API.</p><p>Anthropic incluye una herramienta de migraci&#xF3;n dentro de <a href="https://codigoencasa.com/">Claude Code</a> que gestiona los cambios de identificador del modelo, modificaciones incompatibles de par&#xE1;metros y recalibraci&#xF3;n del effort a lo largo de una base de c&#xF3;digo.</p><p>Despu&#xE9;s devuelve una lista de comprobaciones manuales.</p><p>Empieza por ah&#xED;.</p><p>Pero considera esa lista como el comienzo del trabajo, no como el final.</p><h3 id="recapitulaci%C3%B3n-y-un-experimento">Recapitulaci&#xF3;n y un experimento</h3><p>Hay tres ideas que merece la pena conservar.</p><p>La primera es que <a href="https://codigoencasa.com/">Opus 5</a> lleg&#xF3; acompa&#xF1;ado de una lista de instrucciones tuyas que ahora debes eliminar.</p><p>La m&#xE1;s importante est&#xE1; relacionada con la verificaci&#xF3;n.</p><p>El modelo ahora verifica por s&#xED; mismo y la propia <em>system card</em> documenta situaciones en las que termina verificando demasiado.</p><p>La segunda es que los comportamientos que cambiaron de direcci&#xF3;n &#x2014;delegaci&#xF3;n, calibraci&#xF3;n del effort y control de longitud&#x2014; pertenecen todos a la capa de orquestaci&#xF3;n.</p><p>Eso significa que tu harness est&#xE1; acoplado a la versi&#xF3;n del modelo de una manera que fijar simplemente el identificador del modelo no puede proteger.</p><p>La tercera es que pr&#xE1;cticamente todos los fallos asociados con esta migraci&#xF3;n son silenciosos.</p><p>No necesariamente tendr&#xE1;s una excepci&#xF3;n.</p><p>No necesariamente aumentar&#xE1; tu tasa de errores.</p><p>Tus tests pueden seguir pasando.</p><p>El experimento que merece la pena hacer esta semana puede realizarse en una tarde.</p><p>Elige un prompt de producci&#xF3;n que contenga una instrucci&#xF3;n de verificaci&#xF3;n o autocomprobaci&#xF3;n.</p><p>Ejecuta veinte tareas representativas utilizando <a href="https://codigoencasa.com/">Opus 5</a> con esa instrucci&#xF3;n.</p><p>Despu&#xE9;s ejecuta otras veinte tareas equivalentes elimin&#xE1;ndola.</p><p>Mant&#xE9;n constante el nivel de effort para conservar estable la cach&#xE9;.</p><p>Mide los tokens consumidos por tarea completada y eval&#xFA;a la calidad utilizando tus propios criterios.</p><p>No midas &#xFA;nicamente tokens por solicitud.</p><p>Si la afirmaci&#xF3;n de Anthropic se cumple, deber&#xED;as obtener la misma calidad con un coste menor.</p><p>Y habr&#xE1;s medido directamente el beneficio de eliminar esas instrucciones antes de que tus competidores terminen siquiera de leer los gr&#xE1;ficos de benchmarks.</p><p>Gracias por leer <a href="https://codigoencasa.com/">C&#xF3;digo en Casa.</a><br>Si esto te a ayudado y te sumo algo Dale un &#x1F44F; , comp&#xE1;rtelo con tu red o dejame un comentario para saber tu opini&#xF3;n.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/QFdxl0gIVqg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="As&#xED; convierto una LANDING en LEADS con GoHighLevel (sin Zapier)"></iframe></figure>]]></content:encoded></item></channel></rss>