<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es"><title>Chemaclass - agentic-coding</title><subtitle>Tech Lead compartiendo ideas prácticas sobre artesanía del software, TDD, liderazgo, Bitcoin e IA. Artículos, resúmenes de libros y charlas.</subtitle><link rel="self" type="application/atom+xml" href="https://chemaclass.com/es/tags/agentic-coding/atom.xml"/><link rel="alternate" type="text/html" href="https://chemaclass.com"/><generator uri="https://www.getzola.org/">Zola</generator><updated>2026-06-26T00:00:00+00:00</updated><id>https://chemaclass.com/es/tags/agentic-coding/atom.xml</id><entry xml:lang="es"><title>Recorta la Factura de Tokens</title><subtitle>Dos fugas, dos parches</subtitle><category term="ai" scheme="https://chemaclass.com/tags/ai/" label="Ai"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><category term="developer-tools" scheme="https://chemaclass.com/tags/developer-tools/" label="Developer Tools"/><category term="agentic-coding" scheme="https://chemaclass.com/tags/agentic-coding/" label="Agentic Coding"/><published>2026-06-26T00:00:00+00:00</published><updated>2026-06-26T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/es/blog/cut-the-token-bill-on-both-ends/"/><id>https://chemaclass.com/es/blog/cut-the-token-bill-on-both-ends/</id><summary type="html">Dos herramientas pequeñas que se suman: Caveman recorta lo que el agent te responde, RTK recorta lo que la terminal manda de vuelta. Más espacio en el mismo context window, mismo modelo, mismos prompts.</summary><content type="html">&lt;p>Toda sesión agéntica quema tokens en dos direcciones a la vez. El agent te responde, y la terminal escupe su output. Las dos cosas pasan por el mismo context window, y las dos tienen fugas.&lt;/p>
&lt;p>Estira la sesión lo suficiente y chocas con el muro. Las respuestas empeoran y la factura sube.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;blockquote>
&lt;p>Mismo modelo. Mismos prompts. Factura más ligera.&lt;/p>
&lt;/blockquote>
&lt;p>Abre cualquier transcripción de sesión y los bloques más grandes no son tus prompts:&lt;/p>
&lt;ul>
&lt;li>Respuestas del agent: cháchara, vacilaciones, repeticiones, “Sure! Happy to help…”.&lt;/li>
&lt;li>Output de herramientas: logs de &lt;code>npm install&lt;/code>, muros de texto de &lt;code>git status&lt;/code>, volcados de &lt;code>grep&lt;/code> con rutas completas.&lt;/li>
&lt;/ul>
&lt;p>Las dos herramientas de abajo atacan una de esas cosas cada una. Caveman se ocupa de lo que el agent responde. RTK se ocupa de lo que la shell manda de vuelta.&lt;/p>
&lt;h2 id="caveman-recorta-la-salida">Caveman recorta la salida
&lt;a class="heading-anchor" href="#caveman-recorta-la-salida" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>&lt;strong>&lt;a rel="external" href="https://github.com/JuliusBrussee/caveman">Caveman&lt;/a>&lt;/strong> es un Agent Skill. Ejecuta &lt;code>/caveman full&lt;/code> una vez y el agent deja de rellenar sus respuestas: sin artículos, sin relleno, sin cháchara. Los fragmentos están bien, y los términos técnicos se mantienen exactos.&lt;/p>
&lt;p>Instalación:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">curl&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">fsSL&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh&lt;/span>&lt;span style="color: light-dark(#D73A49, #F97583);"> |&lt;/span>&lt;span style="color: light-dark(#6F42C1, #B392F0);"> bash&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Lo que muere:&lt;/p>
&lt;ul>
&lt;li>Artículos: a, an, the.&lt;/li>
&lt;li>Rellenos: just, really, basically, actually, simply.&lt;/li>
&lt;li>Cháchara: sure, of course, happy to.&lt;/li>
&lt;li>Vacilaciones: might, perhaps, it depends.&lt;/li>
&lt;/ul>
&lt;p>Lo que sobrevive:&lt;/p>
&lt;ul>
&lt;li>Bloques de código, errores exactos, rutas de archivo, comandos.&lt;/li>
&lt;li>Avisos de seguridad y operaciones destructivas (el skill se aclara solo).&lt;/li>
&lt;/ul>
&lt;details class="deep-dive">
&lt;summary class="deep-dive__header">
&lt;span class="deep-dive__icon">&lt;/span>
&lt;span class="deep-dive__title">Deep Dive: Antes y después&lt;/span>
&lt;/summary>
&lt;div class="deep-dive__content">
&lt;p>Modo normal:&lt;/p>
&lt;blockquote>
&lt;p>Sure! I’d be happy to help you with that. The issue you’re experiencing is likely caused by an off-by-one error in your token expiry check. The middleware compares the current time using &lt;code>&amp;lt;&lt;/code> when it should really be using &lt;code>&amp;lt;=&lt;/code>. Here’s the fix:&lt;/p>
&lt;/blockquote>
&lt;p>Modo caveman:&lt;/p>
&lt;blockquote>
&lt;p>Bug in auth middleware. Token expiry check use &lt;code>&amp;lt;&lt;/code> not &lt;code>&amp;lt;=&lt;/code>. Fix:&lt;/p>
&lt;/blockquote>
&lt;p>Mismo fix, y el bloque de código que viene después es idéntico. Lo único que encoge es la prosa de alrededor, hasta más o menos un cuarto.&lt;/p>
&lt;/div>
&lt;/details>
&lt;p>Hay tres niveles: &lt;code>lite&lt;/code>, &lt;code>full&lt;/code> y &lt;code>ultra&lt;/code>. Empieza en &lt;code>full&lt;/code>, porque &lt;code>ultra&lt;/code> se lee como un telegrama. Si una respuesta te queda demasiado seca, escribe &lt;code>normal mode&lt;/code> y se relaja.&lt;/p>
&lt;blockquote>
&lt;p>El agent no pierde inteligencia cuando le quitas la cháchara.&lt;/p>
&lt;/blockquote>
&lt;h2 id="rtk-recorta-la-entrada">RTK recorta la entrada
&lt;a class="heading-anchor" href="#rtk-recorta-la-entrada" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>&lt;strong>&lt;a rel="external" href="https://github.com/rtk-ai/rtk">RTK&lt;/a>&lt;/strong> (Rust Token Killer) envuelve los comandos que ejecuta tu agent. Un hook reescribe &lt;code>git status&lt;/code> como &lt;code>rtk git status&lt;/code> por detrás, así que no hay nada extra que teclear ni overhead que notar.&lt;/p>
&lt;p>Instalación:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">brew&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> install&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> rtk&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> init&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">g&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> instala el hook que reescribe los comandos&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>Si más tarde &lt;code>rtk gain&lt;/code> da error, se ha colado otra herramienta con el mismo nombre; instala desde el &lt;a rel="external" href="https://github.com/rtk-ai/rtk">repo&lt;/a>.&lt;/p>
&lt;p>La versión envuelta quita el ruido antes de que llegue al agent: códigos de color, separadores repetidos, banners de &lt;code>npm install&lt;/code>, timestamps verbosos.&lt;/p>
&lt;p>Aquí tienes el mismo &lt;code>git status&lt;/code>, en crudo y luego envuelto:&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>$ rtk proxy git status&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>On branch main&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>Your branch is up to date with &amp;#39;origin/main&amp;#39;.&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>Untracked files:&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> content/blog/new-draft.md&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;/span>
&lt;span class="giallo-l">&lt;span>nothing added to commit but untracked files present (use &amp;quot;git add&amp;quot; to track)&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>$ rtk git status&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* main...origin/main&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>? Untracked: 1 file&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span> content/blog/new-draft.md&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>La misma información en la mitad de líneas. En un repo con movimiento la diferencia solo crece, porque decenas de untracked files, pistas de rama y líneas de instrucciones colapsan en un solo bloque pequeño.&lt;/p>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="shellscript">&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> gain&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> ver cuántos tokens te ha ahorrado&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> gain&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);"> -&lt;/span>&lt;span style="color: light-dark(#005CC5, #79B8FF);">-history&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> desglose por comando&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span style="color: light-dark(#6F42C1, #B392F0);">rtk&lt;/span>&lt;span style="color: light-dark(#032F62, #9ECBFF);"> discover&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> #&lt;/span>&lt;span style="color: light-dark(#6A737D, #6A737D);"> escanea tu historial de agente buscando ganancias&lt;/span>&lt;/span>&lt;/code>&lt;/pre>
&lt;p>RTK reporta &lt;a rel="external" href="https://github.com/rtk-ai/rtk">60-90% menos tokens&lt;/a> en los comandos de desarrollo habituales. Ejecuta &lt;code>rtk gain&lt;/code> tras un uso real para ver tu propio número.&lt;/p>
&lt;p>Nunca toca el payload, solo el ruido a su alrededor, así que los errores y los stack traces salen exactamente como son. Si algún filtro alguna vez se come algo que de verdad necesitas, sáltatelo en esa llamada con &lt;code>rtk proxy &amp;lt;cmd&amp;gt;&lt;/code>.&lt;/p>
&lt;blockquote>
&lt;p>El output que tú no lees sigue siendo output que el modelo tiene que leer.&lt;/p>
&lt;/blockquote>
&lt;h2 id="por-que-la-combinacion-suma">Por qué la combinación suma
&lt;a class="heading-anchor" href="#por-que-la-combinacion-suma" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Por separado, cada herramienta ayuda un poco. Júntalas y el efecto se multiplica, porque atacan mitades distintas del mismo bucle. Un turno va así: tú escribes el prompt, el agent piensa, ejecuta un comando, la terminal responde, el agent lo lee y luego te contesta. RTK encoge la mitad de la terminal y Caveman encoge la respuesta, así que cada turno sale más barato y caben más en una misma ventana.&lt;/p>
&lt;p>Aquí está la prueba real, en un plan de 100 $/mes. Antes de añadirlas llegaba al límite semanal continuamente, a veces con un solo proyecto. Ahora corro varios proyectos en paralelo y el límite casi no aparece. El plan no se hizo más grande; las sesiones se hicieron más pequeñas.&lt;/p>
&lt;h2 id="instalalas-una-vez-y-olvidate">Instálalas una vez y olvídate
&lt;a class="heading-anchor" href="#instalalas-una-vez-y-olvidate" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Las dos instalaciones son globales, y las haces una sola vez. A partir de ahí sigues escribiendo &lt;code>git status&lt;/code>, &lt;code>grep&lt;/code> y &lt;code>npm install&lt;/code> igual que siempre. El hook los reescribe por ti y Caveman se activa solo, así que no hay hábitos nuevos que aprender.&lt;/p>
&lt;p>¿No sabes por dónde empezar? Elige la fuga que más te duela ahora mismo. Si el problema son las respuestas largas en cada arreglo, empieza por Caveman. Si son las inundaciones de output de &lt;code>grep&lt;/code> y &lt;code>npm install&lt;/code>, empieza por RTK. Añade la otra cuando te apetezca, que no se estorban entre sí.&lt;/p>
&lt;blockquote>
&lt;p>No mejoraste el modelo. Dejaste de malgastar su atención.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2026-06-26/footer.webp" alt="blog-footer" />&lt;/p></content></entry></feed>