<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Developer Tools on KnightLi Blog</title>
        <link>https://knightli.com/es/tags/developer-tools/</link>
        <description>Recent content in Developer Tools on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Sun, 17 May 2026 17:42:25 +0800</lastBuildDate><atom:link href="https://knightli.com/es/tags/developer-tools/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Bun: runtime, gestor de paquetes, pruebas y bundler de JavaScript en una sola herramienta</title>
        <link>https://knightli.com/es/2026/05/17/bun-javascript-toolkit/</link>
        <pubDate>Sun, 17 May 2026 17:42:25 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/17/bun-javascript-toolkit/</guid>
        <description>&lt;p&gt;Bun es una toolchain open source todo en uno para JavaScript / TypeScript creada por oven-sh.&lt;/p&gt;
&lt;p&gt;No quiere ser solo un reemplazo más rápido de Node.js. Reúne runtime, gestor de paquetes, runner de scripts, test runner y bundler bajo el mismo comando &lt;code&gt;bun&lt;/code&gt;. Para desarrolladores frontend y Node.js, su atractivo es claro: menos herramientas, menos espera en instalación y build, y muchas tareas comunes con un solo comando.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/oven-sh/bun&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/oven-sh/bun&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;conclusión-rápida&#34;&gt;Conclusión rápida
&lt;/h2&gt;&lt;p&gt;Bun encaja mejor con quienes quieren simplificar la toolchain JavaScript.&lt;/p&gt;
&lt;p&gt;Puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecutar JavaScript, TypeScript, JSX y TSX.&lt;/li&gt;
&lt;li&gt;Funcionar como runtime compatible con Node.js.&lt;/li&gt;
&lt;li&gt;Reemplazar npm / yarn / pnpm para gestionar paquetes.&lt;/li&gt;
&lt;li&gt;Ejecutar scripts de &lt;code&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas.&lt;/li&gt;
&lt;li&gt;Empaquetar código frontend o backend.&lt;/li&gt;
&lt;li&gt;Usar &lt;code&gt;bunx&lt;/code&gt; para ejecutar comandos de paquetes npm.&lt;/li&gt;
&lt;li&gt;Ofrecer API integradas como &lt;code&gt;Bun.serve&lt;/code&gt;, &lt;code&gt;bun:sqlite&lt;/code&gt;, &lt;code&gt;Bun.sql&lt;/code&gt;, &lt;code&gt;Bun.redis&lt;/code&gt; y &lt;code&gt;Bun.s3&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su valor más visible es la experiencia de desarrollo: instalaciones rápidas, arranque rápido, comandos unificados y TypeScript / JSX listos para usar.&lt;/p&gt;
&lt;p&gt;Pero Bun no es algo que todos los proyectos deban adoptar de inmediato. Aplicaciones Node.js grandes, proyectos con muchas extensiones nativas y servicios de producción con requisitos altos de estabilidad necesitan validar compatibilidad, build, pruebas y despliegue.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-bun&#34;&gt;Qué es Bun
&lt;/h2&gt;&lt;p&gt;Según el README oficial, Bun es un toolkit todo en uno para aplicaciones JavaScript y TypeScript. Se distribuye como un único ejecutable llamado &lt;code&gt;bun&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Su núcleo es Bun runtime: un runtime JavaScript rápido que busca actuar como drop-in replacement de Node.js. Bun está escrito en Zig, se basa en JavaScriptCore y optimiza arranque y uso de memoria.&lt;/p&gt;
&lt;p&gt;Puedes ejecutar directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.tsx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;TypeScript y JSX funcionan sin configuración adicional.&lt;/p&gt;
&lt;p&gt;El mismo comando &lt;code&gt;bun&lt;/code&gt; incluye test runner, script runner, gestor de paquetes compatible con Node.js, bundler y package runner.&lt;/p&gt;
&lt;p&gt;Comandos frecuentes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install &amp;lt;pkg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bunx cowsay &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un proyecto típico puede acabar con &lt;code&gt;node&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;pnpm&lt;/code&gt;, &lt;code&gt;tsx&lt;/code&gt;, &lt;code&gt;jest&lt;/code&gt;, &lt;code&gt;vitest&lt;/code&gt;, &lt;code&gt;webpack&lt;/code&gt;, &lt;code&gt;esbuild&lt;/code&gt; y &lt;code&gt;ts-node&lt;/code&gt;. Bun intenta absorber muchas rutas frecuentes en una sola herramienta.&lt;/p&gt;
&lt;h2 id=&#34;instalación&#34;&gt;Instalación
&lt;/h2&gt;&lt;p&gt;Bun soporta Linux, macOS y Windows en x64 y arm64.&lt;/p&gt;
&lt;p&gt;Script oficial:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://bun.com/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powershell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-c&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;irm bun.sh/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;También se puede instalar con npm:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;macOS Homebrew:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap oven-sh/bun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Docker:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker pull oven/bun
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --rm --init --ulimit &lt;span class=&#34;nv&#34;&gt;memlock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1:-1 oven/bun
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En Linux hay que mirar la versión del kernel. El README recomienda Linux kernel &lt;code&gt;5.6&lt;/code&gt; o superior, con &lt;code&gt;5.1&lt;/code&gt; como mínimo.&lt;/p&gt;
&lt;p&gt;Actualizar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Actualizar a canary:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade --canary
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Canary no suele ser buena opción para producción salvo que estés validando una función nueva o investigando un bug concreto.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-bun-es-rápido&#34;&gt;Por qué Bun es rápido
&lt;/h2&gt;&lt;p&gt;La velocidad de Bun viene de varias capas.&lt;/p&gt;
&lt;p&gt;Primero, el arranque del runtime es rápido. Muchas herramientas CLI y scripts de desarrollo no están limitados por CPU sostenida, sino por arranque de proceso, carga de módulos, transpilación TypeScript y resolución de dependencias. Bun optimiza esas rutas.&lt;/p&gt;
&lt;p&gt;Segundo, la gestión de paquetes es rápida. &lt;code&gt;bun install&lt;/code&gt; busca reemplazar los flujos de instalación de npm / yarn / pnpm. Usa caché global y su propio lockfile, lo que puede reducir mucho la espera con muchas dependencias.&lt;/p&gt;
&lt;p&gt;Tercero, TypeScript / JSX funcionan sin configuración. Muchos proyectos solo quieren ejecutar un &lt;code&gt;.ts&lt;/code&gt; o &lt;code&gt;.tsx&lt;/code&gt;; con Node.js tradicional se añaden &lt;code&gt;tsx&lt;/code&gt;, &lt;code&gt;ts-node&lt;/code&gt;, Babel o un build. Bun puede ejecutarlos directamente.&lt;/p&gt;
&lt;p&gt;Cuarto, las herramientas integradas reducen cambios de proceso y configuración. Pruebas, scripts, bundling y ejecución viven en la misma herramienta.&lt;/p&gt;
&lt;p&gt;Aun así, “Bun es rápido” no significa que todo proyecto vaya a ser más rápido. Depende de dependencias, lógica de scripts, framework de pruebas, build, uso de API Node.js y caché de CI.&lt;/p&gt;
&lt;h2 id=&#34;gestión-de-paquetes-reemplazar-npm--yarn--pnpm&#34;&gt;Gestión de paquetes: reemplazar npm / yarn / pnpm
&lt;/h2&gt;&lt;p&gt;Bun instala dependencias directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Añadir dependencia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Añadir dependencia de desarrollo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add -d typescript
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Eliminar dependencia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun remove react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ver por qué existe una dependencia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun why react
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Auditoría de seguridad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun audit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si migras desde npm o pnpm, revisa si &lt;code&gt;bun.lock&lt;/code&gt; entra en control de versiones, si CI usa &lt;code&gt;bun install --frozen-lockfile&lt;/code&gt;, si private registries y &lt;code&gt;.npmrc&lt;/code&gt; son compatibles, si workspace se comporta como esperas, si lifecycle scripts introducen riesgo y si un monorepo dependiente de pnpm puede migrar sin fricción.&lt;/p&gt;
&lt;p&gt;Los proyectos pequeños pueden probarlo directamente. En monorepos grandes, empieza por un package o un job de CI no bloqueante.&lt;/p&gt;
&lt;h2 id=&#34;ejecutar-scripts-y-typescript&#34;&gt;Ejecutar scripts y TypeScript
&lt;/h2&gt;&lt;p&gt;Bun ejecuta scripts de &lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;También ejecuta archivos directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run index.tsx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Es útil para scripts como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;scripts/build.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/seed.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/migrate.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/check.ts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con Node.js, muchas veces hay que resolver loader TypeScript o precompilación. Bun reduce ese pegamento.&lt;/p&gt;
&lt;p&gt;Si un script depende de detalles de Node.js, como loaders, frontera ESM/CJS, módulos nativos, child process, file watching o API de borde, sigue necesitando pruebas.&lt;/p&gt;
&lt;h2 id=&#34;test-runner&#34;&gt;Test runner
&lt;/h2&gt;&lt;p&gt;Bun incluye test runner:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Encaja en proyectos pequeños que quieren menos configuración Jest / Vitest, y también para mover algunas pruebas unitarias, de herramientas o de librerías a un runner más ligero.&lt;/p&gt;
&lt;p&gt;Al migrar pruebas, mira diferencias en &lt;code&gt;expect&lt;/code&gt;, mock API, snapshots, entorno DOM, reglas de descubrimiento, cobertura y reportes de CI.&lt;/p&gt;
&lt;p&gt;Si el proyecto depende profundamente de Jest, con matchers propios, mocks complejos, jsdom, babel-jest o ts-jest, no conviene migrar deprisa. Puedes usar &lt;code&gt;bun test&lt;/code&gt; en módulos nuevos y conservar el framework anterior para lo existente.&lt;/p&gt;
&lt;h2 id=&#34;bundling-y-build&#34;&gt;Bundling y build
&lt;/h2&gt;&lt;p&gt;Bun ofrece bundler:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun build ./src/index.ts --outdir ./dist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puede usarse para bundles frontend, scripts backend, CLI y librerías. La documentación cubre loaders, plugins, macros, CSS, HTML, HMR, minifier y single-file executable.&lt;/p&gt;
&lt;p&gt;Buenos candidatos iniciales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Herramientas frontend pequeñas.&lt;/li&gt;
&lt;li&gt;CLI Node.js.&lt;/li&gt;
&lt;li&gt;Scripts internos.&lt;/li&gt;
&lt;li&gt;Servicios de un solo archivo.&lt;/li&gt;
&lt;li&gt;Proyectos sin loaders webpack complejos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ten cuidado con cadenas webpack complejas, muchos plugins Vite, transformaciones Babel profundas, pipelines CSS / assets especiales, micro-frontends, module federation y proyectos con requisitos finos de hash, chunks y compatibilidad.&lt;/p&gt;
&lt;p&gt;El bundler de Bun es atractivo, pero migrar build suele ser más arriesgado que cambiar el gestor de paquetes. Valídalo por separado.&lt;/p&gt;
&lt;h2 id=&#34;ejecutar-servicios-http&#34;&gt;Ejecutar servicios HTTP
&lt;/h2&gt;&lt;p&gt;Bun ofrece &lt;code&gt;Bun.serve&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Bun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;serve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;port&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;3000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello from Bun&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Es práctico para API pequeñas, servicios internos, webhook receivers y servicios con estilo edge. Bun también incluye WebSockets, Workers, Streams, SQLite, PostgreSQL, Redis, S3 y TCP/UDP sockets.&lt;/p&gt;
&lt;p&gt;Si ya usas Express, Fastify, NestJS, Next.js, Hono, Elysia u otro framework, revisa primero su compatibilidad con Bun. No hace falta reescribir un servicio solo para usar Bun.&lt;/p&gt;
&lt;p&gt;Una ruta realista es usar Bun primero para scripts y paquetes, después para pruebas, y al final evaluar si el runtime de producción debe cambiar. La migración del runtime exige más cuidado porque afecta directamente el comportamiento en producción.&lt;/p&gt;
&lt;h2 id=&#34;relación-con-nodejs&#34;&gt;Relación con Node.js
&lt;/h2&gt;&lt;p&gt;Uno de los objetivos de Bun es ser un drop-in replacement de Node.js, pero compatibilidad no significa equivalencia completa.&lt;/p&gt;
&lt;p&gt;El ecosistema Node.js acumula muchos detalles: interoperabilidad CJS / ESM, módulos internos, extensiones nativas, lifecycle scripts de npm, comportamiento de filesystem, stream y Buffer, worker / child_process, debugging y profiling.&lt;/p&gt;
&lt;p&gt;Bun mejora rápido, pero la migración a producción debe juzgarse por pruebas.&lt;/p&gt;
&lt;p&gt;Preguntas prácticas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Tus pruebas pasan con Bun?&lt;/li&gt;
&lt;li&gt;¿Las dependencias clave soportan Bun?&lt;/li&gt;
&lt;li&gt;¿Los artefactos de build son equivalentes?&lt;/li&gt;
&lt;li&gt;¿CI y local se comportan igual?&lt;/li&gt;
&lt;li&gt;¿Hay monitorización y rollback en producción?&lt;/li&gt;
&lt;li&gt;¿Docker y despliegue son estables?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cambiar solo el gestor de paquetes tiene menos riesgo. Cambiar el runtime de producción tiene mucho más.&lt;/p&gt;
&lt;h2 id=&#34;proyectos-adecuados&#34;&gt;Proyectos adecuados
&lt;/h2&gt;&lt;p&gt;Bun encaja bien con proyectos pequeños nuevos en JavaScript / TypeScript, herramientas internas, CLI, CI que necesita instalaciones rápidas, frontend que quiere reducir complejidad, scripts o servicios sensibles al arranque y desarrolladores que quieren TypeScript listo para ejecutar.&lt;/p&gt;
&lt;p&gt;Conviene ir con más cautela en monorepos enormes, proyectos atados a pnpm workspace, servicios con muchas extensiones nativas Node.js, builds frontend muy personalizados, backends con exigencias fuertes de consistencia en runtime y suites de pruebas muy dependientes de Jest.&lt;/p&gt;
&lt;p&gt;Una estrategia conservadora y útil es usar Bun primero como herramienta de desarrollo, no como sustituto inmediato de todos los runtimes de producción.&lt;/p&gt;
&lt;h2 id=&#34;consejos-de-migración&#34;&gt;Consejos de migración
&lt;/h2&gt;&lt;p&gt;Para probar Bun en un proyecto existente:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instala Bun localmente.&lt;/li&gt;
&lt;li&gt;Ejecuta &lt;code&gt;bun install&lt;/code&gt; y revisa el resultado.&lt;/li&gt;
&lt;li&gt;Conserva o commitea &lt;code&gt;bun.lock&lt;/code&gt; para evitar confusión con lockfiles.&lt;/li&gt;
&lt;li&gt;Prueba &lt;code&gt;bun run &amp;lt;script&amp;gt;&lt;/code&gt; con scripts comunes.&lt;/li&gt;
&lt;li&gt;Migra pocas pruebas con &lt;code&gt;bun test&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Añade un job Bun no bloqueante en CI.&lt;/li&gt;
&lt;li&gt;Si no hay problemas, evalúa cambiar el flujo principal de instalación.&lt;/li&gt;
&lt;li&gt;Evalúa la migración del runtime de producción al final.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En equipos, conserva una ruta de rollback. Mantén el flujo npm / pnpm / yarn durante la migración, ejecuta ambos en CI un tiempo, no cambies runtime, gestor, framework de pruebas y bundler en la misma modificación, y divide el proceso en pasos pequeños verificables.&lt;/p&gt;
&lt;h2 id=&#34;comandos-frecuentes&#34;&gt;Comandos frecuentes
&lt;/h2&gt;&lt;p&gt;Instalar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://bun.com/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Actualizar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Instalar dependencias:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Añadir dependencia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun add lodash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejecutar script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejecutar TypeScript directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run scripts/build.ts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pruebas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Bundle:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun build ./src/index.ts --outdir ./dist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejecutar comando de paquete:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bunx cowsay &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El valor de Bun no es solo ser “más rápido que Node.js”. Lo importante es que reúne muchas herramientas dispersas del desarrollo JavaScript / TypeScript en un solo comando &lt;code&gt;bun&lt;/code&gt;: runtime, gestor de paquetes, runner de scripts, test runner y bundler.&lt;/p&gt;
&lt;p&gt;Para proyectos nuevos y herramientas internas, la experiencia integrada puede ser cómoda: instalaciones rápidas, arranque rápido, menos configuración y TypeScript / JSX directos. En proyectos grandes ya existentes, es mejor introducir Bun primero en áreas de bajo riesgo, como instalación, scripts y algunas pruebas, antes de validar build y runtime.&lt;/p&gt;
&lt;p&gt;Si la velocidad de instalación, los fragmentos de configuración y el arranque lento de pruebas de la toolchain Node.js te molestan a menudo, Bun merece una prueba seria. Pero la migración de producción vuelve a lo básico: pruebas, compatibilidad, CI estable y rollback.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/oven-sh/bun&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;oven-sh/bun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs/installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://bun.com/docs/runtime/nodejs-compat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bun Node.js compatibility&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía de inicio en desarrollo de juegos con Godot: de nodos y escenas a tu primer juego 2D</title>
        <link>https://knightli.com/es/2026/05/17/godot-game-development-beginner-guide/</link>
        <pubDate>Sun, 17 May 2026 12:37:30 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/17/godot-game-development-beginner-guide/</guid>
        <description>&lt;p&gt;Godot es un motor de juegos open source adecuado para juegos 2D, prototipos indie y proyectos 3D medianos.&lt;/p&gt;
&lt;p&gt;Sus puntos fuertes son que es ligero, abierto, rápido de iniciar y usa un sistema claro de nodos y escenas. Para principiantes suele ser más accesible que Unity, y para desarrolladores independientes permite mantener proyectos pequeños y controlados.&lt;/p&gt;
&lt;h2 id=&#34;conclusión-rápida&#34;&gt;Conclusión rápida
&lt;/h2&gt;&lt;p&gt;No intentes aprender todo el motor desde el primer día.&lt;/p&gt;
&lt;p&gt;Una ruta mejor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Empieza por 2D, no por 3D.&lt;/li&gt;
&lt;li&gt;Entiende nodos y escenas antes de diseñar arquitecturas complejas.&lt;/li&gt;
&lt;li&gt;Aprende primero GDScript.&lt;/li&gt;
&lt;li&gt;Crea un juego pequeño que pueda empezar, fallar y reiniciarse.&lt;/li&gt;
&lt;li&gt;Luego añade animación, audio, UI, niveles y exportación.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Completar un juego pequeño enseña más que ver muchos tutoriales sueltos.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-sirve-godot&#34;&gt;Para quién sirve Godot
&lt;/h2&gt;&lt;p&gt;Godot encaja bien si quieres aprender desarrollo de juegos desde cero, crear juegos 2D indie, prototipar rápido, evitar toolchains pesadas o entender cómo se organizan los objetos dentro de un motor.&lt;/p&gt;
&lt;p&gt;Unity y Unreal siguen siendo más fuertes para pipelines comerciales grandes, tiendas de assets, SDKs de monetización móvil o gráficos 3D de alto nivel. Pero para aprender y crear tus propios juegos, Godot es una gran entrada.&lt;/p&gt;
&lt;h2 id=&#34;instalación-y-proyecto&#34;&gt;Instalación y proyecto
&lt;/h2&gt;&lt;p&gt;Descarga Godot desde la web oficial, descomprime y ejecuta.&lt;/p&gt;
&lt;p&gt;Para el primer proyecto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usa el renderer por defecto.&lt;/li&gt;
&lt;li&gt;Usa un nombre en inglés.&lt;/li&gt;
&lt;li&gt;Evita rutas complicadas.&lt;/li&gt;
&lt;li&gt;Usa Git desde el inicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;first-godot-game
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Familiarízate con Scene, FileSystem, Inspector, Script y las vistas 2D / 3D.&lt;/p&gt;
&lt;h2 id=&#34;nodos-y-escenas&#34;&gt;Nodos y escenas
&lt;/h2&gt;&lt;p&gt;Los conceptos centrales son nodos y escenas.&lt;/p&gt;
&lt;p&gt;Nodos comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Node2D&lt;/code&gt;: objeto base 2D.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sprite2D&lt;/code&gt;: muestra una imagen.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;: forma de colisión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CharacterBody2D&lt;/code&gt;: personaje controlable.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Camera2D&lt;/code&gt;: cámara 2D.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AudioStreamPlayer&lt;/code&gt;: reproduce audio.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Label&lt;/code&gt;: muestra texto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una escena es un grupo reutilizable de nodos. Un jugador, un enemigo o un nivel pueden ser escenas.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Player (CharacterBody2D)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── Sprite2D
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── CollisionShape2D
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── Camera2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;primer-proyecto-recomendado&#34;&gt;Primer proyecto recomendado
&lt;/h2&gt;&lt;p&gt;Haz un juego 2D de esquivar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El jugador se mueve arriba, abajo, izquierda y derecha.&lt;/li&gt;
&lt;li&gt;Los enemigos aparecen desde los bordes.&lt;/li&gt;
&lt;li&gt;Tocar un enemigo significa perder.&lt;/li&gt;
&lt;li&gt;El tiempo de supervivencia es la puntuación.&lt;/li&gt;
&lt;li&gt;Hay pantalla inicial, game over y reinicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto cubre movimiento, input, colisiones, spawning, UI, timers, audio y recarga de escena.&lt;/p&gt;
&lt;h2 id=&#34;movimiento-del-jugador&#34;&gt;Movimiento del jugador
&lt;/h2&gt;&lt;p&gt;Usa &lt;code&gt;CharacterBody2D&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CharacterBody2D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@export&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;speed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;300.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_physics_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Vector2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ZERO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get_axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;move_left&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;move_right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get_axis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;move_up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;move_down&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;normalized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;velocity&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;speed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;move_and_slide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Define acciones de entrada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_left  -&amp;gt; A / Left
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_right -&amp;gt; D / Right
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_up    -&amp;gt; W / Up
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;move_down  -&amp;gt; S / Down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Usa actions en vez de teclas codificadas. Así será más fácil soportar mando, táctil o remapeo.&lt;/p&gt;
&lt;h2 id=&#34;colisiones-y-física&#34;&gt;Colisiones y física
&lt;/h2&gt;&lt;p&gt;Nodos comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CollisionShape2D&lt;/code&gt;: define colisión.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Area2D&lt;/code&gt;: detecta solapamientos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CharacterBody2D&lt;/code&gt;: jugador o personaje controlado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RigidBody2D&lt;/code&gt;: objeto físico.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;StaticBody2D&lt;/code&gt;: paredes o suelo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para empezar: usa &lt;code&gt;CharacterBody2D&lt;/code&gt; si controlas el movimiento, y &lt;code&gt;Area2D&lt;/code&gt; si solo necesitas detectar contacto.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_on_body_entered&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Player&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;get_tree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;reload_current_scene&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;instanciar-enemigos&#34;&gt;Instanciar enemigos
&lt;/h2&gt;&lt;p&gt;Las escenas funcionan como prefabs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@export&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy_scene&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PackedScene&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;spawn_enemy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enemy_scene&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;instantiate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Vector2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;800&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;randf_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;550&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;add_child&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enemy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Con un &lt;code&gt;Timer&lt;/code&gt;, puedes crear enemigos cada cierto tiempo.&lt;/p&gt;
&lt;h2 id=&#34;ui-puntuación-y-audio&#34;&gt;UI, puntuación y audio
&lt;/h2&gt;&lt;p&gt;La UI usa nodos &lt;code&gt;Control&lt;/code&gt;: &lt;code&gt;CanvasLayer&lt;/code&gt;, &lt;code&gt;Label&lt;/code&gt;, &lt;code&gt;Button&lt;/code&gt;, &lt;code&gt;Panel&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Puntuación simple:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;score&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;$CanvasLayer/ScoreLabel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Audio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript&#34; data-lang=&#34;gdscript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;$HitSound&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;play&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un juego necesita feedback: sonidos, parpadeos, estados de botón, vibración o shake. La función por sí sola no basta.&lt;/p&gt;
&lt;h2 id=&#34;organización-del-proyecto&#34;&gt;Organización del proyecto
&lt;/h2&gt;&lt;p&gt;Desde el inicio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;res://
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── scenes/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── scripts/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── assets/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── ui/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Escenas en &lt;code&gt;scenes/&lt;/code&gt;, scripts en &lt;code&gt;scripts/&lt;/code&gt;, imágenes y audio en &lt;code&gt;assets/&lt;/code&gt;, UI en &lt;code&gt;ui/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;errores-comunes&#34;&gt;Errores comunes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Elegir mal el tipo de nodo.&lt;/li&gt;
&lt;li&gt;Olvidar &lt;code&gt;CollisionShape2D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Codificar teclas directamente.&lt;/li&gt;
&lt;li&gt;Meter jugador, enemigos, UI y nivel en un solo script.&lt;/li&gt;
&lt;li&gt;Empezar con un proyecto demasiado grande.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un juego pequeño terminado vale más que una gran idea abandonada.&lt;/p&gt;
&lt;h2 id=&#34;ruta-de-aprendizaje&#34;&gt;Ruta de aprendizaje
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Editor.&lt;/li&gt;
&lt;li&gt;Nodos y escenas.&lt;/li&gt;
&lt;li&gt;GDScript.&lt;/li&gt;
&lt;li&gt;Input actions.&lt;/li&gt;
&lt;li&gt;Movimiento 2D.&lt;/li&gt;
&lt;li&gt;Colisiones y &lt;code&gt;Area2D&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Timer&lt;/code&gt; y spawning.&lt;/li&gt;
&lt;li&gt;UI y puntuación.&lt;/li&gt;
&lt;li&gt;Audio y animación.&lt;/li&gt;
&lt;li&gt;Exportación a desktop o web.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;La entrada a Godot no consiste en memorizar todas sus funciones, sino en entender cómo organiza juegos: nodos forman escenas, escenas forman juegos, scripts dan comportamiento y signals conectan eventos.&lt;/p&gt;
&lt;p&gt;Empieza con un juego 2D pequeño. Cuando ya tengas movimiento, colisión, UI, audio y reinicio, avanza a TileMap, guardado, máquinas de estado, 3D, shaders y optimización de exportación.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>DeepSeek-TUI: convertir DeepSeek V4 en un agente de programación en la terminal</title>
        <link>https://knightli.com/es/2026/05/16/deepseek-tui-terminal-coding-agent/</link>
        <pubDate>Sat, 16 May 2026 22:41:41 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/16/deepseek-tui-terminal-coding-agent/</guid>
        <description>&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Hmbown/DeepSeek-TUI&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek-TUI&lt;/a&gt; es un proyecto open source que lleva DeepSeek V4 al flujo de desarrollo en terminal. No es una simple carcasa de chat. Se parece más a un &amp;ldquo;agente de programación de línea de comandos&amp;rdquo;, como Claude Code o Codex CLI: puede leer archivos, modificar código, ejecutar comandos, llamar herramientas y seguir avanzando tareas desde una TUI.&lt;/p&gt;
&lt;p&gt;Si ya estás acostumbrado a alternar entre editor y terminal, el valor de este tipo de herramienta es directo: no tienes que copiar código una y otra vez en una ventana de chat web, ni describir manualmente toda la estructura del proyecto. Le das una tarea, puede leer el contexto del workspace actual, planificar pasos, aplicar cambios y devolverte el resultado para revisión.&lt;/p&gt;
&lt;h2 id=&#34;resuelve-el-problema-de-entrada-para-usar-deepseek&#34;&gt;Resuelve el problema de entrada para usar DeepSeek
&lt;/h2&gt;&lt;p&gt;Los modelos DeepSeek ya ofrecen buenas capacidades de razonamiento y código, pero para llevar esa capacidad a un flujo real de desarrollo hace falta una capa de ingeniería.&lt;/p&gt;
&lt;p&gt;El chat web sirve para hacer preguntas, pero no para editar proyectos durante mucho tiempo. La API sirve para integraciones, pero un desarrollador común tendría que construir por su cuenta llamadas a herramientas, gestión de contexto, operaciones de archivos y control de permisos. DeepSeek-TUI intenta cubrir esa capa: envolver DeepSeek V4 como un Agent que puede trabajar dentro de la terminal.&lt;/p&gt;
&lt;p&gt;Según la presentación del proyecto, sus capacidades principales incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interfaz TUI en terminal;&lt;/li&gt;
&lt;li&gt;Conversación y ejecución de tareas para DeepSeek V4;&lt;/li&gt;
&lt;li&gt;Llamadas a herramientas y operaciones de archivos;&lt;/li&gt;
&lt;li&gt;Soporte de contexto de 1M;&lt;/li&gt;
&lt;li&gt;Modo Auto;&lt;/li&gt;
&lt;li&gt;Subagentes;&lt;/li&gt;
&lt;li&gt;Ejecución en sandbox;&lt;/li&gt;
&lt;li&gt;Cola de tareas persistente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El objetivo de combinar estas funciones no es que el modelo responda de forma más humana, sino que pueda entrar con más facilidad en el entorno de desarrollo.&lt;/p&gt;
&lt;h2 id=&#34;una-tui-encaja-mejor-con-tareas-largas-que-una-cli-textual&#34;&gt;Una TUI encaja mejor con tareas largas que una CLI textual
&lt;/h2&gt;&lt;p&gt;Muchas herramientas AI CLI empiezan con interacción de texto puro: escribes un prompt, esperas la salida, copias comandos o añades más contexto. Es simple, pero cuando la tarea se alarga, se vuelve confuso.&lt;/p&gt;
&lt;p&gt;La ventaja de una TUI es que puede colocar conversaciones, archivos, resultados de ejecución y estado de tareas en una interfaz más estable. Para un Agent de programación, eso importa. Una tarea de código rara vez es una sola pregunta y respuesta. Suele incluir:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Entender la estructura del proyecto;&lt;/li&gt;
&lt;li&gt;Encontrar archivos relevantes;&lt;/li&gt;
&lt;li&gt;Modificar código;&lt;/li&gt;
&lt;li&gt;Ejecutar tests o comandos;&lt;/li&gt;
&lt;li&gt;Corregir según los errores;&lt;/li&gt;
&lt;li&gt;Resumir los cambios.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si la interfaz solo es una cadena de logs, al usuario le cuesta ver en qué punto está el Agent. Una TUI al menos ofrece un lugar mejor para observar y tomar el control.&lt;/p&gt;
&lt;h2 id=&#34;el-modo-auto-conviene-para-tareas-con-límites-claros&#34;&gt;El modo Auto conviene para tareas con límites claros
&lt;/h2&gt;&lt;p&gt;El modo Auto que menciona DeepSeek-TUI encaja con trabajos de límites claros. Por ejemplo, arreglar un bug pequeño, añadir un script, cambiar una configuración, ordenar documentos o implementar una función local.&lt;/p&gt;
&lt;p&gt;Estas tareas tienen algo en común: el objetivo es claro, la forma de comprobarlo también, y el alcance del impacto es controlable. El Agent puede revisar archivos, editarlos, ejecutar comandos y luego entregar el resultado al usuario para confirmación.&lt;/p&gt;
&lt;p&gt;Pero el modo Auto no debe significar permisos ilimitados. En proyectos reales, borrar archivos, hacer refactors masivos, migrar bases de datos o ejecutar despliegues debería requerir confirmación explícita. La eficiencia de los Agents de programación viene de la automatización, pero el riesgo también. Cuanto más pueda ejecutar comandos una herramienta, más necesita sandbox, límites de permisos y revisión humana.&lt;/p&gt;
&lt;h2 id=&#34;los-subagentes-importan-porque-dividen-tareas&#34;&gt;Los subagentes importan porque dividen tareas
&lt;/h2&gt;&lt;p&gt;Los subagentes no son un concepto nuevo, pero son útiles en escenarios de código.&lt;/p&gt;
&lt;p&gt;Una tarea algo compleja suele requerir varios tipos de trabajo a la vez: alguien lee el código, alguien cambia la implementación, alguien revisa tests y alguien ordena documentación. Los sistemas multi-agent tradicionales a menudo parecen llamativos porque no tienen herramientas reales ni un workspace real; solo discuten dentro de una conversación.&lt;/p&gt;
&lt;p&gt;Si los subagentes se combinan con sistema de archivos, ejecución de comandos y cola de tareas, se parecen más a un mecanismo de descomposición de trabajo. Por ejemplo, un subagente analiza dependencias, otro modifica un módulo concreto y el agente principal integra el resultado. Así se reduce el problema de meter demasiada información no relacionada en un solo contexto.&lt;/p&gt;
&lt;p&gt;Por supuesto, los subagentes también añaden costo: más tokens, estado más complejo y límites de responsabilidad más difíciles de seguir. Por eso encajan mejor con tareas de complejidad media o superior, no necesariamente con cada cambio pequeño.&lt;/p&gt;
&lt;h2 id=&#34;el-contexto-de-1m-no-es-magia-pero-ayuda-a-leer-proyectos&#34;&gt;El contexto de 1M no es magia, pero ayuda a leer proyectos
&lt;/h2&gt;&lt;p&gt;El contexto de 1M suena exagerado, pero en programación no es solo una cifra de marketing.&lt;/p&gt;
&lt;p&gt;El contexto de un repositorio real está fragmentado: README, archivos de configuración, definiciones de tipos, tests, cadenas de llamadas, convenciones históricas y logs de errores pueden influir en un cambio. Un contexto más largo puede reducir el problema de editar tras mirar solo una parte local, y ayudar al modelo a conservar más restricciones del proyecto.&lt;/p&gt;
&lt;p&gt;Aun así, más contexto no significa mejor juicio automáticamente. Las tareas de código siguen necesitando búsqueda, filtrado y verificación. Meter todo el proyecto en el contexto no siempre es mejor que leer con precisión los archivos relevantes. Un buen Agent de programación debería tratar el contexto largo como un buffer, no como un atajo que sustituye el criterio de ingeniería.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-es-más-útil&#34;&gt;Para quién es más útil
&lt;/h2&gt;&lt;p&gt;DeepSeek-TUI encaja mejor con varios grupos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desarrolladores que quieren usar DeepSeek para tareas de código en la terminal;&lt;/li&gt;
&lt;li&gt;Personas que no quieren construir por su cuenta frameworks de llamadas a herramientas y operaciones de archivos;&lt;/li&gt;
&lt;li&gt;Usuarios que ya conocen Claude Code o Codex CLI y quieren probar una entrada basada en DeepSeek;&lt;/li&gt;
&lt;li&gt;Quienes necesitan contexto de proyecto local, no solo preguntar por fragmentos de código en una web;&lt;/li&gt;
&lt;li&gt;Desarrolladores que quieren llevar el flujo de AI Coding al entorno de línea de comandos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo preguntas de vez en cuando cómo escribir una función, el chat web basta. Si quieres que el modelo participe directamente en cambios del proyecto, un Agent de terminal tiene más sentido.&lt;/p&gt;
&lt;h2 id=&#34;riesgos-a-vigilar&#34;&gt;Riesgos a vigilar
&lt;/h2&gt;&lt;p&gt;Hay tres cosas especialmente importantes en este tipo de herramienta.&lt;/p&gt;
&lt;p&gt;La primera son los permisos. Si una herramienta puede leer y escribir archivos o ejecutar comandos, hay que saber a qué puede acceder por defecto, si puede borrar archivos, si puede conectarse a la red y si los comandos peligrosos requieren confirmación.&lt;/p&gt;
&lt;p&gt;La segunda es la reversibilidad. Antes de usarla, conviene mantener limpio el árbol de trabajo de Git, para que cada cambio del Agent pueda verse claramente con &lt;code&gt;git diff&lt;/code&gt;. No conviene dejar que un Agent edite automáticamente un proyecto con muchos cambios sin commit.&lt;/p&gt;
&lt;p&gt;La tercera es la verificación. Que el Agent escriba código no significa que la tarea esté terminada. Tests, builds, lint y review humana siguen siendo necesarios. Las herramientas de AI Coding pueden acelerar el avance, pero no sustituyen la confirmación final de ingeniería.&lt;/p&gt;
&lt;h2 id=&#34;conclusión&#34;&gt;Conclusión
&lt;/h2&gt;&lt;p&gt;La importancia de DeepSeek-TUI no está en añadir otro cliente de chat, sino en poner DeepSeek V4 dentro de un entorno de terminal más cercano al trabajo real de desarrollo.&lt;/p&gt;
&lt;p&gt;Para los desarrolladores, la capacidad del modelo es solo el primer paso. La experiencia real depende de si puede leer el proyecto, modificar archivos con seguridad, ejecutar comandos de verificación, mantener estado en tareas largas y permitir que el usuario tome el control en cualquier momento.&lt;/p&gt;
&lt;p&gt;Si quieres usar DeepSeek para cambios diarios de código, lectura de proyectos y tareas de desarrollo automatizadas, DeepSeek-TUI merece atención. La dirección también está clara: las herramientas de AI Coding están pasando de &amp;ldquo;responder preguntas de código&amp;rdquo; a &amp;ldquo;participar en la ejecución de proyectos&amp;rdquo;.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Acceso remoto móvil de Codex: sigue tareas de programación en Mac desde la app ChatGPT</title>
        <link>https://knightli.com/es/2026/05/16/codex-mobile-remote-access-chatgpt-app/</link>
        <pubDate>Sat, 16 May 2026 17:42:40 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/16/codex-mobile-remote-access-chatgpt-app/</guid>
        <description>&lt;p&gt;OpenAI llevó &lt;code&gt;Codex remote access&lt;/code&gt; a la app móvil de ChatGPT a mediados de mayo de 2026. La idea no es programar en el teléfono, sino seguir y dirigir Codex mientras trabaja en un Mac.&lt;/p&gt;
&lt;p&gt;Codex sigue leyendo el proyecto, ejecutando comandos, editando archivos y revisando pruebas en el ordenador. El móvil sirve para revisar progreso, responder preguntas, añadir instrucciones y aprobar acciones.&lt;/p&gt;
&lt;h2 id=&#34;qué-puede-hacer&#34;&gt;Qué puede hacer
&lt;/h2&gt;&lt;p&gt;Según la documentación de OpenAI, desde el móvil puedes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iniciar nuevos threads en proyectos del host o continuar existentes;&lt;/li&gt;
&lt;li&gt;enviar instrucciones, responder preguntas y ajustar la dirección del trabajo;&lt;/li&gt;
&lt;li&gt;aprobar comandos y otras acciones;&lt;/li&gt;
&lt;li&gt;revisar salidas, diffs, resultados de pruebas, terminal y capturas;&lt;/li&gt;
&lt;li&gt;recibir notificaciones cuando Codex termina o necesita atención;&lt;/li&gt;
&lt;li&gt;cambiar entre hosts y threads conectados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es solo una ventana de chat pequeña: conecta con el contexto real de trabajo de Codex en el host.&lt;/p&gt;
&lt;h2 id=&#34;requisitos&#34;&gt;Requisitos
&lt;/h2&gt;&lt;p&gt;Necesitas acceso a Codex en la misma cuenta y workspace de ChatGPT en el móvil y en el Mac. También necesitas la última app móvil de ChatGPT en iOS o Android.&lt;/p&gt;
&lt;p&gt;El host actualmente debe ser un Mac despierto, en línea, ejecutando Codex App y con la misma cuenta y workspace. La configuración móvil y el control del dispositivo requieren por ahora &lt;code&gt;Codex App for macOS&lt;/code&gt;; no se configuran desde Codex CLI ni desde la IDE Extension.&lt;/p&gt;
&lt;p&gt;Si tu cuenta usa MFA, SSO o passkey, debes completar ese flujo. En un workspace de ChatGPT, un administrador puede tener que habilitar Remote Control access.&lt;/p&gt;
&lt;h2 id=&#34;límites&#34;&gt;Límites
&lt;/h2&gt;&lt;p&gt;Primero, requiere un &lt;code&gt;macOS host&lt;/code&gt;. El teléfono se conecta a Codex App en un Mac, no directamente a Codex CLI, a la IDE Extension ni a cualquier equipo Linux / Windows.&lt;/p&gt;
&lt;p&gt;Segundo, el host debe estar en línea. El Mac debe permanecer despierto, conectado y con Codex App abierto. Si duerme, pierde red o cierra Codex, la sesión remota puede desconectarse.&lt;/p&gt;
&lt;p&gt;Tercero, la conexión usa QR. Debes abrir &lt;code&gt;Set up Codex mobile&lt;/code&gt; en el Mac, escanear el código y completar la vinculación en ChatGPT.&lt;/p&gt;
&lt;p&gt;Cuarto, las acciones remotas siguen pasando por aprobaciones. Antes de aprobar desde el móvil, conviene leer qué quiere hacer Codex, sobre todo si implica terminal, cambios de archivos, pruebas o acceso externo.&lt;/p&gt;
&lt;h2 id=&#34;cómo-conectarlo&#34;&gt;Cómo conectarlo
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Abre Codex en el Mac.&lt;/li&gt;
&lt;li&gt;Elige &lt;code&gt;Set up Codex mobile&lt;/code&gt; en la barra lateral.&lt;/li&gt;
&lt;li&gt;Codex activa el acceso remoto para ese host y muestra un QR.&lt;/li&gt;
&lt;li&gt;Escanea el QR con el teléfono para abrir el flujo en ChatGPT.&lt;/li&gt;
&lt;li&gt;Confirma la misma cuenta y workspace.&lt;/li&gt;
&lt;li&gt;Completa MFA, SSO o passkey si hace falta.&lt;/li&gt;
&lt;li&gt;El Mac aparecerá en Codex dentro del móvil.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Después puedes gestionar dispositivos en &lt;code&gt;Settings &amp;gt; Connections&lt;/code&gt; desde Codex en el Mac, y revisar opciones como mantener el equipo despierto, Computer Use o Chrome extension.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirve-el-móvil&#34;&gt;Para qué sirve el móvil
&lt;/h2&gt;&lt;p&gt;El móvil sirve sobre todo para aprobar, corregir dirección y revisar resultados. Puedes aprobar comandos, añadir una instrucción cuando Codex se equivoca o falla una prueba, y mirar diffs, logs de terminal, pruebas y capturas sin volver al escritorio.&lt;/p&gt;
&lt;p&gt;El valor no es escribir código en el móvil, sino convertirlo en una consola ligera para tareas de ingeniería que siguen ejecutándose en el host.&lt;/p&gt;
&lt;h2 id=&#34;problemas-comunes&#34;&gt;Problemas comunes
&lt;/h2&gt;&lt;p&gt;Si el host no aparece, confirma que Codex App sigue abierto en el Mac, que &lt;code&gt;Allow other devices to connect&lt;/code&gt; está activado y que ambos dispositivos usan la misma cuenta y workspace.&lt;/p&gt;
&lt;p&gt;Si no aparece una solicitud de aprobación, abre Codex dentro de la app móvil de ChatGPT, vuelve a escanear el QR o reinicia la configuración desde el host. En equipos, revisa si el administrador habilitó Remote Control access.&lt;/p&gt;
&lt;p&gt;Si la sesión se desconecta, revisa si el Mac se durmió, perdió red o cerró Codex App. Si la autenticación bloquea la configuración, completa MFA, SSO o passkey primero.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-conviene&#34;&gt;Cuándo conviene
&lt;/h2&gt;&lt;p&gt;Encaja bien si ejecutas tareas largas con Codex, necesitas aprobar comandos lejos del escritorio, gestionas varios proyectos o threads y usas Mac como máquina principal.&lt;/p&gt;
&lt;p&gt;Encaja peor si trabajas principalmente en Windows o Linux, solo usas Codex CLI o IDE Extension, esperas un entorno de desarrollo completo en el teléfono o tienes una red inestable.&lt;/p&gt;
&lt;h2 id=&#34;mi-lectura&#34;&gt;Mi lectura
&lt;/h2&gt;&lt;p&gt;El acceso remoto móvil de Codex no mueve el desarrollo al teléfono. Hace más manejables los momentos en los que Codex se detiene por aprobación, preguntas, fallos de pruebas o cambios de dirección.&lt;/p&gt;
&lt;p&gt;Si ya usas Codex intensivamente en Mac, merece la pena activarlo. Si solo haces preguntas de código ocasionales, su valor será menos evidente.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.openai.com/en/articles/6825453-chatgpt-release-notes&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI Help Center: ChatGPT Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/codex/remote-connections&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OpenAI Developers: Codex Remote Connections&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía de despliegue local de Claude Code &#43; Ollama: crear un asistente de programación AI gratuito con CC Switch</title>
        <link>https://knightli.com/es/2026/05/15/claude-code-ollama-cc-switch-local-agent/</link>
        <pubDate>Fri, 15 May 2026 23:27:50 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/claude-code-ollama-cc-switch-local-agent/</guid>
        <description>&lt;p&gt;&lt;code&gt;Claude Code&lt;/code&gt; se ha vuelto un asistente de programación AI muy popular. Su atractivo no está solo en conversar sobre código, sino en leer un proyecto, modificar archivos, ejecutar comandos, instalar dependencias y seguir corrigiendo errores como un Agent operativo.&lt;/p&gt;
&lt;p&gt;El problema es el coste. Cuando el proyecto crece, el contexto se alarga y varias rondas de trabajo tipo Agent pueden consumir cuota de API muy rápido. Si solo quieres experimentar, modificar herramientas pequeñas, escribir scripts o trabajar con proyectos privados locales, surge una pregunta natural: ¿se puede mantener la experiencia de Claude Code, pero ejecutar el modelo en local?&lt;/p&gt;
&lt;p&gt;La herramienta clave de esta configuración es &lt;code&gt;CC Switch&lt;/code&gt;. Permite que Claude Code se conecte al servicio local de &lt;code&gt;Ollama&lt;/code&gt; mediante una API compatible con OpenAI, de modo que las solicitudes se reenvían al modelo local en lugar de ir directamente a la API oficial de Claude.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve-esta-configuración&#34;&gt;Qué Problema Resuelve Esta Configuración
&lt;/h2&gt;&lt;p&gt;Puedes entender el flujo completo así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Claude Code desktop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+ CC Switch API forwarding layer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+ Ollama local model
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Claude Code sigue encargándose del flujo de programación y de las operaciones sobre el proyecto. CC Switch gestiona la configuración del proveedor de modelos y la compatibilidad de API. Ollama ejecuta el modelo en la máquina local.&lt;/p&gt;
&lt;p&gt;Esto no significa que un modelo local se convierta de pronto en Claude. Su valor real está en poder usar el flujo tipo Agent de Claude Code en escenarios locales, privados, sin conexión o de menor coste.&lt;/p&gt;
&lt;h2 id=&#34;preparación-básica&#34;&gt;Preparación Básica
&lt;/h2&gt;&lt;p&gt;Antes de empezar, prepara estos componentes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instala &lt;code&gt;Git&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instala &lt;code&gt;Ollama&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Descarga un modelo local adecuado para programación.&lt;/li&gt;
&lt;li&gt;Instala &lt;code&gt;CC Switch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ten Claude Code disponible en tu máquina.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para el modelo, puedes empezar con opciones orientadas a código, como Qwen Coder, DeepSeek Coder u otros modelos con buen comportamiento en generación de código y llamadas a herramientas. Cuanto más grande sea el modelo, mejores pueden ser los resultados, pero también aumentará la presión sobre la memoria y la GPU.&lt;/p&gt;
&lt;p&gt;Si tu equipo tiene memoria limitada, empieza con un modelo más pequeño. Primero confirma que el flujo funciona bien y luego prueba modelos más grandes.&lt;/p&gt;
&lt;h2 id=&#34;configuración-clave-de-cc-switch&#34;&gt;Configuración Clave De CC Switch
&lt;/h2&gt;&lt;p&gt;Después de iniciar Ollama, su dirección local de API suele ser:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://127.0.0.1:11434/v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En CC Switch, elige un tipo de proveedor compatible con OpenAI. Una opción habitual es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenAI Chat Completions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después apunta el base URL a la dirección local de Ollama.&lt;/p&gt;
&lt;p&gt;Para el campo de API key, Ollama local normalmente no necesita una clave real, pero muchas herramientas siguen exigiendo una variable de entorno o un valor de relleno. Puedes usar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ANTHROPIC_API_KEY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;o cualquier otra variable de relleno aceptada por tu configuración local.&lt;/p&gt;
&lt;p&gt;Hay un punto de configuración que merece especial atención:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;inferenceModels&amp;#34;=&amp;#34;[\&amp;#34;haiku\&amp;#34;,\&amp;#34;sonnet\&amp;#34;,\&amp;#34;opus\&amp;#34;]&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto mapea los roles de modelo que Claude Code espera hacia el proveedor local. En la práctica, debes vincular &lt;code&gt;haiku&lt;/code&gt;, &lt;code&gt;sonnet&lt;/code&gt; y &lt;code&gt;opus&lt;/code&gt; con los nombres de modelo expuestos por Ollama o CC Switch. Si este mapeo es incorrecto, Claude Code puede fallar al llamar al modelo o volver a una configuración inesperada.&lt;/p&gt;
&lt;h2 id=&#34;dónde-destaca-claude-code&#34;&gt;Dónde Destaca Claude Code
&lt;/h2&gt;&lt;p&gt;La mayor ventaja de Claude Code no es una finalización aislada, sino el flujo completo de desarrollo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;leer y entender la estructura del proyecto;&lt;/li&gt;
&lt;li&gt;localizar archivos relacionados con una tarea;&lt;/li&gt;
&lt;li&gt;editar código directamente;&lt;/li&gt;
&lt;li&gt;ejecutar comandos y pruebas;&lt;/li&gt;
&lt;li&gt;observar errores e iterar;&lt;/li&gt;
&lt;li&gt;completar tareas de varios pasos en una sola sesión.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por eso muchas personas quieren conservar Claude Code aunque cambien a un modelo local. Una interfaz de chat normal puede generar fragmentos de código, pero no trabaja de forma natural dentro de un repositorio. Claude Code se parece más a un asistente de desarrollo capaz de actuar.&lt;/p&gt;
&lt;h2 id=&#34;qué-papel-cumple-ollama&#34;&gt;Qué Papel Cumple Ollama
&lt;/h2&gt;&lt;p&gt;Ollama se encarga de ejecutar y gestionar los modelos locales. Gestiona la descarga, la carga y la inferencia local.&lt;/p&gt;
&lt;p&gt;La ventaja es clara: las solicitudes permanecen en tu máquina, el uso repetido no genera facturas de API y también puedes trabajar cuando la red está limitada. Para código privado, también resulta más aceptable que enviar cada ventana de contexto a un modelo en la nube.&lt;/p&gt;
&lt;p&gt;La contrapartida también es clara. Los modelos locales dependen mucho del hardware y de la calidad del modelo. Un modelo pequeño puede manejar ediciones simples, explicaciones y generación de scripts, pero puede sufrir con refactorizaciones grandes entre varios archivos o decisiones de arquitectura delicadas.&lt;/p&gt;
&lt;h2 id=&#34;dónde-están-los-límites-de-la-experiencia&#34;&gt;Dónde Están Los Límites De La Experiencia
&lt;/h2&gt;&lt;p&gt;Esta configuración no debe verse como un reemplazo completo de los modelos cloud más potentes de Claude.&lt;/p&gt;
&lt;p&gt;Puedes encontrarte con estos problemas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;comprensión más débil de contextos largos;&lt;/li&gt;
&lt;li&gt;llamadas a herramientas inestables en tareas complejas;&lt;/li&gt;
&lt;li&gt;inferencia lenta en máquinas solo con CPU;&lt;/li&gt;
&lt;li&gt;más alucinaciones de rutas de archivo o APIs inexistentes;&lt;/li&gt;
&lt;li&gt;planificación menos fiable en varias rondas;&lt;/li&gt;
&lt;li&gt;menor tasa de éxito en refactorizaciones de repositorios grandes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La expectativa más razonable es usarlo como un asistente de desarrollo local gratuito, no como un sustituto perfecto de un modelo cloud de primera línea.&lt;/p&gt;
&lt;h2 id=&#34;la-compatibilidad-multimodal-sigue-siendo-inestable&#34;&gt;La Compatibilidad Multimodal Sigue Siendo Inestable
&lt;/h2&gt;&lt;p&gt;Algunos usuarios quieren que Claude Code maneje capturas de pantalla, imágenes de UI, diagramas u otras entradas multimodales. Esta parte depende del modelo local y de la capa de reenvío.&lt;/p&gt;
&lt;p&gt;Si el modelo de Ollama seleccionado no admite visión, o si CC Switch no traduce correctamente el formato de solicitud, las funciones multimodales pueden fallar. Incluso con un modelo de visión, el comportamiento puede diferir de la API oficial de Claude.&lt;/p&gt;
&lt;p&gt;Por ahora, esta configuración es más adecuada para flujos de texto y código. Conviene tratar el soporte multimodal como algo experimental.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-tiene-sentido-probarlo&#34;&gt;Para Quién Tiene Sentido Probarlo
&lt;/h2&gt;&lt;p&gt;Esta configuración es adecuada para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;desarrolladores que quieren probar el flujo de Claude Code a bajo coste;&lt;/li&gt;
&lt;li&gt;usuarios que escriben scripts, herramientas pequeñas y automatizaciones con frecuencia;&lt;/li&gt;
&lt;li&gt;equipos que prefieren mantener el código en máquinas locales;&lt;/li&gt;
&lt;li&gt;principiantes que quieren un asistente de programación AI sin gasto continuo de API;&lt;/li&gt;
&lt;li&gt;personas que evalúan distintos modelos locales para código.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es menos adecuada si dependes mucho de contexto largo, monorepos grandes, calidad estricta de revisión de código o refactorizaciones complejas de proyectos completos.&lt;/p&gt;
&lt;h2 id=&#34;recomendaciones-de-uso&#34;&gt;Recomendaciones De Uso
&lt;/h2&gt;&lt;p&gt;Empieza con tareas pequeñas.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;explicar un solo archivo;&lt;/li&gt;
&lt;li&gt;refactorizar una función pequeña;&lt;/li&gt;
&lt;li&gt;generar un script de shell;&lt;/li&gt;
&lt;li&gt;corregir un error simple;&lt;/li&gt;
&lt;li&gt;añadir una función pequeña;&lt;/li&gt;
&lt;li&gt;escribir pruebas unitarias para un módulo acotado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Después de cada cambio, ejecuta pruebas o al menos revisa el diff. Un modelo local puede ser útil, pero no conviene aceptar a ciegas todas sus ediciones.&lt;/p&gt;
&lt;p&gt;Si el modelo pierde el contexto con frecuencia, reduce el alcance de la tarea. En lugar de pedirle &amp;ldquo;refactoriza todo el proyecto&amp;rdquo;, pídele &amp;ldquo;refactoriza esta función&amp;rdquo; o &amp;ldquo;añade validación en este archivo&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude Code + CC Switch + Ollama&lt;/code&gt; es una combinación interesante. Mantiene el flujo de desarrollo tipo Agent de Claude Code y mueve la inferencia a un modelo local.&lt;/p&gt;
&lt;p&gt;Sus mayores ventajas son el menor coste, la privacidad local y un flujo de desarrollo cómodo. Sus límites también son evidentes: la calidad del modelo, el rendimiento del hardware, el contexto largo y la estabilidad de las llamadas a herramientas afectan directamente la experiencia final.&lt;/p&gt;
&lt;p&gt;Si ya usas Ollama y quieres un flujo de programación AI local más práctico, vale la pena probar esta configuración. Solo recuerda empezar con tareas pequeñas, verificar cada cambio y tratar el modelo local como un asistente, no como un ingeniero automático.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Lectura rápida de la documentación de Ghostty: instalación, configuración y uso diario</title>
        <link>https://knightli.com/es/2026/05/15/ghostty-docs-install-config-usage-guide/</link>
        <pubDate>Fri, 15 May 2026 14:50:11 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/ghostty-docs-install-config-usage-guide/</guid>
        <description>&lt;p&gt;Ghostty es un nuevo emulador de terminal, pero no es simplemente &amp;ldquo;otra terminal más rápida&amp;rdquo;. Según su documentación oficial, intenta equilibrar tres direcciones al mismo tiempo: velocidad, funciones y una experiencia de escritorio nativa. Es decir, busca aceleración por GPU y buen rendimiento de renderizado, pero también quiere sentirse como una aplicación local real en macOS y Linux, no como una interfaz completamente dibujada a mano.&lt;/p&gt;
&lt;p&gt;Si hoy usas iTerm2, Kitty, Alacritty, WezTerm o la terminal del sistema, lo más interesante de Ghostty no es una función aislada. Es la combinación entre &amp;ldquo;funciona desde el primer arranque&amp;rdquo; y &amp;ldquo;se puede configurar en profundidad&amp;rdquo;. La configuración predeterminada ya es usable; cuando quieres ajustar más, la documentación ofrece entradas completas para archivos de configuración, temas, atajos, fuentes, integración con Shell y secuencias de control de terminal.&lt;/p&gt;
&lt;h2 id=&#34;primero-el-posicionamiento&#34;&gt;Primero, el posicionamiento
&lt;/h2&gt;&lt;p&gt;El posicionamiento central de Ghostty se puede resumir en tres puntos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es un emulador de terminal multiplataforma, con foco actual en macOS y Linux.&lt;/li&gt;
&lt;li&gt;Usa UI nativa de cada plataforma: Swift, AppKit y SwiftUI en macOS; Zig y GTK4 en Linux.&lt;/li&gt;
&lt;li&gt;Su núcleo de terminal es &lt;code&gt;libghostty&lt;/code&gt;, y las aplicaciones GUI se construyen alrededor de este núcleo compartido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este diseño afecta la experiencia diaria. Pestañas, divisiones, mensajes de error, restauración del estado de ventanas y atajos del sistema no son simples componentes que &amp;ldquo;parecen una aplicación de escritorio&amp;rdquo;; intentan acercarse a los hábitos de interacción de cada sistema. Los atajos predeterminados de macOS y Linux también se diferencian según las convenciones de cada plataforma.&lt;/p&gt;
&lt;h2 id=&#34;instalación-directa-en-macos-dependiente-de-la-distribución-en-linux&#34;&gt;Instalación: directa en macOS, dependiente de la distribución en Linux
&lt;/h2&gt;&lt;p&gt;Los binarios precompilados oficiales apuntan principalmente a macOS. La forma más común de instalarlo es descargar el &lt;code&gt;.dmg&lt;/code&gt;, abrirlo y arrastrar Ghostty al directorio Applications. Los usuarios de Homebrew también pueden usar el cask mantenido por la comunidad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask ghostty
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En Linux la situación está más fragmentada. La documentación de Ghostty separa administradores de paquetes, binarios comunitarios y compilación desde código fuente para distintas distribuciones. Arch, Alpine, Gentoo, NixOS, Snap, Solus, Void y otras tienen rutas propias. Si una distribución no tiene un repositorio oficial o confiable, la documentación tiende a recomendar compilar desde el código fuente antes que instalar binarios de terceros sin revisar.&lt;/p&gt;
&lt;p&gt;Esto es especialmente importante en servidores y estaciones de trabajo: un emulador de terminal maneja mucha entrada y salida, portapapeles, enlaces, sesiones SSH y rutas de archivos locales. Conviene ser conservador con la fuente de instalación y priorizar el paquete oficial de macOS, los repositorios de la distribución o un proceso de compilación cuyo origen puedas auditar.&lt;/p&gt;
&lt;h2 id=&#34;configuración-no-copies-una-configuración-gigante-de-dotfiles-al-principio&#34;&gt;Configuración: no copies una configuración gigante de dotfiles al principio
&lt;/h2&gt;&lt;p&gt;La filosofía de configuración de Ghostty es &amp;ldquo;usable con cero configuración&amp;rdquo;. La fuente predeterminada incluye JetBrains Mono y soporte de Nerd Font, así que la mayoría de usuarios puede trabajar normalmente al abrirlo por primera vez. La documentación incluso sugiere que, si necesitas cambiar una opción no subjetiva para sentirte cómodo, quizá esa conducta debería ser la predeterminada.&lt;/p&gt;
&lt;p&gt;Cuando realmente necesitas personalizar, Ghostty usa un archivo de configuración de texto. El nombre actual es &lt;code&gt;config.ghostty&lt;/code&gt;, aunque versiones antiguas también soportan &lt;code&gt;config&lt;/code&gt;. Las rutas comunes incluyen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$XDG_CONFIG_HOME/ghostty/config.ghostty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$XDG_CONFIG_HOME/ghostty/config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$HOME/.config/ghostty/config.ghostty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$HOME/.config/ghostty/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En macOS también lee:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$HOME/Library/Application Support/com.mitchellh.ghostty/config.ghostty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$HOME/Library/Application Support/com.mitchellh.ghostty/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La sintaxis es muy directa: &lt;code&gt;key = value&lt;/code&gt;. Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-family = JetBrains Mono
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;font-size = 14
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;theme = light:Rose Pine Dawn,dark:Rose Pine
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keybind = ctrl+shift+t=new_tab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un consejo práctico: no empieces copiando la configuración completa de otra persona. Es más estable usarlo unos días sin cambios y modificar solo tres cosas al principio: fuente, tamaño de fuente y tema. Cuando de verdad notes fricción con atajos, divisiones, ventanas o integración con Shell, agrega esas opciones una por una.&lt;/p&gt;
&lt;h2 id=&#34;consulta-de-documentación-también-hay-referencia-completa-local&#34;&gt;Consulta de documentación: también hay referencia completa local
&lt;/h2&gt;&lt;p&gt;Ghostty tiene muchas opciones de configuración, y la documentación oficial las reúne en Option Reference. Además de la página web, después de instalarlo puedes consultar la referencia localmente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghostty +show-config --default --docs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este comando imprime la configuración predeterminada y la documentación en la salida estándar, útil para enviarlo a un paginador:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghostty +show-config --default --docs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; less
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para ver fuentes disponibles:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghostty +list-fonts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para ver temas incorporados y disponibles:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghostty +list-themes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para ver los atajos predeterminados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghostty +list-keybinds --default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Estos comandos son más confiables que copiar fragmentos de internet, porque vienen de la versión de Ghostty instalada en tu máquina.&lt;/p&gt;
&lt;h2 id=&#34;atajos-piensa-en-acciones-como-concepto-central&#34;&gt;Atajos: piensa en &amp;ldquo;acciones&amp;rdquo; como concepto central
&lt;/h2&gt;&lt;p&gt;El formato de configuración de atajos de Ghostty es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keybind = trigger=action
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;trigger&lt;/code&gt; es la forma de activar una tecla o combinación, y &lt;code&gt;action&lt;/code&gt; es la operación que ejecuta Ghostty. Crear una pestaña, cerrar la surface actual, recargar configuración o saltar a un prompt son acciones. El modelo es claro: no estás &amp;ldquo;cambiando una opción de menú&amp;rdquo;, sino vinculando una secuencia de entrada a una acción.&lt;/p&gt;
&lt;p&gt;Después de cambiar la configuración, puedes recargarla en tiempo de ejecución. El atajo predeterminado es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux: &lt;code&gt;ctrl+shift+,&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;cmd+shift+,&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No todas las opciones se aplican de inmediato. Algunas solo afectan terminales nuevas, y otras requieren reiniciar completamente. Si &amp;ldquo;la configuración está escrita pero no cambia nada&amp;rdquo;, revisa primero la explicación de esa opción; suele ahorrar más tiempo que sospechar de la sintaxis una y otra vez.&lt;/p&gt;
&lt;h2 id=&#34;temas-y-fuentes-usa-primero-lo-incorporado-y-luego-ajusta&#34;&gt;Temas y fuentes: usa primero lo incorporado y luego ajusta
&lt;/h2&gt;&lt;p&gt;Ghostty incluye muchos temas y soporta cambiar entre temas según el modo claro u oscuro del sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;theme = light:Rose Pine Dawn,dark:Rose Pine
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los temas también pueden venir de archivos personalizados. La documentación lo advierte con claridad: un archivo de tema es, en esencia, un archivo de configuración de Ghostty y puede definir muchas opciones, así que no conviene usar temas de fuentes no confiables.&lt;/p&gt;
&lt;p&gt;En fuentes, &lt;code&gt;font-family&lt;/code&gt; se puede repetir varias veces para especificar fuentes fallback. Es útil en entornos multilingües: la fuente principal puede cubrir inglés y símbolos, mientras las siguientes cubren chino, japonés u otros caracteres. Si aparecen detalles de visualización con emoji, negrita, cursiva o ligaduras, basta con revisar la opción correspondiente en Option Reference.&lt;/p&gt;
&lt;h2 id=&#34;integración-con-shell-especialmente-importante-para-usuarios-de-ssh&#34;&gt;Integración con Shell: especialmente importante para usuarios de SSH
&lt;/h2&gt;&lt;p&gt;Ghostty soporta inyección automática de shell integration para &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;elvish&lt;/code&gt;, &lt;code&gt;fish&lt;/code&gt;, &lt;code&gt;nushell&lt;/code&gt; y &lt;code&gt;zsh&lt;/code&gt;. Al activarla, varias experiencias se vuelven más naturales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las terminales nuevas pueden abrirse en el directorio de trabajo de la terminal anterior.&lt;/li&gt;
&lt;li&gt;Los prompts complejos pueden redibujarse al cambiar tamaño en lugar de reacomodarse mal.&lt;/li&gt;
&lt;li&gt;Puedes saltar entre salidas de comandos mediante marcadores de prompt.&lt;/li&gt;
&lt;li&gt;El comportamiento del cursor en el prompt se ajusta mejor a hábitos de edición.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si no quieres inyección automática, desactívala en la configuración:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;shell-integration = none
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;SSH merece atención extra. Ghostty usa &lt;code&gt;xterm-ghostty&lt;/code&gt; como &lt;code&gt;TERM&lt;/code&gt;, pero muchos hosts remotos todavía no tienen el terminfo correspondiente. La documentación ofrece dos funciones de shell integration, &lt;code&gt;ssh-env&lt;/code&gt; y &lt;code&gt;ssh-terminfo&lt;/code&gt;, desactivadas por defecto y activables según necesidad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;shell-integration-features = ssh-env,ssh-terminfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si te conectas a menudo a servidores antiguos, contenedores, bastiones o entornos de producción con gestión estricta, conviene leer primero la documentación oficial de Terminfo y Shell Integration antes de activar estas funciones. La negociación de capacidades de terminal parece menor, pero cuando falla puede producir colores anómalos, atajos rotos o programas de pantalla completa desordenados.&lt;/p&gt;
&lt;h2 id=&#34;mi-orden-de-prueba&#34;&gt;Mi orden de prueba
&lt;/h2&gt;&lt;p&gt;Si solo quieres decidir si Ghostty encaja contigo, puedes probarlo en este orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Instálalo y úsalo un día sin escribir configuración.&lt;/li&gt;
&lt;li&gt;Ajusta solo &lt;code&gt;font-family&lt;/code&gt;, &lt;code&gt;font-size&lt;/code&gt; y &lt;code&gt;theme&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;ghostty +list-keybinds --default&lt;/code&gt; para ver los atajos predeterminados, en lugar de importar primero la tabla de otra persona.&lt;/li&gt;
&lt;li&gt;Si usas SSH con frecuencia, revisa primero la compatibilidad de terminfo en hosts remotos.&lt;/li&gt;
&lt;li&gt;Al final ajusta divisiones, ventanas, transparencia, barra de título, imagen de fondo y preferencias visuales o de flujo de trabajo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La documentación de Ghostty está escrita con un enfoque bastante ingenieril. Conviene leerla como un manual de referencia de configuración, no como una página promocional. Para la mayoría de usuarios, el criterio real es simple: si la experiencia predeterminada ya resulta cómoda y tus flujos diarios con editor, Shell, SSH, tmux o Zellij son estables. Si esas piezas funcionan bien, Ghostty merece entrar en tu lista de terminales candidatas a largo plazo.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ghostty Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs/about&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;About Ghostty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs/config&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs/config/keybind&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Custom Keybindings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs/install/binary&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Prebuilt Ghostty Binaries and Packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ghostty.org/docs/features/shell-integration&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Shell Integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Prompt-Vault: una biblioteca de especificaciones de prompt para probar AI Coding</title>
        <link>https://knightli.com/es/2026/05/15/prompt-vault-coding-prompt-benchmark/</link>
        <pubDate>Fri, 15 May 2026 09:00:52 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/prompt-vault-coding-prompt-benchmark/</guid>
        <description>&lt;p&gt;&lt;code&gt;w512/Prompt-Vault&lt;/code&gt; es un repositorio pequeño pero útil. No colecciona prompts mágicos; organiza prompts ejecutables de programación por dificultad para probar LLMs y coding agents.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/w512/Prompt-Vault&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/w512/Prompt-Vault&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La estructura es clara: &lt;code&gt;Easy&lt;/code&gt;, &lt;code&gt;Medium&lt;/code&gt; y &lt;code&gt;Hard&lt;/code&gt;. Cada archivo Markdown es una tarea independiente. El README también los presenta como prompts para probar modelos o practicar pequeños proyectos.&lt;/p&gt;
&lt;h2 id=&#34;no-es-una-colección-de-ocurrencias&#34;&gt;No es una colección de ocurrencias
&lt;/h2&gt;&lt;p&gt;Muchos repositorios de prompts parecen grandes, pero cuesta evaluar su calidad. Los títulos atraen, pero faltan criterios de aceptación.&lt;/p&gt;
&lt;p&gt;Prompt-Vault se parece más a una biblioteca de especificaciones. Cada tarea intenta dejar claro qué app construir, qué funciones son obligatorias, qué estilo de UI se espera, qué restricciones técnicas existen, si debe ser un solo archivo, si se permiten dependencias y si hay persistencia.&lt;/p&gt;
&lt;p&gt;Eso prueba mejor a un modelo que pedir “haz un Kanban bonito”.&lt;/p&gt;
&lt;h2 id=&#34;easy-interacción-básica&#34;&gt;Easy: interacción básica
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Bubble_Sort_Visualizer.md&lt;/code&gt; pide un &lt;code&gt;index.html&lt;/code&gt; único que visualice Bubble Sort con barras, botones start/reset, slider de velocidad, contador de comparaciones y tema oscuro.&lt;/p&gt;
&lt;p&gt;Sirve para probar si el modelo conecta estado algorítmico con UI, controla animación, maneja reset y mantiene el código simple.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ToDo_List.md&lt;/code&gt; parte de HTML estático y añade tareas, estado completado, borrar, contadores, estadísticas Active / Completed y &lt;code&gt;localStorage&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Es simple, pero revela si el modelo evoluciona el código paso a paso o lo mezcla todo.&lt;/p&gt;
&lt;h2 id=&#34;medium-estado-y-animación&#34;&gt;Medium: estado y animación
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Sorting_Visualization.md&lt;/code&gt; exige seis algoritmos en la misma página: Bubble, Insertion, Selection, Merge, Quick y Heap Sort.&lt;/p&gt;
&lt;p&gt;También requiere selector de algoritmo, sliders de velocidad y tamaño, reset, start / pause y panel de estadísticas.&lt;/p&gt;
&lt;p&gt;Muchos modelos logran una animación de Bubble Sort, pero fallan al combinar varios algoritmos, pausa, reanudación y estadísticas.&lt;/p&gt;
&lt;h2 id=&#34;hard-sensación-de-producto-completo&#34;&gt;Hard: sensación de producto completo
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Kanban_Board.md&lt;/code&gt; pide un tablero completo: columnas por defecto, columnas nuevas, renombrado con doble clic, borrar columnas vacías, tarjetas con título y descripción, prioridad, fecha límite, drag-and-drop, búsqueda, filtro, &lt;code&gt;localStorage&lt;/code&gt;, estadísticas, tema oscuro glassmorphism y scroll horizontal responsive.&lt;/p&gt;
&lt;p&gt;Esto evalúa producto, no solo una función.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Markdown_Editor_Desktop.md&lt;/code&gt; pide un editor Markdown de escritorio con Tauri 2: edición y vista previa, scroll sincronizado, render en vivo, modos, abrir/guardar/guardar como, indicador de no guardado, toolbar, atajos, temas, fuentes, Vue 3, Pinia, &lt;code&gt;marked.js&lt;/code&gt;, &lt;code&gt;prism.js&lt;/code&gt; y plugins de Tauri.&lt;/p&gt;
&lt;p&gt;Ya no es un prompt web simple; prueba estado frontend, permisos de filesystem, IPC y empaquetado.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-vale-la-pena&#34;&gt;Por qué vale la pena
&lt;/h2&gt;&lt;p&gt;Su valor no es la cantidad, sino ofrecer muestras reutilizables de evaluación.&lt;/p&gt;
&lt;p&gt;Con el mismo prompt puedes comparar modelos o agents: cuál respeta restricciones, cuál omite menos funciones, cuál maneja bordes, cuál deja código mantenible, cuál cuida mejor la UI.&lt;/p&gt;
&lt;p&gt;Es más fiable que “me parece más inteligente”.&lt;/p&gt;
&lt;p&gt;En frontend, muchos fallos no son sintaxis: faltan estados de botón, animaciones se atascan, no persiste el dato, el drag no marca el destino o las estadísticas no se actualizan.&lt;/p&gt;
&lt;h2 id=&#34;cómo-ampliarlo&#34;&gt;Cómo ampliarlo
&lt;/h2&gt;&lt;p&gt;Podría mejorar con checklists de aceptación, casos de fallo, criterios de puntuación, implementaciones de referencia y registros por modelo.&lt;/p&gt;
&lt;p&gt;Por ejemplo, en sorting: “pulsar Start / Reset rápido no debe crear múltiples bucles de animación”. En Kanban: aclarar qué ocurre al borrar una columna con tarjetas.&lt;/p&gt;
&lt;h2 id=&#34;cómo-usarlo&#34;&gt;Cómo usarlo
&lt;/h2&gt;&lt;p&gt;Para probar una herramienta de AI Coding:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Entrega el prompt sin cambios.&lt;/li&gt;
&lt;li&gt;No des pistas adicionales.&lt;/li&gt;
&lt;li&gt;Ejecuta el resultado.&lt;/li&gt;
&lt;li&gt;Verifica función por función.&lt;/li&gt;
&lt;li&gt;Registra omisiones y bugs.&lt;/li&gt;
&lt;li&gt;Da una ronda de reparación.&lt;/li&gt;
&lt;li&gt;Compara tiempo, coste de tokens y calidad final.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Prompt-Vault es una biblioteca ligera de especificaciones. Sirve para evaluar AI Coding y para practicar frontend.&lt;/p&gt;
&lt;p&gt;Recuerda que un buen prompt no es un deseo: debe definir requisitos, restricciones, interacción, estado, aceptación y modo de ejecución.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Qué es Token Efficiency: DeepSeek V4, planificación con modelos grandes y ejecución con modelos pequeños</title>
        <link>https://knightli.com/es/2026/05/15/token-efficiency-agent-orchestration/</link>
        <pubDate>Fri, 15 May 2026 08:59:33 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/token-efficiency-agent-orchestration/</guid>
        <description>&lt;p&gt;La próxima métrica importante en AI Coding quizá no sea quién tiene el modelo más fuerte, sino quién completa más trabajo verificable con menos tokens, menor coste y un proceso más estable.&lt;/p&gt;
&lt;p&gt;Ese es el valor de Token Efficiency.&lt;/p&gt;
&lt;p&gt;Muchos lo entienden como modelos baratos, contexto largo o cache hits más económicos. Eso es solo la base. Lo que lo convierte en productividad es la división de trabajo entre modelos, la orquestación de tareas, el presupuesto de contexto y la evaluación.&lt;/p&gt;
&lt;p&gt;Token Efficiency no es un truco para ahorrar dinero. Es un método de ingeniería para convertir tokens en producción.&lt;/p&gt;
&lt;h2 id=&#34;deepseek-v4-separar-planificación-y-ejecución&#34;&gt;DeepSeek V4: separar planificación y ejecución
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 no es solo otro modelo más fuerte. Divide las dos capacidades necesarias para Token Efficiency en &lt;code&gt;V4 Pro&lt;/code&gt; y &lt;code&gt;V4 Flash&lt;/code&gt;: &lt;code&gt;V4 Pro&lt;/code&gt; encaja mejor con planificación, razonamiento, juicio arquitectónico y revisión crítica; &lt;code&gt;V4 Flash&lt;/code&gt; encaja con ejecución frecuente, reescritura en lote, completado de código, organización de información y nodos normales de un agente.&lt;/p&gt;
&lt;p&gt;En AI Coding esto se traduce así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;V4 Pro&lt;/code&gt;: planner / consultant para requisitos, diseño técnico, bugs complejos, revisión de arquitectura y aceptación final.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;V4 Flash&lt;/code&gt;: executor para escanear archivos, implementar cambios simples, completar tests, ordenar documentación, generar candidatos y repetir tareas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La documentación API de DeepSeek indica que ambos soportan &lt;code&gt;1M&lt;/code&gt; de contexto, JSON Output, Tool Calls, Chat Prefix Completion y FIM Completion. La página de precios también separa input con cache hit y señala una bajada fuerte de ese precio.&lt;/p&gt;
&lt;p&gt;La combinación es lo importante: &lt;code&gt;1M&lt;/code&gt; de contexto reduce compresión en tareas agent complejas; el cache hit barato reduce el coste de volver a cargar prompts, docs, código e historial; la separación &lt;code&gt;Flash / Pro&lt;/code&gt; evita usar un modelo flagship para cada paso o depender solo de un modelo pequeño inestable.&lt;/p&gt;
&lt;p&gt;Así, DeepSeek V4 ofrece una estructura de coste realista para el patrón “modelo consultor + modelo ejecutor + harness de orquestación”.&lt;/p&gt;
&lt;h2 id=&#34;no-hacer-que-el-modelo-más-fuerte-lo-haga-todo&#34;&gt;No hacer que el modelo más fuerte lo haga todo
&lt;/h2&gt;&lt;p&gt;Antes era común elegir el modelo más inteligente y dejarle requisitos, código, tests y resumen de punta a punta.&lt;/p&gt;
&lt;p&gt;Es sencillo, pero no siempre eficiente. Muchas tareas no necesitan razonamiento de frontera. Los modelos caros deberían actuar como consultores, arquitectos o planificadores que intervienen en puntos clave.&lt;/p&gt;
&lt;p&gt;Una estructura mejor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modelos grandes para descomponer problemas y tomar decisiones clave.&lt;/li&gt;
&lt;li&gt;Modelos pequeños para ejecutar, procesar en lote y repetir cambios.&lt;/li&gt;
&lt;li&gt;Herramientas y harness para proceso, estado, contexto y validación.&lt;/li&gt;
&lt;li&gt;Personas para definir producto, aceptar resultados y decidir tradeoffs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Así el razonamiento caro no se desperdicia en ejecución mecánica.&lt;/p&gt;
&lt;h2 id=&#34;más-contexto-no-siempre-es-mejor&#34;&gt;Más contexto no siempre es mejor
&lt;/h2&gt;&lt;p&gt;El contexto largo importa en coding agents porque código, documentos, historial, salida de tests y logs consumen ventana. Cuando se llena, aparecen compresión, olvido y errores de juicio.&lt;/p&gt;
&lt;p&gt;Pero contexto largo no significa meterlo todo.&lt;/p&gt;
&lt;p&gt;Token Efficiency exige que cada tarea quepa en una ventana clara y controlada: archivos necesarios, documentos relevantes para la decisión, estado actual, entradas y salidas claras, y resumen estructurado para el siguiente nodo.&lt;/p&gt;
&lt;p&gt;Si el contexto es barato, la tentación es meter ruido. El ruido no hace al modelo más inteligente.&lt;/p&gt;
&lt;h2 id=&#34;el-harness-importa-más-que-un-modelo-aislado&#34;&gt;El harness importa más que un modelo aislado
&lt;/h2&gt;&lt;p&gt;Conectar Claude Code, Codex u otro agent a un modelo barato no basta. Los modelos pequeños se desvían en cadenas largas si no hay control de proceso.&lt;/p&gt;
&lt;p&gt;Un harness decide cómo dividir tareas, correr nodos, escoger modelos, validar resultados, reintentar fallos y pasar contexto.&lt;/p&gt;
&lt;p&gt;Sin esa capa, un modelo pequeño solo es barato. Con esa capa, puede convertirse en palanca.&lt;/p&gt;
&lt;h2 id=&#34;dividir-tareas-con-dag&#34;&gt;Dividir tareas con DAG
&lt;/h2&gt;&lt;p&gt;Una tarea compleja puede convertirse en un DAG. Por ejemplo: aclarar requisitos, diseñar solución, dividir tareas, implementar, completar tests, hacer Code Review, corregir y enviar PR.&lt;/p&gt;
&lt;p&gt;Cada nodo puede ser un agente independiente con rol, prompt, permisos de herramientas y formato de salida. Los nodos deberían intercambiar resultados estructurados, no conversaciones largas.&lt;/p&gt;
&lt;p&gt;Esto hace cada nodo más corto, más fácil para modelos pequeños y más medible.&lt;/p&gt;
&lt;h2 id=&#34;ejecutar-varias-réplicas-de-una-tarea&#34;&gt;Ejecutar varias réplicas de una tarea
&lt;/h2&gt;&lt;p&gt;Cuando los tokens son suficientemente baratos, una tarea no tiene por qué ejecutarse una sola vez. Puedes correrla con distintos modelos, prompts u orquestaciones, luego elegir el mejor resultado o combinar partes útiles.&lt;/p&gt;
&lt;p&gt;Sirve para diseños, copy, casos de prueba, hipótesis de bug, alternativas de refactor y Code Review. No sirve para tareas con efectos externos, estado compartido o criterios de aceptación borrosos.&lt;/p&gt;
&lt;p&gt;El objetivo no es apostar, sino obtener muestras comparables para mejorar la orquestación y la elección de modelos.&lt;/p&gt;
&lt;h2 id=&#34;construir-evaluación&#34;&gt;Construir evaluación
&lt;/h2&gt;&lt;p&gt;Token Efficiency no se mide solo por precio. Un modelo barato con alta tasa de fallo consume tiempo humano y puede salir más caro.&lt;/p&gt;
&lt;p&gt;Conviene registrar tasa de finalización, intervenciones humanas, fallos de tool calls, tests que pasan, hallazgos de review, coste por tarea, tiempo, retrabajo y diferencias entre combinaciones de modelos.&lt;/p&gt;
&lt;p&gt;Con esos datos se sabe qué tareas van bien con modelos pequeños, cuáles requieren modelos grandes y cuáles deben quedarse en manos humanas.&lt;/p&gt;
&lt;h2 id=&#34;hacer-atómicos-los-workflows&#34;&gt;Hacer atómicos los workflows
&lt;/h2&gt;&lt;p&gt;No todo el mundo tiene que construir un harness completo. Pero sí puede dividir sus procesos en nodos atómicos.&lt;/p&gt;
&lt;p&gt;Producción de contenido: tema, investigación, esquema, borrador, fact-check, estilo, título SEO, traducción y revisión de publicación.&lt;/p&gt;
&lt;p&gt;Desarrollo de software: requisitos, diseño técnico, estructura de datos, cambios de API, unit tests, implementación, migraciones, documentación y review.&lt;/p&gt;
&lt;p&gt;Cada nodo debe tener entrada, salida, aceptación y contexto claros. Cuando maduren las herramientas de harness, esos procesos podrán conectarse directamente.&lt;/p&gt;
&lt;h2 id=&#34;el-hardware-no-es-lo-primero&#34;&gt;El hardware no es lo primero
&lt;/h2&gt;&lt;p&gt;Muchas conversaciones sobre Token Efficiency saltan a despliegue local y GPU. Para la mayoría, la API debería ser la primera opción.&lt;/p&gt;
&lt;p&gt;Antes de validar el modelo económico, el hardware local es coste adelantado. Mejor: validar el workflow con API, medir coste y calidad, detectar nodos frecuentes y estables, y solo después estudiar qué merece localizar.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Token Efficiency no consiste en sustituir modelos caros por baratos, sino en rediseñar el workflow de IA.&lt;/p&gt;
&lt;p&gt;Modelos grandes juzgan, modelos pequeños ejecutan, el harness orquesta y valida, y las personas definen objetivos y aceptación. Solo juntas estas capas convierten tokens en productividad.&lt;/p&gt;
&lt;p&gt;La diferencia futura quizá no esté en quién llama al modelo más fuerte, sino en quién convierte los mismos tokens en más resultados reales.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Superpowers: un framework de skills que devuelve los coding agents al proceso de ingeniería</title>
        <link>https://knightli.com/es/2026/05/15/obra-superpowers-agentic-skills-framework/</link>
        <pubDate>Fri, 15 May 2026 08:53:17 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/obra-superpowers-agentic-skills-framework/</guid>
        <description>&lt;p&gt;&lt;code&gt;obra/superpowers&lt;/code&gt; es un framework de skills para coding agents y también una metodología de desarrollo de software. Su objetivo no es crear otro prompt universal, sino hacer que el agente siga un proceso: aclarar objetivos, producir diseño, escribir un plan, implementar con TDD, revisar y cerrar.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/obra/superpowers&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/obra/superpowers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el momento de escribir, la API de GitHub muestra más de 190.000 stars, licencia MIT y actividad reciente. El README lo describe como &lt;code&gt;An agentic skills framework &amp;amp; software development methodology that works.&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;Qué problema resuelve
&lt;/h2&gt;&lt;p&gt;Muchas herramientas de AI Coding no fallan por no saber escribir código, sino por escribirlo demasiado pronto.&lt;/p&gt;
&lt;p&gt;El usuario da una petición vaga, el agente edita archivos y el resultado parece terminado, aunque los límites, tests y arquitectura sigan sin estar claros. En tareas pequeñas puede pasar; en proyectos complejos se convierte en retrabajo y deuda técnica.&lt;/p&gt;
&lt;p&gt;Superpowers hace que el agente entre en un workflow antes de tocar código:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si detecta que el usuario quiere construir algo, pregunta primero por el objetivo.&lt;/li&gt;
&lt;li&gt;Convierte la conversación en una especificación y la confirma por partes.&lt;/li&gt;
&lt;li&gt;Tras aprobar el diseño, genera un plan de implementación.&lt;/li&gt;
&lt;li&gt;Solo cuando el usuario dice “go” empieza a implementar.&lt;/li&gt;
&lt;li&gt;Durante la implementación enfatiza TDD, YAGNI, DRY y revisión.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No es ingeniería nueva, pero los agentes rápidos necesitan barandillas más fuertes.&lt;/p&gt;
&lt;h2 id=&#34;herramientas-soportadas&#34;&gt;Herramientas soportadas
&lt;/h2&gt;&lt;p&gt;Superpowers no está ligado a un único agente. El README lista Claude Code, Codex CLI, Codex App, Factory Droid, Gemini CLI, OpenCode, Cursor y GitHub Copilot CLI.&lt;/p&gt;
&lt;p&gt;Su papel se parece más a una capa de workflow entre harnesses que a un truco para un modelo concreto.&lt;/p&gt;
&lt;h2 id=&#34;workflow-base&#34;&gt;Workflow base
&lt;/h2&gt;&lt;p&gt;Primero está &lt;code&gt;brainstorming&lt;/code&gt;: antes de implementar, el agente convierte ideas vagas en diseño ejecutable y lo confirma.&lt;/p&gt;
&lt;p&gt;Después &lt;code&gt;using-git-worktrees&lt;/code&gt;: crea un worktree y una rama aislados, y comprueba que instalación y tests parten de una base limpia.&lt;/p&gt;
&lt;p&gt;Luego &lt;code&gt;writing-plans&lt;/code&gt;: divide el diseño en tareas pequeñas con rutas, alcance de código y pasos de validación.&lt;/p&gt;
&lt;p&gt;En ejecución puede usar &lt;code&gt;subagent-driven-development&lt;/code&gt; para delegar o &lt;code&gt;executing-plans&lt;/code&gt; para avanzar por lotes. Cada tarea debe poder revisarse y verificarse.&lt;/p&gt;
&lt;p&gt;Después llega &lt;code&gt;test-driven-development&lt;/code&gt;: RED-GREEN-REFACTOR real. Escribir un test que falla, confirmar el fallo, implementar lo mínimo, confirmar el paso y refactorizar.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;requesting-code-review&lt;/code&gt; introduce revisión entre tareas, y los hallazgos críticos bloquean el avance.&lt;/p&gt;
&lt;p&gt;Finalmente &lt;code&gt;finishing-a-development-branch&lt;/code&gt; valida tests y ofrece opciones como merge, PR, conservar o descartar el worktree.&lt;/p&gt;
&lt;h2 id=&#34;qué-hay-en-la-skills-library&#34;&gt;Qué hay en la Skills Library
&lt;/h2&gt;&lt;p&gt;La parte de testing gira alrededor de &lt;code&gt;test-driven-development&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La parte de debugging incluye &lt;code&gt;systematic-debugging&lt;/code&gt; y &lt;code&gt;verification-before-completion&lt;/code&gt;: reproducir, minimizar, formular hipótesis, validar y no declarar completado sin verificar.&lt;/p&gt;
&lt;p&gt;Las skills de colaboración incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brainstorming&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writing-plans&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;executing-plans&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dispatching-parallel-agents&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;requesting-code-review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;receiving-code-review&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;using-git-worktrees&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;finishing-a-development-branch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent-driven-development&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También hay skills meta como &lt;code&gt;writing-skills&lt;/code&gt; y &lt;code&gt;using-superpowers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Juntas dan al agente hábitos de ingeniería: cuándo preguntar, planificar, testear y detenerse para review.&lt;/p&gt;
&lt;h2 id=&#34;diferencia-frente-a-un-prompt-normal&#34;&gt;Diferencia frente a un prompt normal
&lt;/h2&gt;&lt;p&gt;Un prompt normal suele apilar reglas en un system prompt: no cambies de más, piensa primero, prueba, explica, sé breve. Cuantas más reglas, más fácil es que el modelo olvide algunas en tareas complejas.&lt;/p&gt;
&lt;p&gt;Superpowers divide las reglas en módulos de workflow activables. Cada skill es más corta y enfocada. El agente sabe en qué fase está, el proceso se vuelve revisable y el equipo puede codificar sus propias prácticas.&lt;/p&gt;
&lt;p&gt;La lección no es solo usar un modelo más inteligente, sino darle una forma repetible de trabajar.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-sirve&#34;&gt;Para quién sirve
&lt;/h2&gt;&lt;p&gt;Superpowers encaja mejor con desarrolladores que ya usan coding agents en proyectos reales: tareas de varios archivos, diseño antes de implementación, TDD o validación, ramas o worktrees paralelos, subagents para implementación o review, y equipos que quieren convertir su flujo en skills reutilizables.&lt;/p&gt;
&lt;p&gt;Para cambiar una línea de configuración puede ser pesado. Para trabajos de varias fases, sus restricciones aportan valor.&lt;/p&gt;
&lt;h2 id=&#34;precauciones&#34;&gt;Precauciones
&lt;/h2&gt;&lt;p&gt;No es piloto automático. Da proceso al agente, pero requisitos, límites y aceptación final siguen siendo humanos.&lt;/p&gt;
&lt;p&gt;TDD y review añaden coste inicial. En tareas pequeñas pueden parecer lentos; en tareas complejas reducen retrabajo.&lt;/p&gt;
&lt;p&gt;Los subagents en paralelo no siempre ayudan. Funcionan si los límites y el alcance de escritura son claros. Si el requisito es borroso, el paralelismo multiplica la confusión.&lt;/p&gt;
&lt;p&gt;También hay que mantener la calidad de las skills. Procesos obsoletos, instrucciones vagas y reglas conflictivas perjudican al agente.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Superpowers vale porque aleja al coding agent de “recibir petición y editar código” y lo devuelve al proceso de ingeniería de software.&lt;/p&gt;
&lt;p&gt;Lo que falta en AI Coding no suele ser velocidad de generación, sino aclaración, planificación, verificación, review y cierre. Cuanto más fuerte sea el modelo, menos conviene saltarse esos pasos.&lt;/p&gt;
&lt;p&gt;Si usas Codex, Claude Code, Cursor o Gemini CLI en proyectos reales, Superpowers merece una lectura. Aunque no lo instales, su forma de dividir skills sirve como referencia para diseñar tu propio workflow de agentes.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Rechazar el Vibe Coding: el repositorio skills de Matt Pocock añade restricciones de ingeniería a la programación con IA</title>
        <link>https://knightli.com/es/2026/05/15/matt-pocock-skills-ai-engineering-workflow/</link>
        <pubDate>Fri, 15 May 2026 08:46:23 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/matt-pocock-skills-ai-engineering-workflow/</guid>
        <description>&lt;p&gt;Cuanto más rápido escribe código la IA, más rápido puede perder el control un proyecto. La cuestión real no es si un modelo puede generar funciones, sino si entiende el requisito, respeta el lenguaje del equipo y avanza con cambios pequeños dentro de la arquitectura existente.&lt;/p&gt;
&lt;p&gt;El repositorio &lt;code&gt;mattpocock/skills&lt;/code&gt; de Matt Pocock apunta en la dirección opuesta al vibe coding: no dejar que la IA tome todo el proceso de desarrollo, sino ponerla dentro de restricciones maduras de ingeniería de software.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/mattpocock/skills&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/mattpocock/skills&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No se trata de un prompt mágico. Es un conjunto de agent skills que convierten aclaración de requisitos, modelado de dominio, TDD, diagnóstico y revisión arquitectónica en workflows adecuados para herramientas de AI Coding.&lt;/p&gt;
&lt;h2 id=&#34;primero-resolver-la-falta-de-alineación&#34;&gt;Primero resolver la falta de alineación
&lt;/h2&gt;&lt;p&gt;El fallo más común en AI Coding es creer que el modelo entendió cuando en realidad solo adivinó a partir de una descripción vaga.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grill-me&lt;/code&gt; invierte la interacción. Antes de escribir código, el agente actúa como un revisor exigente y pregunta por ramas, límites y decisiones pendientes.&lt;/p&gt;
&lt;p&gt;Si pides una página de login, debería preguntar primero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cómo funcionará recuperar contraseña.&lt;/li&gt;
&lt;li&gt;Si habrá login de terceros.&lt;/li&gt;
&lt;li&gt;Qué error mostrar cuando falle el login.&lt;/li&gt;
&lt;li&gt;Si bloqueo de cuenta, CAPTCHA o control de riesgo están dentro del alcance.&lt;/li&gt;
&lt;li&gt;A dónde redirigir tras el éxito.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parece más lento, pero reduce retrabajo. Cuanto más barato es generar código, más caro se vuelve no haber aclarado el requisito.&lt;/p&gt;
&lt;h2 id=&#34;escribir-el-lenguaje-de-dominio-en-el-contexto&#34;&gt;Escribir el lenguaje de dominio en el contexto
&lt;/h2&gt;&lt;p&gt;Otro problema es el vocabulario genérico. El modelo no conoce los términos internos del equipo, así que los nombres de variables, funciones y documentos empiezan a desviarse.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grill-with-docs&lt;/code&gt; pregunta mientras revisa &lt;code&gt;CONTEXT.md&lt;/code&gt;, ADRs o documentos de dominio. Los términos y decisiones confirmados pueden volver a esos documentos.&lt;/p&gt;
&lt;p&gt;Esto se parece al lenguaje ubicuo de DDD. Si el equipo dice customer en lugar de user, o transaction en lugar de order, la IA debe heredar esa terminología.&lt;/p&gt;
&lt;p&gt;El valor del contexto no está en acumular datos, sino en reducir la necesidad de adivinar.&lt;/p&gt;
&lt;h2 id=&#34;usar-tdd-para-limitar-la-velocidad&#34;&gt;Usar TDD para limitar la velocidad
&lt;/h2&gt;&lt;p&gt;La IA es peligrosa porque es rápida. Antes, escribir mucho mal código tomaba tiempo; ahora aparecen cientos de líneas en segundos. El problema no es la velocidad, sino la falta de ciclos de feedback.&lt;/p&gt;
&lt;p&gt;El skill &lt;code&gt;tdd&lt;/code&gt; devuelve el ciclo rojo-verde-refactor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Escribir un test fallido para un comportamiento.&lt;/li&gt;
&lt;li&gt;Implementar lo mínimo para pasarlo.&lt;/li&gt;
&lt;li&gt;Refactorizar.&lt;/li&gt;
&lt;li&gt;Continuar con el siguiente corte vertical.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La clave es avanzar comportamiento por comportamiento. La IA ejecuta; la persona controla dirección y límites.&lt;/p&gt;
&lt;h2 id=&#34;diagnosticar-con-un-ciclo&#34;&gt;Diagnosticar con un ciclo
&lt;/h2&gt;&lt;p&gt;Ante un bug, muchos agentes adivinan y parchean varias veces hasta empeorar el código.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;diagnose&lt;/code&gt; exige crear primero un ciclo de feedback:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reproducir el problema&lt;/li&gt;
&lt;li&gt;Minimizar el caso&lt;/li&gt;
&lt;li&gt;Formular una hipótesis&lt;/li&gt;
&lt;li&gt;Añadir observación o logs&lt;/li&gt;
&lt;li&gt;Corregir&lt;/li&gt;
&lt;li&gt;Añadir una prueba de regresión&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es un proceso clásico, pero en AI Coding es aún más importante. La IA prueba rápido; el proceso la mantiene cerca de la causa raíz.&lt;/p&gt;
&lt;h2 id=&#34;revisar-la-arquitectura-con-regularidad&#34;&gt;Revisar la arquitectura con regularidad
&lt;/h2&gt;&lt;p&gt;Que una tarea pase no significa que el código esté mejor. Muchas pequeñas modificaciones de IA pueden difuminar límites de módulos, complicar interfaces y hacer más difíciles los tests.&lt;/p&gt;
&lt;p&gt;Skills como &lt;code&gt;improve-codebase-architecture&lt;/code&gt; hacen que el agente mire el código desde más arriba:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qué módulos mezclan responsabilidades.&lt;/li&gt;
&lt;li&gt;Qué interfaces son demasiado complejas.&lt;/li&gt;
&lt;li&gt;Qué rutas son difíciles de probar.&lt;/li&gt;
&lt;li&gt;Qué nombres no encajan con el lenguaje de dominio.&lt;/li&gt;
&lt;li&gt;Qué duplicaciones conviene consolidar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es una gran refactorización automática. Es observación estructurada y dirección de mejora; la decisión sigue siendo humana.&lt;/p&gt;
&lt;h2 id=&#34;lo-que-hay-que-limitar-es-la-libertad&#34;&gt;Lo que hay que limitar es la libertad
&lt;/h2&gt;&lt;p&gt;La idea central es sencilla: programar con IA no consiste en dejar improvisar al modelo, sino en darle objetivos, contexto, tests y condiciones de parada.&lt;/p&gt;
&lt;p&gt;Las personas definen el problema, los límites de arquitectura, las decisiones de negocio y los criterios de aceptación. La IA genera código, completa tests, repite cambios y hace refactors locales.&lt;/p&gt;
&lt;p&gt;Los fundamentos de ingeniería de software no quedaron obsoletos porque la IA mejoró. Aclarar requisitos, usar lenguaje de dominio, TDD, diagnóstico y revisión de arquitectura es cada vez más importante.&lt;/p&gt;
&lt;p&gt;Cada vez más personas podrán escribir código. La diferencia estará en quién puede insertar la IA en un sistema de ingeniería mantenible, verificable y capaz de evolucionar.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Qué es cc-haha: un proyecto que convierte Claude Code en un banco de trabajo de escritorio</title>
        <link>https://knightli.com/es/2026/05/14/cc-haha-claude-code-desktop-workbench/</link>
        <pubDate>Thu, 14 May 2026 22:38:04 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/14/cc-haha-claude-code-desktop-workbench/</guid>
        <description>&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; es un proyecto construido alrededor de un flujo de trabajo modificado de Claude Code. Su repositorio completo es &lt;code&gt;NanmiCoder/cc-haha&lt;/code&gt;. La página del proyecto lo dice de forma directa: está basado en el código fuente de Claude Code filtrado desde el Anthropic npm registry el &lt;code&gt;2026-03-31&lt;/code&gt;, y su forma principal actual es un banco de trabajo de escritorio para Claude Code.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hay dos puntos importantes en esa descripción.&lt;/p&gt;
&lt;p&gt;Primero, no es Claude Code oficial de Anthropic. El README también indica que el copyright del código fuente original pertenece a Anthropic y que el proyecto es solo para aprendizaje e investigación.&lt;/p&gt;
&lt;p&gt;Segundo, su foco ya no es simplemente &amp;ldquo;ejecutar un Claude Code CLI local&amp;rdquo;. Por lo que muestran el README y el release más reciente, &lt;code&gt;cc-haha&lt;/code&gt; se parece más a una app de escritorio que reúne sesiones de Claude Code, proyectos, permisos, diffs, Computer Use, acceso remoto y configuración de proveedores de modelos.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-intenta-resolver&#34;&gt;Qué problema intenta resolver
&lt;/h2&gt;&lt;p&gt;Claude Code nació como una herramienta orientada a la terminal. Las sesiones, la ejecución de comandos, las confirmaciones de permisos, las ediciones de archivos y el cambio de contexto ocurren en la terminal. Para quien está cómodo con CLI, eso funciona. Pero en uso prolongado aparecen varias incomodidades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Varios proyectos y sesiones son difíciles de gestionar a la vez.&lt;/li&gt;
&lt;li&gt;Para ver qué archivos modificó la IA, hay que cambiar a Git o al editor.&lt;/li&gt;
&lt;li&gt;Las aprobaciones, la ejecución de comandos y los diffs quedan repartidos en varias superficies.&lt;/li&gt;
&lt;li&gt;Ver la sesión actual desde un teléfono u otro dispositivo requiere una solución adicional.&lt;/li&gt;
&lt;li&gt;Conectar modelos que no sean de Anthropic exige manejar compatibilidad de protocolos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La dirección de &lt;code&gt;cc-haha&lt;/code&gt; es empaquetar todo eso en un banco de trabajo gráfico. No es solo una capa visual para Claude Code; mueve la gestión de sesiones y el control del flujo de desarrollo local a la app de escritorio.&lt;/p&gt;
&lt;h2 id=&#34;banco-de-trabajo-de-escritorio-de-terminal-a-centro-de-control&#34;&gt;Banco de trabajo de escritorio: de terminal a centro de control
&lt;/h2&gt;&lt;p&gt;Según el README, la app de escritorio de &lt;code&gt;cc-haha&lt;/code&gt; reúne estas capacidades en macOS / Windows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Banco de trabajo multisesión: pestañas, cambio de proyecto, entrada a terminal e historial de sesiones.&lt;/li&gt;
&lt;li&gt;Arranque por branch / Worktree: una nueva sesión puede elegir rama del repositorio y decidir entre el árbol actual o un Worktree aislado.&lt;/li&gt;
&lt;li&gt;Panel derecho de cambios de código: ver archivos modificados, líneas añadidas/eliminadas y estado del workspace mientras se chatea.&lt;/li&gt;
&lt;li&gt;Visualización de cambios: inspeccionar ediciones de la IA, diffs y proceso de ejecución.&lt;/li&gt;
&lt;li&gt;Flujo de permisos y confirmaciones: aprobar comandos peligrosos, tool calls y preguntas de la IA desde el escritorio.&lt;/li&gt;
&lt;li&gt;Varios proveedores de modelos: API compatibles con Anthropic, modelos de terceros, WebSearch fallback y configuración local.&lt;/li&gt;
&lt;li&gt;Acceso remoto H5: usar un token de un solo uso para entrar a la sesión de escritorio desde un teléfono u otro dispositivo.&lt;/li&gt;
&lt;li&gt;Integración con IM: conversar, cambiar proyectos y aprobar permisos desde Telegram, Feishu, WeChat o DingTalk.&lt;/li&gt;
&lt;li&gt;Tareas programadas y uso de tokens: crear tareas planificadas y ver tendencias de consumo local de tokens.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas funciones lo acercan más a un &amp;ldquo;banco de trabajo de programación con IA&amp;rdquo; que a un simple sustituto de la línea de comandos. Intenta poner en un solo lugar las superficies más comunes al programar con IA: chat, cambios de archivos, permisos, proyectos, entrada remota y configuración de modelos.&lt;/p&gt;
&lt;h2 id=&#34;instalación-y-arranque&#34;&gt;Instalación y arranque
&lt;/h2&gt;&lt;p&gt;Para usuarios normales, lo más razonable es descargar el instalador de escritorio desde Releases.&lt;/p&gt;
&lt;p&gt;El flujo indicado en el README es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ir a GitHub Releases y descargar el instalador de macOS o Windows.&lt;/li&gt;
&lt;li&gt;En el primer arranque, configurar proveedor de modelo, API Key y modelo por defecto en los ajustes de escritorio.&lt;/li&gt;
&lt;li&gt;Si macOS indica que la app no se puede abrir, seguir la guía de instalación para resolver permisos de Gatekeeper.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La página del release más reciente muestra que &lt;code&gt;v0.2.6&lt;/code&gt; se publicó el &lt;code&gt;2026-05-13&lt;/code&gt;. Esa versión se centra en recuperar de forma segura el acceso móvil H5, mejorar la gestión de sesiones de escritorio, la búsqueda de menciones de archivos y detalles de experiencia de escritorio.&lt;/p&gt;
&lt;p&gt;Si quieres arrancar el CLI desde código fuente, el README da estos comandos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./bin/claude-haha
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ese camino es más adecuado para quien quiera depurar el CLI inferior, el servidor o desarrollar cambios propios. Para uso normal, la app de escritorio es más directa.&lt;/p&gt;
&lt;h2 id=&#34;qué-cambió-en-v026&#34;&gt;Qué cambió en v0.2.6
&lt;/h2&gt;&lt;p&gt;El punto principal de &lt;code&gt;v0.2.6&lt;/code&gt; es que el acceso H5/LAN volvió de una apertura temporal a un modelo de activación explícita y emparejamiento por token.&lt;/p&gt;
&lt;p&gt;Cambios destacados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El acceso H5/LAN debe activarse explícitamente en local.&lt;/li&gt;
&lt;li&gt;Los enlaces QR llevan un token visible una sola vez.&lt;/li&gt;
&lt;li&gt;Las API remotas, proxy y WebSocket ya no quedan expuestos sin protección.&lt;/li&gt;
&lt;li&gt;Settings añadió una página independiente de H5 Access.&lt;/li&gt;
&lt;li&gt;La barra lateral de escritorio añadió modo de gestión masiva, con selección múltiple y borrado de sesiones.&lt;/li&gt;
&lt;li&gt;La búsqueda de menciones de archivos ahora es git-first, respeta reglas ignore y reduce ruido de &lt;code&gt;node_modules&lt;/code&gt; y artefactos de build.&lt;/li&gt;
&lt;li&gt;Se añadió un tema blanco puro y se corrigieron problemas como URLs largas rompiendo el layout del chat o borradores cruzados entre tabs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto muestra que el proyecto ya no está solo en la fase de &amp;ldquo;funciona&amp;rdquo;, sino que empieza a cubrir límites de seguridad y detalles diarios propios de un producto de escritorio.&lt;/p&gt;
&lt;p&gt;La parte de H5 merece especial cuidado. El autor avisa en el release que H5 es una entrada de navegador para individuos o equipos confiables, no un sistema público de login multi-tenant. En la práctica, no debería tratarse como un panel SaaS expuesto a internet.&lt;/p&gt;
&lt;h2 id=&#34;computer-use-dejar-que-el-agent-opere-el-escritorio&#34;&gt;Computer Use: dejar que el Agent opere el escritorio
&lt;/h2&gt;&lt;p&gt;Otro punto importante de &lt;code&gt;cc-haha&lt;/code&gt; es Computer Use.&lt;/p&gt;
&lt;p&gt;La documentación del proyecto explica que esta función parte de una versión muy modificada del Computer Use interno del código filtrado de Claude Code. La implementación oficial depende de módulos nativos privados de Anthropic, como &lt;code&gt;@ant/computer-use-swift&lt;/code&gt; y &lt;code&gt;@ant/computer-use-input&lt;/code&gt;, que no están disponibles públicamente. &lt;code&gt;cc-haha&lt;/code&gt; reemplaza la capa inferior por un Python bridge basado en bibliotecas públicas como &lt;code&gt;pyautogui&lt;/code&gt;, &lt;code&gt;mss&lt;/code&gt; y &lt;code&gt;pyobjc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Computer Use soporta operaciones como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Captura de pantalla: &lt;code&gt;screenshot&lt;/code&gt;, &lt;code&gt;zoom&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ratón: clic, arrastre, movimiento, scroll y lectura de posición del cursor&lt;/li&gt;
&lt;li&gt;Teclado: escribir texto, pulsar teclas, mantener teclas&lt;/li&gt;
&lt;li&gt;Aplicaciones: abrir apps, cambiar pantalla&lt;/li&gt;
&lt;li&gt;Permisos: solicitar acceso a apps, listar aplicaciones autorizadas&lt;/li&gt;
&lt;li&gt;Portapapeles: leer y escribir contenido&lt;/li&gt;
&lt;li&gt;Otros: esperar, operaciones por lote&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su flujo es un ciclo de &amp;ldquo;captura - análisis - acción&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El modelo recibe la solicitud del usuario.&lt;/li&gt;
&lt;li&gt;Llama a &lt;code&gt;screenshot&lt;/code&gt; para capturar la pantalla.&lt;/li&gt;
&lt;li&gt;El modelo usa visión para identificar botones, campos y coordenadas.&lt;/li&gt;
&lt;li&gt;Llama a herramientas de clic, escritura u operación de apps.&lt;/li&gt;
&lt;li&gt;Vuelve a capturar pantalla para confirmar el resultado y continúa.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Según la documentación, la plataforma con soporte completo es principalmente macOS, tanto Apple Silicon como Intel. Windows / Linux son teóricamente posibles, pero las partes de gestión de aplicaciones basadas en &lt;code&gt;pyobjc&lt;/code&gt; deben reemplazarse por soluciones de cada plataforma, y hoy no están completamente adaptadas.&lt;/p&gt;
&lt;p&gt;Los requisitos de ejecución incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Bun &amp;gt;= 1.1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Python &amp;gt;= 3.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;permiso de Accessibility en macOS&lt;/li&gt;
&lt;li&gt;permiso de Screen Recording en macOS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta función es potente, pero también aumenta el riesgo de permisos. Al dejar que la IA opere apps de escritorio, conviene autorizar solo las aplicaciones realmente necesarias y no dejar contenido sensible abierto en ventanas no relacionadas.&lt;/p&gt;
&lt;h2 id=&#34;varios-modelos-mediante-una-capa-compatible-con-anthropic&#34;&gt;Varios modelos mediante una capa compatible con Anthropic
&lt;/h2&gt;&lt;p&gt;La comunicación base de &lt;code&gt;cc-haha&lt;/code&gt; sigue siendo el protocolo Anthropic Messages API. La documentación recomienda usar LiteLLM como proxy de conversión de protocolo.&lt;/p&gt;
&lt;p&gt;La estructura básica es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-code-haha ──Anthropic协议──▶ LiteLLM Proxy ──OpenAI协议──▶ 目标模型 API
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Es decir, &lt;code&gt;cc-haha&lt;/code&gt; envía solicitudes Anthropic Messages API, LiteLLM las convierte a formatos como OpenAI Chat Completions y las reenvía a OpenAI, DeepSeek, Ollama u otros servicios de modelos.&lt;/p&gt;
&lt;p&gt;La instalación de LiteLLM indicada en la documentación es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &lt;span class=&#34;s1&#34;&gt;&amp;#39;litellm[proxy]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después se pueden configurar OpenAI, DeepSeek, Ollama y otros modelos en &lt;code&gt;litellm_config.yaml&lt;/code&gt;. Una vez iniciado el proxy, se configuran estas variables en &lt;code&gt;.env&lt;/code&gt; o &lt;code&gt;~/.claude/settings.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sk-anything
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://localhost:4000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_SONNET_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_HAIKU_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ANTHROPIC_DEFAULT_OPUS_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-4o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_TIMEOUT_MS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DISABLE_TELEMETRY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Hay varios detalles prácticos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;drop_params: true&lt;/code&gt; es importante, porque parámetros de Anthropic como &lt;code&gt;thinking&lt;/code&gt; o &lt;code&gt;cache_control&lt;/code&gt; no existen en la API de OpenAI.&lt;/li&gt;
&lt;li&gt;Extended Thinking es una función propia de Anthropic y no está disponible con modelos de terceros.&lt;/li&gt;
&lt;li&gt;Prompt Caching tampoco funciona en la forma nativa de Anthropic.&lt;/li&gt;
&lt;li&gt;Los tool calls pasan de Anthropic &lt;code&gt;tool_use&lt;/code&gt; a OpenAI function calling, así que algunos tool calls complejos pueden tener problemas de compatibilidad.&lt;/li&gt;
&lt;li&gt;Modelos locales pequeños en Ollama pueden no manejar de forma estable este flujo intensivo en herramientas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Así que conectar varios modelos puede funcionar, pero no significa que todos ofrezcan la misma experiencia. &lt;code&gt;cc-haha&lt;/code&gt; sigue exigiendo al modelo buena capacidad de tool use, comprensión de código y contexto largo.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-tiene-sentido&#34;&gt;Para quién tiene sentido
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;cc-haha&lt;/code&gt; encaja mejor con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usuarios que ya conocen Claude Code y quieren gestión de sesiones en escritorio.&lt;/li&gt;
&lt;li&gt;Personas que trabajan con varios repositorios, ramas y sesiones de IA al mismo tiempo.&lt;/li&gt;
&lt;li&gt;Quienes quieren ver cambios de archivos, diffs y estado del workspace en un panel lateral.&lt;/li&gt;
&lt;li&gt;Usuarios que quieren probar Computer Use y dejar que un Agent opere apps de escritorio.&lt;/li&gt;
&lt;li&gt;Personas que quieren conectar OpenAI, DeepSeek, Ollama u otros modelos mediante un protocolo compatible con Anthropic.&lt;/li&gt;
&lt;li&gt;Usuarios que necesitan ver sesiones o aprobar permisos desde móvil o IM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Encaja peor con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usuarios que solo quieren la experiencia oficial y estable de Claude Code.&lt;/li&gt;
&lt;li&gt;Personas que no aceptan el origen en código filtrado y la incertidumbre de copyright.&lt;/li&gt;
&lt;li&gt;Usuarios que no quieren conceder permisos altos del sistema a herramientas locales.&lt;/li&gt;
&lt;li&gt;Equipos que necesitan cumplimiento empresarial, auditoría y soporte oficial.&lt;/li&gt;
&lt;li&gt;Personas que no están cómodas con API keys, proxies, compatibilidad de modelos y servicios locales.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;riesgos-y-límites&#34;&gt;Riesgos y límites
&lt;/h2&gt;&lt;p&gt;Este artículo no puede hablar solo de funciones; también debe hablar de riesgos.&lt;/p&gt;
&lt;p&gt;El origen de &lt;code&gt;cc-haha&lt;/code&gt; hace que no sea una reimplementación comunitaria normal. El README indica claramente que está basado en código fuente filtrado de Claude Code, y que el código original pertenece a Anthropic. Eso crea incertidumbre de copyright, cumplimiento y mantenimiento a largo plazo.&lt;/p&gt;
&lt;p&gt;Además, Computer Use, acceso remoto H5, integración IM y aprobación local de permisos son capacidades de alto privilegio. Cuanto más cómodas son, más claros deben ser sus límites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No abrir H5 access en redes no confiables.&lt;/li&gt;
&lt;li&gt;No tratar el token como una credencial pública de login a largo plazo.&lt;/li&gt;
&lt;li&gt;No permitir que el Agent opere aplicaciones sensibles no relacionadas.&lt;/li&gt;
&lt;li&gt;No integrarlo casualmente en producción o entornos corporativos regulados.&lt;/li&gt;
&lt;li&gt;No exponer configuración de proxies de modelos ni API keys en repositorios públicos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si el objetivo es estudiar arquitectura de herramientas de programación con IA, flujos de escritorio e implementación de Computer Use, es una referencia útil. Si se quiere usar en un flujo de producción a largo plazo, hay que evaluar primero riesgos legales, de permisos, seguridad y mantenimiento.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Lo más interesante de &lt;code&gt;cc-haha&lt;/code&gt; no es si puede replicar Claude Code, sino que empuja las herramientas de programación con IA tipo Claude Code hacia una forma de banco de trabajo de escritorio.&lt;/p&gt;
&lt;p&gt;Sesiones, proyectos, Worktree, diffs, permisos, acceso remoto, Computer Use, proveedores de modelos, tareas programadas y estadísticas de tokens se reúnen en una sola experiencia de escritorio. Esto muestra que el siguiente paso de las herramientas de programación con IA no es solo tener modelos más fuertes, sino también interfaces de flujo de trabajo más completas.&lt;/p&gt;
&lt;p&gt;Pero sus límites también son claros: no es un producto oficial de Anthropic, tiene un origen sensible y sus funciones de alto permiso requieren cuidado. La actitud más razonable es verlo como un proyecto para observar la evolución de las herramientas de programación con IA, no como un reemplazo despreocupado de Claude Code oficial.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Repositorio de GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Último release: &lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/releases/tag/v0.2.6&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/releases/tag/v0.2.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentación de Computer Use: &lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/blob/main/docs/computer-use.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/blob/main/docs/computer-use.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentación de modelos de terceros: &lt;a class=&#34;link&#34; href=&#34;https://github.com/NanmiCoder/cc-haha/blob/main/docs/guide/third-party-models.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/NanmiCoder/cc-haha/blob/main/docs/guide/third-party-models.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Codex /goal vs Claude Code /goal: ejecutar tareas largas hasta terminarlas</title>
        <link>https://knightli.com/es/2026/05/14/codex-goal-vs-claude-code-goal/</link>
        <pubDate>Thu, 14 May 2026 22:25:31 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/14/codex-goal-vs-claude-code-goal/</guid>
        <description>&lt;p&gt;&lt;code&gt;/goal&lt;/code&gt; se está convirtiendo en un comando importante dentro de las herramientas de programación con IA.&lt;/p&gt;
&lt;p&gt;No se trata de hacer que el modelo escriba unas cuantas líneas más de código. Resuelve un problema más práctico: cuando una tarea tiene condiciones claras de finalización, ¿puede el Agent seguir avanzando hasta cumplirlas, en lugar de detenerse después de cada turno y esperar a que el usuario escriba &amp;ldquo;continúa&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;Codex CLI ya añadió un &lt;code&gt;/goal&lt;/code&gt; experimental en su documentación oficial. Claude Code también publicó su propia documentación de &lt;code&gt;/goal&lt;/code&gt;, y lo describe como una capacidad de automatización que puede seguir trabajando durante varios turnos. El nombre es el mismo, pero la orientación del producto no es exactamente igual.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve-goal&#34;&gt;Qué problema resuelve &lt;code&gt;/goal&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;Una conversación normal de programación con IA suele funcionar turno por turno:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El usuario plantea una tarea.&lt;/li&gt;
&lt;li&gt;El Agent analiza, modifica código y ejecuta pruebas.&lt;/li&gt;
&lt;li&gt;El Agent informa el resultado.&lt;/li&gt;
&lt;li&gt;El usuario decide el siguiente paso.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ese flujo funciona bien para tareas cortas. Pero cuando se trata de migraciones, refactors, correcciones de pruebas o limpieza de un issue backlog, se vuelve fragmentado. El Agent puede avanzar solo un poco y luego detenerse hasta que escribas &amp;ldquo;continúa&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;La idea de &lt;code&gt;/goal&lt;/code&gt; es cambiar la pregunta de &amp;ldquo;qué hago ahora&amp;rdquo; a &amp;ldquo;qué estado final cuenta como terminado&amp;rdquo;. Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 完成登录模块迁移，所有 auth 测试通过，lint 无报错
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este tipo de objetivo encaja de forma natural con tareas largas, porque tiene un punto final claro: las pruebas pasan, la compilación funciona, los archivos se han dividido, una cola queda vacía o se cumplen los criterios de aceptación.&lt;/p&gt;
&lt;h2 id=&#34;goal-en-codex-experimental-y-ligado-al-hilo-actual&#34;&gt;&lt;code&gt;/goal&lt;/code&gt; en Codex: experimental y ligado al hilo actual
&lt;/h2&gt;&lt;p&gt;La documentación de Codex CLI de OpenAI marca &lt;code&gt;/goal&lt;/code&gt; como experimental. No es una capacidad estable activada por defecto; primero hay que habilitar &lt;code&gt;features.goals&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Hay dos formas de hacerlo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/experimental
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O añadir esto a &lt;code&gt;config.toml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;goals&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Una vez habilitado, se puede usar así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal Finish the migration and keep tests green
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los comandos habituales incluyen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal pause
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal resume
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Según la documentación de OpenAI, Codex adjunta el goal al active thread actual y sigue ese objetivo mientras avanza una tarea más grande.&lt;/p&gt;
&lt;p&gt;Aquí hay un detalle importante: el lenguaje oficial sobre Codex &lt;code&gt;/goal&lt;/code&gt; es prudente. Enfatiza configurar un objetivo experimental para trabajo de larga duración y adjuntar ese objetivo al hilo actual, pero no describe con el mismo detalle que la documentación de Claude Code un evaluator independiente que revise cada turno y arranque automáticamente el siguiente. Por eso, de momento conviene tratar Codex &lt;code&gt;/goal&lt;/code&gt; como un mecanismo experimental para objetivos de tareas largas, no como un modo de ejecución desatendida plenamente estable.&lt;/p&gt;
&lt;h2 id=&#34;goal-en-claude-code-ejecución-por-varias-rondas-guiada-por-condiciones-de-finalización&#34;&gt;&lt;code&gt;/goal&lt;/code&gt; en Claude Code: ejecución por varias rondas guiada por condiciones de finalización
&lt;/h2&gt;&lt;p&gt;La documentación de &lt;code&gt;/goal&lt;/code&gt; en Claude Code es más explícita: después de que el usuario define una completion condition, Claude sigue trabajando entre turnos hasta cumplirla.&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal all tests in test/auth pass and the lint step is clean
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El mecanismo de Claude Code, a grandes rasgos, es este:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuando termina el turno actual, el control no vuelve inmediatamente al usuario.&lt;/li&gt;
&lt;li&gt;Un modelo pequeño y rápido revisa si la condición del objetivo ya se cumplió.&lt;/li&gt;
&lt;li&gt;Si no se cumplió, Claude empieza automáticamente el siguiente turno.&lt;/li&gt;
&lt;li&gt;Si se cumplió, el goal se borra automáticamente y el estado de finalización queda registrado en el transcript.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto hace que &lt;code&gt;/goal&lt;/code&gt; en Claude Code se parezca más a &amp;ldquo;continuar automáticamente hasta satisfacer la condición de finalización&amp;rdquo;. No solo fija un objetivo en la conversación; delega en un paso de evaluación independiente la decisión de si debe continuar.&lt;/p&gt;
&lt;p&gt;Claude Code también permite ver el estado directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El estado muestra la condición del objetivo, el tiempo transcurrido, la cantidad de turnos evaluados, el consumo de tokens y la razón más reciente del evaluator.&lt;/p&gt;
&lt;p&gt;Para detenerlo antes de tiempo, se puede usar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;stop&lt;/code&gt;, &lt;code&gt;off&lt;/code&gt;, &lt;code&gt;reset&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt; y &lt;code&gt;cancel&lt;/code&gt; también funcionan como alias de limpieza. Después de activar un objetivo, si la sesión se interrumpe y más tarde se reanuda con &lt;code&gt;--resume&lt;/code&gt; o &lt;code&gt;--continue&lt;/code&gt;, un goal activo puede recuperarse. Sin embargo, el tiempo, el número de turnos y la línea base de tokens se recalculan.&lt;/p&gt;
&lt;h2 id=&#34;la-diferencia-principal&#34;&gt;La diferencia principal
&lt;/h2&gt;&lt;p&gt;Codex y Claude Code están empujando la programación con IA desde respuestas de un solo turno hacia la ejecución de tareas largas, pero la posición de &lt;code&gt;/goal&lt;/code&gt; no es la misma.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Comparación&lt;/th&gt;
          &lt;th&gt;Codex CLI &lt;code&gt;/goal&lt;/code&gt;&lt;/th&gt;
          &lt;th&gt;Claude Code &lt;code&gt;/goal&lt;/code&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Estado&lt;/td&gt;
          &lt;td&gt;experimental&lt;/td&gt;
          &lt;td&gt;documentado en una página oficial dedicada&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Activación&lt;/td&gt;
          &lt;td&gt;requiere &lt;code&gt;features.goals&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;usable directamente en un workspace confiable&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Alcance del objetivo&lt;/td&gt;
          &lt;td&gt;active thread actual&lt;/td&gt;
          &lt;td&gt;session actual&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Operaciones habituales&lt;/td&gt;
          &lt;td&gt;set / view / pause / resume / clear&lt;/td&gt;
          &lt;td&gt;set / view / clear&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Evaluación automática&lt;/td&gt;
          &lt;td&gt;la documentación enfatiza adjuntar y seguir el objetivo&lt;/td&gt;
          &lt;td&gt;la documentación describe checks del evaluator después de cada turno&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Continuación automática&lt;/td&gt;
          &lt;td&gt;el lenguaje oficial es prudente&lt;/td&gt;
          &lt;td&gt;empieza el siguiente turno automáticamente si las condiciones no se cumplen&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Mejor caso de uso&lt;/td&gt;
          &lt;td&gt;mantener un objetivo de largo plazo en una tarea de Codex&lt;/td&gt;
          &lt;td&gt;dejar que Claude Code avance según condiciones de finalización&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En resumen, &lt;code&gt;/goal&lt;/code&gt; en Codex se parece más a &amp;ldquo;adjuntar un objetivo experimental de largo plazo al hilo actual&amp;rdquo;. &lt;code&gt;/goal&lt;/code&gt; en Claude Code se parece más a &amp;ldquo;definir una condición verificable de parada para la sesión actual y dejar que siga trabajando hasta satisfacerla&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;cómo-escribir-un-buen-goal&#34;&gt;Cómo escribir un buen &lt;code&gt;/goal&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;Uses la herramienta que uses, &lt;code&gt;/goal&lt;/code&gt; no es un buen lugar para deseos vagos.&lt;/p&gt;
&lt;p&gt;Un mal ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 把项目优化一下
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un mejor ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 将 payment 模块迁移到新 API，npm test -- payment 退出码为 0，git diff 只包含 payment 相关文件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un buen objetivo suele incluir tres cosas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Un estado final claro.&lt;/li&gt;
&lt;li&gt;Un método de validación ejecutable.&lt;/li&gt;
&lt;li&gt;Límites que deben respetarse.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si el objetivo es grande, conviene añadir una condición de parada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/goal 修复 eslint 报错，npm run lint 退出码为 0；如果超过 20 轮仍未完成，停止并总结剩余问题
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto importa. Cuanto más potente sea &lt;code&gt;/goal&lt;/code&gt;, más necesita límites. Si no, el Agent puede modificar demasiados archivos, ejecutarse durante demasiado tiempo, consumir demasiados tokens o seguir adelante con una cuestión que debería haberse detenido para pedir criterio humano.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-conviene-usar-goal&#34;&gt;Cuándo conviene usar &lt;code&gt;/goal&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;Encaja bien con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Corrección de pruebas: hasta que pasen pruebas específicas.&lt;/li&gt;
&lt;li&gt;Migraciones de código: hasta que todos los puntos de llamada estén actualizados y la compilación funcione.&lt;/li&gt;
&lt;li&gt;Limpieza por lotes: hasta eliminar una clase de errores de lint o tipos.&lt;/li&gt;
&lt;li&gt;Documentación: hasta que todos los módulos especificados tengan explicación.&lt;/li&gt;
&lt;li&gt;Gestión de issues: hasta que todos los issues bajo una etiqueta estén tratados o clasificados con claridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No encaja bien con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requisitos que todavía no están claros.&lt;/li&gt;
&lt;li&gt;Tareas que requieren juicio de producto frecuente.&lt;/li&gt;
&lt;li&gt;Eliminaciones de alto riesgo, migraciones de datos o cambios de permisos.&lt;/li&gt;
&lt;li&gt;Criterios de aceptación puramente subjetivos.&lt;/li&gt;
&lt;li&gt;Tareas que cruzan muchos módulos no relacionados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una regla práctica: si puedes escribir &amp;ldquo;qué comando ejecutar, qué resultado esperar y qué archivos no se deben tocar&amp;rdquo;, es buen candidato para &lt;code&gt;/goal&lt;/code&gt;. Si solo puedes escribir &amp;ldquo;hazlo mejor&amp;rdquo;, sigue siendo más seguro usar conversación normal, plan mode o revisión humana.&lt;/p&gt;
&lt;h2 id=&#34;qué-significa-esto-para-las-herramientas-de-programación-con-ia&#34;&gt;Qué significa esto para las herramientas de programación con IA
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;/goal&lt;/code&gt; apunta a una dirección clara: las herramientas de programación con IA están pasando de asistentes interactivos a unidades de trabajo que pueden ejecutarse de forma continua.&lt;/p&gt;
&lt;p&gt;Antes, usar un Agent solía implicar quedarse cerca. Si se atascaba, lo guiabas. Si terminaba las pruebas, le decías que continuara. Si aparecía un error, dabas otra orden. &lt;code&gt;/goal&lt;/code&gt; comprime esa interacción en una condición de finalización y deja que el Agent decida qué debe hacer el siguiente turno.&lt;/p&gt;
&lt;p&gt;Pero esto también sube el listón para los usuarios. Escribir prompts ya no consiste solo en describir una tarea; también implica definir criterios de aceptación, comandos de validación, límites de modificación y reglas de parada. Dicho de otro modo, el trabajo del usuario pasa de &amp;ldquo;pedirle que continúe&amp;rdquo; a &amp;ldquo;definir qué significa terminado&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Que Codex y Claude Code hayan llegado a &lt;code&gt;/goal&lt;/code&gt; muestra que los Agents de tareas largas ya no pertenecen solo a tareas en segundo plano o colas en la nube. Las herramientas locales de programación en terminal también empiezan a necesitar una capacidad más fuerte de avance autónomo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Codex CLI y Claude Code tienen &lt;code&gt;/goal&lt;/code&gt;, pero por ahora no conviene tratarlos como la misma función.&lt;/p&gt;
&lt;p&gt;El &lt;code&gt;/goal&lt;/code&gt; de Codex sigue siendo experimental, requiere &lt;code&gt;features.goals&lt;/code&gt; y encaja mejor como una forma de mantener un objetivo de largo plazo en el hilo actual de Codex. El &lt;code&gt;/goal&lt;/code&gt; de Claude Code conecta de forma más explícita las condiciones de finalización con la continuación automática, usando un evaluator independiente para decidir si debe seguir.&lt;/p&gt;
&lt;p&gt;Para el desarrollo diario, este tipo de comando funciona mejor en tareas de ingeniería con criterios de aceptación claros. No reemplaza el juicio de producto ni la revisión de código, pero puede reducir mucho el ciclo repetitivo de &amp;ldquo;continúa&amp;rdquo;, &amp;ldquo;ejecútalo otra vez&amp;rdquo; y &amp;ldquo;corrige hasta que pasen las pruebas&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;La habilidad importante no es memorizar el comando, sino aprender a escribir tareas como objetivos claros, verificables y detenibles.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenAI Codex CLI Slash Commands: &lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/codex/cli/slash-commands&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://developers.openai.com/codex/cli/slash-commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentación de Claude Code Goal: &lt;a class=&#34;link&#34; href=&#34;https://code.claude.com/docs/en/goal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://code.claude.com/docs/en/goal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>¿Cómo conectar Codex con modelos chinos? APIs compatibles con OpenAI y el enfoque de CodexBridge</title>
        <link>https://knightli.com/es/2026/05/13/codexbridge-openai-compatible-api/</link>
        <pubDate>Wed, 13 May 2026 23:08:28 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/13/codexbridge-openai-compatible-api/</guid>
        <description>&lt;p&gt;CodexBridge es una herramienta local de puente cuyo objetivo es claro: exponer Codex CLI/SDK como un servicio HTTP compatible con OpenAI. Así, Codex deja de estar limitado al terminal y puede ser llamado desde OpenWebUI, Cherry Studio, scripts, sistemas de automatización o cualquier cliente compatible con OpenAI Chat Completions.&lt;/p&gt;
&lt;p&gt;Sus endpoints principales son &lt;code&gt;/v1/chat/completions&lt;/code&gt; y &lt;code&gt;/v1/models&lt;/code&gt;. El primero gestiona conversaciones y admite respuestas normales y transmisión SSE. El segundo permite a los clientes descubrir modelos como si leyeran una lista de modelos estilo OpenAI. Para herramientas que ya soportan OpenAI API, normalmente basta con cambiar el base URL, la API key y el nombre del modelo.&lt;/p&gt;
&lt;p&gt;Proyecto: &lt;a class=&#34;link&#34; href=&#34;https://github.com/begonia599/CodexBridge&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/begonia599/CodexBridge&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;cuándo-usarlo&#34;&gt;Cuándo usarlo
&lt;/h2&gt;&lt;p&gt;CodexBridge encaja cuando quieres integrar Codex en clientes o flujos de trabajo existentes. Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Seleccionar Codex directamente en OpenWebUI o Cherry Studio.&lt;/li&gt;
&lt;li&gt;Llamar a Codex local desde &lt;code&gt;curl&lt;/code&gt;, Python, Node.js u otros scripts.&lt;/li&gt;
&lt;li&gt;Conectar un mismo frontend a OpenAI, Ollama, otras APIs compatibles y Codex.&lt;/li&gt;
&lt;li&gt;Conservar los hilos locales, sandbox, directorio de trabajo y aprobaciones de Codex.&lt;/li&gt;
&lt;li&gt;Ofrecer a herramientas internas una entrada unificada &lt;code&gt;/v1/chat/completions&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es un nuevo LLM ni un reemplazo completo de Codex CLI. Es más bien una capa adaptadora: Codex sigue siendo el motor aguas arriba, y el puente convierte solicitudes estilo OpenAI en entradas de conversación que Codex entiende.&lt;/p&gt;
&lt;h2 id=&#34;requisitos-básicos&#34;&gt;Requisitos básicos
&lt;/h2&gt;&lt;p&gt;Antes de ejecutarlo necesitas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 18 o superior.&lt;/li&gt;
&lt;li&gt;Codex CLI instalado y con sesión iniciada.&lt;/li&gt;
&lt;li&gt;npm, o pnpm / yarn si lo prefieres.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Despliegue básico desde código fuente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/begonia599/CodexBridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; codexbridge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env .env.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego edita &lt;code&gt;.env&lt;/code&gt; o &lt;code&gt;.env.local&lt;/code&gt; para definir la API key, modelo predeterminado, directorio de trabajo, modo sandbox, acceso de red y otras opciones.&lt;/p&gt;
&lt;p&gt;Inicia el servicio HTTP:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run codex:server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El puerto predeterminado es &lt;code&gt;8080&lt;/code&gt;, configurable con &lt;code&gt;PORT&lt;/code&gt;. Tras iniciar, el servicio expone:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET /health
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;POST /v1/chat/completions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET /v1/models
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;modo-de-conversación-cli&#34;&gt;Modo de conversación CLI
&lt;/h2&gt;&lt;p&gt;Además del servicio HTTP, CodexBridge conserva una CLI ligera:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run codex:chat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Desde la CLI puedes escribir mensajes en lenguaje natural para conversar con Codex. Dos comandos útiles son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/reset&lt;/code&gt;: crear un nuevo hilo de Codex.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/exit&lt;/code&gt;: salir de la CLI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El ID del hilo actual se guarda en &lt;code&gt;.codex_thread.json&lt;/code&gt;. Si este archivo sigue existiendo al iniciar la CLI de nuevo, puedes continuar la conversación anterior.&lt;/p&gt;
&lt;h2 id=&#34;ejemplo-http&#34;&gt;Ejemplo HTTP
&lt;/h2&gt;&lt;p&gt;Una solicitud mínima:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://localhost:8080/v1/chat/completions &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;content-type: application/json&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;authorization: Bearer 123321&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;gpt-5-codex:medium&amp;#34;,&amp;#34;session_id&amp;#34;:&amp;#34;demo&amp;#34;,&amp;#34;messages&amp;#34;:[{&amp;#34;role&amp;#34;:&amp;#34;user&amp;#34;,&amp;#34;content&amp;#34;:&amp;#34;ls&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puntos importantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El token de &lt;code&gt;authorization&lt;/code&gt; debe coincidir con &lt;code&gt;CODEX_BRIDGE_API_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model&lt;/code&gt; puede incluir nivel de razonamiento, por ejemplo &lt;code&gt;gpt-5-codex:medium&lt;/code&gt; o &lt;code&gt;gpt-5-codex:high&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt; vincula la solicitud a una conversación y permite reutilizar el mismo hilo de Codex.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para salida en streaming, añade &lt;code&gt;stream: true&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -N http://localhost:8080/v1/chat/completions &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;content-type: application/json&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;authorization: Bearer 123321&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;model&amp;#34;:&amp;#34;gpt-5-codex:high&amp;#34;,&amp;#34;session_id&amp;#34;:&amp;#34;stream&amp;#34;,&amp;#34;stream&amp;#34;:true,&amp;#34;messages&amp;#34;:[{&amp;#34;role&amp;#34;:&amp;#34;user&amp;#34;,&amp;#34;content&amp;#34;:&amp;#34;Explica paso a paso cómo crear un proyecto Node.js&amp;#34;}]}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para clientes que soportan respuestas en streaming de OpenAI, esta forma se siente más cercana a una conversación normal.&lt;/p&gt;
&lt;h2 id=&#34;persistencia-de-sesiones&#34;&gt;Persistencia de sesiones
&lt;/h2&gt;&lt;p&gt;Una función importante de CodexBridge es el mapeo de sesiones. La solicitud puede pasar un ID de sesión mediante estos campos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conversation_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;thread_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;user&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También puede pasarse por cabeceras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;x-session-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;session-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-conversation-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-thread-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x-user-id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En producción conviene activar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_REQUIRE_SESSION_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Así todas las solicitudes deben incluir un ID de sesión, evitando que distintos usuarios o ventanas de chat se mezclen en el mismo contexto temporal. El mapeo del puente se guarda en &lt;code&gt;.codex_threads.json&lt;/code&gt;. Borrar este archivo restablece la relación del puente; los hilos propios de Codex siguen en &lt;code&gt;~/.codex/sessions&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si &lt;code&gt;CODEX_REQUIRE_SESSION_ID=false&lt;/code&gt; y la solicitud no incluye ID de sesión, el puente expande los &lt;code&gt;messages&lt;/code&gt; actuales como una entrada de un solo uso para Codex. Sirve para llamadas temporales, pero no para conversaciones largas.&lt;/p&gt;
&lt;h2 id=&#34;entrada-multimodal&#34;&gt;Entrada multimodal
&lt;/h2&gt;&lt;p&gt;CodexBridge admite bloques de contenido estilo OpenAI y convierte imágenes en entradas &lt;code&gt;local_image&lt;/code&gt; utilizables por Codex.&lt;/p&gt;
&lt;p&gt;Imagen remota:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;image_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://example.com/demo.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Imagen local:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;local_image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./images/demo.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los recursos remotos se descargan primero en un directorio temporal y se limpian al final del turno. En uso real, presta atención al tamaño del cuerpo de la solicitud, especialmente cuando envías imágenes en base64. Puede que necesites aumentar &lt;code&gt;CODEX_JSON_LIMIT&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;salida-estructurada&#34;&gt;Salida estructurada
&lt;/h2&gt;&lt;p&gt;Si el cliente soporta &lt;code&gt;response_format&lt;/code&gt;, CodexBridge puede mapearlo al &lt;code&gt;outputSchema&lt;/code&gt; de Codex. Es útil cuando quieres que Codex devuelva una estructura JSON fija, como resultados de revisión, resúmenes, clasificación o informes de automatización.&lt;/p&gt;
&lt;p&gt;Ejemplo mínimo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gpt-5-codex&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;session_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;response_format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;json_schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;json_schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint_report&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;object&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;properties&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;enum&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ok&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;action_required&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;required&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;additionalProperties&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;messages&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Revisa los problemas de lint en src/ y devuelve el resultado como JSON&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;type: &amp;quot;json_schema&amp;quot;&lt;/code&gt; debe incluir &lt;code&gt;schema&lt;/code&gt;; de lo contrario, el servicio devuelve 400.&lt;/p&gt;
&lt;h2 id=&#34;variables-de-entorno-clave&#34;&gt;Variables de entorno clave
&lt;/h2&gt;&lt;p&gt;La configuración común puede agruparse así.&lt;/p&gt;
&lt;p&gt;Servicio y autenticación:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_BRIDGE_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123321&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_JSON_LIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;10mb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Modelo predeterminado:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_MODEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gpt-5-codex
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_REASONING&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;medium
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Entorno de ejecución de Codex:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_WORKDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SANDBOX_MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;read-only
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_APPROVAL_POLICY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;never
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SKIP_GIT_CHECK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Acceso de red:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_NETWORK_ACCESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_WEB_SEARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si solo lo usas para chat desde un frontend, es más seguro mantener la red desactivada por defecto. Activa estas opciones solo cuando Codex necesite ejecutar &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;git clone&lt;/code&gt; o búsqueda web.&lt;/p&gt;
&lt;h2 id=&#34;docker-y-scripts-de-instalación&#34;&gt;Docker y scripts de instalación
&lt;/h2&gt;&lt;p&gt;El proyecto también ofrece despliegue con Docker para mantener el servicio en ejecución:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs -f codexbridge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;También hay un script de instalación para Linux:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/begonia599/CodexBridge/master/scripts/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El script instala dependencias, clona o actualiza el repositorio, copia &lt;code&gt;.env.example&lt;/code&gt; e inicia el servicio con Docker Compose. Requiere &lt;code&gt;sudo&lt;/code&gt;, por lo que encaja mejor en un servidor limpio. Si la máquina ya tiene un entorno complejo de Node.js, Docker o Codex, revisa el script antes de ejecutarlo.&lt;/p&gt;
&lt;h2 id=&#34;problemas-comunes&#34;&gt;Problemas comunes
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;La solicitud devuelve 413&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Normalmente el cuerpo es demasiado grande, a menudo por imágenes base64. Aumenta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_JSON_LIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20mb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;La API key no es válida&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Comprueba que la cabecera incluya:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authorization: Bearer &amp;lt;tu CODEX_BRIDGE_API_KEY&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;o usa &lt;code&gt;x-api-key&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex informa una restricción de repositorio Git&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si el directorio de ejecución no es un repositorio confiable, Codex puede activar una verificación. Úsalo solo en entornos seguros:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CODEX_SKIP_GIT_CHECK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Restablecer conversaciones&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El mapeo del puente está en &lt;code&gt;.codex_threads.json&lt;/code&gt;, y los hilos propios de Codex están en &lt;code&gt;~/.codex/sessions&lt;/code&gt;. Detén el servicio y borra los archivos o directorios correspondientes para restablecerlos.&lt;/p&gt;
&lt;h2 id=&#34;recomendaciones&#34;&gt;Recomendaciones
&lt;/h2&gt;&lt;p&gt;Para pruebas locales, empieza con la API key predeterminada y el sandbox &lt;code&gt;read-only&lt;/code&gt;. Cuando OpenWebUI, Cherry Studio o tus scripts llamen al servicio correctamente, ajusta gradualmente &lt;code&gt;CODEX_WORKDIR&lt;/code&gt;, &lt;code&gt;CODEX_SANDBOX_MODE&lt;/code&gt;, &lt;code&gt;CODEX_NETWORK_ACCESS&lt;/code&gt; y &lt;code&gt;CODEX_APPROVAL_POLICY&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si lo usarán varias personas, al menos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exige &lt;code&gt;session_id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cambia la API key predeterminada.&lt;/li&gt;
&lt;li&gt;Limita claramente el directorio de trabajo y los permisos del sandbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El valor de CodexBridge no está en tener muchas funciones, sino en colocar Codex dentro del ecosistema compatible con OpenAI. Si un cliente permite cambiar el base URL, puede tratar Codex como un modelo de chat normal y conservar al mismo tiempo sus hilos locales, sandbox y llamadas a herramientas.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Por qué DeepSeek se volvió la clave para ahorrar en esta ola de herramientas de AI Coding</title>
        <link>https://knightli.com/es/2026/05/11/deepseek-ai-coding-cost-saving/</link>
        <pubDate>Mon, 11 May 2026 04:59:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/11/deepseek-ai-coding-cost-saving/</guid>
        <description>&lt;p&gt;En esta ola de herramientas de AI Coding, la competencia parece girar en torno a capacidad del modelo, ecosistema de plugins y automatización con agentes. Pero cuando se usan de verdad, el primer muro que aparece es el coste.&lt;/p&gt;
&lt;p&gt;Claude Code, Codex, OpenClaw y Superpowers son herramientas muy útiles, pero comparten una característica: cuando una tarea se vuelve compleja, consumen muchísimos tokens. Tienen que leer el proyecto, crear planes, llamar herramientas, resumir contexto, revisar resultados una y otra vez, e incluso lanzar subtareas. Cuanto más inteligente es el modelo y más automatizado es el workflow, más fácil es que la factura crezca en silencio.&lt;/p&gt;
&lt;p&gt;Por eso DeepSeek se volvió importante en esta ronda. No solo porque pueda escribir código, sino porque su contexto largo y su coste de caché atacan justo la parte más cara de las herramientas de AI Coding.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-las-herramientas-agent-consumen-tantos-tokens&#34;&gt;Por qué las herramientas agent consumen tantos tokens
&lt;/h2&gt;&lt;p&gt;Los asistentes de programación tradicionales en modo chat suelen funcionar con preguntas y respuestas. Preguntas cómo escribir una función y el modelo responde con un fragmento de código. Ese modo también consume tokens, pero sigue siendo relativamente controlable.&lt;/p&gt;
&lt;p&gt;Las herramientas agent son distintas. No solo responden preguntas, sino que entran al proyecto como un ingeniero temporal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;escanean directorios y archivos clave;&lt;/li&gt;
&lt;li&gt;entienden el requisito y la arquitectura existente;&lt;/li&gt;
&lt;li&gt;crean un plan;&lt;/li&gt;
&lt;li&gt;modifican archivos;&lt;/li&gt;
&lt;li&gt;ejecutan comandos o tests;&lt;/li&gt;
&lt;li&gt;siguen corrigiendo según los errores;&lt;/li&gt;
&lt;li&gt;resumen al final qué cambió.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Durante este proceso, el modelo lee repetidamente el mismo contexto. Descripciones del proyecto, fragmentos de código, resultados de herramientas, historial de conversación, planes y logs de error vuelven una y otra vez al contexto. Cuando la tarea es un poco compleja, cientos de miles de tokens desaparecen rápido.&lt;/p&gt;
&lt;p&gt;Si además instalas plugins más agresivos, el coste se nota todavía más. Algunas extensiones de OpenCode o Claude Code pueden organizar por defecto todo un equipo de agentes. Tú solo querías cambiar una pequeña función, pero la herramienta puede iniciar planificación, revisión, ejecución y retrospectiva. La tarea parece más “inteligente”, pero los tokens suben sin parar.&lt;/p&gt;
&lt;h2 id=&#34;la-ventaja-de-superpowers-es-activarse-bajo-demanda&#34;&gt;La ventaja de Superpowers es activarse bajo demanda
&lt;/h2&gt;&lt;p&gt;Una ventaja de herramientas como Superpowers es que no fuerzan un flujo agent completo en todas las tareas.&lt;/p&gt;
&lt;p&gt;Normalmente puedes seguir usando Claude Code, OpenCode o Codex de la forma habitual. Solo cuando llamas explícitamente a una skill, como brainstorming, planificación, ejecución de plan o retrospectiva, entra en un flujo de automatización más pesado.&lt;/p&gt;
&lt;p&gt;Esto importa mucho para el coste.&lt;/p&gt;
&lt;p&gt;AI Coding no debería usar artillería pesada para todo. Cambiar una línea de configuración, revisar un error o escribir un script pequeño se puede resolver con una conversación normal. Solo refactors complejos, cambios en varios archivos, procesamiento de documentos largos y validación por varias rondas justifican un flujo agent completo.&lt;/p&gt;
&lt;p&gt;Cuanto más poderosa es la herramienta, más importante es controlar cuándo se activa. Si no, más automatización solo significa más desperdicio.&lt;/p&gt;
&lt;h2 id=&#34;la-ventaja-clave-de-deepseek-es-una-caché-barata&#34;&gt;La ventaja clave de DeepSeek es una caché barata
&lt;/h2&gt;&lt;p&gt;Una razón importante por la que DeepSeek encaja con estas herramientas agent es su bajo coste cuando hay cache hit.&lt;/p&gt;
&lt;p&gt;Las tareas de AI Coding tienen muchos prefijos repetidos: contexto del proyecto, prompts de sistema, instrucciones de herramientas, contenido de archivos y turnos anteriores aparecen muchas veces en solicitudes posteriores. Si el servicio del modelo soporta prompt cache, esas partes repetidas cuestan mucho menos después de un acierto de caché.&lt;/p&gt;
&lt;p&gt;En muchos modelos, un cache hit solo es algo más barato que un miss, quizá alrededor de un tercio del precio original. La ventaja de DeepSeek es que la diferencia después de un hit puede ser mucho mayor. En workflows agent con contexto largo, muchas rondas y lectura repetida del proyecto, esa diferencia se ve directamente en la factura.&lt;/p&gt;
&lt;p&gt;Es decir, DeepSeek no tiene por qué dar la mejor respuesta en cada turno. Pero en escenarios con tareas largas, muchas rondas y lectura repetida de contexto, su estructura de costes encaja especialmente bien con AI Coding.&lt;/p&gt;
&lt;h2 id=&#34;el-contexto-largo-hace-más-útil-a-claude-code&#34;&gt;El contexto largo hace más útil a Claude Code
&lt;/h2&gt;&lt;p&gt;Al conectar Claude Code o herramientas similares a DeepSeek V4, otra ventaja clara es el contexto largo.&lt;/p&gt;
&lt;p&gt;Lo que más temen las herramientas de AI Coding es quedarse sin contexto. Cuando el contexto no alcanza, hay que comprimir con frecuencia. Cuando se comprime mucho, se pueden perder detalles ya leídos. El modelo empieza a olvidar la estructura del proyecto, las restricciones o por qué se modificó cierto archivo, y la calidad baja después.&lt;/p&gt;
&lt;p&gt;La capacidad de contexto largo de DeepSeek V4 lo hace más adecuado para repositorios de código, procesamiento por lotes de documentos, traducción de subtítulos y limpieza de artículos de sitio. Especialmente al conectarlo a Claude Code u OpenClaw, una buena configuración puede retrasar la compresión de contexto y conservar más detalles del proyecto.&lt;/p&gt;
&lt;p&gt;Por eso algunas tareas se sienten “resistentes” con DeepSeek: no necesariamente impresiona en cada paso, pero aguanta llamadas largas, baratas y repetidas.&lt;/p&gt;
&lt;h2 id=&#34;cómo-repartir-trabajo-entre-v4-pro-y-v4-flash&#34;&gt;Cómo repartir trabajo entre V4 Pro y V4 Flash
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 Pro y V4 Flash no deberían usarse sin distinción.&lt;/p&gt;
&lt;p&gt;Para tareas simples, &lt;code&gt;DeepSeek V4 Flash&lt;/code&gt; suele ser mejor. Es rápido, barato y normalmente suficiente para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;traducir subtítulos;&lt;/li&gt;
&lt;li&gt;ordenar documentos;&lt;/li&gt;
&lt;li&gt;generar scripts comunes;&lt;/li&gt;
&lt;li&gt;modificar pequeñas zonas de código;&lt;/li&gt;
&lt;li&gt;ejecutar tareas ligeras en OpenClaw;&lt;/li&gt;
&lt;li&gt;procesar contenido simple de un sitio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para tareas complejas, conviene considerar &lt;code&gt;DeepSeek V4 Pro&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;refactors de gran escala;&lt;/li&gt;
&lt;li&gt;comprensión de código con varios módulos;&lt;/li&gt;
&lt;li&gt;razonamiento complejo;&lt;/li&gt;
&lt;li&gt;tareas agent de cadena larga;&lt;/li&gt;
&lt;li&gt;cambios de código de alto riesgo;&lt;/li&gt;
&lt;li&gt;tareas de ingeniería que requieren planificación más fuerte.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mucha gente quiere conectar siempre el modelo más fuerte, pero eso suele ser poco rentable. La forma práctica de usar herramientas de AI Coding es dividir las tareas por capas: que el modelo barato procese mucho trabajo rutinario, y reservar el modelo caro para los puntos críticos.&lt;/p&gt;
&lt;h2 id=&#34;minimax-doubao-y-deepseek-ocupan-posiciones-distintas&#34;&gt;MiniMax, Doubao y DeepSeek ocupan posiciones distintas
&lt;/h2&gt;&lt;p&gt;Entre modelos y planes chinos, MiniMax, Doubao, Kimi y DeepSeek tienen posiciones diferentes.&lt;/p&gt;
&lt;p&gt;MiniMax destaca por dar mucho volumen, bajo precio y funciones amplias. Quizá no sea el modelo de programación más inteligente, pero sirve muy bien para traducción, limpieza ligera y procesamiento por lotes. Procesar subtítulos, cambiar formatos o hacer revisión simple son buenos casos para planes tipo MiniMax.&lt;/p&gt;
&lt;p&gt;Doubao destaca por un ecosistema de herramientas más completo: imagen, video, búsqueda, TTS, posible STT y embedding pueden conectarse dentro de la misma caja. Se parece más a una caja de herramientas general.&lt;/p&gt;
&lt;p&gt;DeepSeek tiene una posición más clara: texto, código, contexto largo y caché barata. No tiene un ecosistema completo de generación de imagen, voz y video, y sus debilidades son evidentes. Pero en AI Coding y workflows agent de texto largo, sus fortalezas son suficientemente fuertes.&lt;/p&gt;
&lt;p&gt;No se trata de que uno sustituya a otro. Se trata de dividir la tarea y usar cada herramienta donde encaja.&lt;/p&gt;
&lt;h2 id=&#34;ahorrar-no-es-solo-elegir-un-modelo-barato&#34;&gt;Ahorrar no es solo elegir un modelo barato
&lt;/h2&gt;&lt;p&gt;Ahorrar en AI Coding no significa cambiar todas las solicitudes al modelo más barato.&lt;/p&gt;
&lt;p&gt;Las formas realmente efectivas son:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;No iniciar un agent pesado para tareas simples.&lt;/li&gt;
&lt;li&gt;No usar Pro cuando Flash basta.&lt;/li&gt;
&lt;li&gt;Aprovechar la caché en tareas largas.&lt;/li&gt;
&lt;li&gt;Mantener estable el contexto repetido para no romper cache hits con cambios inútiles.&lt;/li&gt;
&lt;li&gt;Dejar que un modelo barato haga borradores y batch processing, y usar un modelo fuerte para revisiones clave.&lt;/li&gt;
&lt;li&gt;Decirle claramente al agent que no repita hechos ni resuma el mismo punto una y otra vez.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El último punto es especialmente importante. Las herramientas de AI tienden a ser verbosas, y la verbosidad no es solo un problema de lectura; también es un problema de coste. Incluir en el prompt “describe cada hecho una sola vez y expresa cada opinión una sola vez” puede mejorar tanto la calidad del texto como el consumo de tokens.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-workflows-de-ai-coding-encaja-deepseek&#34;&gt;Para qué workflows de AI Coding encaja DeepSeek
&lt;/h2&gt;&lt;p&gt;DeepSeek encaja mejor en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lectura de repositorios largos;&lt;/li&gt;
&lt;li&gt;cambios ligeros en varios archivos;&lt;/li&gt;
&lt;li&gt;limpieza de documentos por lotes;&lt;/li&gt;
&lt;li&gt;traducción masiva de subtítulos;&lt;/li&gt;
&lt;li&gt;limpieza de artículos Hugo;&lt;/li&gt;
&lt;li&gt;ejecución de planes agent;&lt;/li&gt;
&lt;li&gt;automatización barata con mucho contexto repetido.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No sirve para todo. Si necesitas gusto frontend especialmente fuerte, juicio de producto complejo o creación multimodal, quizá necesites combinarlo con Claude, GPT, Gemini, Doubao u otras herramientas.&lt;/p&gt;
&lt;p&gt;Pero cuando la tarea es de texto largo, contexto largo, llamadas repetidas y sensibilidad al coste, DeepSeek se vuelve fácilmente la primera opción.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;En esta ola de herramientas de AI Coding, el valor de DeepSeek no es solo que un modelo chino pueda escribir código. Su valor real es resolver el dolor más práctico de las herramientas agent: las tareas largas cuestan demasiado.&lt;/p&gt;
&lt;p&gt;Herramientas como Claude Code, OpenClaw y Superpowers automatizan cada vez más el proceso de desarrollo, pero detrás de esa automatización hay lecturas masivas de contexto y llamadas en múltiples rondas. Quien consiga bajar ese coste puede convertir AI Coding de algo “agradable de vez en cuando” en algo “usable todos los días”.&lt;/p&gt;
&lt;p&gt;El contexto largo de DeepSeek, su bajo coste de caché y el uso por capas de V4 Flash / V4 Pro lo colocan justo en esa posición.&lt;/p&gt;
&lt;p&gt;La verdadera clave de ahorro en esta ronda no es dejar de usar buenos modelos. Es combinar bien modelos buenos, modelos baratos, caché y workflows agent. Cuando entiendes esa factura, las herramientas de AI Coding se convierten en productividad real, no en un juguete bonito pero caro.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo elegir planes de AI Coding: los usuarios ligeros priorizan comodidad, los intensivos necesitan flexibilidad</title>
        <link>https://knightli.com/es/2026/05/10/ai-coding-plan-selection/</link>
        <pubDate>Sun, 10 May 2026 08:20:58 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/10/ai-coding-plan-selection/</guid>
        <description>&lt;p&gt;Los planes de AI Coding han cambiado muy rápido en los últimos seis meses. Muchas herramientas han pasado de un modelo de cobro por mensajes o por uso limitado a uno claramente basado en consumo, los planes baratos y generosos se han ido recortando, y algunos servicios extranjeros han añadido verificaciones de identidad, restricciones regionales y reglas de uso más estrictas.&lt;/p&gt;
&lt;p&gt;Para un desarrollador, la pregunta ya no es solo qué modelo es el más fuerte. También importa cuánto vas a gastar cada mes, si la cuota alcanza, si la herramienta resulta cómoda de usar y si podrás cambiar sin demasiado dolor cuando un proveedor suba precios o cambie las reglas de repente.&lt;/p&gt;
&lt;p&gt;Una conclusión bastante útil es esta: los usuarios ligeros deberían comprar comodidad, los usuarios intermedios deberían comprar relación calidad-precio y los usuarios intensivos deberían comprar flexibilidad. Cuanto más intensivo sea el uso, menos conviene atar el modelo y la herramienta dentro del mismo plan.&lt;/p&gt;
&lt;h2 id=&#34;cuatro-cosas-que-conviene-revisar-antes-de-elegir-un-plan&#34;&gt;Cuatro cosas que conviene revisar antes de elegir un plan
&lt;/h2&gt;&lt;p&gt;Antes, al elegir un plan de AI Coding, normalmente bastaba con mirar tres cosas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si el modelo era lo bastante fuerte.&lt;/li&gt;
&lt;li&gt;Si la velocidad de respuesta era estable.&lt;/li&gt;
&lt;li&gt;Si la cuota incluida alcanzaba.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ahora hay que añadir una cuarta: si el modelo y la herramienta se pueden separar.&lt;/p&gt;
&lt;p&gt;El modelo aporta la capacidad de razonamiento, mientras que la herramienta gestiona contexto, edición de archivos, orquestación de Agent y experiencia de flujo de trabajo. Ambas cosas importan, pero es mejor no dejarlas completamente atadas entre sí. Por ejemplo, si te gustan los modelos de Claude, puedes usar el plan oficial o conectar la API a otras herramientas. Y si te gusta un editor o entorno Agent concreto, es preferible que pueda conectarse a varios modelos en lugar de obligarte a usar solo el suyo.&lt;/p&gt;
&lt;p&gt;La gracia de esto no es complicarse por gusto. Es reducir riesgos. AI Coding es uno de los segmentos que cambian más rápido. Un plan que hoy parece generoso puede cambiar de precio en dos meses, y una herramienta que hoy parece cómoda puede empeorar después de un cambio en la integración con modelos. Separar modelos y herramientas te deja margen de maniobra.&lt;/p&gt;
&lt;h2 id=&#34;los-planes-extranjeros-se-están-endureciendo&#34;&gt;Los planes extranjeros se están endureciendo
&lt;/h2&gt;&lt;p&gt;Herramientas como GitHub Copilot, Cursor, Windsurf y Claude Code siguen siendo la base de trabajo de mucha gente, pero la tendencia es cada vez más clara: mantener planes muy baratos con cuotas muy altas es más difícil, y la facturación por uso real es cada vez más común.&lt;/p&gt;
&lt;p&gt;Cuando servicios como GitHub Copilot se apoyan más en facturación por uso, el supuesto margen de ahorro de algunos planes cae bastante. Para usuarios ligeros siguen siendo cómodos, pero para quienes usan agentes, contexto largo y tareas complejas de código con mucha frecuencia, el consumo real empieza a parecerse mucho más al coste real de API.&lt;/p&gt;
&lt;p&gt;Cursor y Windsurf, en esencia, empaquetan capacidad de modelo dentro de una experiencia de IDE. Su punto fuerte es que funcionan bien desde el primer momento y ofrecen una experiencia de editor madura. Su punto débil es el mayor nivel de dependencia de herramienta. Cuanto más dependas de sus agentes propietarios, sus índices y sus flujos automáticos, más caro será migrar después.&lt;/p&gt;
&lt;p&gt;Claude Code sigue siendo atractivo tanto por experiencia como por atención del ecosistema, pero las suscripciones internacionales, la verificación de identidad, las restricciones regionales y la seguridad de los servicios intermedios son riesgos que los usuarios en China necesitan valorar con cuidado. En especial, los relays de terceros pueden mezclar modelos, ser inestables, exponer datos o desaparecer, así que no son una gran base a largo plazo para trabajo importante.&lt;/p&gt;
&lt;h2 id=&#34;ventajas-y-límites-de-los-planes-nacionales&#34;&gt;Ventajas y límites de los planes nacionales
&lt;/h2&gt;&lt;p&gt;Una ventaja de muchos planes nacionales de AI Coding es que suelen ofrecerse en forma de API, lo que hace que queden menos atados a una sola herramienta. Puedes conectarlos a OpenCode, Cline, Continue, tus propios scripts o agentes internos.&lt;/p&gt;
&lt;p&gt;El problema también es evidente: si quieres al mismo tiempo un modelo fuerte, buena velocidad y bastante cuota, hay pocos planes que cumplan todo a la vez.&lt;/p&gt;
&lt;p&gt;La familia GLM es fuerte dentro del panorama nacional, pero en horas punta el rendimiento puede volverse inestable y las tareas pesadas acaban limitadas por velocidad. Kimi tiene buen nivel, pero sus reglas de precio y cuota hay que seguirlas de cerca, sobre todo la transparencia del límite real. Modelos como MiniMax son más amables en velocidad y cuota, lo que los hace útiles para tareas ligeras del día a día, lotes y ayuda de código no demasiado compleja, aunque pueden quedar un escalón por debajo en razonamiento de ingeniería difícil. DeepSeek puede parecer muy rentable cuando un modelo nuevo está en precio promocional, pero al acabar la promoción toca reevaluarlo con tarifa normal.&lt;/p&gt;
&lt;p&gt;Por eso, en muchos casos, las opciones nacionales funcionan mejor como un grupo de modelos disponible para repartir trabajo según la tarea, y no como una apuesta total por un solo modelo y un solo plan.&lt;/p&gt;
&lt;h2 id=&#34;usuarios-ligeros-elige-lo-que-resulte-cómodo-y-no-sobrediseñes&#34;&gt;Usuarios ligeros: elige lo que resulte cómodo y no sobrediseñes
&lt;/h2&gt;&lt;p&gt;Si solo usas AI para retocar scripts, completar documentación, explicar errores o generar herramientas pequeñas una o dos veces por semana, probablemente no necesitas una configuración complicada.&lt;/p&gt;
&lt;p&gt;En este caso importa más la comodidad. Cursor, Windsurf, Trae, CodeBuddy, Tongyi Lingma, GitHub Copilot y herramientas similares son opciones razonables. El objetivo no es perseguir el coste unitario más bajo, sino reducir fricción: algo estable dentro de tu editor, con buenas sugerencias y fácil de revertir cuando se equivoca.&lt;/p&gt;
&lt;p&gt;Para usuarios ligeros, construir capas de API, relays y proxys complejos solo para ahorrar un poco de dinero rara vez compensa. El tiempo, el riesgo de cuenta y el coste de depuración suelen costar más que la suscripción que te ahorras.&lt;/p&gt;
&lt;h2 id=&#34;usuarios-intermedios-mira-la-relación-calidad-precio-pero-también-la-portabilidad&#34;&gt;Usuarios intermedios: mira la relación calidad-precio, pero también la portabilidad
&lt;/h2&gt;&lt;p&gt;Si usas AI todos los días para programar, modificar proyectos, generar pruebas y preparar documentación, la cuota y el consumo real empiezan a importar mucho más.&lt;/p&gt;
&lt;p&gt;En este caso conviene separar la herramienta principal de los modelos de respaldo. Por ejemplo, un plan cómodo de IDE puede servir para el trabajo diario, mientras que una API o plan agregador conectable a varias herramientas puede encargarse de tareas con contexto más largo o flujos de Agent más complejos.&lt;/p&gt;
&lt;p&gt;Aquí hay tres preguntas clave:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si se puede integrar con herramientas de terceros.&lt;/li&gt;
&lt;li&gt;Si el consumo de tokens o cuota es visible y entendible.&lt;/li&gt;
&lt;li&gt;Si al superar el límite se aplica throttling, degradación, corte del servicio o pura facturación por uso.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si un plan parece barato pero solo funciona dentro de su propia herramienta, conviene contar también el coste de migrar más adelante. Si cuesta algo más pero puede conectarse a varias herramientas, puede ser mejor como base a largo plazo.&lt;/p&gt;
&lt;h2 id=&#34;usuarios-intensivos-no-bloquees-modelo-y-herramienta-juntos&#34;&gt;Usuarios intensivos: no bloquees modelo y herramienta juntos
&lt;/h2&gt;&lt;p&gt;Para los usuarios intensivos, la necesidad principal es la flexibilidad.&lt;/p&gt;
&lt;p&gt;Cuando una persona o un equipo usa agentes de AI de forma intensiva todos los días, el consumo crece muy rápido. Búsquedas de repositorio, cambios con contexto largo, depuración en múltiples rondas y reparación automática de pruebas pueden multiplicar el gasto en tokens. Si en ese punto dependes de un solo plan, aparecen tres problemas con facilidad:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La cuota deja de ser suficiente de repente.&lt;/li&gt;
&lt;li&gt;La regla de cobro cambia de forma inesperada.&lt;/li&gt;
&lt;li&gt;Una herramienta o un modelo deja de estar disponible temporalmente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La opción más estable es montar una estructura por capas: una herramienta Agent principal, uno o varios endpoints de modelo intercambiables, un modelo barato para tareas simples y un modelo fuerte para tareas difíciles. No conviene mandar todas las tareas pequeñas al modelo más caro, ni depender solo del más barato para las tareas críticas.&lt;/p&gt;
&lt;p&gt;Para un usuario intensivo, que las herramientas puedan conectarse a cualquier modelo y que los modelos puedan moverse entre herramientas importa más que ahorrar unas decenas de dólares al mes. Lo realmente caro no suele ser la suscripción. Lo caro es quedar atrapado en un solo ecosistema y tener que reconstruir el flujo de trabajo después.&lt;/p&gt;
&lt;h2 id=&#34;una-estrategia-de-combinación-más-estable&#34;&gt;Una estrategia de combinación más estable
&lt;/h2&gt;&lt;p&gt;Una forma razonablemente sólida de organizarlo sería esta:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Usa un modelo de bajo coste para tareas ligeras como explicar código, escribir scripts pequeños, formatear y generar documentos simples.&lt;/li&gt;
&lt;li&gt;Usa un modelo orientado a valor para tareas intermedias como desarrollo normal de funciones, completar pruebas y sugerencias de refactorización.&lt;/li&gt;
&lt;li&gt;Usa un modelo fuerte para tareas difíciles como cambios de arquitectura, correcciones entre varios archivos, bugs complejos y razonamiento con contexto largo.&lt;/li&gt;
&lt;li&gt;Mantén abierta la capa de herramientas, eligiendo soluciones que puedan conectarse por API, exportar configuración y cambiar de modelo.&lt;/li&gt;
&lt;li&gt;Conserva un camino de respaldo, de forma que si tu plan principal cambia reglas puedas moverte rápido a otra herramienta o modelo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Puede que no sea la configuración más barata posible, pero sí una mucho más resistente. Los precios y cuotas de AI Coding van a seguir cambiando. Lo valioso a largo plazo no es un plan que hoy parezca muy generoso, sino un flujo de trabajo portable.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Los planes de AI Coding no deberían juzgarse solo por el precio mensual. Los usuarios ligeros deberían priorizar simplicidad y comodidad. Los usuarios intermedios deberían fijarse en cuota, consumo y capacidad de migrar. Los usuarios intensivos deberían separar modelos y herramientas para no quedar atrapados en un único ecosistema.&lt;/p&gt;
&lt;p&gt;La idea más importante es que los planes cambian, los modelos cambian y las herramientas también. Mantener la capacidad de elegir en tus propias manos es la forma más importante de controlar costes cuando trabajas con AI Coding a largo plazo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Codex vs Claude Code: cómo elegir entre dos diseños de Subagent</title>
        <link>https://knightli.com/es/2026/05/08/codex-vs-claude-code-subagent-design/</link>
        <pubDate>Fri, 08 May 2026 14:14:01 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/codex-vs-claude-code-subagent-design/</guid>
        <description>&lt;p&gt;Las herramientas de programación con IA están prestando cada vez más atención a los subagentes. No es simple moda: un solo agente acaba encontrando límites cuando debe manejar tareas reales de ingeniería.&lt;/p&gt;
&lt;p&gt;Si un agente lee código, revisa logs, modifica implementación, ejecuta pruebas, analiza errores y resume resultados a la vez, el contexto principal se ensucia rápido. Resultados de búsqueda, salidas de comandos, logs de pruebas y razonamientos intermedios se mezclan. Las decisiones posteriores se vuelven menos fiables. Además, explorar, implementar, verificar y revisar en un único hilo dificulta el paralelismo.&lt;/p&gt;
&lt;p&gt;El objetivo de los subagentes es reducir esa presión. La sesión principal deja de hacerlo todo de principio a fin y pasa a coordinar: define objetivos, asigna trabajo, recibe resultados y los integra. Un subagente se ocupa de una parte local, como exploración, implementación, verificación o revisión, y devuelve una conclusión comprimida.&lt;/p&gt;
&lt;p&gt;Un subagente no es “otra copia de mí”. Es una forma de dividir trabajo de ingeniería confuso en roles más claros.&lt;/p&gt;
&lt;h2 id=&#34;fundamentos-compartidos&#34;&gt;Fundamentos compartidos
&lt;/h2&gt;&lt;p&gt;Un sistema maduro de subagentes suele necesitar cuatro bases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aislamiento de contexto.&lt;/li&gt;
&lt;li&gt;Especialización de roles.&lt;/li&gt;
&lt;li&gt;Configuración a nivel de proyecto y usuario.&lt;/li&gt;
&lt;li&gt;Límites de herramientas y permisos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El aislamiento de contexto es esencial. En un repositorio real hay mucho material intermedio: búsquedas, logs de pruebas, salidas de comandos. Si todo entra en la sesión principal, el hilo principal se vuelve ruidoso. Un subagente puede digerir ese proceso local y devolver solo las señales útiles.&lt;/p&gt;
&lt;p&gt;La especialización de roles también importa. Multi-agent no significa abrir varias copias del mismo modelo. Un rol de exploración debe buscar, leer y resumir. Un rol de implementación debe centrarse en cambios locales. Un rol de verificación debe ejecutar checks, identificar riesgos e informar con claridad.&lt;/p&gt;
&lt;p&gt;Los límites de herramientas y permisos determinan si el sistema es seguro. Un subagente no debería heredar automáticamente todas las capacidades de la sesión principal. Un explorer de solo lectura no necesita escribir archivos. Un verifier no siempre necesita modificar implementación.&lt;/p&gt;
&lt;p&gt;Codex y Claude Code comparten estas preocupaciones, pero toman caminos distintos.&lt;/p&gt;
&lt;h2 id=&#34;codex-delegación-explícita&#34;&gt;Codex: delegación explícita
&lt;/h2&gt;&lt;p&gt;El diseño de Codex es más contenido.&lt;/p&gt;
&lt;p&gt;Ofrece un mecanismo de delegación controlado y ligero alrededor de la sesión principal actual. Cuándo delegar, a quién delegar y cuándo recoger resultados son decisiones explícitas. El flujo de control permanece en la tarea actual.&lt;/p&gt;
&lt;p&gt;Sus rasgos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La sesión principal delega explícitamente.&lt;/li&gt;
&lt;li&gt;El conjunto de roles se mantiene pequeño.&lt;/li&gt;
&lt;li&gt;La sesión principal sabe qué agente hace qué.&lt;/li&gt;
&lt;li&gt;Los resultados vuelven a la línea principal.&lt;/li&gt;
&lt;li&gt;Los límites de colaboración son transparentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto encaja con equipos que valoran orquestación manual, previsibilidad y determinismo. Puedes pedir a un explorer que inspeccione una cadena de llamadas, a un worker que haga un cambio acotado y a la sesión principal que integre el resultado.&lt;/p&gt;
&lt;p&gt;La contrapartida es que la presión de orquestación sigue en la sesión principal. Debe decidir cuándo dividir, cómo dividir, a quién asignar y cómo fusionar resultados. Para colaboración ligera es cómodo; para flujos largos puede cansar.&lt;/p&gt;
&lt;h2 id=&#34;claude-code-agentes-como-puestos-de-trabajo&#34;&gt;Claude Code: agentes como puestos de trabajo
&lt;/h2&gt;&lt;p&gt;Claude Code toma una ruta más de plataforma.&lt;/p&gt;
&lt;p&gt;Trata los agentes como objetos describibles, seleccionables, configurables, con memoria, aislables y capaces de ejecutarse en segundo plano. Un subagente no es solo una ayuda temporal en una conversación; se parece más a un puesto de trabajo dentro de un sistema de ingeniería.&lt;/p&gt;
&lt;p&gt;El sistema puede exponer listas de agentes, casos de uso, descripciones y límites de herramientas al modelo, permitiendo que el modelo decida qué rol usar en cada turno. Eso hace la delegación más automática.&lt;/p&gt;
&lt;p&gt;Varios elementos definen este enfoque.&lt;/p&gt;
&lt;p&gt;Primero, un sistema de roles. Explorer, planner, general-purpose y verifier pueden tener descripción de uso, restricciones de herramientas, modelos por defecto y condiciones de ejecución. Un explorer de solo lectura no edita archivos; un planner diseña; un verifier comprueba.&lt;/p&gt;
&lt;p&gt;Segundo, herencia y override. Un subagente no es completamente libre. Hereda los límites grandes de la sesión principal, pero puede ajustar comportamiento local dentro de reglas permitidas.&lt;/p&gt;
&lt;p&gt;Tercero, memoria. La memoria no es solo recordar algo. Puede tener alcance: memoria de usuario para preferencias largas, memoria de proyecto para contexto del repositorio y memoria local para estado del entorno.&lt;/p&gt;
&lt;p&gt;Cuarto, background y worktree isolation. Algunas verificaciones pueden seguir en segundo plano mientras el hilo principal avanza. Si hace falta aislamiento fuerte, el agente puede trabajar en un worktree separado.&lt;/p&gt;
&lt;p&gt;Quinto, ecosistema de plugins. Si los agentes son objetos de primera clase, hay que pensar en distribución, instalación, prioridades, overrides y seguridad. Los plugin agents pueden entrar al sistema, pero campos de alto riesgo como permission mode, hooks o MCP servers deben estar controlados.&lt;/p&gt;
&lt;p&gt;Esto hace que Claude Code se parezca más a un runtime de agentes que a una herramienta de colaboración de una sola sesión.&lt;/p&gt;
&lt;h2 id=&#34;diferencia-principal&#34;&gt;Diferencia principal
&lt;/h2&gt;&lt;p&gt;Codex se parece a una herramienta de delegación controlada:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Delegación explícita.&lt;/li&gt;
&lt;li&gt;Roles ligeros.&lt;/li&gt;
&lt;li&gt;Flujo de control claro.&lt;/li&gt;
&lt;li&gt;Subtareas centradas en la sesión actual.&lt;/li&gt;
&lt;li&gt;Adecuado para trabajo humano-orquestado y determinista.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Claude Code se parece a un sistema de puestos de ingeniería:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los agentes están modelados formalmente.&lt;/li&gt;
&lt;li&gt;Los roles son más sistemáticos.&lt;/li&gt;
&lt;li&gt;Memoria, background, aislamiento y plugins forman parte del runtime.&lt;/li&gt;
&lt;li&gt;El modelo puede ayudar a elegir roles.&lt;/li&gt;
&lt;li&gt;Adecuado para proyectos largos y workflows de plataforma.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La pregunta no es cuál tiene más funciones. Es si quieres que un subagente sea “un ayudante al que llamo explícitamente” o “un puesto permanente dentro del sistema”.&lt;/p&gt;
&lt;h2 id=&#34;cómo-elegir&#34;&gt;Cómo elegir
&lt;/h2&gt;&lt;p&gt;Elige el estilo Codex si valoras control explícito, delegación ligera y paralelismo seguro dentro de la sesión actual. Encaja con revisiones, cambios pequeños, tareas claras y flujos donde la persona quiere mantener el ritmo.&lt;/p&gt;
&lt;p&gt;Elige el estilo Claude Code si necesitas roles sistemáticos, memoria a largo plazo, ejecución en segundo plano, aislamiento por worktree, plugins y un runtime más completo.&lt;/p&gt;
&lt;p&gt;Hazte dos preguntas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;¿Aceptas que el modelo decida quién debe hacer el trabajo?&lt;/li&gt;
&lt;li&gt;¿Necesitas un runtime de agentes más completo?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si la primera te incomoda, la delegación explícita es mejor. Si la segunda es sí, un sistema tipo plataforma encaja mejor.&lt;/p&gt;
&lt;h2 id=&#34;consejos-prácticos&#34;&gt;Consejos prácticos
&lt;/h2&gt;&lt;p&gt;No trates los subagentes como “más modelos igual a más potencia”.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Define límites de tarea para cada rol.&lt;/li&gt;
&lt;li&gt;Limita las herramientas de cada rol.&lt;/li&gt;
&lt;li&gt;Pide conclusiones, no logs crudos.&lt;/li&gt;
&lt;li&gt;Mantén la decisión final en la sesión principal.&lt;/li&gt;
&lt;li&gt;Haz visibles tareas en background y worktrees.&lt;/li&gt;
&lt;li&gt;Define límites de seguridad para plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El valor de los subagentes no está en la cantidad, sino en la calidad de la división del trabajo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Codex y Claude Code resuelven el mismo problema: un solo agente no puede cargar cómodamente con todo el trabajo real de ingeniería. Ambos reconocen la importancia de aislar contexto, especializar roles, definir permisos y resumir localmente.&lt;/p&gt;
&lt;p&gt;Codex es más contenido y prioriza delegación explícita y control de la sesión principal. Claude Code es más sistemático y trata los agentes como puestos configurables, con memoria, aislamiento, background y ecosistema de plugins.&lt;/p&gt;
&lt;p&gt;La elección no depende de qué marca gana, sino de si tu flujo necesita una herramienta de colaboración controlada o un runtime completo de agentes.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>9Router: conecta Claude Code, Codex y Cursor a un mismo router de IA</title>
        <link>https://knightli.com/es/2026/05/08/9router-ai-coding-router-token-saver/</link>
        <pubDate>Fri, 08 May 2026 13:41:15 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/9router-ai-coding-router-token-saver/</guid>
        <description>&lt;p&gt;9Router es un router local para herramientas de programación con IA. Permite conectar Claude Code, Codex, Cursor, Cline, Copilot, OpenCode, OpenClaw y herramientas similares a un único endpoint compatible con OpenAI, y desde ahí enrutar las solicitudes a distintos modelos y proveedores.&lt;/p&gt;
&lt;p&gt;No pretende ser otro cliente de chat. Se coloca entre tus herramientas de programación y los proveedores de modelos para resolver problemas prácticos: formatos de API incompatibles, cambios manuales entre proveedores, consumo rápido de tokens por salidas de herramientas, cortes por cuotas agotadas y configuración complicada de varias cuentas.&lt;/p&gt;
&lt;p&gt;Según el README, 9Router admite más de 40 proveedores y más de 100 modelos. Incluye RTK Token Saver, fallback automático, seguimiento de cuotas, rotación multi-cuenta, traducción de formatos y registros de solicitudes. Está escrito en JavaScript, usa Node.js, Next.js, React, Tailwind CSS y LowDB, y tiene licencia MIT.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirve&#34;&gt;Para qué sirve
&lt;/h2&gt;&lt;p&gt;9Router tiene más sentido cuando usas varias herramientas de programación con IA y varias fuentes de modelos al mismo tiempo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code usa una cuenta de suscripción.&lt;/li&gt;
&lt;li&gt;Codex o Cursor necesitan un endpoint OpenAI personalizado.&lt;/li&gt;
&lt;li&gt;Cline, Continue o RooCode necesitan una API compatible con OpenAI.&lt;/li&gt;
&lt;li&gt;Los proveedores gratuitos sirven para pruebas.&lt;/li&gt;
&lt;li&gt;GLM, MiniMax o Kimi funcionan como respaldo barato.&lt;/li&gt;
&lt;li&gt;Los modelos de mayor calidad se reservan para tareas difíciles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sin 9Router, cada herramienta necesita su propio endpoint, API key, nombre de modelo y estrategia de fallback. 9Router centraliza todo eso en una capa local.&lt;/p&gt;
&lt;p&gt;API local:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://localhost:20128/v1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Dashboard:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://localhost:20128/dashboard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;instalación-rápida&#34;&gt;Instalación rápida
&lt;/h2&gt;&lt;p&gt;Para uso local:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g 9router
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;9router
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Desde el código fuente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/decolua/9router.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; 9router
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20128&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://localhost:20128 npm run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Modo producción:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20128&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.0.0.0 &lt;span class=&#34;nv&#34;&gt;NEXT_PUBLIC_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://localhost:20128 npm run start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El paquete npm requiere Node.js &lt;code&gt;&amp;gt;=18.0.0&lt;/code&gt;. En VPS o Docker, configura &lt;code&gt;JWT_SECRET&lt;/code&gt;, &lt;code&gt;INITIAL_PASSWORD&lt;/code&gt;, &lt;code&gt;DATA_DIR&lt;/code&gt; y &lt;code&gt;API_KEY_SECRET&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;conectar-herramientas-de-programación&#34;&gt;Conectar herramientas de programación
&lt;/h2&gt;&lt;p&gt;Configuración típica:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base URL: http://localhost:20128/v1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API Key: copiada desde el dashboard de 9Router
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model: nombre de modelo o combo configurado en 9Router
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para Codex CLI:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OPENAI_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:20128&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your-9router-api-key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;codex &lt;span class=&#34;s2&#34;&gt;&amp;#34;your prompt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para Cline, Continue o RooCode, elige &lt;code&gt;OpenAI Compatible&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base URL: http://localhost:20128/v1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API Key: your-9router-api-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model: cc/claude-opus-4-7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los nombres dependen de los proveedores conectados, por ejemplo &lt;code&gt;cc/&lt;/code&gt;, &lt;code&gt;cx/&lt;/code&gt;, &lt;code&gt;gh/&lt;/code&gt;, &lt;code&gt;glm/&lt;/code&gt;, &lt;code&gt;minimax/&lt;/code&gt;, &lt;code&gt;kr/&lt;/code&gt; y &lt;code&gt;vertex/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;rtk-token-saver&#34;&gt;RTK Token Saver
&lt;/h2&gt;&lt;p&gt;En programación con IA, muchas veces lo que más tokens consume son salidas de herramientas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;find&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tree&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;listas largas de archivos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RTK Token Saver comprime esas salidas antes de enviarlas al modelo. El proyecto afirma que puede ahorrar 20%-40% de tokens de entrada en muchas solicitudes.&lt;/p&gt;
&lt;p&gt;La ventaja es que no tienes que cambiar de herramienta ni de modelo. Aun así, para logs críticos o contenido completo de archivos, conviene probar primero que la calidad de respuesta no baje.&lt;/p&gt;
&lt;h2 id=&#34;fallback-automático&#34;&gt;Fallback automático
&lt;/h2&gt;&lt;p&gt;Puedes ordenar modelos por prioridad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. Modelo de suscripción
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. API barata
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Proveedor gratuito
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. cc/claude-opus-4-7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. glm/glm-5.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. kr/claude-sonnet-4.5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El fallback reduce interrupciones, pero cambia la consistencia de salida. Para refactors grandes, migraciones o tareas sensibles, es mejor fijar un modelo principal.&lt;/p&gt;
&lt;h2 id=&#34;cuidado-con-proveedores-gratuitos&#34;&gt;Cuidado con proveedores gratuitos
&lt;/h2&gt;&lt;p&gt;Kiro, OpenCode Free y Vertex pueden ser útiles, pero sus reglas cambian. Verifica siempre si el uso es gratuito, si hay límites regionales, si se permite usar herramientas de terceros, si puede haber rate limits o bloqueos, y cuándo caduca la cuota.&lt;/p&gt;
&lt;p&gt;9Router enruta solicitudes; no cambia las condiciones del proveedor.&lt;/p&gt;
&lt;h2 id=&#34;despliegue-local&#34;&gt;Despliegue local
&lt;/h2&gt;&lt;p&gt;Para uso personal, basta con escuchar en &lt;code&gt;localhost&lt;/code&gt;. Si lo llevas a un VPS o LAN, cambia la contraseña por defecto, configura &lt;code&gt;JWT_SECRET&lt;/code&gt; y &lt;code&gt;API_KEY_SECRET&lt;/code&gt;, no expongas el dashboard directamente, y exige Bearer API key en &lt;code&gt;/v1/*&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -d &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name 9router &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 20128:20128 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --env-file ./.env &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v 9router-data:/app/data &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v 9router-usage:/root/.9router &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  9router
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;9Router es una puerta de enlace local para herramientas de programación con IA. Unifica Claude Code, Codex, Cursor y Cline en &lt;code&gt;http://localhost:20128/v1&lt;/code&gt;, y gestiona selección de modelo, traducción de formatos, compresión de tokens, cuotas y fallback.&lt;/p&gt;
&lt;p&gt;Es más útil para usuarios intensivos que ya alternan entre varios proveedores. Empieza con una herramienta y un proveedor, y añade combos poco a poco.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/decolua/9router&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Repositorio de 9Router en GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://9router.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Sitio web de 9Router&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.npmjs.com/package/9router&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Paquete npm de 9Router&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>goose: un agente de IA open source con escritorio, CLI y API</title>
        <link>https://knightli.com/es/2026/05/08/goose-open-source-ai-agent-desktop-cli-api/</link>
        <pubDate>Fri, 08 May 2026 13:41:15 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/goose-open-source-ai-agent-desktop-cli-api/</guid>
        <description>&lt;p&gt;goose es un agente de IA open source que corre en tu propia máquina. No se limita a completar código; busca cubrir código, investigación, escritura, automatización, análisis de datos y otros trabajos. El README lo presenta como aplicación de escritorio, CLI y API para usuarios normales y flujos personalizados.&lt;/p&gt;
&lt;p&gt;El proyecto pasó de &lt;code&gt;block/goose&lt;/code&gt; a la Agentic AI Foundation (AAIF), dentro de Linux Foundation. El repositorio actual es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://github.com/aaif-goose/goose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;goose está escrito principalmente en Rust y TypeScript, con licencia Apache-2.0. Su descripción en GitHub dice que es un agente de IA extensible que va más allá de sugerencias de código: puede instalar, ejecutar, editar y probar con cualquier LLM.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;Qué problema resuelve
&lt;/h2&gt;&lt;p&gt;Muchas herramientas de programación con IA se centran en sugerencias o cambios locales. goose apunta a algo más amplio: permitir que un agente de IA complete tareas directamente en tu máquina.&lt;/p&gt;
&lt;p&gt;Puede servir para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cambios de código y pruebas.&lt;/li&gt;
&lt;li&gt;Automatización local.&lt;/li&gt;
&lt;li&gt;Investigación y escritura.&lt;/li&gt;
&lt;li&gt;Análisis de datos.&lt;/li&gt;
&lt;li&gt;Flujos multi-paso.&lt;/li&gt;
&lt;li&gt;Integración mediante API.&lt;/li&gt;
&lt;li&gt;Extensión mediante MCP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo necesitas autocompletado en el IDE, una herramienta tipo Copilot puede bastar. goose es más útil cuando quieres IA dentro de la cadena local de ejecución de tareas.&lt;/p&gt;
&lt;h2 id=&#34;escritorio-cli-y-api&#34;&gt;Escritorio, CLI y API
&lt;/h2&gt;&lt;p&gt;La aplicación de escritorio soporta macOS, Linux y Windows.&lt;/p&gt;
&lt;p&gt;La CLI encaja con flujos de terminal y automatización local.&lt;/p&gt;
&lt;p&gt;La API permite insertar goose como runtime de agente en otros sistemas o herramientas internas.&lt;/p&gt;
&lt;p&gt;Para uso personal, empieza por escritorio o CLI. Para equipos, conviene revisar también la API y las distribuciones personalizadas.&lt;/p&gt;
&lt;h2 id=&#34;instalación&#34;&gt;Instalación
&lt;/h2&gt;&lt;p&gt;Aplicación de escritorio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://goose-docs.ai/docs/getting-started/installation
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;CLI:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GitHub Releases ofrece builds para varias plataformas. La versión latest consultada fue &lt;code&gt;v1.33.1&lt;/code&gt;, publicada el 2026-04-29, con assets para macOS, Linux, Windows, deb, rpm y Flatpak.&lt;/p&gt;
&lt;p&gt;Después de instalar, configura un proveedor siguiendo el Quickstart oficial y prueba primero en un directorio de bajo riesgo.&lt;/p&gt;
&lt;h2 id=&#34;proveedores&#34;&gt;Proveedores
&lt;/h2&gt;&lt;p&gt;goose admite más de 15 proveedores, entre ellos Anthropic, OpenAI, Google, Ollama, OpenRouter, Azure, Bedrock y otros proveedores cloud o compatibles con OpenAI.&lt;/p&gt;
&lt;p&gt;Puede usar API keys y también suscripciones existentes de Claude, ChatGPT o Gemini mediante ACP.&lt;/p&gt;
&lt;p&gt;ACP es relevante porque muchos usuarios ya tienen suscripciones, pero no todas las herramientas las reutilizan bien. goose las integra en un flujo de agente. Aun así, verifica siempre términos del proveedor, cuotas y políticas para código corporativo o datos sensibles.&lt;/p&gt;
&lt;h2 id=&#34;extensiones-mcp&#34;&gt;Extensiones MCP
&lt;/h2&gt;&lt;p&gt;goose soporta extensiones Model Context Protocol. El README menciona más de 70 extensiones.&lt;/p&gt;
&lt;p&gt;MCP permite conectar el agente con documentación, bases de datos, navegadores, sistemas internos, búsqueda, herramientas de diseño o gestión de proyectos mediante interfaces estándar.&lt;/p&gt;
&lt;p&gt;Para equipos, MCP puede ser una capa de integración más segura que exponer todos los sistemas directamente al modelo.&lt;/p&gt;
&lt;h2 id=&#34;diferencia-frente-a-un-asistente-de-código&#34;&gt;Diferencia frente a un asistente de código
&lt;/h2&gt;&lt;p&gt;goose no es solo autocompletado. Es más bien un runtime local de agente.&lt;/p&gt;
&lt;p&gt;Los asistentes comunes se enfocan en completar, explicar, generar funciones y editar en el IDE. goose se centra en ejecución local de tareas, flujos multi-paso, proveedores intercambiables, extensiones, escritorio y CLI, API embebible y tareas que no son solo código.&lt;/p&gt;
&lt;p&gt;Eso también implica más complejidad: configuración de modelos, permisos, extensiones, workspace, logs y credenciales.&lt;/p&gt;
&lt;h2 id=&#34;distribuciones-personalizadas&#34;&gt;Distribuciones personalizadas
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CUSTOM_DISTROS.md&lt;/code&gt; explica cómo construir una distribución de goose con proveedores, extensiones y branding preconfigurados.&lt;/p&gt;
&lt;p&gt;Un equipo puede predefinir proveedores permitidos, conectar servidores MCP internos, configurar seguridad y logs, bloquear servicios externos y aplicar onboarding propio.&lt;/p&gt;
&lt;h2 id=&#34;recomendaciones&#34;&gt;Recomendaciones
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Instala la app de escritorio o CLI.&lt;/li&gt;
&lt;li&gt;Configura un proveedor conocido.&lt;/li&gt;
&lt;li&gt;Ejecuta tareas simples en un directorio de prueba.&lt;/li&gt;
&lt;li&gt;Observa qué archivos lee y qué acciones ejecuta.&lt;/li&gt;
&lt;li&gt;Añade extensiones MCP.&lt;/li&gt;
&lt;li&gt;Prueba repositorios complejos después.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Haz commit antes de cambios importantes, no guardes API keys en archivos del proyecto, limita los modos de alto permiso a workspaces confiables y revisa la política de datos antes de usar código de empresa.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;goose es un agente de IA open source bajo AAIF/Linux Foundation. Ofrece escritorio, CLI y API, soporta más de 15 proveedores, acceso a suscripciones vía ACP y más de 70 extensiones MCP.&lt;/p&gt;
&lt;p&gt;Su valor no es solo escribir código, sino unir modelos, herramientas, extensiones y ejecución local dentro de un mismo marco de agente.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/aaif-goose/goose&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Repositorio de goose en GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://goose-docs.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Documentación de goose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://goose-docs.ai/docs/getting-started/installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Guía de instalación de goose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aaif.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Agentic AI Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cómo cambiar el idioma de la interfaz de VS Code: chino, inglés y otros idiomas</title>
        <link>https://knightli.com/es/2026/05/08/vscode-switch-display-language/</link>
        <pubDate>Fri, 08 May 2026 13:18:57 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/vscode-switch-display-language/</guid>
        <description>&lt;p&gt;VS Code admite muchos idiomas de interfaz. Lo habitual es instalar primero el paquete de idioma correspondiente y luego elegir el idioma de visualización desde la paleta de comandos. Si necesitas fijar VS Code a un idioma concreto, también puedes modificar manualmente el valor &lt;code&gt;locale&lt;/code&gt; en &lt;code&gt;argv.json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Este método no solo sirve para chino simplificado; también funciona con inglés, chino tradicional, japonés, coreano, francés, alemán, español y otros idiomas.&lt;/p&gt;
&lt;h2 id=&#34;instalar-el-paquete-de-idioma-correspondiente&#34;&gt;Instalar el paquete de idioma correspondiente
&lt;/h2&gt;&lt;p&gt;Si quieres cambiar a una interfaz que no sea inglés, normalmente debes instalar primero un paquete de idioma.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre el panel de extensiones de VS Code en la barra lateral izquierda, o usa el atajo &lt;code&gt;Ctrl+Shift+X&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;En el cuadro de búsqueda, escribe el idioma objetivo, por ejemplo &lt;code&gt;Chinese&lt;/code&gt;, &lt;code&gt;Japanese&lt;/code&gt;, &lt;code&gt;Korean&lt;/code&gt; o &lt;code&gt;French&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona el paquete de idioma correspondiente y haz clic en &lt;code&gt;Install&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cuando termine la instalación, reinicia VS Code si se te solicita.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para chino simplificado, el paquete habitual es &lt;code&gt;Chinese (Simplified)&lt;/code&gt;. Para chino tradicional, usa &lt;code&gt;Chinese (Traditional)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;cambiar-el-idioma-desde-la-paleta-de-comandos&#34;&gt;Cambiar el idioma desde la paleta de comandos
&lt;/h2&gt;&lt;p&gt;Este es el método recomendado para la mayoría de los usuarios.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre la paleta de comandos: &lt;code&gt;Ctrl+Shift+P&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Escribe &lt;code&gt;Configure Display Language&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona el comando &lt;code&gt;Configure Display Language&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Elige en la lista el idioma que quieres usar.&lt;/li&gt;
&lt;li&gt;Reinicia VS Code si se te solicita.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Después del reinicio, los menús, las páginas de configuración y los mensajes habituales usarán el idioma seleccionado. Si el idioma objetivo no aparece en la lista, instala antes su paquete desde el panel de extensiones.&lt;/p&gt;
&lt;h2 id=&#34;especificar-el-idioma-manualmente-en-argvjson&#34;&gt;Especificar el idioma manualmente en argv.json
&lt;/h2&gt;&lt;p&gt;Si el cambio desde la paleta de comandos no funciona, o si quieres fijar explícitamente el idioma de visualización, puedes editar directamente el archivo de argumentos de ejecución de VS Code.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre la paleta de comandos: &lt;code&gt;Ctrl+Shift+P&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Escribe y selecciona &lt;code&gt;Preferences: Configure Runtime Arguments&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Busca o agrega la opción &lt;code&gt;locale&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cambia su valor por el código del idioma objetivo.&lt;/li&gt;
&lt;li&gt;Guarda el archivo y reinicia VS Code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por ejemplo, para cambiar a inglés:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;en&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para cambiar a chino simplificado:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para cambiar a japonés:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;locale&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;argv.json&lt;/code&gt; es un archivo JSON, así que presta atención a las comas y las comillas. Si la configuración no es válida, VS Code puede no leer correctamente el idioma configurado.&lt;/p&gt;
&lt;h2 id=&#34;códigos-de-idioma-de-interfaz-comunes&#34;&gt;Códigos de idioma de interfaz comunes
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Idioma de visualización&lt;/th&gt;
          &lt;th&gt;locale&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;English (US)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;en&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Chino simplificado&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zh-cn&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Chino tradicional&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;zh-tw&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;French&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;fr&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;German&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;de&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Italian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;it&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Spanish&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;es&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Japanese&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ja&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Korean&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ko&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Russian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ru&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Portuguese (Brazil)&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pt-br&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Turkish&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;tr&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Bulgarian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Hungarian&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;hu&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;qué-hacer-si-el-idioma-no-cambia&#34;&gt;Qué hacer si el idioma no cambia
&lt;/h2&gt;&lt;p&gt;Revisa estos puntos en orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirma que el paquete del idioma objetivo está instalado.&lt;/li&gt;
&lt;li&gt;Confirma que &lt;code&gt;locale&lt;/code&gt; usa el código correcto. Por ejemplo, chino simplificado es &lt;code&gt;zh-cn&lt;/code&gt;, no &lt;code&gt;zh-CN&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cierra VS Code por completo y vuelve a abrirlo después de cambiar el idioma.&lt;/li&gt;
&lt;li&gt;Si editaste &lt;code&gt;argv.json&lt;/code&gt; manualmente, comprueba que la sintaxis JSON sea válida.&lt;/li&gt;
&lt;li&gt;Si la configuración está desordenada, elimina la entrada &lt;code&gt;locale&lt;/code&gt; y vuelve a elegir el idioma mediante &lt;code&gt;Configure Display Language&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En la mayoría de los casos, &lt;code&gt;Configure Display Language&lt;/code&gt; es la opción más sencilla. Edita &lt;code&gt;argv.json&lt;/code&gt; solo cuando necesites forzar un idioma concreto o cuando el cambio desde la paleta de comandos no surta efecto.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.csdn.net/mighty13/article/details/114420578&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;VScode: cambiar el idioma de la interfaz de VS Code a chino simplificado y alternar el idioma de visualización&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>24 consejos de Claude Code: modo plan, rewind, CLAUDE.md, Skills, Agents y plugins</title>
        <link>https://knightli.com/es/2026/05/08/claude-code-24-tips-plan-rewind-skills-agents/</link>
        <pubDate>Fri, 08 May 2026 08:54:14 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/claude-code-24-tips-plan-rewind-skills-agents/</guid>
        <description>&lt;p&gt;Claude Code no es solo una caja de chat. Se parece más a un Agent de programación que puede entrar en un directorio de proyecto, leer y escribir archivos, ejecutar comandos y mantener contexto.&lt;/p&gt;
&lt;p&gt;Si solo le das un requisito y esperas código, pronto aparecen problemas: el plan no queda claro, los permisos se repiten, el contexto crece, el resultado no convence, no sabes cómo volver atrás y no hay un lugar estable para reglas del proyecto.&lt;/p&gt;
&lt;p&gt;Estos son consejos prácticos para quienes empiezan con Claude Code.&lt;/p&gt;
&lt;h2 id=&#34;empieza-dentro-del-directorio-del-proyecto&#34;&gt;Empieza dentro del directorio del proyecto
&lt;/h2&gt;&lt;p&gt;Claude Code funciona mejor cuando se inicia dentro del directorio del proyecto, no desde una terminal cualquiera.&lt;/p&gt;
&lt;p&gt;Crea una carpeta de proyecto, entra en ella, abre la línea de comandos e inicia Claude Code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si al entrar por primera vez pregunta si confías en la carpeta actual, confirma antes de seguir. Así podrá leer archivos, crear archivos y ejecutar operaciones alrededor del proyecto.&lt;/p&gt;
&lt;p&gt;Una práctica sencilla es pedirle que cree una web personal de fotógrafo. Es una tarea visual, permite inspeccionar el resultado y sirve para practicar generación de archivos, comandos, rewind y refactorización.&lt;/p&gt;
&lt;h2 id=&#34;usa-modo-plan-para-aclarar-la-dirección&#34;&gt;Usa modo plan para aclarar la dirección
&lt;/h2&gt;&lt;p&gt;Ante tareas complejas, Claude Code puede entrar en modo plan. Su función es discutir requisitos, dividir pasos y pedir aprobación antes de ejecutar.&lt;/p&gt;
&lt;p&gt;Tras escribir un plan, suelen aparecer opciones como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aprobar el plan y permitir automáticamente herramientas de edición posteriores.&lt;/li&gt;
&lt;li&gt;Aprobar el plan, pero pedir confirmación manual para futuras ediciones.&lt;/li&gt;
&lt;li&gt;Pausar y seguir discutiendo el plan con Claude Code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si la tarea está clara, aprueba y continúa. Si no, pídele que complete el plan: estilo de página, stack técnico, estructura de carpetas, interacciones y criterios de aceptación.&lt;/p&gt;
&lt;p&gt;El modo plan reduce retrabajo. Si el Agent empieza directamente, puede crear muchos archivos rápido; si la dirección era incorrecta, luego todo se vuelve más difícil de corregir.&lt;/p&gt;
&lt;h2 id=&#34;cambia-de-modo-con-shift--tab&#34;&gt;Cambia de modo con Shift + Tab
&lt;/h2&gt;&lt;p&gt;En Claude Code, &lt;code&gt;Shift + Tab&lt;/code&gt; permite cambiar entre modos de trabajo. Se usa a menudo para entrar en modo plan o para cambiar a un modo de aprobación automática de edición.&lt;/p&gt;
&lt;p&gt;Hábitos recomendados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proyecto nuevo, función nueva o cambio grande: primero modo plan.&lt;/li&gt;
&lt;li&gt;Cambio pequeño o arreglo claro: ejecutar directamente.&lt;/li&gt;
&lt;li&gt;Borrado, reemplazos masivos o instalación de dependencias: mantener confirmación humana.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En modo plan, Claude Code puede preguntar detalles del proyecto. Usa flechas para elegir opciones y Enter para confirmar. Después de enviar feedback, actualizará el plan.&lt;/p&gt;
&lt;h2 id=&#34;no-abras-todos-los-permisos&#34;&gt;No abras todos los permisos
&lt;/h2&gt;&lt;p&gt;Cuando Claude Code ejecuta comandos, edita archivos o inicia programas, puede pedir permisos.&lt;/p&gt;
&lt;p&gt;Opciones comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permitir solo esta vez.&lt;/li&gt;
&lt;li&gt;Permitir el mismo tipo de comando en esta sesión.&lt;/li&gt;
&lt;li&gt;Rechazar o pausar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para abrir una página local, iniciar un servidor de desarrollo o revisar archivos, aprueba según necesidad. Pero no uses durante mucho tiempo un modo de &amp;ldquo;permitir todo&amp;rdquo; solo por comodidad.&lt;/p&gt;
&lt;p&gt;La aprobación total automática solo tiene sentido en tareas de bajo riesgo, muy claras y con respaldo Git. En el uso diario, conserva confirmación humana para borrar, sobrescribir carpetas, instalar dependencias, usar red, hacer commits o ejecutar scripts.&lt;/p&gt;
&lt;h2 id=&#34;ejecuta-comandos-locales-en-modo-terminal&#34;&gt;Ejecuta comandos locales en modo terminal
&lt;/h2&gt;&lt;p&gt;Claude Code puede entrar en modo de comandos de terminal y ejecutar comandos locales.&lt;/p&gt;
&lt;p&gt;Por ejemplo, después de generar una página, puedes abrir un archivo HTML con:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;start index.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;start&lt;/code&gt; es un comando de Windows para abrir archivos. Es más rápido que buscar el archivo manualmente.&lt;/p&gt;
&lt;p&gt;El modo terminal sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abrir páginas generadas.&lt;/li&gt;
&lt;li&gt;Ver contenido de directorios.&lt;/li&gt;
&lt;li&gt;Iniciar servidores locales.&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas o builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero los comandos de alto riesgo siguen requiriendo cuidado: borrado recursivo, mover directorios, sobrescrituras masivas y cambios de entorno.&lt;/p&gt;
&lt;h2 id=&#34;usa-rewind-cuando-el-resultado-se-desvía&#34;&gt;Usa rewind cuando el resultado se desvía
&lt;/h2&gt;&lt;p&gt;Si la página o el código que hizo Claude Code no es lo que quieres y cada corrección lo empeora, usa rewind temprano.&lt;/p&gt;
&lt;p&gt;Rewind puede devolver conversación o código a un punto anterior. Opciones comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Revertir código y conversación.&lt;/li&gt;
&lt;li&gt;Revertir solo conversación.&lt;/li&gt;
&lt;li&gt;Revertir solo código.&lt;/li&gt;
&lt;li&gt;Comprimir contenido anterior como resumen.&lt;/li&gt;
&lt;li&gt;Cancelar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cuando la dirección se desvió claramente, conviene volver código y conversación juntos. Así contexto y archivos regresan a un estado más limpio.&lt;/p&gt;
&lt;p&gt;Ten en cuenta que el rewind de Claude Code normalmente cubre archivos creados o modificados con herramientas internas. Archivos creados por comandos externos quizá no se reviertan por completo. Para proyectos importantes, usa Git.&lt;/p&gt;
&lt;h2 id=&#34;escribe-prompts-largos-en-un-editor&#34;&gt;Escribe prompts largos en un editor
&lt;/h2&gt;&lt;p&gt;No metas requisitos complejos en una sola línea.&lt;/p&gt;
&lt;p&gt;Si el sistema permite editar un prompt largo en un editor, úsalo, guarda y luego envíalo a Claude Code.&lt;/p&gt;
&lt;p&gt;Un prompt largo debería aclarar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Objetivo.&lt;/li&gt;
&lt;li&gt;Stack técnico.&lt;/li&gt;
&lt;li&gt;Qué no debe hacerse.&lt;/li&gt;
&lt;li&gt;Qué archivos deben conservarse.&lt;/li&gt;
&lt;li&gt;Cómo verificar el resultado.&lt;/li&gt;
&lt;li&gt;Criterios de aceptación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo, si quieres refactorizar una página HTML a un stack más moderno, no escribas solo &amp;ldquo;refactoriza&amp;rdquo;. Explica estructura por componentes, preservación visual, diseño responsive y pide ejecutar una comprobación de build.&lt;/p&gt;
&lt;h2 id=&#34;recupera-sesiones-después-de-salir&#34;&gt;Recupera sesiones después de salir
&lt;/h2&gt;&lt;p&gt;Si necesitas salir de Claude Code, hazlo normalmente. Luego vuelve al mismo directorio y arranca otra vez:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si el historial anterior no aparece, usa comandos de historial para ver sesiones recientes y cargar la sesión anterior.&lt;/p&gt;
&lt;p&gt;Esto sirve para continuar trabajo interrumpido. Pero no uses el historial como única memoria. Reglas del proyecto, stack, comandos comunes y notas deben estar en archivos del proyecto.&lt;/p&gt;
&lt;h2 id=&#34;guarda-reglas-del-proyecto-en-claudemd&#34;&gt;Guarda reglas del proyecto en CLAUDE.md
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; es un archivo de memoria importante para Claude Code. Normalmente está en la raíz del proyecto y registra reglas, stack, estructura de carpetas y restricciones de colaboración.&lt;/p&gt;
&lt;p&gt;Puedes inicializarlo con:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt; sirve para registrar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Objetivos del proyecto.&lt;/li&gt;
&lt;li&gt;Stack técnico.&lt;/li&gt;
&lt;li&gt;Comandos de inicio, prueba y build.&lt;/li&gt;
&lt;li&gt;Estructura de directorios.&lt;/li&gt;
&lt;li&gt;Estilo de código.&lt;/li&gt;
&lt;li&gt;Acciones prohibidas.&lt;/li&gt;
&lt;li&gt;Reglas de commit y despliegue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En cada conversación, Claude Code puede usar estas reglas como parte del contexto. Piensa en él como un manual del proyecto.&lt;/p&gt;
&lt;p&gt;Una prueba sencilla es añadir una regla evidente en &lt;code&gt;CLAUDE.md&lt;/code&gt; y luego preguntar algo. Si la respuesta sigue la regla, leyó la memoria del proyecto.&lt;/p&gt;
&lt;h2 id=&#34;usa--para-referenciar-archivos&#34;&gt;Usa @ para referenciar archivos
&lt;/h2&gt;&lt;p&gt;En el cuadro de entrada, &lt;code&gt;@&lt;/code&gt; permite seleccionar archivos o Agents y añadirlos al contexto actual.&lt;/p&gt;
&lt;p&gt;Sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hacer que Claude Code lea un archivo de configuración.&lt;/li&gt;
&lt;li&gt;Pedir cambios en una página concreta.&lt;/li&gt;
&lt;li&gt;Continuar según &lt;code&gt;CLAUDE.md&lt;/code&gt; u otro documento.&lt;/li&gt;
&lt;li&gt;Decir explícitamente &amp;ldquo;mira solo este archivo, no adivines la estructura&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comparado con pegar el contenido del archivo, &lt;code&gt;@&lt;/code&gt; es más claro y menos propenso a omisiones.&lt;/p&gt;
&lt;h2 id=&#34;revisa-y-comprime-contexto&#34;&gt;Revisa y comprime contexto
&lt;/h2&gt;&lt;p&gt;Tras una conversación larga, el contexto crece. Si se vuelve demasiado largo, el modelo puede ralentizarse o ignorar detalles antiguos.&lt;/p&gt;
&lt;p&gt;Usa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/context
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si el contexto ya es largo, comprime el historial:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/compact
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si aun así el efecto es malo, limpia el contexto actual:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/clear
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de limpiar, Claude Code todavía puede entender parte del proyecto mediante archivos, &lt;code&gt;CLAUDE.md&lt;/code&gt; y el directorio actual, pero no conserva todo el historial de conversación.&lt;/p&gt;
&lt;p&gt;Una regla útil: abre una conversación nueva al terminar una tarea, escribe reglas del proyecto en &lt;code&gt;CLAUDE.md&lt;/code&gt;, y no acumules discusión temporal para siempre en un solo chat.&lt;/p&gt;
&lt;h2 id=&#34;skills-convierte-flujos-fijos-en-instrucciones&#34;&gt;Skills: convierte flujos fijos en instrucciones
&lt;/h2&gt;&lt;p&gt;Skills son instrucciones reutilizables para Claude Code. No son prompts de una sola vez, sino flujos de tarea empaquetados.&lt;/p&gt;
&lt;p&gt;Por ejemplo, si generas informes semanales a menudo, crea una Skill de informe semanal con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Información de entrada necesaria.&lt;/li&gt;
&lt;li&gt;Formato de salida.&lt;/li&gt;
&lt;li&gt;Tono y estructura.&lt;/li&gt;
&lt;li&gt;Qué debe conservarse.&lt;/li&gt;
&lt;li&gt;Qué no debe inventarse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las Skills suelen contener &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt; e instrucciones detalladas. Al instalarlas en el directorio global de Skills, Claude Code puede reconocerlas y cargarlas cuando la tarea encaja.&lt;/p&gt;
&lt;p&gt;Candidatos adecuados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Informes semanales.&lt;/li&gt;
&lt;li&gt;Plantillas de revisión de código.&lt;/li&gt;
&lt;li&gt;Organización de documentos.&lt;/li&gt;
&lt;li&gt;Procesamiento de imágenes por lotes.&lt;/li&gt;
&lt;li&gt;Artículos con formato fijo.&lt;/li&gt;
&lt;li&gt;Flujos de inicialización de proyectos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si copias el mismo prompt muchas veces, conviértelo en Skill.&lt;/p&gt;
&lt;h2 id=&#34;agents-delega-subtareas-a-asistentes-independientes&#34;&gt;Agents: delega subtareas a asistentes independientes
&lt;/h2&gt;&lt;p&gt;Agents no son lo mismo que Skills.&lt;/p&gt;
&lt;p&gt;Una Skill es un manual de instrucciones. Un Agent se parece más a un asistente independiente que trabaja fuera de la conversación principal y devuelve resultados.&lt;/p&gt;
&lt;p&gt;Su valor está en aislar contexto. Para una revisión de código, puedes crear un Agent de solo lectura que lea el proyecto y entregue un informe sin modificar archivos. Así no contamina la conversación principal y reduce riesgos.&lt;/p&gt;
&lt;p&gt;Al crear un Agent, considera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si será de proyecto o de usuario.&lt;/li&gt;
&lt;li&gt;Si Claude Code debe generar la configuración.&lt;/li&gt;
&lt;li&gt;Qué herramientas puede usar.&lt;/li&gt;
&lt;li&gt;Qué modelo usará.&lt;/li&gt;
&lt;li&gt;Si guardará memoria.&lt;/li&gt;
&lt;li&gt;Si el prompt del Agent es claro.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para Agents de auditoría de código, da solo permisos de lectura. Primero que entregue un informe; luego la conversación principal decide si cambia código.&lt;/p&gt;
&lt;h2 id=&#34;plugins-empaqueta-skills-agents-mcp-y-hooks&#34;&gt;Plugins: empaqueta Skills, Agents, MCP y Hooks
&lt;/h2&gt;&lt;p&gt;Los plugins son paquetes de capacidad más completos. Pueden incluir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;Agents&lt;/li&gt;
&lt;li&gt;MCP&lt;/li&gt;
&lt;li&gt;Hooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Frente a una Skill aislada, un plugin sirve mejor para capacidades de conjunto. Un plugin de diseño frontend puede empaquetar estética de página, reglas de layout, hábitos de componentes y Agents relacionados.&lt;/p&gt;
&lt;p&gt;Al instalar plugins, suele haber opciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Directorio de usuario, efectivo para todos los proyectos.&lt;/li&gt;
&lt;li&gt;Directorio de proyecto, compartido con el proyecto.&lt;/li&gt;
&lt;li&gt;Directorio local del proyecto, solo efectivo en tu ordenador.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para capacidades personales frecuentes, usa el directorio de usuario. Para acuerdos de equipo, usa el proyecto. Para pruebas temporales, usa instalación local.&lt;/p&gt;
&lt;h2 id=&#34;los-plugins-mejoran-tareas-concretas&#34;&gt;Los plugins mejoran tareas concretas
&lt;/h2&gt;&lt;p&gt;En generación de páginas frontend, un plugin suele ser más estable que un prompt desnudo.&lt;/p&gt;
&lt;p&gt;Por ejemplo, para &amp;ldquo;crear una web personal de fotógrafo&amp;rdquo;, un prompt normal puede crear una página aceptable. Si usas explícitamente un plugin de diseño frontend, la estructura, jerarquía visual, espaciado, color y acabado suelen mejorar.&lt;/p&gt;
&lt;p&gt;Esto no reemplaza el criterio humano. Lo razonable es dejar que el plugin genere un primer borrador mejor y luego ajustar detalles manualmente.&lt;/p&gt;
&lt;h2 id=&#34;un-flujo-de-trabajo-más-estable&#34;&gt;Un flujo de trabajo más estable
&lt;/h2&gt;&lt;p&gt;Combinando todo lo anterior, queda un flujo más estable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inicia &lt;code&gt;claude&lt;/code&gt; dentro del directorio del proyecto.&lt;/li&gt;
&lt;li&gt;Discute requisitos primero en modo plan.&lt;/li&gt;
&lt;li&gt;Confirma stack y criterios de aceptación antes de aprobar.&lt;/li&gt;
&lt;li&gt;Mantén confirmación manual para acciones de alto riesgo.&lt;/li&gt;
&lt;li&gt;Usa modo terminal para previsualización y pruebas.&lt;/li&gt;
&lt;li&gt;Usa rewind cuando el resultado se desvíe.&lt;/li&gt;
&lt;li&gt;Escribe reglas en &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Revisa y comprime contexto en conversaciones largas.&lt;/li&gt;
&lt;li&gt;Convierte flujos repetidos en Skills.&lt;/li&gt;
&lt;li&gt;Delega inspección, investigación y análisis a Agents de solo lectura.&lt;/li&gt;
&lt;li&gt;Usa plugins para tareas de dominio específico.&lt;/li&gt;
&lt;li&gt;Mantén puntos de commit Git en proyectos importantes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Así Claude Code será mucho más estable que enviar una frase y esperar generación.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;La eficiencia de Claude Code no viene solo del modelo, sino también del control del flujo.&lt;/p&gt;
&lt;p&gt;El modo plan define la dirección, los permisos controlan el riesgo, rewind reduce retrabajo, &lt;code&gt;CLAUDE.md&lt;/code&gt; guarda reglas del proyecto, &lt;code&gt;/context&lt;/code&gt;, &lt;code&gt;/compact&lt;/code&gt; y &lt;code&gt;/clear&lt;/code&gt; gestionan contexto, Skills reutilizan flujos, Agents aíslan subtareas y plugins empaquetan capacidades completas.&lt;/p&gt;
&lt;p&gt;La mejor forma de usar Claude Code es dejar que avance dentro de límites claros, no entregarle todo el proyecto de una vez.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>opencode, Claude Code y Codex: diferencias y guía de herramientas open source de programación con IA</title>
        <link>https://knightli.com/es/2026/05/08/opencode-open-source-ai-coding-agent/</link>
        <pubDate>Fri, 08 May 2026 08:33:37 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/opencode-open-source-ai-coding-agent/</guid>
        <description>&lt;p&gt;&lt;code&gt;opencode&lt;/code&gt; es un AI Coding Agent open source de anomalyco. Su posicionamiento es directo: dar a los desarrolladores un asistente de código programable, extensible y capaz de conectarse a varios proveedores de modelos dentro de la terminal.&lt;/p&gt;
&lt;p&gt;Si lo comparamos con &lt;code&gt;Claude Code&lt;/code&gt; y &lt;code&gt;Codex&lt;/code&gt;, los tres resuelven una misma clase de problema: llevar la IA a bases de código reales para entender contexto, modificar archivos, ejecutar comandos y correr pruebas. Pero su orientación de producto es distinta.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;opencode&lt;/code&gt; pone más énfasis en open source, soporte de múltiples modelos y TUI de terminal. &lt;code&gt;Claude Code&lt;/code&gt; enfatiza el ecosistema de modelos de Anthropic y la colaboración de ingeniería local. &lt;code&gt;Codex&lt;/code&gt; es el AI coding agent de OpenAI, disponible desde la terminal, IDEs, Codex app y tareas en la nube.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-es-opencode&#34;&gt;Para quién es opencode
&lt;/h2&gt;&lt;p&gt;opencode encaja mejor con estos tipos de desarrolladores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quienes quieren completar cambios de código, análisis de proyectos y tareas de ingeniería desde la terminal.&lt;/li&gt;
&lt;li&gt;Quienes no quieren que su AI Coding Agent dependa de un único proveedor de modelos.&lt;/li&gt;
&lt;li&gt;Quienes prefieren herramientas open source y quieren auditarlas, ampliarlas o construir sobre ellas.&lt;/li&gt;
&lt;li&gt;Quienes ya están cómodos con Neovim, TUI y flujos de línea de comandos.&lt;/li&gt;
&lt;li&gt;Quienes quieren controlar en el futuro el mismo agente de programación desde una app de escritorio, móvil u otros clientes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su objetivo no es crear otra ventana de chat, sino poner capacidades de programación con IA dentro de la terminal y los directorios de proyecto que los desarrolladores ya usan.&lt;/p&gt;
&lt;h2 id=&#34;instalación&#34;&gt;Instalación
&lt;/h2&gt;&lt;p&gt;El README oficial ofrece varias formas de instalación.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Instalación directa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://opencode.ai/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# npm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i -g opencode-ai@latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Windows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop install opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choco install opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# macOS y Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install anomalyco/tap/opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Arch Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S opencode-bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Otros métodos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mise use -g opencode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nix run nixpkgs#opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El README oficial también recomienda eliminar versiones anteriores a 0.1.x antes de instalar, para evitar problemas causados por restos de versiones antiguas.&lt;/p&gt;
&lt;p&gt;El script de instalación elige el directorio de instalación con esta prioridad:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$OPENCODE_INSTALL_DIR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$XDG_BIN_DIR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$HOME/bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$HOME/.opencode/bin&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si necesitas especificar una ruta, puedes usar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENCODE_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin curl -fsSL https://opencode.ai/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;XDG_BIN_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/bin curl -fsSL https://opencode.ai/install &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;la-app-de-escritorio-sigue-en-beta&#34;&gt;La app de escritorio sigue en Beta
&lt;/h2&gt;&lt;p&gt;Además de la herramienta de línea de comandos, opencode también ofrece una app de escritorio, actualmente marcada como Beta. Se puede descargar desde GitHub Releases o &lt;code&gt;opencode.ai/download&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La versión de escritorio cubre estas plataformas:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Plataforma&lt;/th&gt;
          &lt;th&gt;Archivo&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS Apple Silicon&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;opencode-desktop-mac-arm64.dmg&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS Intel&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;opencode-desktop-mac-x64.dmg&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Windows&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;opencode-desktop-windows-x64.exe&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;.deb&lt;/code&gt;, &lt;code&gt;.rpm&lt;/code&gt; o &lt;code&gt;.AppImage&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En macOS y Windows también se puede instalar la app de escritorio con gestores de paquetes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# macOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install --cask opencode-desktop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Windows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop bucket add extras
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scoop install extras/opencode-desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;dos-modos-agent-integrados&#34;&gt;Dos modos Agent integrados
&lt;/h2&gt;&lt;p&gt;opencode incluye dos Agent integrados, que se pueden cambiar con la tecla &lt;code&gt;Tab&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;build&lt;/code&gt; es el modo predeterminado. Tiene permisos completos de desarrollo y sirve para editar código directamente, ejecutar comandos y avanzar en tareas de ingeniería.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;plan&lt;/code&gt; es el modo de solo lectura. Es más adecuado para analizar bases de código desconocidas, entender la estructura del proyecto y preparar un plan de cambios. Por defecto rechaza ediciones de archivos y pregunta antes de ejecutar comandos bash.&lt;/p&gt;
&lt;p&gt;Además, opencode incluye un sub-Agent &lt;code&gt;general&lt;/code&gt; para búsquedas complejas y tareas de varios pasos. Los usuarios pueden invocarlo escribiendo &lt;code&gt;@general&lt;/code&gt; en un mensaje.&lt;/p&gt;
&lt;p&gt;Este diseño es bastante práctico: antes de actuar, usa &lt;code&gt;plan&lt;/code&gt; para entender el proyecto; cuando haga falta cambiar código, cambia a &lt;code&gt;build&lt;/code&gt;. En repositorios grandes, separar permisos de lectura y escritura ayuda a reducir errores.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-codex&#34;&gt;Qué es Codex
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Codex&lt;/code&gt; es el AI coding agent de OpenAI para ayudar a desarrolladores a escribir código, revisar código, corregir bugs y entregar tareas de ingeniería.&lt;/p&gt;
&lt;p&gt;A diferencia de una herramienta simple de autocompletado, Codex se parece más a un Agent capaz de operar sobre una base de código. Puede trabajar contigo en herramientas locales y también puede recibir tareas delegadas para ejecutarlas en la nube. Los materiales oficiales de OpenAI describen Codex como disponible desde varias superficies, incluyendo CLI, IDEs, Codex app y flujos en la nube de ChatGPT/Codex.&lt;/p&gt;
&lt;p&gt;Para desarrolladores, Codex tiene varios puntos importantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puede leer bases de código, editar archivos, ejecutar comandos y correr pruebas.&lt;/li&gt;
&lt;li&gt;Soporta varias interfaces, incluyendo terminal, IDE, app y nube.&lt;/li&gt;
&lt;li&gt;Encaja con corrección de bugs, desarrollo de funciones, refactorización, migraciones, revisión de código y generación de pruebas.&lt;/li&gt;
&lt;li&gt;Está más ligado a cuentas, modelos y ecosistema de producto de OpenAI.&lt;/li&gt;
&lt;li&gt;Las tareas en la nube sirven para ejecutar en paralelo varias tareas de ingeniería relativamente bien definidas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si opencode se parece más a un framework abierto de agente en terminal, Codex se parece más a un banco de trabajo completo de programación con IA ofrecido por OpenAI: colaboración local, delegación en la nube y flujos de ingeniería más largos para equipos.&lt;/p&gt;
&lt;h2 id=&#34;diferencias-principales&#34;&gt;Diferencias principales
&lt;/h2&gt;&lt;p&gt;opencode, Claude Code y Codex son herramientas de programación con IA, pero la elección se entiende mejor mirando estas dimensiones.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Herramienta&lt;/th&gt;
          &lt;th&gt;Posicionamiento central&lt;/th&gt;
          &lt;th&gt;Ventajas principales&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;opencode&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;AI Coding Agent open source&lt;/td&gt;
          &lt;td&gt;Open source, múltiples modelos, TUI, arquitectura cliente/servidor&lt;/td&gt;
          &lt;td&gt;Desarrolladores que quieren una cadena de herramientas abierta, modelos reemplazables y un flujo centrado en terminal&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Claude Code&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Herramienta de programación de línea de comandos de Anthropic&lt;/td&gt;
          &lt;td&gt;Experiencia con modelos Claude, comprensión de código, contexto largo, colaboración en tareas de ingeniería&lt;/td&gt;
          &lt;td&gt;Desarrolladores que ya usan el ecosistema Claude/Anthropic y quieren avanzar tareas de código locales&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;Codex&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;AI coding agent de OpenAI&lt;/td&gt;
          &lt;td&gt;CLI, IDE, Codex app, tareas en la nube, flujos multi-Agent&lt;/td&gt;
          &lt;td&gt;Equipos que ya usan ChatGPT/OpenAI y quieren combinar colaboración local con delegación en la nube&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En resumen, las palabras clave de opencode son &amp;ldquo;apertura y reemplazabilidad&amp;rdquo;; las de Claude Code son &amp;ldquo;ecosistema Claude y agente local de ingeniería&amp;rdquo;; y las de Codex son &amp;ldquo;ecosistema OpenAI y colaboración desde múltiples entradas&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;diferencias-con-claude-code&#34;&gt;Diferencias con Claude Code
&lt;/h2&gt;&lt;p&gt;El FAQ oficial de opencode lo compara directamente con Claude Code. Ambos son muy parecidos en capacidad, pero las diferencias principales son estas.&lt;/p&gt;
&lt;p&gt;Primero, opencode es un proyecto 100% open source, alojado en GitHub y publicado con MIT license.&lt;/p&gt;
&lt;p&gt;Segundo, opencode no depende de un único proveedor de modelos. Recomienda los modelos ofrecidos a través de OpenCode Zen, pero también puede trabajar con Claude, OpenAI, Google o modelos locales. Para desarrolladores, esto significa que cuando cambien el costo, la capacidad o la disponibilidad de los modelos, no quedarán atados a una sola plataforma.&lt;/p&gt;
&lt;p&gt;Tercero, opencode incluye soporte LSP opcional. Para autocompletado, navegación, diagnósticos y comprensión del proyecto, LSP es una base muy importante.&lt;/p&gt;
&lt;p&gt;Cuarto, opencode pone más énfasis en TUI. Está creado por usuarios de Neovim y los creadores de terminal.shop, así que el foco del producto está claramente en la experiencia de terminal.&lt;/p&gt;
&lt;p&gt;Quinto, opencode usa una arquitectura cliente/servidor. Esto significa que opencode puede ejecutarse en tu computadora y, en el futuro, controlarse desde una TUI, una app de escritorio, una app móvil u otros clientes. La TUI es solo una de las posibles interfaces.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-elegir-opencode-claude-code-o-codex&#34;&gt;Cuándo elegir opencode, Claude Code o Codex
&lt;/h2&gt;&lt;p&gt;Si ya usas Claude Code o Codex, opencode no tiene por qué reemplazarlos de inmediato. Una forma más razonable de verlo es que ofrece una opción abierta, con modelos reemplazables y orientada a la terminal.&lt;/p&gt;
&lt;p&gt;Conviene considerar primero opencode cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quieres que tu herramienta de programación con IA sea lo más open source posible.&lt;/li&gt;
&lt;li&gt;No quieres atar tu flujo de trabajo a un proveedor de modelos.&lt;/li&gt;
&lt;li&gt;Quieres probar Claude, OpenAI, Google o modelos locales con la misma herramienta.&lt;/li&gt;
&lt;li&gt;Te gustan los flujos TUI y no quieres que una app de escritorio o web interrumpa tu flujo principal.&lt;/li&gt;
&lt;li&gt;Te interesa el potencial de control remoto de una arquitectura cliente/servidor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conviene considerar primero Claude Code cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usas principalmente modelos Claude.&lt;/li&gt;
&lt;li&gt;Te importan el contexto largo, la comprensión de código y la colaboración en tareas de ingeniería complejas.&lt;/li&gt;
&lt;li&gt;Quieres avanzar cambios, pruebas y refactorizaciones dentro de un repositorio local.&lt;/li&gt;
&lt;li&gt;Confías más en la experiencia predeterminada de Claude Code diseñada por Anthropic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conviene considerar primero Codex cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ya usas ChatGPT o el ecosistema de cuentas de OpenAI.&lt;/li&gt;
&lt;li&gt;Quieres un mismo coding agent en terminal, IDE, app de escritorio y tareas en la nube.&lt;/li&gt;
&lt;li&gt;Quieres delegar en la nube correcciones de bugs, desarrollo de funciones, migraciones o generación de pruebas relativamente claras, en paralelo.&lt;/li&gt;
&lt;li&gt;Necesitas revisión de código, tareas en segundo plano, colaboración de equipo y flujos multi-Agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si priorizas una experiencia oficial de extremo a extremo, configuración predeterminada de modelos, administración empresarial e integraciones listas, Claude Code o Codex pueden ser más cómodos. Si priorizas control, apertura y enfoque provider-agnostic, opencode merece atención.&lt;/p&gt;
&lt;h2 id=&#34;puntos-a-tener-en-cuenta&#34;&gt;Puntos a tener en cuenta
&lt;/h2&gt;&lt;p&gt;opencode, Claude Code y Codex avanzan rápido. Los releases de GitHub, comandos de instalación, nombres de archivos de escritorio, disponibilidad de modelos y permisos de planes pueden cambiar. Antes de instalar o elegir, conviene revisar directamente el README, la documentación y las páginas de releases oficiales de cada herramienta.&lt;/p&gt;
&lt;p&gt;Además, la app de escritorio de opencode sigue marcada como Beta, así que no conviene tratarla por defecto como una herramienta estable de producción. Para tareas de ingeniería diarias, la versión de terminal sigue siendo la entrada principal.&lt;/p&gt;
&lt;p&gt;Visto como tendencia de herramientas, opencode representa la dirección de cadena de herramientas abierta para AI Coding Agents: modelos reemplazables, clientes reemplazables y una capacidad central de agente lo más abierta posible. Codex y Claude Code se parecen más a modelos convertidos por sus empresas en superficies de producto completas para coding agents. Para desarrolladores, ambas rutas probablemente coexistirán durante mucho tiempo.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;opencode GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/anomalyco/opencode&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/anomalyco/opencode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;sitio oficial de opencode: &lt;a class=&#34;link&#34; href=&#34;https://opencode.ai&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://opencode.ai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;documentación de opencode: &lt;a class=&#34;link&#34; href=&#34;https://opencode.ai/docs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://opencode.ai/docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;opencode Releases: &lt;a class=&#34;link&#34; href=&#34;https://github.com/anomalyco/opencode/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/anomalyco/opencode/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI Codex: &lt;a class=&#34;link&#34; href=&#34;https://openai.com/codex/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://openai.com/codex/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Using Codex with your ChatGPT plan: &lt;a class=&#34;link&#34; href=&#34;https://help.openai.com/en/articles/11369540-codex-in-chatgpt&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://help.openai.com/en/articles/11369540-codex-in-chatgpt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI Codex CLI Getting Started: &lt;a class=&#34;link&#34; href=&#34;https://help.openai.com/en/articles/11096431-openai-codex-ci-getting-started&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://help.openai.com/en/articles/11096431-openai-codex-ci-getting-started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía de instalación de uv: cómo elegir entre macOS, Linux, Windows, pipx, Homebrew y WinGet</title>
        <link>https://knightli.com/es/2026/05/07/uv-installation-guide/</link>
        <pubDate>Thu, 07 May 2026 23:23:58 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/07/uv-installation-guide/</guid>
        <description>&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; es un gestor de toolchain de Python creado por Astral. Sirve para gestionar versiones de Python, entornos virtuales, dependencias, scripts, proyectos y herramientas. Tiene muchas formas de instalación. La documentación oficial ofrece instaladores independientes y también admite PyPI, Homebrew, WinGet, Scoop, Docker, GitHub Releases y Cargo.&lt;/p&gt;
&lt;p&gt;Si solo quieres instalarlo rápido, da prioridad al instalador independiente oficial. Si prefieres mantener la versión mediante el gestor de paquetes del sistema, usa Homebrew, WinGet o Scoop. Si ya acostumbras instalar herramientas de Python en entornos aislados, puedes usar &lt;code&gt;pipx&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;elección-rápida&#34;&gt;Elección rápida
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Escenario&lt;/th&gt;
          &lt;th&gt;Método recomendado&lt;/th&gt;
          &lt;th&gt;Comando&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Instalación rápida en macOS / Linux&lt;/td&gt;
          &lt;td&gt;Instalador independiente oficial&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;curl -LsSf https://astral.sh/uv/install.sh | sh&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS / Linux sin curl&lt;/td&gt;
          &lt;td&gt;Script oficial + wget&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;wget -qO- https://astral.sh/uv/install.sh | sh&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Instalación rápida en Windows&lt;/td&gt;
          &lt;td&gt;Instalador de PowerShell&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;powershell -ExecutionPolicy ByPass -c &amp;quot;irm https://astral.sh/uv/install.ps1 | iex&amp;quot;&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Instalación aislada de herramientas Python&lt;/td&gt;
          &lt;td&gt;pipx&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pipx install uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Instalación temporal o tradicional de Python&lt;/td&gt;
          &lt;td&gt;pip&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;pip install uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gestión de paquetes en macOS&lt;/td&gt;
          &lt;td&gt;Homebrew&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brew install uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Usuarios de MacPorts en macOS&lt;/td&gt;
          &lt;td&gt;MacPorts&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;sudo port install uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Gestión de paquetes en Windows&lt;/td&gt;
          &lt;td&gt;WinGet&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;winget install --id=astral-sh.uv -e&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Usuarios de Scoop en Windows&lt;/td&gt;
          &lt;td&gt;Scoop&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;scoop install main/uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Usuarios de Rust&lt;/td&gt;
          &lt;td&gt;Cargo&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;cargo install --locked uv&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Las opciones generales más recomendables son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS / Linux: instalador independiente oficial;&lt;/li&gt;
&lt;li&gt;Windows: instalador oficial de PowerShell o WinGet;&lt;/li&gt;
&lt;li&gt;si ya gestionas herramientas CLI de Python con &lt;code&gt;pipx&lt;/code&gt;: &lt;code&gt;pipx install uv&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;macos-y-linux-instalador-oficial&#34;&gt;macOS y Linux: instalador oficial
&lt;/h2&gt;&lt;p&gt;El método oficial más directo consiste en descargar el script con &lt;code&gt;curl&lt;/code&gt; y ejecutarlo con &lt;code&gt;sh&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LsSf https://astral.sh/uv/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si el sistema no tiene &lt;code&gt;curl&lt;/code&gt;, puedes usar &lt;code&gt;wget&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -qO- https://astral.sh/uv/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres instalar una versión concreta, coloca el número de versión en la URL. Por ejemplo, el ejemplo oficial usa &lt;code&gt;0.11.11&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LsSf https://astral.sh/uv/0.11.11/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este método encaja con la mayoría de entornos personales de desarrollo. Es simple, multiplataforma y funciona mejor con el mecanismo oficial de actualización de uv.&lt;/p&gt;
&lt;p&gt;El instalador coloca binarios como &lt;code&gt;uv&lt;/code&gt; y &lt;code&gt;uvx&lt;/code&gt; bajo el directorio del usuario, y puede modificar el shell profile para que los comandos puedan usarse directamente desde la terminal. Si no quieres que el instalador modifique PATH, revisa las opciones oficiales del installer, por ejemplo configurando &lt;code&gt;UV_NO_MODIFY_PATH=1&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;windows-instalador-de-powershell&#34;&gt;Windows: instalador de PowerShell
&lt;/h2&gt;&lt;p&gt;El método oficial en Windows es ejecutar el script de instalación con PowerShell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powershell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ExecutionPolicy&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ByPass&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-c&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;irm https://astral.sh/uv/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para instalar una versión concreta, también puedes poner el número de versión en la URL:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powershell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ExecutionPolicy&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ByPass&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-c&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;irm https://astral.sh/uv/0.11.11/install.ps1 | iex&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Aquí &lt;code&gt;ExecutionPolicy ByPass&lt;/code&gt; permite obtener y ejecutar el script de instalación desde internet. Como hábito de seguridad, puedes revisar el contenido del script antes de ejecutarlo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powershell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-c&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;irm https://astral.sh/uv/install.ps1 | more&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si estás acostumbrado a gestores de paquetes de Windows, también puedes priorizar WinGet o Scoop.&lt;/p&gt;
&lt;h2 id=&#34;instalar-con-pipx&#34;&gt;Instalar con pipx
&lt;/h2&gt;&lt;p&gt;La documentación oficial indica que uv se publica en PyPI. Si lo instalas desde PyPI, se recomienda ponerlo en un entorno aislado, por ejemplo con &lt;code&gt;pipx&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este método es adecuado si ya usas &lt;code&gt;pipx&lt;/code&gt; como gestor de herramientas CLI de Python. Evita mezclar uv con el entorno del proyecto actual.&lt;/p&gt;
&lt;p&gt;Si no tienes &lt;code&gt;pipx&lt;/code&gt;, también puedes usar &lt;code&gt;pip&lt;/code&gt; directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pero ten en cuenta que uv ofrece wheels precompilados en muchas plataformas. Si una plataforma no tiene un wheel compatible, se construirá desde código fuente, y en ese caso necesitarás una toolchain de Rust.&lt;/p&gt;
&lt;p&gt;Mi recomendación: en una máquina personal, &lt;code&gt;pipx install uv&lt;/code&gt; es más limpio que &lt;code&gt;pip install uv&lt;/code&gt;; dentro de un entorno de proyecto, no recomiendo instalar uv como dependencia del proyecto.&lt;/p&gt;
&lt;h2 id=&#34;homebrew-macports-winget-y-scoop&#34;&gt;Homebrew, MacPorts, WinGet y Scoop
&lt;/h2&gt;&lt;p&gt;Si prefieres gestores de paquetes del sistema, uv también admite canales comunes.&lt;/p&gt;
&lt;p&gt;En macOS, usa Homebrew:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los usuarios de MacPorts pueden usar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo port install uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En Windows, usa WinGet:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;winget&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;astral-sh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;uv&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los usuarios de Scoop pueden usar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;scoop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La ventaja de estos métodos es que delegan el mantenimiento en el gestor de paquetes del sistema. La desventaja es que el ritmo de actualización depende del origen de paquetes correspondiente, no del instalador oficial de uv.&lt;/p&gt;
&lt;h2 id=&#34;docker-github-releases-y-cargo&#34;&gt;Docker, GitHub Releases y Cargo
&lt;/h2&gt;&lt;p&gt;uv también ofrece imágenes Docker en GitHub Container Registry:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghcr.io/astral-sh/uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto sirve para CI, Dockerfiles, creación de imágenes y entornos temporales de ejecución. En uso real, conviene revisar también la documentación oficial de integración con Docker.&lt;/p&gt;
&lt;p&gt;Si quieres descargar binarios manualmente, puedes hacerlo desde GitHub Releases. Cada página de release suele incluir binarios para las plataformas compatibles y explicar cómo llamar al instalador independiente usando una URL de GitHub.&lt;/p&gt;
&lt;p&gt;Los usuarios de Rust también pueden instalar desde crates.io:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo install --locked uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pero este método compila desde código fuente y requiere una toolchain de Rust compatible. A menos que necesites instalarlo explícitamente desde el ecosistema Rust, los usuarios normales no tienen por qué elegir Cargo primero.&lt;/p&gt;
&lt;h2 id=&#34;actualizar-uv&#34;&gt;Actualizar uv
&lt;/h2&gt;&lt;p&gt;Si uv se instaló mediante el instalador independiente oficial, puedes usar el comando de autoactualización:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv self update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La documentación oficial indica que actualizar uv vuelve a ejecutar el instalador y puede modificar el shell profile. Si no quieres que la actualización modifique PATH, configura:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;UV_NO_MODIFY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si lo instalaste de otra forma, debes actualizarlo con el gestor correspondiente. Por ejemplo, si lo instalaste con &lt;code&gt;pip&lt;/code&gt;, usa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install --upgrade uv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Homebrew, WinGet, Scoop y MacPorts también deben usar sus propios comandos de actualización.&lt;/p&gt;
&lt;h2 id=&#34;activar-autocompletado-de-shell&#34;&gt;Activar autocompletado de shell
&lt;/h2&gt;&lt;p&gt;uv admite autocompletado de shell. La documentación oficial recomienda comprobar primero cuál es tu shell actual:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$SHELL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Bash:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(uv generate-shell-completion bash)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Zsh:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(uv generate-shell-completion zsh)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;fish:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;uv generate-shell-completion fish | source&amp;#39;&lt;/span&gt; &amp;gt; ~/.config/fish/completions/uv.fish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;PowerShell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(!(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Test-Path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;New-Item&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ItemType&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Force&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Add-Content&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Value&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;(&amp;amp; uv generate-shell-completion powershell) | Out-String | Invoke-Expression&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si también usas &lt;code&gt;uvx&lt;/code&gt; con frecuencia, puedes activar el autocompletado de &lt;code&gt;uvx&lt;/code&gt; por separado.&lt;/p&gt;
&lt;p&gt;Bash:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(uvx --generate-shell-completion bash)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Zsh:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(uvx --generate-shell-completion zsh)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;fish:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;uvx --generate-shell-completion fish | source&amp;#39;&lt;/span&gt; &amp;gt; ~/.config/fish/completions/uvx.fish
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;PowerShell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(!(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Test-Path&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;New-Item&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ItemType&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Force&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Add-Content&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Path&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Value&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;(&amp;amp; uvx --generate-shell-completion powershell) | Out-String | Invoke-Expression&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de configurarlo, reinicia el shell o recarga el archivo de configuración correspondiente.&lt;/p&gt;
&lt;h2 id=&#34;desinstalar-uv&#34;&gt;Desinstalar uv
&lt;/h2&gt;&lt;p&gt;Para desinstalar uv, primero puedes limpiar la caché y los datos gestionados por uv:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv cache clean
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uv python dir&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uv tool dir&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después elimina los binarios.&lt;/p&gt;
&lt;p&gt;macOS / Linux:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm ~/.local/bin/uv ~/.local/bin/uvx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;rm &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;rm &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uvx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;rm &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uvw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La documentación oficial también recuerda que antes de &lt;code&gt;0.5.0&lt;/code&gt;, uv se instalaba en &lt;code&gt;~/.cargo/bin&lt;/code&gt;. Si actualizaste desde una versión antigua, es posible que los binarios viejos sigan allí y debas eliminarlos manualmente.&lt;/p&gt;
&lt;h2 id=&#34;qué-hacer-después-de-instalar&#34;&gt;Qué hacer después de instalar
&lt;/h2&gt;&lt;p&gt;Después de instalar, conviene confirmar primero la versión:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego puedes empezar con algunas tareas comunes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv python install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install requests
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx ruff --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si es un proyecto nuevo, puedes seguir aprendiendo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;uv init&lt;/code&gt;: inicializar un proyecto;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv add&lt;/code&gt;: añadir dependencias;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv sync&lt;/code&gt;: sincronizar el entorno;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv run&lt;/code&gt;: ejecutar comandos dentro del entorno del proyecto;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uvx&lt;/code&gt;: ejecutar temporalmente herramientas CLI de Python.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mi-recomendación&#34;&gt;Mi recomendación
&lt;/h2&gt;&lt;p&gt;En una máquina personal de desarrollo, prioriza el instalador independiente oficial, porque es el método más alineado con la documentación oficial de uv y admite &lt;code&gt;uv self update&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si usas Windows y no quieres ejecutar un script remoto, puedes usar WinGet o Scoop. Si usas macOS y prefieres que todas tus herramientas las gestione Homebrew, puedes usar directamente &lt;code&gt;brew install uv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Quienes ya gestionan herramientas CLI de Python con &lt;code&gt;pipx&lt;/code&gt; pueden usar &lt;code&gt;pipx install uv&lt;/code&gt;. Pero no recomiendo ejecutar &lt;code&gt;pip install uv&lt;/code&gt; dentro del entorno virtual de un proyecto concreto, porque eso mezcla la toolchain con las dependencias del proyecto.&lt;/p&gt;
&lt;p&gt;Si se trata de CI o construcción de contenedores, revisa primero Docker y GitHub Releases, y fija la versión según el flujo de creación de la imagen.&lt;/p&gt;
&lt;h2 id=&#34;enlaces-relacionados&#34;&gt;Enlaces relacionados
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Documentación de instalación de uv: &lt;a class=&#34;link&#34; href=&#34;https://docs.astral.sh/uv/getting-started/installation/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.astral.sh/uv/getting-started/installation/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;uv First steps: &lt;a class=&#34;link&#34; href=&#34;https://docs.astral.sh/uv/getting-started/first-steps/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.astral.sh/uv/getting-started/first-steps/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Integración de uv con Docker: &lt;a class=&#34;link&#34; href=&#34;https://docs.astral.sh/uv/guides/integration/docker/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.astral.sh/uv/guides/integration/docker/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;uv GitHub Releases: &lt;a class=&#34;link&#34; href=&#34;https://github.com/astral-sh/uv/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/astral-sh/uv/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Warp Open Source: de terminal a entorno de desarrollo agentico</title>
        <link>https://knightli.com/es/2026/05/07/warpdotdev-warp-open-source-agentic-terminal/</link>
        <pubDate>Thu, 07 May 2026 20:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/07/warpdotdev-warp-open-source-agentic-terminal/</guid>
        <description>&lt;p&gt;&lt;code&gt;warpdotdev/warp&lt;/code&gt; es el repositorio open source del cliente de Warp. Warp se describe ahora como un &amp;ldquo;entorno de desarrollo agentico, nacido del terminal&amp;rdquo;: parte del terminal, pero lleva agentes de programacion con IA, indexacion de codebase, gestion de tareas y flujos de desarrollo a un solo entorno.&lt;/p&gt;
&lt;p&gt;No es un repositorio open source ordinario de emulador de terminal. Se parece mas a una respuesta a una pregunta mayor: cuando agentes como Claude Code, Codex y Gemini CLI se vuelven comunes, deberia el propio terminal convertirse en un entorno de desarrollo para planificar, observar y gestionar agentes?&lt;/p&gt;
&lt;p&gt;La respuesta de Warp es si.&lt;/p&gt;
&lt;h2 id=&#34;estado-actual-del-repositorio&#34;&gt;Estado actual del repositorio
&lt;/h2&gt;&lt;p&gt;Al 7 de mayo de 2026, &lt;code&gt;warpdotdev/warp&lt;/code&gt; es un repositorio publico. GitHub muestra alrededor de 56k stars y 4.1k forks. El README dice que el codigo del cliente Warp ahora es open source y da la bienvenida a contribuciones de la comunidad.&lt;/p&gt;
&lt;p&gt;El lenguaje principal es Rust. El desglose de lenguajes de GitHub muestra Rust por encima del 98%, lo que encaja con el posicionamiento de Warp: no es un wrapper web, sino una herramienta de desarrollo nativa y multiplataforma.&lt;/p&gt;
&lt;p&gt;Varios detalles del README importan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Warp es un entorno de desarrollo agentico, nacido del terminal.&lt;/li&gt;
&lt;li&gt;Puede usar su agente de programacion integrado y tambien conectar con agentes CLI externos como Claude Code, Codex y Gemini CLI.&lt;/li&gt;
&lt;li&gt;OpenAI es el patrocinador fundador del repositorio Warp recien abierto.&lt;/li&gt;
&lt;li&gt;Los flujos de gestion agentica del repositorio estan impulsados por modelos GPT.&lt;/li&gt;
&lt;li&gt;Los crates del framework de UI de Warp usan licencia MIT, mientras que el resto del codigo usa AGPL v3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto muestra que el movimiento open source de Warp no consiste solo en publicar un terminal. Esta operando el proyecto como un campo de pruebas para flujos de trabajo con agentes.&lt;/p&gt;
&lt;h2 id=&#34;warp-es-mas-que-un-terminal&#34;&gt;Warp es mas que un terminal
&lt;/h2&gt;&lt;p&gt;Los terminales tradicionales hacen principalmente tres cosas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iniciar una shell;&lt;/li&gt;
&lt;li&gt;ejecutar comandos;&lt;/li&gt;
&lt;li&gt;mostrar salida.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La diferenciacion inicial de Warp era hacer que el terminal se sintiera mas moderno: bloques de comandos, autocompletado, historial, colaboracion, interacciones con estilo de UI y pulido multiplataforma. Ahora el foco se ha desplazado mas hacia organizar el desarrollo alrededor de agentes de IA.&lt;/p&gt;
&lt;p&gt;Segun el README, Warp ya no enfatiza solo &amp;ldquo;un mejor terminal&amp;rdquo;. Enfatiza:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;agentes de programacion integrados;&lt;/li&gt;
&lt;li&gt;soporte para agentes CLI externos;&lt;/li&gt;
&lt;li&gt;triage de issues;&lt;/li&gt;
&lt;li&gt;escritura de especificaciones;&lt;/li&gt;
&lt;li&gt;revision de PR;&lt;/li&gt;
&lt;li&gt;coordinacion de contribuidores;&lt;/li&gt;
&lt;li&gt;sesiones de agentes observables.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En otras palabras, Warp quiere convertir el terminal de &amp;ldquo;donde escribes comandos&amp;rdquo; en &amp;ldquo;donde trabajas con multiples agentes&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;oz-y-gestion-de-proyectos-open-source&#34;&gt;Oz y gestion de proyectos open source
&lt;/h2&gt;&lt;p&gt;El README menciona &lt;code&gt;Oz&lt;/code&gt; varias veces.&lt;/p&gt;
&lt;p&gt;La vista de contribucion de Warp muestra miles de agentes Oz trabajando en triage de issues, especificaciones, implementacion y revision de PR. Esto es interesante porque extiende los agentes de IA desde &amp;ldquo;ayudar a una persona a escribir codigo&amp;rdquo; hasta &amp;ldquo;ayudar a gestionar colaboracion open source&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;La parte mas dificil de muchos proyectos open source no es escribir codigo, sino mantener:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;demasiados issues y poca clasificacion;&lt;/li&gt;
&lt;li&gt;bugs y feature requests mezclados;&lt;/li&gt;
&lt;li&gt;nuevos contribuidores sin saber que tareas son abordables;&lt;/li&gt;
&lt;li&gt;presion de revision de PR;&lt;/li&gt;
&lt;li&gt;maintainers intentando seguir cada hilo de comunidad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La idea de Warp es dejar que los agentes asuman primero parte del trabajo de gestion de proyecto y colaboracion. El README tambien menciona &lt;code&gt;Oz for OSS&lt;/code&gt;, un programa orientado a maintainers para llevar flujos similares de gestion open source agentica a otros repositorios.&lt;/p&gt;
&lt;p&gt;Esto sugiere que la ambicion de Warp no es solo el producto terminal, sino tambien un nuevo modelo de mantenimiento open source en la era de la IA.&lt;/p&gt;
&lt;h2 id=&#34;estructura-del-repositorio-y-stack-tecnico&#34;&gt;Estructura del repositorio y stack tecnico
&lt;/h2&gt;&lt;p&gt;Por la estructura del repositorio, Warp es un proyecto Rust grande.&lt;/p&gt;
&lt;p&gt;La raiz contiene:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app/&lt;/code&gt;: codigo principal de la aplicacion.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/&lt;/code&gt;: crates Rust centrales.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;assets/&lt;/code&gt;: archivos de recursos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;command-signatures-v2/&lt;/code&gt;: contenido relacionado con firmas de comandos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker/&lt;/code&gt;, &lt;code&gt;script/&lt;/code&gt;, &lt;code&gt;resources/&lt;/code&gt;, &lt;code&gt;specs/&lt;/code&gt; y otros directorios de ingenieria.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.claude/&lt;/code&gt;, &lt;code&gt;.warp/&lt;/code&gt;, &lt;code&gt;.agents/skills&lt;/code&gt; y otras configuraciones relacionadas con agentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WARP.md&lt;/code&gt; aporta mas detalle de ingenieria. Describe Warp como un emulador de terminal basado en Rust que usa un framework de UI interno llamado &lt;code&gt;WarpUI&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Los modulos principales pueden entenderse aproximadamente asi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;app/&lt;/code&gt;: emulacion de terminal, gestion de shell, integracion de IA, Drive, autenticacion, ajustes, workspace y sesiones.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/warp_core/&lt;/code&gt;: utilidades centrales y abstraccion de plataforma.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/editor/&lt;/code&gt;: funcionalidad de edicion de texto.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/warpui/&lt;/code&gt; y &lt;code&gt;crates/warpui_core/&lt;/code&gt;: framework de UI interno.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/ipc/&lt;/code&gt;: comunicacion entre procesos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crates/graphql/&lt;/code&gt;: cliente GraphQL y esquema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WARP.md&lt;/code&gt; tambien menciona rasgos arquitectonicos como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un sistema Entity-Handle;&lt;/li&gt;
&lt;li&gt;una estructura modular de workspace;&lt;/li&gt;
&lt;li&gt;targets para macOS, Windows, Linux y WASM;&lt;/li&gt;
&lt;li&gt;integracion de IA, incluyendo Agent Mode, conciencia de contexto e indexacion de codebase;&lt;/li&gt;
&lt;li&gt;sincronizacion cloud Warp Drive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta complejidad esta mas cerca de un IDE completo que de un terminal tradicional ligero.&lt;/p&gt;
&lt;h2 id=&#34;comandos-de-build-local&#34;&gt;Comandos de build local
&lt;/h2&gt;&lt;p&gt;El README da un flujo local conciso:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./script/bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./script/run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./script/presubmit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Donde:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;./script/bootstrap&lt;/code&gt; realiza la inicializacion especifica de la plataforma.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./script/run&lt;/code&gt; compila y ejecuta Warp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./script/presubmit&lt;/code&gt; ejecuta formato, clippy, tests y otras comprobaciones previas al envio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WARP.md&lt;/code&gt; tambien lista comandos mas detallados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo bundle --bin warp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo nextest run --no-fail-fast --workspace --exclude command-signatures-v2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo fmt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo clippy --workspace --all-targets --all-features --tests -- -D warnings
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres contribuir a Warp, &lt;code&gt;./script/presubmit&lt;/code&gt; es practicamente obligatorio.&lt;/p&gt;
&lt;h2 id=&#34;flujo-de-contribucion&#34;&gt;Flujo de contribucion
&lt;/h2&gt;&lt;p&gt;El flujo de contribucion de Warp no es simplemente &amp;ldquo;abre un PR&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;El README describe un proceso ligero desde issue hasta PR:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Buscar primero issues existentes.&lt;/li&gt;
&lt;li&gt;Si no hay duplicado, abrir un bug o feature request.&lt;/li&gt;
&lt;li&gt;Los maintainers revisan el issue y pueden anadir etiquetas de preparacion.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ready-to-spec&lt;/code&gt; significa que el diseno puede expandirse en una especificacion.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ready-to-implement&lt;/code&gt; significa que el diseno esta lo bastante claro para empezar un PR de implementacion.&lt;/li&gt;
&lt;li&gt;Los contribuidores pueden tomar issues etiquetados.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este proceso encaja con un proyecto open source grande. Separa ideas, diseno e implementacion, reduciendo el riesgo de que los contribuidores pasen tiempo construyendo en una direccion equivocada.&lt;/p&gt;
&lt;p&gt;Tambien encaja bien con agentes de IA. Un agente puede organizar issues, redactar specs, anadir tests y luego pasar a implementacion. Warp usa este patron para demostrar gestion de proyecto agentica.&lt;/p&gt;
&lt;h2 id=&#34;licencia-mit--agpl-v3&#34;&gt;Licencia: MIT + AGPL v3
&lt;/h2&gt;&lt;p&gt;Warp usa una estructura de doble licencia.&lt;/p&gt;
&lt;p&gt;El README dice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;el framework de UI de Warp, concretamente los crates &lt;code&gt;warpui_core&lt;/code&gt; y &lt;code&gt;warpui&lt;/code&gt;, usa licencia MIT;&lt;/li&gt;
&lt;li&gt;el resto del repositorio usa AGPL v3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto importa. AGPL v3 tiene requisitos open source mas fuertes para servicios de red y distribucion. Si estas aprendiendo, investigando o contribuyendo, normalmente es sencillo. Pero si quieres usar codigo de Warp en un producto comercial o en un derivado closed-source, debes leer la licencia con cuidado y consultar asesoria legal si hace falta.&lt;/p&gt;
&lt;p&gt;En resumen, Warp es open source, pero no es open source de &amp;ldquo;tomalo y cierralo libremente&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;por-que-merece-atencion&#34;&gt;Por que merece atencion
&lt;/h2&gt;&lt;p&gt;Primero, Warp une terminal, agentes y gestion de proyecto.&lt;/p&gt;
&lt;p&gt;Muchas herramientas de programacion con IA siguen siendo CLI o plugins de editor. Warp parte del punto de entrada del terminal e intenta unificar tareas de agentes, ejecucion de codigo, salida de comandos, flujos de PR y colaboracion de equipo.&lt;/p&gt;
&lt;p&gt;Segundo, el enfoque open source de Warp es un buen lugar para observar flujos con agentes.&lt;/p&gt;
&lt;p&gt;No solo publica codigo. Tambien expone vistas de contribucion, sesiones de agentes, triage de issues y flujos de especificacion. Para cualquiera que estudie como la IA puede participar en colaboracion open source, el propio repositorio es una muestra.&lt;/p&gt;
&lt;p&gt;Tercero, Warp es una aplicacion de escritorio Rust compleja.&lt;/p&gt;
&lt;p&gt;Si quieres estudiar GUI en Rust, emulacion de terminal, apps multiplataforma, clientes GraphQL, sincronizacion cloud e integracion de IA, el repositorio tiene mucho que leer. Pero no es un proyecto pequeno, asi que los nuevos contribuidores deberian leer primero la documentacion y el proceso de issues.&lt;/p&gt;
&lt;p&gt;Cuarto, Warp soporta tanto un agente integrado como un enfoque &amp;ldquo;trae tu propio agente CLI&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Esto es realista. Los desarrolladores no usaran un solo agente. Claude Code, Codex, Gemini CLI, OpenCode, OpenClaw y herramientas similares probablemente coexistiran. Si Warp puede convertirse en un banco de trabajo para ellos, se vuelve mas valioso que un terminal de proposito unico.&lt;/p&gt;
&lt;h2 id=&#34;a-quien-deberia-importarle&#34;&gt;A quien deberia importarle
&lt;/h2&gt;&lt;p&gt;Si eres un usuario normal de terminal, Warp importa porque el terminal puede estar cambiando de herramienta de linea de comandos a banco de trabajo con IA.&lt;/p&gt;
&lt;p&gt;Si eres usuario intensivo de agentes de programacion con IA, Warp merece seguimiento porque intenta gestionar multiples agentes en vez de actuar como otro punto de entrada de chat.&lt;/p&gt;
&lt;p&gt;Si mantienes proyectos open source, la direccion de Oz for OSS merece atencion. Explora triage de issues con agentes, revision de PR, colaboracion comunitaria e incorporacion de contribuidores.&lt;/p&gt;
&lt;p&gt;Si eres desarrollador Rust, Warp es una aplicacion de escritorio real y de gran escala que merece estudiarse por organizacion de UI, internals de terminal, sincronizacion cloud, integracion de IA y codigo multiplataforma.&lt;/p&gt;
&lt;p&gt;Si solo quieres un terminal que pueda reemplazar al actual de inmediato, es mejor descargar primero la version estable y despues decidir si estudiar el codigo fuente. Compilar desde codigo es mas adecuado para contribuidores y usuarios profundos.&lt;/p&gt;
&lt;h2 id=&#34;lectura-breve&#34;&gt;Lectura breve
&lt;/h2&gt;&lt;p&gt;El punto de que Warp se vuelva open source no es simplemente &amp;ldquo;un terminal moderno se hizo open source&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Mas precisamente, Warp intenta actualizar el terminal hasta convertirlo en un entorno de desarrollo agentico: el terminal conecta shell, codebase, ejecucion de comandos, agentes, issues, PRs y flujo de colaboracion.&lt;/p&gt;
&lt;p&gt;A medida que los agentes de programacion con IA sigan creciendo, el punto de entrada del entorno de desarrollo puede cambiar. Antes, el IDE dominaba la experiencia del desarrollador mientras el terminal ejecutaba comandos. Ahora el terminal puede convertirse en el centro de colaboracion con agentes. El repositorio de Warp explora esa posibilidad.&lt;/p&gt;
&lt;h2 id=&#34;enlaces-relacionados&#34;&gt;Enlaces relacionados
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub repository: &lt;a class=&#34;link&#34; href=&#34;https://github.com/warpdotdev/warp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/warpdotdev/warp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Warp website: &lt;a class=&#34;link&#34; href=&#34;https://www.warp.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.warp.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Warp documentation: &lt;a class=&#34;link&#34; href=&#34;https://docs.warp.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.warp.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Warp build overview: &lt;a class=&#34;link&#34; href=&#34;https://build.warp.dev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://build.warp.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WARP.md: &lt;a class=&#34;link&#34; href=&#34;https://github.com/warpdotdev/warp/blob/master/WARP.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/warpdotdev/warp/blob/master/WARP.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CONTRIBUTING.md: &lt;a class=&#34;link&#34; href=&#34;https://github.com/warpdotdev/warp/blob/master/CONTRIBUTING.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/warpdotdev/warp/blob/master/CONTRIBUTING.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía inicial de Codex App: instalación, sandbox, tareas paralelas, Skills y MCP</title>
        <link>https://knightli.com/es/2026/05/06/codex-app-complete-guide-skills-mcp/</link>
        <pubDate>Wed, 06 May 2026 08:41:17 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/06/codex-app-complete-guide-skills-mcp/</guid>
        <description>&lt;p&gt;Codex App puede entenderse como un espacio de trabajo de tareas para programación con IA. No es un IDE tradicional ni solo una ventana de chat. Reúne multitarea, gestión de proyectos, permisos de sandbox, Git, ejecución en la nube, plugins, Skills, MCP y automatización en una sola interfaz.&lt;/p&gt;
&lt;p&gt;Si ya usas Codex CLI, Claude Code, Cursor u otros coding agents, la parte más interesante de Codex App es que convierte &amp;ldquo;ejecutar varios agentes en paralelo&amp;rdquo; en un flujo de escritorio más claro.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirve-codex-app&#34;&gt;Para qué sirve Codex App
&lt;/h2&gt;&lt;p&gt;El valor central de Codex App no es responder preguntas, sino permitir que la IA ejecute tareas de forma continua dentro de un directorio de proyecto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editar código, ejecutar comandos e iniciar servidores de desarrollo.&lt;/li&gt;
&lt;li&gt;Gestionar múltiples proyectos y múltiples tareas.&lt;/li&gt;
&lt;li&gt;Ejecutar tareas largas localmente o en la nube.&lt;/li&gt;
&lt;li&gt;Llamar plugins, Skills y MCP para ampliar capacidades.&lt;/li&gt;
&lt;li&gt;Gestionar cambios mediante Git, worktree y flujos PR.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenAI también posiciona Codex App como una interfaz para gestionar múltiples coding agents. Es adecuada para personas que necesitan avanzar varias tareas de programación a la vez, especialmente páginas frontend, scripts, apps pequeñas, documentación y flujos de automatización.&lt;/p&gt;
&lt;h2 id=&#34;preparación-antes-de-instalar&#34;&gt;Preparación antes de instalar
&lt;/h2&gt;&lt;p&gt;Antes de usar Codex App, conviene preparar tres herramientas básicas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Node.js&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VS Code&lt;/code&gt; o tu IDE preferido&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Codex App soporta macOS y Windows. Después de instalar, inicia sesión con tu cuenta de ChatGPT. En el primer lanzamiento, puedes elegir tu escenario principal de uso, como programación o trabajo diario. Codex precargará algunos plugins y Skills según tus elecciones, y luego puedes ajustarlos en configuración y en el marketplace de plugins.&lt;/p&gt;
&lt;p&gt;Las funciones principales en Windows y macOS son bastante parecidas, pero algunas capacidades de automatización del ordenador pueden depender de la plataforma y del soporte de plugins. Usa lo que tu versión actual muestre realmente.&lt;/p&gt;
&lt;h2 id=&#34;estructura-de-interfaz-proyectos-tareas-y-chats&#34;&gt;Estructura de interfaz: proyectos, tareas y chats
&lt;/h2&gt;&lt;p&gt;Codex App usa un diseño clásico de tres columnas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Izquierda: proyectos, tareas, historial de chats, plugins y entradas de automatización.&lt;/li&gt;
&lt;li&gt;Centro: ventana de chat actual.&lt;/li&gt;
&lt;li&gt;Derecha: archivos, navegador, terminal, resultados de ejecución y otros paneles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un proyecto normalmente corresponde a una carpeta local. Puedes abrir varios chats dentro del mismo proyecto, o abrir varios proyectos a la vez para que distintos agentes trabajen en paralelo.&lt;/p&gt;
&lt;p&gt;La lista de tareas muestra distintos estados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running: el agente sigue ejecutando.&lt;/li&gt;
&lt;li&gt;Waiting for approval: debes confirmar permisos, red, instalación de dependencias o una acción de alto riesgo.&lt;/li&gt;
&lt;li&gt;Completed: la tarea terminó, y puedes inspeccionar el resultado o seguir preguntando.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es más intuitivo que cambiar entre varias ventanas de terminal, y se adapta mejor a gestionar varias tareas de IA a la vez.&lt;/p&gt;
&lt;h2 id=&#34;sandbox-y-control-de-permisos&#34;&gt;Sandbox y control de permisos
&lt;/h2&gt;&lt;p&gt;El sistema de permisos de Codex App se construye alrededor del sandbox. Por defecto, la carpeta actual del proyecto se convierte en el workspace principal del agente.&lt;/p&gt;
&lt;p&gt;Los límites de permisos comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puede leer y modificar archivos dentro del directorio del proyecto.&lt;/li&gt;
&lt;li&gt;Por defecto no puede modificar libremente archivos fuera del proyecto.&lt;/li&gt;
&lt;li&gt;La red o comandos de alto riesgo están restringidos por defecto.&lt;/li&gt;
&lt;li&gt;Cuando necesita acceso elevado, pide aprobación al usuario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un modo práctico es &amp;ldquo;auto review&amp;rdquo;: las acciones de bajo riesgo se permiten automáticamente, mientras que las acciones de alto riesgo siguen siendo confirmadas por el usuario. Esto reduce ventanas emergentes frecuentes y evita que operaciones peligrosas ocurran en silencio.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Full access&amp;rdquo; debe habilitarse con cautela. Es adecuado cuando sabes exactamente qué necesita hacer el agente, el proyecto ya tiene respaldos Git y los archivos importantes tienen copias separadas. No se recomienda como valor diario permanente.&lt;/p&gt;
&lt;h2 id=&#34;contexto-modelos-y-cuotas&#34;&gt;Contexto, modelos y cuotas
&lt;/h2&gt;&lt;p&gt;Codex App muestra el uso de contexto del chat actual. Cuanto más larga es la conversación y más historial contiene, más contexto necesita procesar el modelo.&lt;/p&gt;
&lt;p&gt;Hábitos útiles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empezar un chat nuevo después de terminar una tarea.&lt;/li&gt;
&lt;li&gt;Los chats largos pueden comprimirse manualmente, pero no trates la compresión como memoria perfecta.&lt;/li&gt;
&lt;li&gt;Para tareas complejas, declara claramente objetivos, límites y criterios de aceptación.&lt;/li&gt;
&lt;li&gt;No pegues de golpe logs, errores o archivos grandes e irrelevantes en un chat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para selección de modelos, ajusta la fuerza de razonamiento según la complejidad de la tarea. Ediciones simples, escritura y tareas repetitivas no siempre necesitan el modelo más fuerte. Migraciones de arquitectura, bugs difíciles y refactors entre archivos encajan mejor con modelos más potentes.&lt;/p&gt;
&lt;p&gt;Si la interfaz tiene un modo rápido, recuerda que normalmente consume más cuota. Úsalo cuando la velocidad importe, pero no como valor diario predeterminado.&lt;/p&gt;
&lt;h2 id=&#34;generación-de-imágenes-y-entradas-multimodales&#34;&gt;Generación de imágenes y entradas multimodales
&lt;/h2&gt;&lt;p&gt;Codex App puede aceptar imágenes y archivos como contexto, y puede llamar generación de imágenes en escenarios adecuados.&lt;/p&gt;
&lt;p&gt;Esto es útil para proyectos frontend y de contenido. Por ejemplo, puedes pedir a Codex:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Corregir estilos de página según capturas.&lt;/li&gt;
&lt;li&gt;Reemplazar imágenes inadecuadas en una web.&lt;/li&gt;
&lt;li&gt;Generar imágenes de producto, imágenes de carrusel o assets de página.&lt;/li&gt;
&lt;li&gt;Señalar qué debe cambiarse a partir de una captura de UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un enfoque más eficiente no es decir solo &amp;ldquo;hazlo más bonito&amp;rdquo;, sino usar capturas y señalar problemas concretos, como &amp;ldquo;el espacio en esta tarjeta es demasiado grande&amp;rdquo;, &amp;ldquo;esta imagen no coincide con la escena del servicio&amp;rdquo; o &amp;ldquo;haz más clara el área del mapa&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;steer-corregir-dirección-durante-la-ejecución&#34;&gt;Steer: corregir dirección durante la ejecución
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Steer&lt;/code&gt; puede entenderse como tomar control de la dirección durante la ejecución. Si el agente ya empezó pero notas que entendió mal, no siempre conviene esperar a que termine para corregirlo.&lt;/p&gt;
&lt;p&gt;Puedes usar steering para insertar una nueva instrucción en el flujo de ejecución actual y hacer que Codex corrija el rumbo.&lt;/p&gt;
&lt;p&gt;Buenos casos de uso para Steer incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El agente entendió mal el requisito.&lt;/li&gt;
&lt;li&gt;El estilo de página generado es claramente incorrecto.&lt;/li&gt;
&lt;li&gt;El plan actual es demasiado costoso o pesado.&lt;/li&gt;
&lt;li&gt;Necesitas añadir una restricción clave temporalmente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En general, mantén el comportamiento predeterminado en cola y usa Steer manualmente solo cuando se necesite intervención. Esto evita interrumpir tareas normales y aun así permite recuperar la dirección en momentos clave.&lt;/p&gt;
&lt;h2 id=&#34;modo-plan-y-navegador-integrado&#34;&gt;Modo plan y navegador integrado
&lt;/h2&gt;&lt;p&gt;Para tareas complejas, empieza con modo plan. En modo plan, Codex no modifica código de inmediato. Primero produce un plan y puede hacer preguntas clave con tarjetas.&lt;/p&gt;
&lt;p&gt;Tareas adecuadas para modo plan incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migración de frameworks, como pasar un proyecto React a Next.js.&lt;/li&gt;
&lt;li&gt;Refactors grandes.&lt;/li&gt;
&lt;li&gt;Funciones que involucran bases de datos, autenticación o despliegue.&lt;/li&gt;
&lt;li&gt;Requisitos donde aún no has decidido la ruta técnica.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El panel derecho de Codex App puede abrir un navegador integrado para previsualizar el servidor local de desarrollo. Puedes anotar la página y dejar que Codex modifique una ubicación específica de UI. Este flujo de &amp;ldquo;mirar la página, hacer clic en la posición y pedir a la IA que la cambie&amp;rdquo; suele ser mejor para depuración frontend que descripciones puramente textuales.&lt;/p&gt;
&lt;h2 id=&#34;git-ide-y-rollback-de-código&#34;&gt;Git, IDE y rollback de código
&lt;/h2&gt;&lt;p&gt;Codex App no es un IDE completo. Puede ver código y añadir anotaciones, pero la edición manual sigue siendo mejor en VS Code, Cursor, Windsurf u otro IDE.&lt;/p&gt;
&lt;p&gt;Todo proyecto de Codex debería inicializar Git temprano:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pedir a Codex que cree o revise &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Hacer un commit al llegar a un estado usable.&lt;/li&gt;
&lt;li&gt;Asegurar un punto de commit limpio antes de cada cambio grande.&lt;/li&gt;
&lt;li&gt;Volver atrás con Git si no estás satisfecho.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si haces rollback solo del historial de chat, el código no vuelve automáticamente. Un enfoque más seguro es devolver el chat al punto correcto y luego usar un hash de commit Git para devolver el código al estado correspondiente.&lt;/p&gt;
&lt;h2 id=&#34;worktree-desarrollo-paralelo-en-varias-direcciones&#34;&gt;Worktree: desarrollo paralelo en varias direcciones
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;git worktree&lt;/code&gt; es especialmente adecuado para agentes paralelos en Codex App.&lt;/p&gt;
&lt;p&gt;Crea varios directorios de trabajo independientes desde el mismo repositorio, cada uno correspondiente a una rama distinta. Esto permite que diferentes agentes trabajen en distintas carpetas al mismo tiempo sin sobrescribirse.&lt;/p&gt;
&lt;p&gt;Uso típico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un worktree optimiza el componente de reseñas de clientes.&lt;/li&gt;
&lt;li&gt;Un worktree ajusta información de tienda y diseño del mapa.&lt;/li&gt;
&lt;li&gt;Fusionar ambas tareas de vuelta a main tras completarlas.&lt;/li&gt;
&lt;li&gt;Eliminar worktrees temporales después de fusionar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es mucho más seguro que dejar que varios agentes modifiquen código en el mismo directorio. Si hay conflictos, revísalos y fusiónalos con flujos Git normales.&lt;/p&gt;
&lt;h2 id=&#34;entorno-de-ejecución-en-la-nube&#34;&gt;Entorno de ejecución en la nube
&lt;/h2&gt;&lt;p&gt;Codex puede trabajar no solo en tu máquina local, sino también en un entorno de nube.&lt;/p&gt;
&lt;p&gt;La ejecución en la nube es adecuada cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estás fuera y solo tienes un teléfono.&lt;/li&gt;
&lt;li&gt;Quieres que los agentes ejecuten tareas largas en segundo plano.&lt;/li&gt;
&lt;li&gt;El código ya se sincronizó con GitHub y Codex necesita modificar el repositorio remoto.&lt;/li&gt;
&lt;li&gt;Quieres revisar y fusionar cambios mediante PRs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un flujo típico es: subir el código local a GitHub, dejar que Codex descargue el repositorio en un entorno de nube, ejecutar la tarea, generar cambios y presentarlos como PR o diff para revisión.&lt;/p&gt;
&lt;p&gt;Al continuar el desarrollo local, recuerda traer los últimos cambios remotos.&lt;/p&gt;
&lt;h2 id=&#34;sistema-de-memoria-escribe-un-buen-agentsmd&#34;&gt;Sistema de memoria: escribe un buen AGENTS.md
&lt;/h2&gt;&lt;p&gt;Los chats nuevos no tienen memoria histórica completa por defecto. Una vez que un proyecto se vuelve complejo, explicar el contexto repetidamente es ineficiente.&lt;/p&gt;
&lt;p&gt;La solución más general es mantener &lt;code&gt;AGENTS.md&lt;/code&gt; en la raíz del proyecto. Este archivo puede registrar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Objetivos del proyecto y stack principal.&lt;/li&gt;
&lt;li&gt;Comandos comunes.&lt;/li&gt;
&lt;li&gt;Estructura de directorios.&lt;/li&gt;
&lt;li&gt;Estilo de código y convenciones de nombres.&lt;/li&gt;
&lt;li&gt;Acciones prohibidas, como borrar archivos en masa.&lt;/li&gt;
&lt;li&gt;Reglas de pruebas, build y despliegue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;También puedes pedir a Codex que lea el proyecto y genere una primera versión de &lt;code&gt;AGENTS.md&lt;/code&gt;, luego revisarla manualmente. Para proyectos complejos, vale la pena mantener este archivo.&lt;/p&gt;
&lt;p&gt;Las reglas globales deben usarse con cuidado. Son adecuadas para restricciones universales de seguridad, como &amp;ldquo;no borrar directorios recursivamente&amp;rdquo; o &amp;ldquo;confirmar antes de operaciones destructivas&amp;rdquo;. No pongas detalles específicos del proyecto en reglas globales, o contaminarán otros proyectos.&lt;/p&gt;
&lt;h2 id=&#34;plugins-y-automatizaciones&#34;&gt;Plugins y automatizaciones
&lt;/h2&gt;&lt;p&gt;Los plugins conectan Codex con servicios externos como GitHub, Gmail, Google Drive, bases de datos y plataformas de despliegue.&lt;/p&gt;
&lt;p&gt;Su valor está en reducir copiar y pegar. Por ejemplo, Codex puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Revisar tendencias de estrellas de un repositorio GitHub.&lt;/li&gt;
&lt;li&gt;Resumir contenido de email y enviártelo.&lt;/li&gt;
&lt;li&gt;Ejecutar una revisión recurrente.&lt;/li&gt;
&lt;li&gt;Escribir el resultado como resumen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las automatizaciones son adecuadas para tareas repetidas. Por ejemplo, revisar datos de un repositorio todos los viernes por la tarde y enviar un informe por email. Las tareas simples de automatización normalmente no requieren el modelo más fuerte; basta un modelo más ligero.&lt;/p&gt;
&lt;h2 id=&#34;skills-convertir-flujos-de-trabajo-en-capacidades-reutilizables&#34;&gt;Skills: convertir flujos de trabajo en capacidades reutilizables
&lt;/h2&gt;&lt;p&gt;Las Skills son &amp;ldquo;manuales profesionales&amp;rdquo; para Codex. No son prompts de una sola vez. Empaquetan un flujo de tarea, reglas, scripts y notas para que Codex pueda reutilizarlos de forma fiable después.&lt;/p&gt;
&lt;p&gt;Fuentes comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skills oficiales.&lt;/li&gt;
&lt;li&gt;Skills de terceros.&lt;/li&gt;
&lt;li&gt;Skills escritas por ti.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Buenos candidatos para Skills incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convertir subtítulos en notas ilustradas.&lt;/li&gt;
&lt;li&gt;Escribir informes semanales con formato de empresa.&lt;/li&gt;
&lt;li&gt;Procesar imágenes o documentos por lotes.&lt;/li&gt;
&lt;li&gt;Revisiones de código con formato fijo.&lt;/li&gt;
&lt;li&gt;Inicialización de proyectos para un framework concreto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si has copiado y pegado el mismo prompt muchas veces, vale la pena convertirlo en una Skill.&lt;/p&gt;
&lt;h2 id=&#34;mcp-conectar-herramientas-externas-y-bases-de-datos&#34;&gt;MCP: conectar herramientas externas y bases de datos
&lt;/h2&gt;&lt;p&gt;MCP puede entenderse como un protocolo estandarizado de herramientas para modelos grandes. Mediante MCP, Codex puede llamar servicios externos para completar tareas más concretas.&lt;/p&gt;
&lt;p&gt;Por ejemplo, después de conectar Supabase, Codex puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear tablas de base de datos.&lt;/li&gt;
&lt;li&gt;Leer esquemas de base de datos.&lt;/li&gt;
&lt;li&gt;Modificar endpoints backend.&lt;/li&gt;
&lt;li&gt;Enviar formularios frontend a la base de datos.&lt;/li&gt;
&lt;li&gt;Depurar problemas según el estado de la base de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es poderoso, pero los permisos importan. Bases de datos, entornos de producción, plataformas de despliegue y cuentas de email son recursos de alto riesgo. Al conectarlos por primera vez, usa un proyecto de prueba y una cuenta con pocos privilegios.&lt;/p&gt;
&lt;h2 id=&#34;plugins-de-despliegue&#34;&gt;Plugins de despliegue
&lt;/h2&gt;&lt;p&gt;Los plugins de plataformas de despliegue pueden permitir que Codex complete builds y releases directamente, como desplegar un proyecto frontend en Netlify.&lt;/p&gt;
&lt;p&gt;Estos plugins son adecuados para sitios pequeños, prototipos, herramientas internas y demos. En uso real, presta atención a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecutar un build local antes del despliegue.&lt;/li&gt;
&lt;li&gt;No escribir variables de entorno directamente en el código.&lt;/li&gt;
&lt;li&gt;Comprobar que la página abre normalmente después de publicar.&lt;/li&gt;
&lt;li&gt;Mantener revisión humana para proyectos de producción.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La IA puede ayudar a conectar el flujo de despliegue, pero los permisos de despliegue deben gestionarse con cuidado.&lt;/p&gt;
&lt;h2 id=&#34;automatización-del-ordenador&#34;&gt;Automatización del ordenador
&lt;/h2&gt;&lt;p&gt;Con plataformas y entornos de plugins soportados, Codex también puede operar navegadores o apps de escritorio, completando tareas más cercanas a RPA.&lt;/p&gt;
&lt;p&gt;Ejemplos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abrir una app de chat y preparar un mensaje.&lt;/li&gt;
&lt;li&gt;Navegar un tablero de proyecto y resumir estado de tareas.&lt;/li&gt;
&lt;li&gt;Generar un brief en inglés.&lt;/li&gt;
&lt;li&gt;Enviarlo a un destinatario especificado después de tu confirmación.&lt;/li&gt;
&lt;li&gt;Convertir el flujo en una automatización programada.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas capacidades son imaginativas, pero requieren los límites de seguridad más fuertes. Cualquier operación que implique enviar mensajes, enviar email, enviar formularios, pagos o eliminar datos debe conservar confirmación humana.&lt;/p&gt;
&lt;h2 id=&#34;sugerencias-de-uso&#34;&gt;Sugerencias de uso
&lt;/h2&gt;&lt;p&gt;La forma correcta de usar Codex App no es dejarle tomar todo de golpe, sino dividir tareas y permitir que ejecute eficientemente en un entorno controlado.&lt;/p&gt;
&lt;p&gt;Hábitos recomendados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inicializar Git en cada proyecto.&lt;/li&gt;
&lt;li&gt;Usar modo plan para tareas complejas.&lt;/li&gt;
&lt;li&gt;Usar worktree para tareas paralelas.&lt;/li&gt;
&lt;li&gt;Poner reglas de proyecto en &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mantener confirmación humana para acciones de alto riesgo.&lt;/li&gt;
&lt;li&gt;Convertir flujos repetidos en Skills o automatizaciones.&lt;/li&gt;
&lt;li&gt;Validar plugins y MCP primero en un entorno de prueba.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/index/introducing-the-codex-app/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Introducing the Codex app - OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://help.openai.com/en/articles/11369540-codex-in-chatgpt&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Using Codex with your ChatGPT plan - OpenAI Help Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://openai.com/academy/codex-plugins-and-skills/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Plugins and skills - OpenAI Academy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Codex App no es &amp;ldquo;otra ventana de chat con IA&amp;rdquo;. Su foco es convertir la programación con IA en un espacio de trabajo gestionable, donde proyectos locales, tareas en la nube, Git, worktree, plugins, Skills, MCP y automatización puedan conectarse.&lt;/p&gt;
&lt;p&gt;La clave para usarla bien es equilibrar libertad y control. Las tareas pequeñas pueden entregarse a Codex con confianza. Las tareas complejas deben empezar con un plan. Las acciones de alto riesgo deben confirmarse. Usada así, Codex puede convertirse no solo en un asistente que escribe código, sino en una herramienta de ingeniería de largo plazo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo usar DeepSeek V4 Pro en Cline</title>
        <link>https://knightli.com/es/2026/05/01/use-deepseek-v4-pro-in-cline/</link>
        <pubDate>Fri, 01 May 2026 20:59:06 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/use-deepseek-v4-pro-in-cline/</guid>
        <description>&lt;p&gt;Cline ya admite el proveedor OpenAI Compatible. La API de DeepSeek también es compatible con llamadas al estilo del SDK de OpenAI, así que conectar &lt;code&gt;deepseek-v4-pro&lt;/code&gt; a Cline no es complicado: elige OpenAI Compatible y completa la Base URL de DeepSeek, la API Key y el nombre del modelo.&lt;/p&gt;
&lt;p&gt;Los pasos siguientes cubren tanto la interfaz de la extensión para VS Code como Cline CLI.&lt;/p&gt;
&lt;h2 id=&#34;preparar-una-api-key-de-deepseek&#34;&gt;Preparar una API Key de DeepSeek
&lt;/h2&gt;&lt;p&gt;Primero, crea una API Key en la plataforma de DeepSeek.&lt;/p&gt;
&lt;p&gt;Necesitas tres valores:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Elemento&lt;/th&gt;
          &lt;th&gt;Valor&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Provider&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;OpenAI Compatible&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Base URL&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;https://api.deepseek.com&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Model ID&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La documentación oficial de DeepSeek indica que la serie V4 usa la interfaz existente compatible con OpenAI. Mantén &lt;code&gt;base_url&lt;/code&gt; como &lt;code&gt;https://api.deepseek.com&lt;/code&gt; y establece &lt;code&gt;model&lt;/code&gt; en &lt;code&gt;deepseek-v4-pro&lt;/code&gt; o &lt;code&gt;deepseek-v4-flash&lt;/code&gt; al llamarlo.&lt;/p&gt;
&lt;h2 id=&#34;configurarlo-en-la-extensión-de-cline&#34;&gt;Configurarlo en la extensión de Cline
&lt;/h2&gt;&lt;p&gt;Si usas la extensión de Cline en VS Code, configúrala así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre Cline desde la barra lateral de VS Code.&lt;/li&gt;
&lt;li&gt;Entra en la configuración de Cline o en la configuración de modelos.&lt;/li&gt;
&lt;li&gt;Selecciona &lt;code&gt;OpenAI Compatible&lt;/code&gt; como proveedor.&lt;/li&gt;
&lt;li&gt;Introduce tu API Key de DeepSeek.&lt;/li&gt;
&lt;li&gt;Configura Base URL como:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://api.deepseek.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;Configura Model ID como:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek-v4-pro
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;Guarda la configuración y ejecuta una prueba sencilla en Cline.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Empieza con una tarea de solo lectura y bajo riesgo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please read the current project directory structure and summarize what type of project this is. Do not modify any files.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si Cline puede leer y responder con normalidad, la conexión del modelo funciona.&lt;/p&gt;
&lt;h2 id=&#34;configurarlo-en-cline-cli&#34;&gt;Configurarlo en Cline CLI
&lt;/h2&gt;&lt;p&gt;Si usas Cline CLI, ejecuta &lt;code&gt;cline provider configure openai-compatible&lt;/code&gt; para entrar en la configuración interactiva.&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cline provider configure openai-compatible
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Completa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API Key: sk-...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base URL: https://api.deepseek.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model ID: deepseek-v4-pro
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de configurarlo, prueba con una tarea de solo lectura:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cline &lt;span class=&#34;s2&#34;&gt;&amp;#34;Summarize this repository structure without changing files.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres reducir el coste al principio, puedes cambiar temporalmente Model ID a:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek-v4-flash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego vuelve a &lt;code&gt;deepseek-v4-pro&lt;/code&gt; para planificación compleja, verificación de hechos, colaboración con varias herramientas o cambios de código de alto riesgo.&lt;/p&gt;
&lt;h2 id=&#34;división-de-modelos-recomendada&#34;&gt;División de modelos recomendada
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 Pro y Flash funcionan mejor con una separación clara.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Modelo&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Lectura rutinaria de código, pequeños arreglos por lotes, generación de scripts, resúmenes de contexto, cambios frontend de bajo riesgo&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Planificación de arquitectura, bugs complejos, refactors entre archivos, verificación de hechos, llamadas multi-herramienta, cambios de alto riesgo&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En herramientas de Agent como Cline, el coste suele venir del contexto largo, lecturas repetidas de archivos, generación de planes y llamadas de herramientas en varias rondas. Si la tarea es ligera, usa Flash para volumen; si necesita mejor juicio, cambia a Pro.&lt;/p&gt;
&lt;h2 id=&#34;cómo-configurar-la-longitud-de-contexto&#34;&gt;Cómo configurar la longitud de contexto
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 Pro y Flash admiten contexto largo. Si Cline exige un valor manual de ventana de contexto, puedes interpretarlo según el contexto de 1M indicado en la página oficial de modelos de DeepSeek.&lt;/p&gt;
&lt;p&gt;En la práctica, no conviene meter todos los archivos en contexto desde el inicio. Cline lee archivos según la tarea, y un flujo mejor suele ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;primero pedirle que inspeccione la estructura del directorio;&lt;/li&gt;
&lt;li&gt;luego pedirle que localice los archivos relevantes;&lt;/li&gt;
&lt;li&gt;finalmente dejar que modifique solo los archivos objetivo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto ahorra tokens y mantiene más claro el límite de la tarea.&lt;/p&gt;
&lt;h2 id=&#34;problemas-comunes&#34;&gt;Problemas comunes
&lt;/h2&gt;&lt;h3 id=&#34;1-modelo-no-encontrado&#34;&gt;1. Modelo no encontrado
&lt;/h3&gt;&lt;p&gt;Primero comprueba que Model ID sea exactamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deepseek-v4-pro
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;No escribas &lt;code&gt;DeepSeek V4 Pro&lt;/code&gt;, &lt;code&gt;deepseek-v4&lt;/code&gt; ni otro nombre mostrado.&lt;/p&gt;
&lt;h3 id=&#34;2-401-o-fallo-de-autenticación&#34;&gt;2. 401 o fallo de autenticación
&lt;/h3&gt;&lt;p&gt;Comprueba la API Key:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si se copió completa;&lt;/li&gt;
&lt;li&gt;si contiene espacios adicionales;&lt;/li&gt;
&lt;li&gt;si se introdujo en la configuración de proveedor que Cline está usando;&lt;/li&gt;
&lt;li&gt;si la cuenta de DeepSeek tiene saldo disponible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-fallo-de-conexión&#34;&gt;3. Fallo de conexión
&lt;/h3&gt;&lt;p&gt;Comprueba la Base URL:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://api.deepseek.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;No añadas &lt;code&gt;/v1/chat/completions&lt;/code&gt; al final. El proveedor OpenAI Compatible de Cline construirá por sí mismo las solicitudes de la interfaz compatible.&lt;/p&gt;
&lt;h3 id=&#34;4-las-llamadas-de-cline-son-demasiado-caras&#34;&gt;4. Las llamadas de Cline son demasiado caras
&lt;/h3&gt;&lt;p&gt;Puedes pasar las tareas rutinarias a &lt;code&gt;deepseek-v4-flash&lt;/code&gt; y usar &lt;code&gt;deepseek-v4-pro&lt;/code&gt; solo para tareas complejas.&lt;/p&gt;
&lt;p&gt;Además, haz que la descripción de la tarea sea lo más clara posible:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Only modify files related to the login page. Do not refactor unrelated modules. First provide a plan, and modify code only after confirmation.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Las tareas de Agent son más caras cuando los límites son poco claros. Cuanto más claro sea el límite, menos archivos leerá, menos llamadas de herramienta hará y más controlable será el coste.&lt;/p&gt;
&lt;h3 id=&#34;5-error-reasoning_content-must-be-passed-back&#34;&gt;5. Error: reasoning_content must be passed back
&lt;/h3&gt;&lt;p&gt;Si ves un error como este:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;400 The `reasoning_content` in the thinking mode must be passed back to the API.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;invalid_request_error&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;modelId&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deepseek-v4-pro&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Normalmente no es un problema de Key, cuota o Base URL. Significa que el modo de pensamiento de DeepSeek V4 Pro y el historial multi-ronda de llamadas de herramientas del cliente actual no están alineados.&lt;/p&gt;
&lt;p&gt;La documentación oficial de DeepSeek indica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;el modo de pensamiento está &lt;code&gt;enabled&lt;/code&gt; por defecto;&lt;/li&gt;
&lt;li&gt;el modo de pensamiento devuelve &lt;code&gt;reasoning_content&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;si ocurre una llamada de herramienta en una ronda, las solicitudes posteriores deben devolver el &lt;code&gt;reasoning_content&lt;/code&gt; de ese mensaje del asistente;&lt;/li&gt;
&lt;li&gt;si el cliente no lo devuelve correctamente, la API devuelve 400.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cuando Cline se conecta mediante el proveedor OpenAI Compatible, este error puede aparecer en la segunda ronda o después de llamadas de herramienta si la versión actual no conserva y reenvía por completo el &lt;code&gt;reasoning_content&lt;/code&gt; de DeepSeek.&lt;/p&gt;
&lt;p&gt;Prueba en este orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Actualiza Cline a la versión más reciente;&lt;/li&gt;
&lt;li&gt;confirma que estás usando &lt;code&gt;OpenAI Compatible&lt;/code&gt;, no el proveedor normal &lt;code&gt;OpenAI&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;si Cline admite cuerpo de solicitud personalizado, intenta desactivar el modo de pensamiento:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;thinking&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;disabled&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;si Cline no admite parámetros extra en el body, usa temporalmente otro modelo o un servicio proxy compatible;&lt;/li&gt;
&lt;li&gt;vuelve a &lt;code&gt;deepseek-v4-pro&lt;/code&gt; cuando Cline admita reenviar &lt;code&gt;reasoning_content&lt;/code&gt; de DeepSeek V4.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ten en cuenta que desactivar el modo de pensamiento puede reducir la capacidad de razonamiento complejo, pero puede esquivar problemas de compatibilidad del cliente cuando &lt;code&gt;reasoning_content&lt;/code&gt; no se devuelve.&lt;/p&gt;
&lt;h2 id=&#34;configuración-copiable&#34;&gt;Configuración copiable
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provider: OpenAI Compatible
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API Key: sk-your DeepSeek API Key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base URL: https://api.deepseek.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model ID: deepseek-v4-pro
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para modo de bajo coste:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provider: OpenAI Compatible
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;API Key: sk-your DeepSeek API Key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Base URL: https://api.deepseek.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Model ID: deepseek-v4-flash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Solo hay tres pasos clave para llamar a DeepSeek V4 Pro en Cline:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;elegir &lt;code&gt;OpenAI Compatible&lt;/code&gt; como proveedor;&lt;/li&gt;
&lt;li&gt;establecer Base URL en &lt;code&gt;https://api.deepseek.com&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;establecer Model ID en &lt;code&gt;deepseek-v4-pro&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Después de configurarlo, prueba con una tarea de solo lectura antes de darle cambios reales de código. Si ejecutas tareas de Agent con frecuencia, separa Flash y Pro: Flash maneja trabajo ligero y frecuente, mientras Pro se ocupa del juicio complejo y las tareas de respaldo.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.cline.bot/provider-config/openai-compatible&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cline Docs: OpenAI Compatible Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.cline.bot/provider-config/overview&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Cline Docs: Provider Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com/news/news202605&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek API Docs: News&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://api-docs.deepseek.com/quick_start/pricing/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;DeepSeek API Docs: Models &amp;amp; Pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>mattpocock/skills: una colecci贸n pr谩ctica de habilidades para agentes de codificaci贸n con IA</title>
        <link>https://knightli.com/es/2026/05/01/mattpocock-skills-ai-agent-coding-workflows/</link>
        <pubDate>Fri, 01 May 2026 03:43:20 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/mattpocock-skills-ai-agent-coding-workflows/</guid>
        <description>&lt;p&gt;&lt;code&gt;mattpocock/skills&lt;/code&gt; es una colección pública de habilidades de agentes de codificación IA de Matt Pocock.&lt;/p&gt;
&lt;p&gt;No es una aplicación completa ni un nuevo cliente de chat. Es un conjunto de habilidades funcionales que pueden ser utilizadas por asistentes de codificación IA. La idea es práctica: desglosar problemas comunes de codificación de IA en pequeñas habilidades que un Agent puede llamar en la tarea adecuada, en lugar de depender de un solo prompt enorme cada vez.&lt;/p&gt;
&lt;p&gt;Si a menudo utilizas Claude Code, Codex, Cursor o herramientas de codificación IA similares, vale la pena observar este tipo de colección de habilidades. Lo que realmente afecta la experiencia de codificación con IA a menudo no es si el modelo puede escribir código, sino si puede avanzar en la tarea según tu estilo de trabajo preferido.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;Qué Problema Resuelve
&lt;/h2&gt;&lt;p&gt;Los asistentes de codificación de IA son potentes, pero pueden cometer errores fácilmente.&lt;/p&gt;
&lt;p&gt;Las situaciones comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comenzar cambios de código sin entender el requisito&lt;/li&gt;
&lt;li&gt;Modificar demasiados archivos a la vez&lt;/li&gt;
&lt;li&gt;Producir mucha explicación pero poca acción útil&lt;/li&gt;
&lt;li&gt;Intentar cosas a ciegas después de errores&lt;/li&gt;
&lt;li&gt;No ejecutar pruebas o verificaciones a tiempo&lt;/li&gt;
&lt;li&gt;Ignorar patrones de proyecto existentes&lt;/li&gt;
&lt;li&gt;Introducir abstracciones innecesarias para terminar una tarea&lt;/li&gt;
&lt;li&gt;Escribir código sin revisar realmente los riesgos después&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos problemas no siempre son causados por una débil capacidad del modelo. A menudo, el flujo de trabajo no está lo suficientemente restringido.&lt;/p&gt;
&lt;p&gt;El valor de &lt;code&gt;mattpocock/skills&lt;/code&gt; es que transforma estos modos de fallo comunes en métodos operativos reutilizables, haciendo que el Agent se comporte más como un colaborador de ingeniería experimentado en diferentes escenarios.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;qué-son-los-skills&#34;&gt;¿Qué son los Skills
&lt;/h2&gt;&lt;p&gt;En el contexto de AI Agent, un skill se puede entender como una instrucción de tarea reutilizable, un método de trabajo o un flujo de trabajo profesional.&lt;/p&gt;
&lt;p&gt;No tiene por qué ser un código plugin, y no siempre necesita llamar a un servicio externo. En muchos casos, un skill es simplemente un conjunto claro de reglas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuándo usarlo&lt;/li&gt;
&lt;li&gt;Qué hacer primero&lt;/li&gt;
&lt;li&gt;Qué no hacer&lt;/li&gt;
&lt;li&gt;Qué salida se requiere&lt;/li&gt;
&lt;li&gt;Cómo juzgar la finalización de la tarea&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es algo parecido a una normal prompt template, pero la granularidad está más cerca de una capacidad de tarea.&lt;/p&gt;
&lt;p&gt;Las normal prompt templates suelen copiarse y pegarse manualmente por el usuario. Los skills son mejores como parte de una toolbox de agente, lo que permite al Agent elegir el flujo de trabajo correcto para la tarea.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;por-qué-es-importante-la-pequeñez-y-la-componibilidad&#34;&gt;Por qué es importante la pequeñez y la componibilidad
&lt;/h2&gt;&lt;p&gt;El README enfatiza que estas habilidades son pequeñas y componibles.&lt;/p&gt;
&lt;p&gt;Esta dirección es importante.&lt;/p&gt;
&lt;p&gt;Si una habilidad intenta manejarlo todo, rápidamente se convierte en un nuevo prompt gigante: largo, vago y difícil de mantener. La ventaja de las habilidades pequeñas son los límites claros.&lt;/p&gt;
&lt;p&gt;Por ejemplo, una habilidad puede centrarse en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Planificar primero&lt;/li&gt;
&lt;li&gt;Arreglar errores de TypeScript&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas y corregir basándose en los resultados&lt;/li&gt;
&lt;li&gt;Realizar revisión de código (code review)&lt;/li&gt;
&lt;li&gt;Resumir convenciones del proyecto&lt;/li&gt;
&lt;li&gt;Mejorar prompts&lt;/li&gt;
&lt;li&gt;Eliminar abstracciones innecesarias&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas habilidades se pueden combinar según la tarea. Una tarea simple puede necesitar solo una habilidad, mientras que una tarea compleja puede encadenar varias.&lt;/p&gt;
&lt;p&gt;Esto se acerca más al trabajo de ingeniería real. No utilizas el mismo flujo de trabajo (workflow) para cada problema; eliges las herramientas según la situación.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;manteniendo-al-ingeniero-en-control&#34;&gt;Manteniendo al Ingeniero en Control
&lt;/h2&gt;&lt;p&gt;Una dirección importante de este repositorio es mantener al ingeniero en control.&lt;/p&gt;
&lt;p&gt;La codificación con IA puede derivarse fácilmente en dos extremos.&lt;/p&gt;
&lt;p&gt;El primero es completamente manual. La IA solo ayuda a escribir unas pocas líneas de código, mientras que todo el contexto, la planificación y la verificación todavía dependen de ti.&lt;/p&gt;
&lt;p&gt;El segundo es completamente automatizado (hands-off). Tú envías una tarea a un Agent, lo dejas cambiar muchas cosas, y luego te enfrentas a un &lt;code&gt;diff&lt;/code&gt; que es difícil de revisar.&lt;/p&gt;
&lt;p&gt;Las habilidades ayudan a encontrar una posición intermedia más estable.&lt;/p&gt;
&lt;p&gt;Permiten que la IA asuma más flujo de trabajo repetitivo, mientras la sigue limitando con reglas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Entender la tarea antes de actuar&lt;/li&gt;
&lt;li&gt;Leer los archivos relevantes antes de editar&lt;/li&gt;
&lt;li&gt;Mantener el alcance de la modificación controlado&lt;/li&gt;
&lt;li&gt;Informar sobre la incertidumbre&lt;/li&gt;
&lt;li&gt;Verificar después de los cambios&lt;/li&gt;
&lt;li&gt;No refactorizar código no relacionado solo para demostrar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto no debilita a la IA. Hace que las acciones de la IA sean más fáciles de revisar y asumir para los humanos.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;problemas-de-alineación&#34;&gt;Problemas de Alineación
&lt;/h2&gt;&lt;p&gt;El primer tipo de fallo de codificación de IA suele ser un fallo de alineación.&lt;/p&gt;
&lt;p&gt;El usuario quiere un cambio muy específico, pero el Agent puede entenderlo como una refactorización más amplia. El usuario solo quiere que se arregle un bug, pero cambia estilos en el proceso. El usuario quiere que se siga la arquitectura existente, pero introduce un patrón nuevo.&lt;/p&gt;
&lt;p&gt;Las habilidades pueden ayudar al Agent a hacer varias cosas al comienzo de una tarea:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restatear el objetivo&lt;/li&gt;
&lt;li&gt;Identificar el alcance del impacto&lt;/li&gt;
&lt;li&gt;Reconocer los patrones de implementación existentes&lt;/li&gt;
&lt;li&gt;Proporcionar un plan&lt;/li&gt;
&lt;li&gt;Aclarar lo que no se hará&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este paso es como una autocomprobación del ingeniero antes de comenzar el trabajo.&lt;/p&gt;
&lt;p&gt;Si el Agent no puede declarar claramente los límites de la tarea y comienza a escribir código directamente, es fácil que la tarea se desvíe.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;problemas-del-bucle-de-retroalimentación&#34;&gt;Problemas del Bucle de Retroalimentación
&lt;/h2&gt;&lt;p&gt;La IA no debe escribir código únicamente mediante la generación one-shot.&lt;/p&gt;
&lt;p&gt;En el desarrollo real, los bucles de retroalimentación son importantes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cambiar una pequeña parte&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas o type checks&lt;/li&gt;
&lt;li&gt;Leer los errores&lt;/li&gt;
&lt;li&gt;Corregirlos&lt;/li&gt;
&lt;li&gt;Verificar de nuevo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Muchos Agents fallan porque omiten la retroalimentación intermedia. Cambian muchas cosas a la vez y luego resumen por intuición que &amp;ldquo;it should work&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Las Skills pueden hacer explícito el bucle de retroalimentación. Por ejemplo, pueden exigir al Agent que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecute comprobaciones relevantes después de la modificación&lt;/li&gt;
&lt;li&gt;Lea los mensajes de error primero si las comprobaciones fallan&lt;/li&gt;
&lt;li&gt;Evite cambiar ciegamente archivos no relacionados&lt;/li&gt;
&lt;li&gt;Verifique de nuevo después de cada ronda de correcciones&lt;/li&gt;
&lt;li&gt;Informe los resultados finales de la verificación&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto hace que la codificación con IA se parezca más al depurado (debugging) real y menos a la escritura one-shot.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;problemas-de-control-de-arquitectura&#34;&gt;Problemas de Control de Arquitectura
&lt;/h2&gt;&lt;p&gt;AI es bueno generando abstracciones, y también bueno sobregenerando abstracciones.&lt;/p&gt;
&lt;p&gt;Para completar un requisito pequeño, puede crear una capa de servicio (service layer), funciones auxiliares (helper functions), objetos de configuración, &lt;em&gt;type wrappers&lt;/em&gt; y adaptadores, haciendo que el código sea mucho más complejo que el requisito en sí.&lt;/p&gt;
&lt;p&gt;Esto es especialmente peligroso en proyectos grandes. Las abstracciones generadas por AI a menudo parecen profesionales, pero pueden no coincidir con el estilo del proyecto existente y pueden aumentar el costo de mantenimiento.&lt;/p&gt;
&lt;p&gt;Las buenas habilidades recuerdan al Agent que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preferir patrones existentes&lt;/li&gt;
&lt;li&gt;Evitar nuevas abstracciones innecesarias&lt;/li&gt;
&lt;li&gt;Evitar la refactorización de áreas no relacionadas&lt;/li&gt;
&lt;li&gt;Ajustar el cambio al tamaño de la tarea&lt;/li&gt;
&lt;li&gt;Comprender el código antes de diseñar la estructura&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto reduce la producción que parece ingenierizada pero que en realidad es más difícil de mantener.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;por-qué-son-importantes-las-habilidades-de-revisión&#34;&gt;Por qué son importantes las habilidades de revisión
&lt;/h2&gt;&lt;p&gt;Escribir código y revisar código son estados diferentes.&lt;/p&gt;
&lt;p&gt;Cuando un Agent escribe código, generalmente tiende a demostrar que su implementación funciona. Puede explicar por qué el cambio debería funcionar, pero no siempre busca activamente riesgos.&lt;/p&gt;
&lt;p&gt;El propósito de una habilidad de revisión es cambiar el rol del Agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encontrar posibles errores (bugs)&lt;/li&gt;
&lt;li&gt;Encontrar regresiones de comportamiento&lt;/li&gt;
&lt;li&gt;Encontrar pruebas faltantes&lt;/li&gt;
&lt;li&gt;Encontrar casos límite (edge cases)&lt;/li&gt;
&lt;li&gt;Encontrar mayor complejidad&lt;/li&gt;
&lt;li&gt;Encontrar inconsistencias con las convenciones existentes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es importante para la programación con IA porque la IA genera código rápidamente. Sin revisión, los usuarios pueden sentirse fácilmente abrumados por grandes &lt;em&gt;diffs&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Una buena salida de revisión debe listar los problemas primero, no alabar la implementación primero. Debe ayudar al ingeniero a decidir si el cambio se puede fusionar (&lt;em&gt;merged&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;diferencia-con-los-archivos-de-reglas-normales&#34;&gt;Diferencia con los archivos de reglas normales
&lt;/h2&gt;&lt;p&gt;Muchas herramientas de codificación de IA admiten reglas, instrucciones o memoria.&lt;/p&gt;
&lt;p&gt;Estos archivos generalmente registran reglas a largo plazo, como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stack tecnológico del proyecto&lt;/li&gt;
&lt;li&gt;Convenciones de nomenclatura&lt;/li&gt;
&lt;li&gt;Comandos de prueba&lt;/li&gt;
&lt;li&gt;Directorios que no deben modificarse&lt;/li&gt;
&lt;li&gt;Preferencias de estilo de respuesta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las habilidades (Skills) se centran más en el flujo de trabajo de la tarea.&lt;/p&gt;
&lt;p&gt;Las reglas le dicen al Agent &amp;ldquo;cómo comportarse a largo plazo&amp;rdquo;, mientras que las habilidades le dicen al Agent &amp;ldquo;cómo ejecutar este tipo de tarea&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Ambos funcionan mejor juntos.&lt;/p&gt;
&lt;p&gt;Por ejemplo, las reglas pueden indicar que el proyecto usa &lt;code&gt;pnpm test&lt;/code&gt;, mientras que una habilidad de revisión requiere verificar la cobertura de pruebas después de los cambios. Entonces el Agent sabe no solo el comando, sino también cuándo usarlo.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;escenarios-adecuados&#34;&gt;Escenarios Adecuados
&lt;/h2&gt;&lt;p&gt;Los repositorios como &lt;code&gt;mattpocock/skills&lt;/code&gt; son adecuados para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uso frecuente de AI coding tools&lt;/li&gt;
&lt;li&gt;Agents que trabajan en codebases reales&lt;/li&gt;
&lt;li&gt;Reducir ediciones de AI fuera de alcance&lt;/li&gt;
&lt;li&gt;Hacer que el Agent verifique los resultados de forma más activa&lt;/li&gt;
&lt;li&gt;Convertir tus hábitos de ingeniería en skills&lt;/li&gt;
&lt;li&gt;Aprender cómo otros diseñan workflows de agentes&lt;/li&gt;
&lt;li&gt;Convertir prompts temporales en una colección de skills mantenible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo pides ocasionalmente a AI que escriba una función pequeña, quizás no necesites mantener skills.&lt;/p&gt;
&lt;p&gt;Pero si ya tratas a AI como un socio de desarrollo a largo plazo, las skills se vuelven cada vez más importantes. Son como un método de trabajo reutilizable para el Agent.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;cómo-aprender-de-este-repositorio&#34;&gt;Cómo aprender de este repositorio
&lt;/h2&gt;&lt;p&gt;Incluso si no utilizas cada habilidad directamente, puedes aprender varias cosas de este repositorio.&lt;/p&gt;
&lt;p&gt;Primero, anota los modos de fallo.&lt;/p&gt;
&lt;p&gt;No solo te quejes cuando la AI comete un error. Convierte los patrones que a menudo se equivoca en reglas, para que una habilidad pueda evitarlos la próxima vez.&lt;/p&gt;
&lt;p&gt;Segundo, mantén las habilidades cortas.&lt;/p&gt;
&lt;p&gt;Una habilidad debe resolver un problema claro. Cuanto más corta sea, más fácil será llamarla correctamente y mantenerla.&lt;/p&gt;
&lt;p&gt;Tercero, haz que el formato de salida sea claro.&lt;/p&gt;
&lt;p&gt;Si quieres que el Agent enumere un plan primero, ejecute después y resuma los resultados de verificación al final, escribe esa estructura claramente. Los requisitos vagos suelen producir resultados vagos.&lt;/p&gt;
&lt;p&gt;Cuarto, conserva puntos de traspaso humano.&lt;/p&gt;
&lt;p&gt;Una buena habilidad no debe permitir que la AI funcione sola durante demasiado tiempo. Cuando haya incertidumbre, un alcance de impacto expandido, pruebas fallidas o una decisión de producto, debe detenerse y explicar la situación.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;notas-de-uso&#34;&gt;Notas de uso
&lt;/h2&gt;&lt;p&gt;Primero, no conviertas todo en habilidades (skills).&lt;/p&gt;
&lt;p&gt;Demasiadas habilidades hacen que el sistema sea complejo, y el Agent podría no saber cuál elegir. Empieza con los escenarios más frecuentes y más problemáticos.&lt;/p&gt;
&lt;p&gt;Segundo, las habilidades necesitan iteración.&lt;/p&gt;
&lt;p&gt;La primera versión de una habilidad puede no ser buena. Observa cómo la IA la ejecuta realmente, luego elimina, añade y reescribe gradualmente.&lt;/p&gt;
&lt;p&gt;Tercero, no permitas que las habilidades reemplacen el juicio de la ingeniería.&lt;/p&gt;
&lt;p&gt;Las habilidades pueden mejorar el flujo de trabajo, pero no pueden garantizar una implementación correcta. Las pruebas (tests), la revisión, las comprobaciones de compilación (build checks) y el juicio humano siguen siendo importantes.&lt;/p&gt;
&lt;p&gt;Cuarto, presta atención a las diferencias entre los Agents.&lt;/p&gt;
&lt;p&gt;Claude Code, Codex, Cursor y Copilot soportan las instrucciones, las habilidades y las reglas de manera diferente. La misma idea se puede reutilizar, pero el formato específico debe ajustarse para cada herramienta.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;referencia&#34;&gt;Referencia
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mattpocock/skills&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;mattpocock/skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento Final
&lt;/h2&gt;&lt;p&gt;Lo que hace que &lt;code&gt;mattpocock/skills&lt;/code&gt; merezca la pena es no un único prompt mágico dentro de él, sino la idea práctica de codificación con IA que demuestra: dividir la experiencia de ingeniería en pequeñas habilidades y luego permitir que el Agent las combine según el escenario.&lt;/p&gt;
&lt;p&gt;A medida que la codificación con IA pasa de ser una asistencia ocasional a formar parte del flujo de trabajo diario, las habilidades se convierten en herramientas importantes para limitar a los Agents, mantener a los ingenieros en control y mejorar la calidad de la retroalimentación.
false&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Compound Engineering Plugin: convertir la programación con IA en un ciclo de planificación, ejecución y revisión</title>
        <link>https://knightli.com/es/2026/05/01/compound-engineering-plugin-ai-coding-workflow/</link>
        <pubDate>Fri, 01 May 2026 03:15:39 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/compound-engineering-plugin-ai-coding-workflow/</guid>
        <description>&lt;p&gt;&lt;code&gt;Compound Engineering Plugin&lt;/code&gt; es un plugin de flujo de trabajo de programación con IA publicado como open source por Every Inc.&lt;/p&gt;
&lt;p&gt;No se centra en &amp;ldquo;hacer que la IA escriba un fragmento de código más rápido&amp;rdquo;, sino en colocar la programación con IA dentro de un ciclo más parecido al de un equipo de ingeniería: primero planificar, luego implementar, después revisar y finalmente conservar la experiencia aprendida. Para quienes usan con frecuencia herramientas como Claude Code, Codex, Cursor o Copilot, este tipo de plugin resuelve un problema de flujo de trabajo, no solo de prompts.&lt;/p&gt;
&lt;p&gt;Las herramientas de programación con IA son cada vez más fuertes, pero en proyectos reales lo más difícil no suele ser generar código, sino lograr que siga de forma continua las reglas del proyecto, entienda los límites de la tarea, evite repetir errores y acumule contexto durante iteraciones largas.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;Qué problema resuelve
&lt;/h2&gt;&lt;p&gt;Muchas personas usan asistentes de programación con IA más o menos así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Describen directamente el requisito&lt;/li&gt;
&lt;li&gt;Dejan que la IA modifique código&lt;/li&gt;
&lt;li&gt;Miran si el resultado puede ejecutarse&lt;/li&gt;
&lt;li&gt;Si hay error, añaden más instrucciones&lt;/li&gt;
&lt;li&gt;En la siguiente tarea vuelven a explicar desde cero&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este método puede completar tareas pequeñas, pero en proyectos complejos aparecen problemas con facilidad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El requisito no se divide primero con claridad y la IA empieza a modificar directamente&lt;/li&gt;
&lt;li&gt;Falta una review sistemática después de los cambios&lt;/li&gt;
&lt;li&gt;Las reglas del proyecto dependen de que el usuario las recuerde una y otra vez&lt;/li&gt;
&lt;li&gt;El mismo tipo de error vuelve a aparecer en la siguiente ocasión&lt;/li&gt;
&lt;li&gt;Falta un método de trabajo común entre varias herramientas Agent&lt;/li&gt;
&lt;li&gt;La experiencia no se convierte en reglas reutilizables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Compound Engineering Plugin&lt;/code&gt; quiere resolver precisamente estos problemas. Divide la programación con IA en varias etapas, para que el Agent no solo ejecute comandos, sino que participe en un proceso de ingeniería más completo.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-compound-engineering&#34;&gt;Qué es Compound Engineering
&lt;/h2&gt;&lt;p&gt;Según la descripción del README del proyecto, Compound Engineering puede entenderse como un método de desarrollo de software asistido por IA.&lt;/p&gt;
&lt;p&gt;Destaca un ciclo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Planificación: entender primero el objetivo, dividir tareas y confirmar la ruta&lt;/li&gt;
&lt;li&gt;Ejecución: modificar código según el plan, ejecutar comandos y tratar problemas&lt;/li&gt;
&lt;li&gt;Revisión: comprobar calidad de implementación, riesgos y cobertura de pruebas&lt;/li&gt;
&lt;li&gt;Aprendizaje: convertir la experiencia en reglas reutilizables para el futuro&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este ciclo se parece mucho a la forma de trabajo de un equipo de ingeniería real.&lt;/p&gt;
&lt;p&gt;Un ingeniero fiable no recibe un requisito y empieza a cambiar cosas sin rumbo, ni entrega directamente después de modificar. Primero evalúa el alcance de impacto, luego implementa, después revisa riesgos y resultados de pruebas, y finalmente registra los problemas encontrados. Los AI Agent también necesitan restricciones similares.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-hace-falta-un-plugin&#34;&gt;Por qué hace falta un plugin
&lt;/h2&gt;&lt;p&gt;Un prompt puede decirle a la IA &amp;ldquo;planifica antes de ejecutar&amp;rdquo;, pero el prompt por sí mismo no siempre es estable.&lt;/p&gt;
&lt;p&gt;Cuando la conversación se alarga y el contexto se vuelve complejo, el modelo puede saltarse la planificación, ignorar reglas o volverse demasiado confiado para terminar la tarea. El valor del plugin está en fijar el proceso para que distintos entornos Agent sigan un método parecido.&lt;/p&gt;
&lt;p&gt;Este tipo de plugin suele dividir el flujo de trabajo en comandos, reglas, plantillas o subprocesos. El usuario no necesita escribir cada vez un prompt completo, sino que activa una etapa mediante una entrada fija.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pedir primero al Agent que genere un plan&lt;/li&gt;
&lt;li&gt;Implementar después paso a paso según el plan&lt;/li&gt;
&lt;li&gt;Activar review tras terminar los cambios&lt;/li&gt;
&lt;li&gt;Volver a corregir cuando se encuentren problemas&lt;/li&gt;
&lt;li&gt;Escribir las experiencias valiosas en memoria o reglas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto hace que la programación con IA se parezca más a una &amp;ldquo;colaboración controlada&amp;rdquo; que a una conversación de una sola vez.&lt;/p&gt;
&lt;h2 id=&#34;qué-entornos-agent-soporta&#34;&gt;Qué entornos Agent soporta
&lt;/h2&gt;&lt;p&gt;El README menciona que el proyecto soporta varios entornos de programación con IA, incluyendo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;GitHub Copilot&lt;/li&gt;
&lt;li&gt;Amp&lt;/li&gt;
&lt;li&gt;Factory&lt;/li&gt;
&lt;li&gt;Qwen Code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este punto es importante.&lt;/p&gt;
&lt;p&gt;Muchas herramientas de flujo de trabajo están atadas a un solo cliente; al cambiar de herramienta, las reglas dejan de reutilizarse. &lt;code&gt;Compound Engineering Plugin&lt;/code&gt; se parece más a un método de ingeniería transversal a distintos Agent, llevando procesos similares de planificación, ejecución y revisión a varias herramientas.&lt;/p&gt;
&lt;p&gt;Si usas varios asistentes de programación con IA al mismo tiempo, este tipo de flujo unificado gana valor. Las herramientas tienen capacidades distintas, pero las normas del proyecto, los hábitos de review y el método de división de tareas deberían ser lo más consistentes posible.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirve-la-etapa-de-planificación&#34;&gt;Para qué sirve la etapa de planificación
&lt;/h2&gt;&lt;p&gt;El valor de la planificación es evitar que la IA actúe demasiado pronto.&lt;/p&gt;
&lt;p&gt;En tareas complejas, las preguntas realmente importantes suelen ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qué archivos hay que modificar&lt;/li&gt;
&lt;li&gt;Qué módulos pueden verse afectados&lt;/li&gt;
&lt;li&gt;Cuál es el patrón existente&lt;/li&gt;
&lt;li&gt;Si hay pruebas&lt;/li&gt;
&lt;li&gt;Dónde están los riesgos&lt;/li&gt;
&lt;li&gt;Si hay que leer documentación antes&lt;/li&gt;
&lt;li&gt;Si puede dividirse en pasos más pequeños&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si el Agent no piensa primero estas preguntas y se pone a escribir código directamente, es fácil que produzca una implementación que parece terminada, pero que se aleja de la estructura del proyecto.&lt;/p&gt;
&lt;p&gt;El plan no tiene que ser largo. Un buen plan debería ser corto, concreto y ejecutable. Su objetivo no es fabricar documentación, sino dar límites a la implementación posterior.&lt;/p&gt;
&lt;h2 id=&#34;qué-evitar-en-la-etapa-de-ejecución&#34;&gt;Qué evitar en la etapa de ejecución
&lt;/h2&gt;&lt;p&gt;Cuando la IA ejecuta tareas de código, aparecen con facilidad varios problemas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Refactorizar código no relacionado de paso&lt;/li&gt;
&lt;li&gt;Sobrescribir cambios existentes del usuario&lt;/li&gt;
&lt;li&gt;Cambiar solo el happy path&lt;/li&gt;
&lt;li&gt;Ignorar manejo de errores&lt;/li&gt;
&lt;li&gt;No seguir el estilo existente del proyecto&lt;/li&gt;
&lt;li&gt;No ejecutar validaciones necesarias&lt;/li&gt;
&lt;li&gt;Probar a ciegas tras encontrar errores&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un plugin de flujo de trabajo no puede garantizar que estos problemas desaparezcan por completo, pero puede reducir su frecuencia mediante reglas y restricciones por etapa.&lt;/p&gt;
&lt;p&gt;Por ejemplo, la etapa de ejecución puede pedir al Agent que avance paso a paso según el plan; si descubre algo fuera del alcance previsto, primero explica el riesgo; si modifica módulos compartidos, añade pruebas o al menos ejecuta validaciones relacionadas.&lt;/p&gt;
&lt;p&gt;Esta restricción es especialmente importante en codebases grandes. Cuanto más rápido escribe código la IA, más necesita un proceso que limite su inercia.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-importa-la-etapa-de-review&#34;&gt;Por qué importa la etapa de review
&lt;/h2&gt;&lt;p&gt;Muchos fallos de programación con IA no ocurren porque el código no pueda ejecutarse en absoluto, sino porque los detalles están mal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No se tratan condiciones límite&lt;/li&gt;
&lt;li&gt;Las actualizaciones de estado no son consistentes&lt;/li&gt;
&lt;li&gt;El contrato de API se cambia en silencio&lt;/li&gt;
&lt;li&gt;Las pruebas no cubren rutas clave&lt;/li&gt;
&lt;li&gt;Los mensajes de error no son claros&lt;/li&gt;
&lt;li&gt;No se mencionan riesgos de rendimiento o seguridad&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La etapa de review cambia al Agent de &amp;ldquo;modo autor&amp;rdquo; a &amp;ldquo;modo revisor&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;El modo autor tiende a justificar su propia implementación; el modo revisor debe buscar activamente defectos, riesgos de regresión y pruebas omitidas. Separar estas dos etapas suele ser más fiable que pedir en una misma respuesta que implemente y se autoevalúe.&lt;/p&gt;
&lt;p&gt;Para el usuario, la salida de review también es más valiosa. Ayuda a decidir rápidamente si este cambio merece integrarse o si necesita otra ronda de trabajo.&lt;/p&gt;
&lt;h2 id=&#34;el-sentido-de-aprendizaje-y-memoria&#34;&gt;El sentido de aprendizaje y memoria
&lt;/h2&gt;&lt;p&gt;La palabra &amp;ldquo;Compound&amp;rdquo; del nombre del proyecto sugiere una idea importante: la experiencia de ingeniería debería crecer con efecto compuesto.&lt;/p&gt;
&lt;p&gt;Si cada vez que la IA comete un error solo lo arregla en ese momento, pero la próxima vez comete el mismo error, la mejora de eficiencia es limitada. Un mejor método es conservar la experiencia útil:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Convenciones de directorios del proyecto&lt;/li&gt;
&lt;li&gt;Métodos de diagnóstico para ciertos errores&lt;/li&gt;
&lt;li&gt;Comandos de prueba y precauciones&lt;/li&gt;
&lt;li&gt;Archivos generados que no deben tocarse&lt;/li&gt;
&lt;li&gt;Preferencias de estilo de código&lt;/li&gt;
&lt;li&gt;Patrones de implementación habituales&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas experiencias pueden convertirse en reglas, memoria, documentación o plantillas. En tareas posteriores, el Agent lee primero ese conocimiento acumulado y luego empieza a trabajar.&lt;/p&gt;
&lt;p&gt;Esa es la clave para que la programación con IA pase de &amp;ldquo;pregunta y respuesta puntual&amp;rdquo; a &amp;ldquo;colaboración de largo plazo&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;escenarios-adecuados&#34;&gt;Escenarios adecuados
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Compound Engineering Plugin&lt;/code&gt; es adecuado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usar AI Agent para escribir código de forma continua&lt;/li&gt;
&lt;li&gt;Modificar un mismo proyecto durante muchas rondas&lt;/li&gt;
&lt;li&gt;Querer que la IA planifique antes de implementar&lt;/li&gt;
&lt;li&gt;Querer que después de modificar entre automáticamente en mentalidad de review&lt;/li&gt;
&lt;li&gt;Equipos que quieren unificar el flujo de programación con IA&lt;/li&gt;
&lt;li&gt;Personas que usan a la vez Claude Code, Codex, Cursor y otras herramientas&lt;/li&gt;
&lt;li&gt;Querer convertir experiencia del proyecto en reglas reutilizables&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo pides ocasionalmente a la IA que escriba un pequeño script, el flujo completo puede parecer pesado.&lt;/p&gt;
&lt;p&gt;Pero si estás tratando al asistente de programación con IA como un compañero diario de desarrollo, el ciclo de planificación, ejecución, revisión y aprendizaje se vuelve claramente útil.&lt;/p&gt;
&lt;h2 id=&#34;diferencia-frente-a-plantillas-de-prompt-comunes&#34;&gt;Diferencia frente a plantillas de prompt comunes
&lt;/h2&gt;&lt;p&gt;Las plantillas de prompt comunes suelen resolver &amp;ldquo;cómo expresar bien la tarea&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Piensa paso a paso&lt;/li&gt;
&lt;li&gt;Lee primero los archivos&lt;/li&gt;
&lt;li&gt;Mantén el estilo de código&lt;/li&gt;
&lt;li&gt;Ejecuta pruebas&lt;/li&gt;
&lt;li&gt;Resume los cambios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas indicaciones son útiles, pero siguen dependiendo de que el usuario las use correctamente cada vez.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Compound Engineering Plugin&lt;/code&gt; se sitúa más en la capa de flujo de trabajo. Organiza estos requisitos en un proceso repetible y lo adapta a distintas herramientas Agent. Así, no partes de cero escribiendo prompts cada vez, sino que avanzas dentro de un proceso.&lt;/p&gt;
&lt;p&gt;En pocas palabras, una plantilla de prompt se parece a un recordatorio; un plugin de flujo de trabajo se parece a un sistema.&lt;/p&gt;
&lt;h2 id=&#34;precauciones-al-usarlo&#34;&gt;Precauciones al usarlo
&lt;/h2&gt;&lt;p&gt;Primero, no conviertas el proceso en una carga.&lt;/p&gt;
&lt;p&gt;Las tareas pequeñas no siempre necesitan un plan completo y una review larga. Un buen flujo de trabajo debería ajustarse a la complejidad de la tarea: resolver rápido los problemas simples y usar el ciclo completo en problemas complejos.&lt;/p&gt;
&lt;p&gt;Segundo, la review no sustituye a las pruebas.&lt;/p&gt;
&lt;p&gt;Una review hecha por Agent puede encontrar muchos problemas, pero aun así puede omitir errores reales de ejecución. El juicio final depende de pruebas, type checking, resultados de build y revisión humana.&lt;/p&gt;
&lt;p&gt;Tercero, hay que limpiar reglas de forma continua.&lt;/p&gt;
&lt;p&gt;Acumular experiencia es importante, pero demasiadas reglas también se convierten en ruido. Reglas obsoletas, repetidas o que solo servían para una tarea puntual deberían ordenarse periódicamente.&lt;/p&gt;
&lt;p&gt;Cuarto, consistencia entre herramientas no significa identidad total.&lt;/p&gt;
&lt;p&gt;Claude Code, Codex, Cursor, Copilot y otras herramientas tienen capacidades e interacciones diferentes. Lo que se unifica es el método de trabajo, no necesariamente cada comando ni cada detalle de configuración.&lt;/p&gt;
&lt;h2 id=&#34;qué-equipos-pueden-aprovecharlo&#34;&gt;Qué equipos pueden aprovecharlo
&lt;/h2&gt;&lt;p&gt;Si un equipo ya permite que AI Agent modifique código real, no basta con discutir &amp;ldquo;qué modelo es más fuerte&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Debería preocuparse más por:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si la IA entiende la tarea antes de modificar&lt;/li&gt;
&lt;li&gt;Si respeta límites del proyecto mientras modifica&lt;/li&gt;
&lt;li&gt;Si revisa riesgos activamente después de modificar&lt;/li&gt;
&lt;li&gt;Si aprende de errores históricos&lt;/li&gt;
&lt;li&gt;Si el equipo tiene una norma común de uso de Agent&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ahí está el sentido de proyectos como &lt;code&gt;Compound Engineering Plugin&lt;/code&gt;. Llevan la programación con IA desde una habilidad personal hacia un proceso reutilizable por el equipo.&lt;/p&gt;
&lt;h2 id=&#34;referencia&#34;&gt;Referencia
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/EveryInc/compound-engineering-plugin&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;EveryInc/compound-engineering-plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;una-última-frase&#34;&gt;Una última frase
&lt;/h2&gt;&lt;p&gt;Lo que merece atención de &lt;code&gt;Compound Engineering Plugin&lt;/code&gt; no es que añada un comando más de programación con IA, sino que organiza la programación con IA como un proceso de ingeniería que puede mejorar en ciclos.&lt;/p&gt;
&lt;p&gt;Cuando los AI Agent empiezan a participar en proyectos reales, planificación, ejecución, revisión y acumulación de experiencia importan más que generar código una sola vez.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Dominio de los ganchos de Claude Code: una introducción a los 13 eventos del ciclo de vida de los ganchos y al control de automatización</title>
        <link>https://knightli.com/es/2026/05/01/claude-code-hooks-mastery-guide/</link>
        <pubDate>Fri, 01 May 2026 03:11:27 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/claude-code-hooks-mastery-guide/</guid>
        <description>&lt;p&gt;&lt;code&gt;claude-code-hooks-mastery&lt;/code&gt; es un proyecto de aprendizaje centrado en &lt;code&gt;Claude Code Hooks&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No es sólo una colección de guiones dispersos. Explica el ciclo de vida del gancho de Claude Code, los métodos de configuración, los patrones de script y los escenarios de automatización comunes en un solo lugar. Para las personas que quieren que Claude Code sea más controlable y más parecido a un asistente de ingeniería, vale la pena leer este tipo de material.&lt;/p&gt;
&lt;p&gt;Claude Code ya puede leer código, editar archivos y ejecutar comandos de forma predeterminada. Pero si desea que verifique permisos automáticamente, bloquee operaciones riesgosas, inyecte reglas de proyecto, ejecute pruebas o le recuerde las convenciones del equipo en momentos específicos, las instrucciones de chat por sí solas no son lo suficientemente estables. El valor de los ganchos es que convierten las “reglas que necesito recordarle a la IA cada vez” en un flujo de trabajo ejecutable.&lt;/p&gt;
&lt;h2 id=&#34;qué-problemas-resuelven-los-ganchos&#34;&gt;Qué problemas resuelven los ganchos
&lt;/h2&gt;&lt;p&gt;Después de usar Claude Code por un tiempo, los puntos débiles comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cada nueva sesión necesita repetir las mismas reglas del proyecto.&lt;/li&gt;
&lt;li&gt;Te preocupa que pueda ejecutar comandos que no debería ejecutar.&lt;/li&gt;
&lt;li&gt;Quieres verificaciones antes y después de la edición de archivos.&lt;/li&gt;
&lt;li&gt;Quiere formatear, realizar pruebas o realizar análisis de seguridad antes de confirmar&lt;/li&gt;
&lt;li&gt;Quieres que las convenciones del equipo sean un flujo de trabajo fijo en lugar de recordatorios verbales.&lt;/li&gt;
&lt;li&gt;Quiere contexto antes y después de las llamadas a herramientas para iniciar sesión o bloquear&lt;/li&gt;
&lt;li&gt;Quiere que tareas complejas activen subagentes o scripts dedicados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los ganchos están diseñados para estas &amp;ldquo;acciones automáticas en momentos fijos&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Puedes considerarlos como enlaces de eventos en el flujo de trabajo de Claude Code. Cuando se inicia una sesión, un usuario envía un mensaje, el modelo está a punto de llamar a una herramienta, finaliza una llamada a una herramienta o un agente está a punto de detenerse, Claude Code puede ejecutar los scripts que usted configuró.&lt;/p&gt;
&lt;h2 id=&#34;los-13-eventos-del-ciclo-de-vida-del-gancho&#34;&gt;Los 13 eventos del ciclo de vida del gancho
&lt;/h2&gt;&lt;p&gt;Uno de los puntos principales del proyecto README es que cubre sistemáticamente los 13 eventos de gancho del Código Claude.&lt;/p&gt;
&lt;p&gt;Estos eventos abarcan varias etapas, desde el inicio de la sesión hasta las llamadas a las herramientas, y desde la entrada del usuario hasta la terminación del agente. Por finalidad, se pueden agrupar a grandes rasgos como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inicio de sesión: inicializa el entorno e inyecta el contexto del proyecto.&lt;/li&gt;
&lt;li&gt;Entrada del usuario: inspeccionar indicaciones, agregar reglas y realizar auditorías&lt;/li&gt;
&lt;li&gt;Antes de las llamadas a la herramienta: comprobaciones de permisos, bloqueo de comandos y validación de seguridad.&lt;/li&gt;
&lt;li&gt;Después de las llamadas a la herramienta: registrar resultados, activar el formateo y ejecutar la verificación&lt;/li&gt;
&lt;li&gt;Finalización de tareas: resumir, limpiar, notificar o guardar estado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este diseño de ciclo de vida significa que no es necesario incluir todas las reglas en un mensaje muy largo.&lt;/p&gt;
&lt;p&gt;Por ejemplo, el control de permisos debe realizarse antes de las llamadas a la herramienta. Las comprobaciones de formato son mejores después de editar los archivos. La inyección de reglas del proyecto es mejor al inicio de la sesión o después de la entrada del usuario. Poner reglas en el punto de enlace correcto suele ser más confiable que meter todo en un indicador del sistema.&lt;/p&gt;
&lt;h2 id=&#34;dónde-vive-la-configuración&#34;&gt;Dónde vive la configuración
&lt;/h2&gt;&lt;p&gt;Los ganchos de Claude Code generalmente se configuran a través de archivos de configuración.&lt;/p&gt;
&lt;p&gt;Las ubicaciones comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configuración a nivel de usuario: &lt;code&gt;~/.claude/settings.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Configuración a nivel de proyecto: &lt;code&gt;.claude/settings.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La configuración a nivel de usuario es buena para las preferencias personales, como reglas generales de seguridad, bloqueo de comandos y rutas de registro.&lt;/p&gt;
&lt;p&gt;La configuración a nivel de proyecto es mejor para reglas específicas del repositorio, como qué pruebas se deben ejecutar, qué directorios no se pueden editar, cómo se manejan los archivos generados y qué comprobaciones se requieren antes de la confirmación.
Si usa Claude Code en un equipo, es mejor colocar la configuración a nivel de proyecto en el repositorio. De esa manera, todos inician el proyecto con las mismas limitaciones de colaboración de IA en lugar de depender de la memoria personal.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-son-importantes-los-scripts-de-un-solo-archivo&#34;&gt;Por qué son importantes los scripts de un solo archivo
&lt;/h2&gt;&lt;p&gt;El proyecto enfatiza los scripts de un solo archivo &amp;ldquo;UV&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;El beneficio es una implementación simple. Un único archivo Python puede declarar dependencias y ejecutarse sin mantener un entorno complejo para un enlace. Esto encaja bien con los ganchos porque muchos ganchos solo hacen una pequeña cosa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Comprobar si un comando está permitido&lt;/li&gt;
&lt;li&gt;Determinar si la ruta de un archivo es segura&lt;/li&gt;
&lt;li&gt;Leer las reglas del proyecto y devolvérselas a Claude.&lt;/li&gt;
&lt;li&gt;Escanear la salida en busca de información confidencial&lt;/li&gt;
&lt;li&gt;Ejecutar formateo o pruebas después de las ediciones.&lt;/li&gt;
&lt;li&gt;Escribir eventos en registros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cuanto más pequeño sea un script de enlace, más fácil será de mantener y es menos probable que se convierta en un sistema nuevo y complicado.&lt;/p&gt;
&lt;h2 id=&#34;qué-pueden-hacer-los-ganchos-con-la-automatización&#34;&gt;¿Qué pueden hacer los ganchos con la automatización?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;claude-code-hooks-mastery&lt;/code&gt; muestra muchas direcciones. En el trabajo real, los más comunes se encuentran a continuación.&lt;/p&gt;
&lt;h3 id=&#34;1-control-de-permisos-y-seguridad&#34;&gt;1. Control de permisos y seguridad
&lt;/h3&gt;&lt;p&gt;Este es el uso más directo de los ganchos.&lt;/p&gt;
&lt;p&gt;Antes de que Claude Code ejecute un comando, un gancho puede inspeccionar el contenido del comando. Si contiene acciones de alto riesgo, como eliminar, restablecer, limpiar o sobrescribir, puede bloquear la ejecución o requerir confirmación manual.&lt;/p&gt;
&lt;p&gt;Se pueden aplicar reglas similares a las rutas de archivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No modificar la configuración de producción.&lt;/li&gt;
&lt;li&gt;No escribir en archivos secretos&lt;/li&gt;
&lt;li&gt;No eliminar scripts de migración&lt;/li&gt;
&lt;li&gt;No tocar directorios específicos&lt;/li&gt;
&lt;li&gt;No ejecute comandos de red no aprobados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anteponer esta protección a las llamadas a herramientas es más confiable que escribir &amp;ldquo;no realizar operaciones peligrosas&amp;rdquo; en un mensaje.&lt;/p&gt;
&lt;h3 id=&#34;2-inyección-de-contexto&#34;&gt;2. Inyección de contexto
&lt;/h3&gt;&lt;p&gt;Muchos proyectos tienen información de fondo fija:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pila de tecnología&lt;/li&gt;
&lt;li&gt;Convenciones de codificación&lt;/li&gt;
&lt;li&gt;Comandos de prueba&lt;/li&gt;
&lt;li&gt;Estrategia de ramificación&lt;/li&gt;
&lt;li&gt;Estructura del directorio&lt;/li&gt;
&lt;li&gt;Acciones prohibidas&lt;/li&gt;
&lt;li&gt;Reglas para archivos generados.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Decirle esto a Claude Code manualmente cada vez es molesto y fácil de olvidar. Los ganchos pueden inyectar automáticamente el contexto necesario al inicio de la sesión o después de que el usuario envía un mensaje.&lt;/p&gt;
&lt;p&gt;Esto es como darle a Claude Code un manual de trabajo a nivel de proyecto. No reemplaza el README ni la documentación de desarrollo, pero ayuda a la IA a ingresar al estado correcto antes de ejecutar una tarea.&lt;/p&gt;
&lt;h3 id=&#34;3-verificación-después-de-las-ediciones&#34;&gt;3. Verificación después de las ediciones
&lt;/h3&gt;&lt;p&gt;Después de que Claude Code modifica archivos, los ganchos pueden activar comprobaciones automáticamente.&lt;/p&gt;
&lt;p&gt;Las acciones comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecutar formateo&lt;/li&gt;
&lt;li&gt;Ejecutar pelusa&lt;/li&gt;
&lt;li&gt;Ejecutar pruebas unitarias.&lt;/li&gt;
&lt;li&gt;Verificar errores de tipo&lt;/li&gt;
&lt;li&gt;Escanear archivos generados&lt;/li&gt;
&lt;li&gt;Validar formato Markdown o JSON&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto ayuda a reducir los errores de bajo nivel. Cuando la IA edita varios archivos, una verificación ligera después de la modificación puede revelar problemas antes.&lt;/p&gt;
&lt;p&gt;Sin embargo, los ganchos no deberían ejecutar tareas pesadas de forma predeterminada. Ejecutar el conjunto de pruebas completo después de cada cambio de archivo puede ralentizar la experiencia. Un mejor enfoque es elegir comprobaciones según el tipo de archivo, el directorio y el riesgo de la tarea.&lt;/p&gt;
&lt;h3 id=&#34;4-validación-de-las-reglas-del-equipo&#34;&gt;4. Validación de las reglas del equipo
&lt;/h3&gt;&lt;p&gt;Si un equipo ya tiene convenciones claras, algunas de ellas pueden colocarse en ganchos.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Confirmar formato de mensaje&lt;/li&gt;
&lt;li&gt;Reglas de estilo de código&lt;/li&gt;
&lt;li&gt;No editar directamente ciertos archivos generados&lt;/li&gt;
&lt;li&gt;La documentación debe actualizarse en conjunto.&lt;/li&gt;
&lt;li&gt;Los cambios de API deben actualizar las pruebas.&lt;/li&gt;
&lt;li&gt;Ciertos directorios sólo pueden ser generados por herramientas específicas
Esto hace que Claude Code se parezca más a una parte del flujo de trabajo del equipo que a un asistente externo sin restricciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por supuesto, los ganchos no deberían reemplazar a la CI. Son mejores para recordatorios locales y bloqueo temprano. La validación final aún debe pertenecer a los sistemas de CI, revisión y prueba.&lt;/p&gt;
&lt;h3 id=&#34;5-subagentes-y-tareas-dedicadas&#34;&gt;5. Subagentes y tareas dedicadas
&lt;/h3&gt;&lt;p&gt;El archivo README también menciona contenido relacionado con subagentes.&lt;/p&gt;
&lt;p&gt;Este tipo de uso es adecuado para enviar tareas complejas a flujos de trabajo más especializados. Por ejemplo, la conversación principal puede comprender el requisito, mientras que un enlace o una configuración desencadenan tareas dedicadas de verificación, auditoría, resumen o documentación.&lt;/p&gt;
&lt;p&gt;Para los usuarios individuales, el primer paso útil no es la compleja orquestación de agentes. Es mejor entregar primero a los ganchos acciones repetitivas, claras y de bajo riesgo. Una vez que las reglas se estabilicen, puede producirse una automatización más compleja.&lt;/p&gt;
&lt;h2 id=&#34;línea-de-estado-y-estilos-de-salida&#34;&gt;Línea de estado y estilos de salida
&lt;/h2&gt;&lt;p&gt;El proyecto también cubre la línea de estado y los estilos de salida.&lt;/p&gt;
&lt;p&gt;Esto puede parecer un pequeño detalle de la experiencia, pero es importante para el uso a largo plazo del Código Claude. Una línea de estado puede mostrar el contexto actual, el estado de la tarea, información del entorno o sugerencias. Los estilos de salida pueden hacer que las respuestas de Claude Code se ajusten mejor a sus hábitos de trabajo.&lt;/p&gt;
&lt;p&gt;Si colaboras con IA en el mismo terminal todos los días, estos detalles afectan la eficiencia. Las buenas sugerencias de estado reducen los errores y le ayudan a determinar rápidamente si la sesión actual se encuentra en el proyecto, rama y entorno correctos.&lt;/p&gt;
&lt;h2 id=&#34;no-hagas-que-los-ganchos-sean-demasiado-pesados&#34;&gt;No hagas que los ganchos sean demasiado pesados
&lt;/h2&gt;&lt;p&gt;Los ganchos son poderosos, pero no son el lugar para poner todo.&lt;/p&gt;
&lt;p&gt;Las buenas reglas son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Las acciones de alta frecuencia deben ser rápidas.&lt;/li&gt;
&lt;li&gt;El bloqueo de seguridad debe ser claro.&lt;/li&gt;
&lt;li&gt;La salida debe ser corta.&lt;/li&gt;
&lt;li&gt;Los motivos del fallo deben ser legibles.&lt;/li&gt;
&lt;li&gt;Los scripts deben tener una única responsabilidad.&lt;/li&gt;
&lt;li&gt;Las comprobaciones exhaustivas deben ser comandos explícitos o tareas de CI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si un enlace tarda más de diez segundos cada vez, los usuarios pronto querrán desactivarlo. Si un gancho tiene reglas de bloqueo vagas, tanto Claude Code como el usuario tendrán dificultades para entender qué hacer a continuación.&lt;/p&gt;
&lt;p&gt;Los ganchos son mejores para tareas con límites claros: permitir o rechazar, agregar contexto, registrar eventos, ejecutar comprobaciones ligeras y sugerir el siguiente paso.&lt;/p&gt;
&lt;h2 id=&#34;quién-debería-usarlo&#34;&gt;¿Quién debería usarlo?
&lt;/h2&gt;&lt;p&gt;Si solo ocasionalmente le pides a Claude Code que edite un pequeño fragmento de código, es posible que aún no necesites estudiar los ganchos en profundidad.&lt;/p&gt;
&lt;p&gt;Pero este proyecto es útil si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilice Claude Code con frecuencia&lt;/li&gt;
&lt;li&gt;A menudo deja que la IA modifique el código del proyecto real.&lt;/li&gt;
&lt;li&gt;Preocupación por que la IA ejecute comandos peligrosos&lt;/li&gt;
&lt;li&gt;Quiere inyectar automáticamente reglas de equipo en los flujos de trabajo de IA&lt;/li&gt;
&lt;li&gt;Quiere que las comprobaciones se ejecuten automáticamente después de las ediciones&lt;/li&gt;
&lt;li&gt;Quiere convertir recordatorios repetidos en configuración&lt;/li&gt;
&lt;li&gt;Están creando un flujo de trabajo de codificación de IA más estable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los ganchos son especialmente significativos en proyectos colaborativos. Pueden convertir parte de la experiencia del equipo en guiones en lugar de depender de que cada persona se lo recuerde a la IA manualmente.&lt;/p&gt;
&lt;h2 id=&#34;notas-de-uso&#34;&gt;Notas de uso
&lt;/h2&gt;&lt;p&gt;Primero, comience con los ganchos de seguridad.&lt;/p&gt;
&lt;p&gt;En comparación con la automatización compleja, el bloqueo de comandos, la protección de rutas y las comprobaciones de archivos confidenciales son más fáciles de implementar y reducen el riesgo de inmediato.&lt;/p&gt;
&lt;p&gt;En segundo lugar, comprometa cuidadosamente las reglas a nivel de proyecto.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.claude/settings.json&lt;/code&gt; afecta a todos los que usan el repositorio. Antes de comprometer reglas, asegúrese de que no restrinjan demasiado el desarrollo normal ni dependan de rutas que solo existen en su máquina.&lt;/p&gt;
&lt;p&gt;En tercer lugar, mantenga la salida del gancho concisa.
Claude Code consume esta salida. Si es demasiado largo, contamina el contexto. Si es demasiado vago, no guía el siguiente paso. Lo mejor es devolver sólo el juicio necesario y la siguiente recomendación.&lt;/p&gt;
&lt;p&gt;Cuarto, mantenga los ganchos depurables.&lt;/p&gt;
&lt;p&gt;Cuando los ganchos aumentan en número, los problemas pueden provenir de la configuración, los scripts, los permisos, las rutas, las dependencias o el propio Claude Code. Los registros claros facilitan mucho la depuración posterior.&lt;/p&gt;
&lt;h2 id=&#34;referencia&#34;&gt;Referencia
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/disler/claude-code-hooks-mastery&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;disler/claude-code-hooks-mastery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento final
&lt;/h2&gt;&lt;p&gt;El valor de &amp;ldquo;Claude Code Hooks&amp;rdquo; es convertir &amp;ldquo;reglas que espero que la IA recuerde siempre&amp;rdquo; en flujos de trabajo que realmente se ejecutan.&lt;/p&gt;
&lt;p&gt;Si ya utiliza Claude Code en proyectos reales, los ganchos son un paso clave desde &amp;ldquo;un asistente de codificación que puede conversar&amp;rdquo; hasta &amp;ldquo;un colaborador de ingeniería limitado&amp;rdquo;.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Claude-Mem: Agregar memoria a largo plazo entre sesiones al código Claude</title>
        <link>https://knightli.com/es/2026/05/01/claude-mem-persistent-memory-for-claude-code/</link>
        <pubDate>Fri, 01 May 2026 03:01:02 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/claude-mem-persistent-memory-for-claude-code/</guid>
        <description>&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; es un sistema de memoria persistente para &lt;code&gt;Claude Code&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Intenta resolver un problema muy específico: cada vez que un asistente de codificación de IA inicia una nueva sesión, a menudo olvida decisiones de arquitectura anteriores, obstáculos pasados, preferencias de proyecto y contexto de implementación.&lt;br&gt;
Si un proyecto dura mucho tiempo, explicar repetidamente los mismos antecedentes se convierte en una pérdida de tiempo.&lt;/p&gt;
&lt;p&gt;La idea detrás de &lt;code&gt;Claude-Mem&lt;/code&gt; es comprimir las conversaciones de Claude Code en recuerdos, almacenarlas en una base de datos local y en un almacén de vectores, y luego recuperarlas a través de una herramienta de búsqueda.&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;¿Qué problema resuelve?
&lt;/h2&gt;&lt;p&gt;Claude Code es bueno en tareas de código, pero el contexto de la sesión aún es limitado.&lt;/p&gt;
&lt;p&gt;Los puntos débiles comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Una nueva sesión no sabe lo que hicieron las sesiones anteriores.&lt;/li&gt;
&lt;li&gt;Las decisiones de diseño del proyecto deben explicarse repetidamente.&lt;/li&gt;
&lt;li&gt;Los problemas que ya fueron depurados son fáciles de repetir&lt;/li&gt;
&lt;li&gt;Las tareas de larga duración carecen de continuidad.&lt;/li&gt;
&lt;li&gt;El conocimiento del proyecto es difícil de acumular a través de conversaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; está diseñado en torno a estos problemas.&lt;/p&gt;
&lt;p&gt;No se trata simplemente de guardar registros de chat. En cambio, comprime las conversaciones en fragmentos de memoria que son más fáciles de recuperar. Cuando sea necesario más adelante, la búsqueda semántica puede recuperar el contexto relevante.&lt;/p&gt;
&lt;h2 id=&#34;cómo-funciona&#34;&gt;Cómo funciona
&lt;/h2&gt;&lt;p&gt;Según el diseño README, &amp;ldquo;Claude-Mem&amp;rdquo; consta principalmente de varias partes.&lt;/p&gt;
&lt;p&gt;La primera parte son los ganchos.&lt;/p&gt;
&lt;p&gt;Se integra con el flujo de sesión de Claude Code y captura datos de la conversación en el momento adecuado.&lt;/p&gt;
&lt;p&gt;La segunda parte es un trabajador en segundo plano.&lt;/p&gt;
&lt;p&gt;El trabajador procesa el contenido de la conversación en bruto y lo convierte en recuerdos más breves y fáciles de buscar.&lt;/p&gt;
&lt;p&gt;La tercera parte es el almacenamiento local.&lt;/p&gt;
&lt;p&gt;El proyecto utiliza &lt;code&gt;SQLite&lt;/code&gt; para metadatos estructurados y &lt;code&gt;Chroma&lt;/code&gt; para indexación de vectores. Esto preserva la información básica de la sesión al tiempo que admite la recuperación semántica.&lt;/p&gt;
&lt;p&gt;La cuarta parte es &amp;ldquo;mem-search&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Este es el punto de entrada de consulta para Claude Code. Cuando se necesita un contexto antiguo, se pueden buscar recuerdos relevantes a través de esta herramienta.&lt;/p&gt;
&lt;p&gt;El flujo general se puede entender así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Las sesiones de Claude Code generan contenido&lt;/li&gt;
&lt;li&gt;Los ganchos capturan datos de la sesión&lt;/li&gt;
&lt;li&gt;El trabajador lo comprime y organiza de forma asincrónica.&lt;/li&gt;
&lt;li&gt;Los recuerdos se escriben en SQLite y Chroma.&lt;/li&gt;
&lt;li&gt;Las sesiones posteriores los recuperan mediante &lt;code&gt;mem-search&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;cuándo-es-útil&#34;&gt;¿Cuándo es útil?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; es adecuado para proyectos de larga duración, no para tareas pequeñas y puntuales.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un repositorio se desarrolla durante muchos días.&lt;/li&gt;
&lt;li&gt;La estructura del código es compleja y tiene muchos antecedentes.&lt;/li&gt;
&lt;li&gt;Es necesario recordar las convenciones del proyecto, los hábitos de nomenclatura y las elecciones de arquitectura.&lt;/li&gt;
&lt;li&gt;Claude Code se utiliza a menudo para corregir errores, funciones y documentación.&lt;/li&gt;
&lt;li&gt;Quieres que la IA recuerde por qué se cambió algo antes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo le pide a Claude Code que haga un cambio de una línea, la memoria a largo plazo no es muy significativa.&lt;br&gt;
Pero si tratas a Claude Code como un colaborador a largo plazo, resulta útil.&lt;/p&gt;
&lt;h2 id=&#34;instalación-y-puesta-en-marcha&#34;&gt;Instalación y puesta en marcha
&lt;/h2&gt;&lt;p&gt;El README proporciona un flujo de instalación directo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g claude-mem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Empiece con:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Verificar estado:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Deténgalo cuando sea necesario:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude-mem stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El objetivo detrás de estos comandos es conectar el sistema de memoria como un servicio local de larga duración al flujo de trabajo de Claude Code.&lt;/p&gt;
&lt;h2 id=&#34;cómo-utilizar-mem-search&#34;&gt;Cómo utilizar &lt;code&gt;mem-search&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;mem-search&lt;/code&gt; es el punto de entrada clave para recuperar la memoria.&lt;/p&gt;
&lt;p&gt;No pretende reemplazar la búsqueda ordinaria. Permite a Claude Code consultar conversaciones pasadas por significado.&lt;/p&gt;
&lt;p&gt;Por ejemplo, Claude Code puede buscar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por qué un módulo fue diseñado de cierta manera&lt;/li&gt;
&lt;li&gt;Cómo se depuró un error anteriormente&lt;/li&gt;
&lt;li&gt;Reglas de nomenclatura acordadas en el proyecto.&lt;/li&gt;
&lt;li&gt;Compensaciones técnicas discutidas anteriormente&lt;/li&gt;
&lt;li&gt;El trasfondo detrás de una refactorización.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es diferente de la simple búsqueda de palabras clave.&lt;br&gt;
Si la compresión de memoria y la indexación de vectores funcionan bien, puede recuperar contenido semánticamente relacionado incluso si no recuerda la redacción exacta.&lt;/p&gt;
&lt;h2 id=&#34;en-qué-se-diferencia-de-la-documentación-del-proyecto&#34;&gt;¿En qué se diferencia de la documentación del proyecto?
&lt;/h2&gt;&lt;p&gt;La documentación del proyecto es buena para sacar conclusiones estables.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Notas de arquitectura&lt;/li&gt;
&lt;li&gt;Procedimientos de implementación&lt;/li&gt;
&lt;li&gt;Convenciones API&lt;/li&gt;
&lt;li&gt;Estructura de la base de datos&lt;/li&gt;
&lt;li&gt;Reglas de desarrollo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Claude-Mem&lt;/code&gt; es mejor para el contexto creado durante las conversaciones.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por qué se rechazó un plan&lt;/li&gt;
&lt;li&gt;Cómo se solucionó un problema temporal&lt;/li&gt;
&lt;li&gt;La discusión detrás de una implementación.&lt;/li&gt;
&lt;li&gt;Las preferencias del proyecto aún no están escritas en los documentos.&lt;/li&gt;
&lt;li&gt;Antecedentes de tareas acumulados en múltiples conversaciones&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los dos no se reemplazan el uno al otro.&lt;br&gt;
Un buen flujo de trabajo es escribir conocimientos estables en los documentos del proyecto y utilizar el sistema de memoria para ayudar a recuperar el contexto conversacional.&lt;/p&gt;
&lt;h2 id=&#34;cosas-a-tener-en-cuenta&#34;&gt;Cosas a tener en cuenta
&lt;/h2&gt;&lt;p&gt;En primer lugar, una mayor memoria a largo plazo no siempre es mejor.&lt;/p&gt;
&lt;p&gt;Si cada conversación se guarda sin distinción, la recuperación posterior puede resultar ruidosa. Los recuerdos más valiosos son las decisiones del proyecto, los antecedentes de la implementación, el historial de depuración y las preferencias a largo plazo.&lt;/p&gt;
&lt;p&gt;En segundo lugar, la memoria no puede reemplazar el código y la documentación.&lt;/p&gt;
&lt;p&gt;El contexto antiguo encontrado por la IA es sólo una referencia. El juicio final aún depende del código actual, los resultados de las pruebas y los requisitos más recientes.&lt;/p&gt;
&lt;p&gt;En tercer lugar, preste atención a la privacidad y los datos locales.&lt;/p&gt;
&lt;p&gt;Dado que almacena el contenido de la conversación, debes saber qué proyectos son adecuados para él y qué información confidencial no debe entrar en la conversación.&lt;/p&gt;
&lt;p&gt;Cuarto, los sistemas de memoria necesitan mantenimiento.&lt;/p&gt;
&lt;p&gt;A medida que avanza un proyecto, los viejos recuerdos pueden quedar obsoletos. Si el contexto obsoleto se reutiliza incorrectamente, puede inducir a error en tareas posteriores.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-es-importante-este-tipo-de-herramienta&#34;&gt;Por qué es importante este tipo de herramienta
&lt;/h2&gt;&lt;p&gt;Las herramientas de codificación de IA están pasando de preguntas y respuestas únicas a una colaboración a largo plazo.&lt;/p&gt;
&lt;p&gt;En preguntas y respuestas únicas, el modelo solo necesita responder la pregunta actual.&lt;br&gt;
En una colaboración a largo plazo, es necesario conocer el historial del proyecto, las decisiones anteriores, las preferencias del equipo y los obstáculos que ya se han encontrado.&lt;/p&gt;
&lt;p&gt;Aquí es donde importan herramientas como &lt;code&gt;Claude-Mem&lt;/code&gt;: convierten el &amp;ldquo;recordar el contexto&amp;rdquo; de una capacidad de chat temporal en un sistema local que puede instalarse, ejecutarse y buscarse.&lt;/p&gt;
&lt;p&gt;Para proyectos de ingeniería reales, esto es más práctico que simplemente alargar la ventana de contexto del modelo.&lt;br&gt;
No es necesario contextualizar mucha información de una sola vez; es necesario recuperarlo en el momento adecuado.&lt;/p&gt;
&lt;h2 id=&#34;quién-debería-intentarlo&#34;&gt;¿Quién debería intentarlo?
&lt;/h2&gt;&lt;p&gt;Quizás quieras probarlo si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usas Claude Code con frecuencia&lt;/li&gt;
&lt;li&gt;A menudo trabajas en el mismo proyecto durante varios días.&lt;/li&gt;
&lt;li&gt;El contexto del proyecto es complejo.&lt;/li&gt;
&lt;li&gt;Explicas repetidamente los mismos antecedentes a la IA.&lt;/li&gt;
&lt;li&gt;Quieres preservar la experiencia de las conversaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo usas Claude Code ocasionalmente, o el proyecto es pequeño, es posible que aún no necesites este tipo de sistema.&lt;/p&gt;
&lt;h2 id=&#34;referencia&#34;&gt;Referencia
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/thedotmack/claude-mem&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;thedotmack/claude-mem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento final
&lt;/h2&gt;&lt;p&gt;El objetivo de &lt;code&gt;Claude-Mem&lt;/code&gt; no es &amp;ldquo;guardar registros de chat&amp;rdquo;. Ayuda a Claude Code a recuperar contexto útil en tareas posteriores.
A medida que la codificación de IA pase de tareas únicas a colaboraciones en proyectos de larga duración, los sistemas de memoria serán cada vez más importantes.&lt;br&gt;
No pueden reemplazar la documentación y las pruebas, pero pueden reducir las explicaciones repetidas y hacer que la IA se sienta más como un asistente que comprende el historial del proyecto.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Primeros pasos con la compilación de programas UEFI: desde uefi-simple hasta su primer .EFI</title>
        <link>https://knightli.com/es/2026/04/30/compile-uefi-program-beginner-guide/</link>
        <pubDate>Thu, 30 Apr 2026 19:53:08 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/30/compile-uefi-program-beginner-guide/</guid>
        <description>&lt;p&gt;Compilar su primer programa UEFI no es precisamente sencillo. La configuración del entorno puede llevar tiempo, los errores del vinculador son comunes y un programa &lt;code&gt;.EFI&lt;/code&gt; no tiene la misma experiencia directa de edición y ejecución que una aplicación de escritorio normal.&lt;/p&gt;
&lt;p&gt;Este artículo organiza el tema desde la perspectiva de un principiante: si sólo desea compilar su primer programa UEFI, ¿por dónde debería empezar, qué conceptos importan primero y qué errores es más probable que aparezcan?&lt;/p&gt;
&lt;h2 id=&#34;qué-es-un-programa-uefi&#34;&gt;¿Qué es un programa UEFI?
&lt;/h2&gt;&lt;p&gt;Un programa UEFI suele ser un archivo &lt;code&gt;.EFI&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No es un &lt;code&gt;.exe&lt;/code&gt; ordinario en el que se hace doble clic en Windows. Es un ejecutable PE/COFF que se ejecuta dentro del entorno de firmware UEFI. Los casos de uso comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gestores de arranque&lt;/li&gt;
&lt;li&gt;Herramientas de inicialización de hardware.&lt;/li&gt;
&lt;li&gt;Herramientas de actualización de firmware&lt;/li&gt;
&lt;li&gt;Herramientas de diagnóstico previas al arranque&lt;/li&gt;
&lt;li&gt;Flujos de arranque personalizados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Muchas funciones que ve al principio del proceso de inicio del sistema pueden estar relacionadas con aplicaciones, controladores o servicios de firmware UEFI.&lt;/p&gt;
&lt;p&gt;Para los principiantes, no es necesario comprender inmediatamente el desarrollo completo del firmware. El primer objetivo es simple: compilar un archivo &lt;code&gt;.EFI&lt;/code&gt; que pueda cargarse mediante un UEFI Shell o un emulador.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-no-empezar-con-edk-ii&#34;&gt;¿Por qué no empezar con EDK II?
&lt;/h2&gt;&lt;p&gt;El desarrollo real de UEFI a menudo implica EDK II.&lt;/p&gt;
&lt;p&gt;EDK II es completo y más cercano a la ingeniería de firmware real, pero no es muy amigable para principiantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La estructura del proyecto es compleja.&lt;/li&gt;
&lt;li&gt;El sistema de construcción tiene una curva de aprendizaje.&lt;/li&gt;
&lt;li&gt;Las variables de entorno y la configuración de la cadena de herramientas implican muchos detalles.&lt;/li&gt;
&lt;li&gt;Los errores del compilador no siempre son fáciles de entender.&lt;/li&gt;
&lt;li&gt;Es fácil quedarse atascado en el entorno antes de escribir cualquier código.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si el objetivo es simplemente ejecutar un programa UEFI mínimo, un ejemplo ligero es un mejor punto de partida.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/pbatard/uefi-simple&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pbatard/uefi-simple&lt;/a&gt; es uno de esos proyectos. Su objetivo es sencillo: proporcionar un ejemplo UEFI Hello World sencillo para que puedas compilar un archivo &lt;code&gt;.EFI&lt;/code&gt; primero.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirve-uefi-simple&#34;&gt;¿Para qué sirve &lt;code&gt;uefi-simple&lt;/code&gt;?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;uefi-simple&lt;/code&gt; es un buen primer paso para los principiantes en UEFI.&lt;/p&gt;
&lt;p&gt;Resuelve tres problemas prácticos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le brinda una estructura de aplicación UEFI mínima y compilable.&lt;/li&gt;
&lt;li&gt;Evita la complejidad de grandes proyectos de firmware al principio&lt;/li&gt;
&lt;li&gt;Le permite verificar que compilar, vincular y ejecutar todo funciona.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El proyecto admite múltiples métodos de compilación, incluidos Visual Studio 2022 y MinGW/gcc. También se puede probar con QEMU y OVMF.&lt;/p&gt;
&lt;p&gt;En otras palabras, no es necesario reiniciar repetidamente una máquina real para los primeros experimentos. Ejecutar primero el programa en un emulador es mucho más seguro.&lt;/p&gt;
&lt;h2 id=&#34;qué-preparar-antes-de-comenzar&#34;&gt;Qué preparar antes de comenzar
&lt;/h2&gt;&lt;p&gt;Necesita al menos algunas categorías de herramientas.&lt;/p&gt;
&lt;p&gt;La primera categoría es la cadena de herramientas del compilador.&lt;/p&gt;
&lt;p&gt;En Windows, puedes comenzar con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estudio Visual 2022&lt;/li&gt;
&lt;li&gt;O MinGW/gcc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La segunda categoría es un entorno de ejecución UEFI.&lt;/p&gt;
&lt;p&gt;Hay dos opciones comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecute el archivo &lt;code&gt;.EFI&lt;/code&gt; en UEFI Shell de una máquina real&lt;/li&gt;
&lt;li&gt;Pruébalo en un entorno virtual con QEMU + OVMF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La tercera categoría es un proyecto de ejemplo.&lt;/p&gt;
&lt;p&gt;Los principiantes no deberían empezar escribiendo scripts de compilación desde un directorio vacío. Usar un ejemplo mínimo como &lt;code&gt;uefi-simple&lt;/code&gt; ayuda a evitar muchos problemas del sistema de compilación.&lt;/p&gt;
&lt;h2 id=&#34;flujo-de-trabajo-básico&#34;&gt;Flujo de trabajo básico
&lt;/h2&gt;&lt;p&gt;Un flujo de trabajo mínimo de un programa UEFI se puede entender así.&lt;/p&gt;
&lt;p&gt;Primero, obtenga el proyecto de ejemplo.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clone&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pbatard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;uefi-simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;git&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En segundo lugar, elija una cadena de herramientas de compilación.
Si usa Visual Studio, cree con la solución Visual Studio en el proyecto.&lt;br&gt;
Si usa MinGW/gcc, siga el Makefile o las instrucciones proporcionadas por el proyecto.&lt;/p&gt;
&lt;p&gt;En tercer lugar, genere el archivo &lt;code&gt;.EFI&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El punto clave aquí es confirmar la arquitectura de destino. Una PC común suele ser &lt;code&gt;x86_64&lt;/code&gt;, es decir, un entorno UEFI de 64 bits.&lt;/p&gt;
&lt;p&gt;Cuarto, coloque el archivo &lt;code&gt;.EFI&lt;/code&gt; en algún lugar al que pueda acceder UEFI Shell.&lt;/p&gt;
&lt;p&gt;En una máquina real, esto normalmente significa preparar una partición FAT32 o una unidad USB.&lt;br&gt;
Con QEMU, puede montar un directorio o una imagen de disco.&lt;/p&gt;
&lt;p&gt;Quinto, ejecútelo en UEFI Shell.&lt;/p&gt;
&lt;p&gt;El resultado suele ser un resultado mínimo, como un mensaje estilo Hola mundo.&lt;/p&gt;
&lt;h2 id=&#34;donde-los-principiantes-suelen-quedarse-estancados&#34;&gt;Donde los principiantes suelen quedarse estancados
&lt;/h2&gt;&lt;p&gt;La parte más difícil de compilar un programa UEFI no suele ser el lenguaje C en sí, sino el entorno y el proceso de vinculación.&lt;/p&gt;
&lt;p&gt;Los problemas comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arquitectura de compilador incorrecta&lt;/li&gt;
&lt;li&gt;Formato de destino incorrecto&lt;/li&gt;
&lt;li&gt;Parámetros del enlazador incompletos&lt;/li&gt;
&lt;li&gt;Falta el punto de entrada UEFI&lt;/li&gt;
&lt;li&gt;Generar un ejecutable ordinario en lugar de un &lt;code&gt;.EFI&lt;/code&gt; cargable por UEFI&lt;/li&gt;
&lt;li&gt;QEMU u OVMF no configurados correctamente&lt;/li&gt;
&lt;li&gt;Arranque seguro en una máquina real que bloquea un programa no firmado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los errores del vinculador son especialmente fáciles de malinterpretar como problemas de código.&lt;br&gt;
En muchos casos, el verdadero problema es la función de entrada, el subsistema, la arquitectura de destino o el script del vinculador.&lt;/p&gt;
&lt;p&gt;Entonces, en la primera etapa, no se apresure a entrar en una lógica compleja. Asegúrese de que el ejemplo original se pueda compilar y ejecutar, luego cambie la salida poco a poco.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-utilizar-qemu--ovmf-para-realizar-pruebas&#34;&gt;¿Por qué utilizar QEMU + OVMF para realizar pruebas?
&lt;/h2&gt;&lt;p&gt;Es posible probar programas UEFI en una máquina real, pero no es conveniente en la etapa principiante.&lt;/p&gt;
&lt;p&gt;Es posible que tengas que repetir este ciclo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;compilar&lt;/li&gt;
&lt;li&gt;Copiar a una unidad USB&lt;/li&gt;
&lt;li&gt;Reiniciar&lt;/li&gt;
&lt;li&gt;Ingrese al UEFI Shell&lt;/li&gt;
&lt;li&gt;Ejecutar el programa&lt;/li&gt;
&lt;li&gt;Registra el error&lt;/li&gt;
&lt;li&gt;Regresar al sistema y modificar el código.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ese bucle es lento.&lt;/p&gt;
&lt;p&gt;QEMU + OVMF le permite simular un entorno UEFI directamente dentro del sistema operativo. Puede verificar si un archivo &lt;code&gt;.EFI&lt;/code&gt; se carga más rápidamente y es menos probable que afecte sus entradas de arranque reales.&lt;/p&gt;
&lt;p&gt;Una vez que el programa funciona básicamente, probarlo en una máquina real es mucho más manejable.&lt;/p&gt;
&lt;h2 id=&#34;qué-deberían-modificar-primero-los-principiantes&#34;&gt;¿Qué deberían modificar primero los principiantes?
&lt;/h2&gt;&lt;p&gt;Si ya ha compilado su primer &lt;code&gt;.EFI&lt;/code&gt; con el proyecto de ejemplo, no salte a funciones complejas de inmediato.&lt;/p&gt;
&lt;p&gt;Un mejor orden es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cambie primero el texto de salida para confirmar que la recompilación realmente surte efecto.&lt;/li&gt;
&lt;li&gt;Intente leer información sencilla proporcionada por UEFI.&lt;/li&gt;
&lt;li&gt;Comprender la función de entrada, protocolo de salida y servicios básicos.&lt;/li&gt;
&lt;li&gt;Luego considere funciones más complejas, como sistemas de archivos, salida gráfica o administración de entradas de arranque.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este enfoque hace que cada paso sea verificable.&lt;br&gt;
Si cambia demasiado a la vez, resulta difícil saber si el problema está en el código, el proceso de compilación o el entorno de ejecución.&lt;/p&gt;
&lt;h2 id=&#34;en-qué-se-diferencia-de-un-programa-c-normal&#34;&gt;¿En qué se diferencia de un programa C normal?
&lt;/h2&gt;&lt;p&gt;Aunque los programas UEFI se pueden escribir en C, su entorno de ejecución es completamente diferente al de los programas C normales.&lt;/p&gt;
&lt;p&gt;Un programa C normal normalmente se ejecuta dentro de un sistema operativo y puede depender de la biblioteca, el sistema de archivos, el modelo de proceso y las llamadas al sistema estándar.&lt;/p&gt;
&lt;p&gt;Un programa UEFI se ejecuta antes de que se inicie el sistema operativo. Se basa en los servicios proporcionados por el firmware UEFI. Muchas cosas a las que está acostumbrado en los programas normales no están disponibles aquí automáticamente.
Al escribir programas UEFI, es necesario adaptarse a varias diferencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La función de entrada es diferente.&lt;/li&gt;
&lt;li&gt;La salida funciona de manera diferente&lt;/li&gt;
&lt;li&gt;Las bibliotecas disponibles son diferentes.&lt;/li&gt;
&lt;li&gt;El acceso a la memoria y a los archivos funciona de forma diferente&lt;/li&gt;
&lt;li&gt;La depuración funciona de manera diferente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es por esto que partir de un ejemplo mínimo es mejor que escribir código como si fuera un programa C normal.&lt;/p&gt;
&lt;h2 id=&#34;un-camino-de-aprendizaje-práctico&#34;&gt;Un camino de aprendizaje práctico
&lt;/h2&gt;&lt;p&gt;Para principiantes, un camino realista es el siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paso 1: compilar &lt;code&gt;uefi-simple&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Paso 2: Ejecútelo con QEMU + OVMF&lt;/li&gt;
&lt;li&gt;Paso 3: Modificar la salida de Hola Mundo&lt;/li&gt;
&lt;li&gt;Paso 4: Comprenda cómo UEFI Shell carga &lt;code&gt;.EFI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Paso 5: aprenda la función de entrada UEFI y el protocolo de salida básico&lt;/li&gt;
&lt;li&gt;Paso 6: Luego lea EDK II o material de desarrollo UEFI más completo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El objetivo de este camino es construir primero un circuito de retroalimentación que funcione.&lt;/p&gt;
&lt;p&gt;Una vez que pueda generar un &lt;code&gt;.EFI&lt;/code&gt; desde la fuente y ver el resultado en un entorno UEFI, ya habrá cruzado el primer umbral más difícil.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;p&gt;-&lt;a class=&#34;link&#34; href=&#34;https://github.com/pbatard/uefi-simple&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pbatard/uefi-simple&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Zhihu: material de compilación del programa UEFI] (&lt;a class=&#34;link&#34; href=&#34;https://zhuanlan.zhihu.com/p/643704056&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://zhuanlan.zhihu.com/p/643704056&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento final
&lt;/h2&gt;&lt;p&gt;La parte difícil de compilar su primer programa UEFI generalmente no es escribir un poco de código C, sino conectar la cadena de herramientas, el formato de enlace y el entorno de ejecución.&lt;/p&gt;
&lt;p&gt;No se apresure a utilizar funciones complejas.&lt;br&gt;
Comience con un ejemplo mínimo como &amp;ldquo;uefi-simple&amp;rdquo;, obtenga primero un &amp;ldquo;.EFI&amp;rdquo; ejecutable y luego comprenda gradualmente los puntos de entrada, protocolos y métodos de compilación de UEFI.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Claude.md no es mejor cuando es más largo: cómo escribir archivos de memoria global para codificación AI</title>
        <link>https://knightli.com/es/2026/04/29/how-to-write-claude-md-for-ai-coding/</link>
        <pubDate>Wed, 29 Apr 2026 21:07:37 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/29/how-to-write-claude-md-for-ai-coding/</guid>
        <description>&lt;p&gt;Recientemente vi una discusión sobre archivos de memoria global para codificación de IA: después de que los proyectos agregan archivos como &lt;code&gt;Claude.md&lt;/code&gt; o &lt;code&gt;AGENTS.md&lt;/code&gt;, los resultados no necesariamente mejoran. En algunos casos, las tasas de éxito pueden incluso disminuir mientras que el costo del razonamiento aumenta.&lt;/p&gt;
&lt;p&gt;Al principio, esto parece contradictorio. Generalmente asumimos que si le damos a la IA más antecedentes del proyecto, más reglas y más explicaciones, debería escribir el código con mayor precisión.&lt;br&gt;
El verdadero problema es que &lt;code&gt;Claude.md&lt;/code&gt; no es un documento ordinario. Es un archivo de memoria global que se inyecta en el contexto de cada conversación. Cuanto más contiene, más tiene que leer el modelo cada vez; cuanto más vago sea, más juicio tendrá que hacer el modelo; y si contiene flujos de trabajo que no siempre deberían ejecutarse, el modelo puede desencadenar acciones innecesarias en tareas no relacionadas.&lt;/p&gt;
&lt;p&gt;Entonces, la parte difícil de escribir &lt;code&gt;Claude.md&lt;/code&gt; es no completarlo. Se trata de decidir qué piezas de información merecen ocupar contexto de forma permanente.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-claudemd&#34;&gt;¿Qué es Claude.md?
&lt;/h2&gt;&lt;p&gt;En las herramientas de codificación de IA, archivos como &lt;code&gt;Claude.md&lt;/code&gt; y &lt;code&gt;AGENTS.md&lt;/code&gt; son esencialmente archivos de memoria global.&lt;/p&gt;
&lt;p&gt;La conversación normal entra en el contexto, pero la longitud del contexto es limitada. Una vez que la conversación se vuelve larga, el contenido histórico se comprime y se pierden algunos detalles. Un archivo de memoria global fija reglas importantes para que el modelo pueda verlas al comienzo de cada tarea.&lt;/p&gt;
&lt;p&gt;Esto significa dos cosas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El contenido escrito allí es más difícil de olvidar.&lt;/li&gt;
&lt;li&gt;El contenido escrito allí también cuesta algo en cada tarea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es como un README que se lee sólo cuando es necesario. Se parece más a un conjunto de limitaciones laborales de larga duración. Una vez que algo se coloca allí, afecta el juicio del modelo por defecto.&lt;/p&gt;
&lt;p&gt;Por lo tanto, &lt;code&gt;Claude.md&lt;/code&gt; no es una introducción al proyecto, ni una colección de consejos, ni un lugar para deshacerse de cada proceso de desarrollo. Sólo debe almacenar reglas que el modelo probablemente viole repetidamente si no las conoce.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-puede-empeorar-las-cosas&#34;&gt;Por qué puede empeorar las cosas
&lt;/h2&gt;&lt;p&gt;Un archivo de memoria global mal escrito suele provocar tres tipos de problemas.&lt;/p&gt;
&lt;p&gt;Primero, consume contexto.&lt;/p&gt;
&lt;p&gt;Si &lt;code&gt;Claude.md&lt;/code&gt; tiene mil líneas, esas líneas permanecen en el contexto del modelo durante mucho tiempo. Es posible que se reduzcan el código, los mensajes de error y los requisitos que realmente son relevantes para la tarea actual. El contexto no es espacio libre. Cuanto más grande sea el archivo de reglas globales, más fácil será diluir la tarea actual.&lt;/p&gt;
&lt;p&gt;En segundo lugar, puede desencadenar comportamientos innecesarios.&lt;/p&gt;
&lt;p&gt;Por ejemplo, un archivo global podría decir:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Before every task, fully read the project directory.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After every change, run a complete end-to-end test.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Estas líneas parecen responsables, pero en un archivo de memoria global se convierten en &amp;ldquo;hacer esto para cada tarea&amp;rdquo;. Incluso si la tarea consiste solo en cambiar una línea de copia, el modelo puede realizar exploraciones y pruebas innecesarias debido a estas reglas. El resultado es un trabajo más lento, un costo más alto y, a veces, más interferencia.&lt;/p&gt;
&lt;p&gt;En tercer lugar, aumenta la carga del juicio.&lt;/p&gt;
&lt;p&gt;Declaraciones como &amp;ldquo;mantener el código elegante, conciso, mantenible y extensible&amp;rdquo; suenan correctas, pero son restricciones débiles. Cada vez que el modelo genera código, tiene que decidir qué significa elegante o extensible, sin recibir un límite claro.&lt;/p&gt;
&lt;p&gt;Un mejor enfoque es escribir prohibiciones o contraejemplos concretos en lugar de virtudes abstractas. Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not add a generic abstraction for a single call site.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not change shared parsing logic without test coverage.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not put temporary scripts in the application source directory.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Estas reglas son más específicas y más fáciles de seguir.&lt;/p&gt;
&lt;h2 id=&#34;qué-debería-entrar&#34;&gt;¿Qué debería entrar?
&lt;/h2&gt;&lt;p&gt;Puedes usar un estándar simple para decidir si algo pertenece a &lt;code&gt;Claude.md&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Si la IA comete repetidamente el mismo error sin ella, entonces vale la pena anotarlo.&lt;/p&gt;
&lt;p&gt;El contenido adecuado para un archivo de memoria global suele tener estas características:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Es duradero&lt;/li&gt;
&lt;li&gt;Está fuertemente ligado al repositorio actual.&lt;/li&gt;
&lt;li&gt;No se puede inferir naturalmente de la estructura del código.&lt;/li&gt;
&lt;li&gt;Cambia claramente el comportamiento del modelo.&lt;/li&gt;
&lt;li&gt;Es preferiblemente una restricción, prohibición, regla de ruta o comando fijo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;For all Hugo posts, only edit index.zh-cn.md and do not automatically generate other language versions.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Article front matter must include title/date/draft/tags/categories/slug/description.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do not modify generated artifacts under public/.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;On PowerShell, use scripts/deploy.ps1 for deployment.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Estas no son sugerencias vagas. Están vinculados a cómo funciona realmente el repositorio. Si el modelo no los conoce puede cometer errores; una vez que los conoce, puede evitar verdaderos errores.&lt;/p&gt;
&lt;h2 id=&#34;qué-debería-quedar-fuera&#34;&gt;¿Qué debería quedar fuera?
&lt;/h2&gt;&lt;p&gt;Mucha gente convierte &lt;code&gt;Claude.md&lt;/code&gt; en un manual de proyecto. Esto suele ser innecesario.&lt;/p&gt;
&lt;p&gt;El contenido que generalmente no pertenece allí incluye:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visión y antecedentes del proyecto.&lt;/li&gt;
&lt;li&gt;Descripciones de estructuras de directorios grandes.&lt;/li&gt;
&lt;li&gt;Planes de tareas temporales&lt;/li&gt;
&lt;li&gt;Pasos únicos de depuración&lt;/li&gt;
&lt;li&gt;Lemas de calidad de código abstracto.&lt;/li&gt;
&lt;li&gt;Flujos de trabajo largos que solo son necesarios en algunas situaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo, una descripción como &amp;ldquo;este es un proyecto de comercio electrónico con módulos de producto, pedido y usuario&amp;rdquo; ayuda muy poco con una tarea de codificación concreta. Durante el desarrollo real, el modelo debe depender de los requisitos, especificaciones, estructura del código y pruebas actuales, no de una introducción aproximada del proyecto en la memoria global.&lt;/p&gt;
&lt;p&gt;Lo mismo se aplica a la estructura de directorios. A menos que un directorio tenga una convención especial, como &amp;ldquo;los componentes compartidos deben importarse desde este directorio&amp;rdquo;, no es necesario escribir el árbol completo en el archivo. El modelo puede leer el directorio del proyecto. Es fácil que una descripción de directorio estática quede obsoleta.&lt;/p&gt;
&lt;h2 id=&#34;los-flujos-de-trabajo-pertenecen-a-habilidades-o-comandos&#34;&gt;Los flujos de trabajo pertenecen a habilidades o comandos
&lt;/h2&gt;&lt;p&gt;Si una sección dice &amp;ldquo;primero haz esto, luego aquello y luego haz la tercera cosa&amp;rdquo;, es posible que no pertenezca a &lt;code&gt;Claude.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Los flujos de trabajo de larga duración se pueden convertir en habilidades, scripts o comandos. El beneficio es que la memoria global solo necesita conservar el nombre y la condición de activación, mientras que los pasos detallados se cargan solo cuando es necesario.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;When the user asks to translate a Hugo post, use the post-translate skill.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;When the user asks to deploy the site, run the hugo-rsync-deploy workflow.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto es más liviano que poner los procesos completos de traducción e implementación en &lt;code&gt;Claude.md&lt;/code&gt;. La memoria global sigue siendo corta y los flujos de trabajo detallados se encuentran en herramientas activables.&lt;/p&gt;
&lt;p&gt;El nuevo flujo de inicialización de Claude también avanza en esta dirección. No solo genera un &lt;code&gt;Claude.md&lt;/code&gt;; también intenta dividir los flujos de trabajo reutilizables en habilidades y los eventos fijos en ganchos. La idea subyacente es clara: la memoria global debería ser un punto de entrada, mientras que los detalles deberían cargarse según demanda.&lt;/p&gt;
&lt;h2 id=&#34;claudemd-necesita-iteración&#34;&gt;Claude.md necesita iteración
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude.md&lt;/code&gt; no debe escribirse una vez y luego ignorarse.&lt;/p&gt;
&lt;p&gt;Un mejor enfoque es ser breve al principio y dejar que las tareas reales expongan los problemas. Si ocurre un error una vez, manéjelo manualmente. Si el mismo tipo de error aparece dos o más veces, puede merecer convertirse en una regla global.&lt;/p&gt;
&lt;p&gt;Este tipo de iteración es más útil que escribir un enorme conjunto de reglas al principio. Al principio, no sabes qué reglas son realmente útiles o qué líneas se convertirán en ruido. A medida que el proyecto crece, la colaboración aumenta y el comportamiento del modelo se vuelve más claro, puede agregar gradualmente problemas de alta frecuencia.&lt;/p&gt;
&lt;p&gt;También hay una tendencia importante: cuanto más fuerte sea el modelo, más corto debería ser el archivo de memoria global.
Muchos requisitos que alguna vez tuvieron que escribirse en indicaciones ahora son manejados naturalmente por el modelo. Continuar poniendo esos requisitos básicos en &lt;code&gt;Claude.md&lt;/code&gt; solo aumenta la carga de contexto. La memoria global debería reducirse a medida que mejora la capacidad del modelo, manteniendo solo lo que es exclusivo de este repositorio y no se puede inferir automáticamente.&lt;/p&gt;
&lt;h2 id=&#34;una-forma-más-práctica-de-escribirlo&#34;&gt;Una forma más práctica de escribirlo
&lt;/h2&gt;&lt;p&gt;Al escribir &lt;code&gt;Claude.md&lt;/code&gt;, piense en este orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;¿Qué convenciones especiales tiene este repositorio?&lt;/li&gt;
&lt;li&gt;¿Qué errores ha cometido el modelo más de una vez?&lt;/li&gt;
&lt;li&gt;¿Qué directorios, archivos o comandos nunca deben usarse indebidamente?&lt;/li&gt;
&lt;li&gt;¿Qué flujos de trabajo deberían convertirse en habilidades, guiones o comandos en lugar de un contexto permanente?&lt;/li&gt;
&lt;li&gt;¿Qué partes son meras introducciones y pueden eliminarse?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El archivo final puede tener sólo unas pocas docenas de líneas. No es necesario explicar completamente el proyecto. Necesita limitar el comportamiento con precisión.&lt;/p&gt;
&lt;p&gt;Un buen &lt;code&gt;Claude.md&lt;/code&gt; podría verse así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Working Rules
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Only edit files related to the current task.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Do not modify generated artifact directories such as public/ or resources/.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Hugo post rewrites only process index.zh-cn.md and do not generate other language versions.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- If deployment is involved, run the Hugo build first, then execute the existing rsync script.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- When there are existing user changes, do not revert them. Continue from the current state.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Es breve, pero cada línea afecta el comportamiento real. Ese es el tipo de contenido que vale la pena mantener en contexto permanentemente.&lt;/p&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento final
&lt;/h2&gt;&lt;p&gt;El valor de &lt;code&gt;Claude.md&lt;/code&gt; no es hacer que la IA &amp;ldquo;sepa más&amp;rdquo;. Se trata de hacer que la IA &amp;ldquo;evite errores corregidos&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;No es una base de conocimientos ni una enciclopedia de proyectos. Es un archivo de restricciones de larga duración para la codificación AI.&lt;br&gt;
Cuanto más específico, breve y cercano a los errores reales sea, más útil será. Cuanto más genérica, más larga y más parecida a una introducción de proyecto sea, más probable será que ralentice el modelo o incluso empeore los resultados.&lt;/p&gt;
&lt;p&gt;Trate la memoria global como un recurso escaso, no como un bloc de notas ilimitado. Ese puede ser el principio más importante para escribir un buen &lt;code&gt;Claude.md&lt;/code&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Codex está empezando a controlar la computadora. ¿Qué significa eso para el futuro?</title>
        <link>https://knightli.com/es/2026/04/29/codex-computer-use-update/</link>
        <pubDate>Wed, 29 Apr 2026 11:28:25 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/29/codex-computer-use-update/</guid>
        <description>&lt;p&gt;La parte más importante de esta actualización del Codex no es que agregó otro botón común y corriente. Es que el Codex está empezando a avanzar hacia &amp;ldquo;controlar la computadora&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;En el pasado, usar IA generalmente significaba hacer preguntas en un cuadro de chat, copiar, pegar y luego operar manualmente el software.&lt;br&gt;
Ahora ese límite se está ampliando: la IA no solo te responde. Puede operar aplicaciones de escritorio según su objetivo.&lt;/p&gt;
&lt;p&gt;A corto plazo, esta es una característica nueva. A largo plazo, puede cambiar la cantidad de personas que usan computadoras.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-esta-característica&#34;&gt;¿Qué es esta característica?
&lt;/h2&gt;&lt;p&gt;En pocas palabras, la capacidad de uso de computadoras de Codex le permite acceder y operar el entorno de escritorio.&lt;/p&gt;
&lt;p&gt;Puede hacer cosas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;seleccionar y controlar una aplicación&lt;/li&gt;
&lt;li&gt;recibir tareas en lenguaje natural&lt;/li&gt;
&lt;li&gt;abrir navegadores, herramientas de inteligencia artificial, archivos locales u otro software&lt;/li&gt;
&lt;li&gt;ingrese texto, haga clic en botones y espere resultados&lt;/li&gt;
&lt;li&gt;conectar varios pasos en una tarea&lt;/li&gt;
&lt;li&gt;seguir ejecutándose en segundo plano sin necesidad de que el usuario siga cada paso manualmente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su función no es solo escribir un texto para usted, sino también completar un flujo de operación para usted.&lt;/p&gt;
&lt;p&gt;Esa es la diferencia clave entre un Agente y un chatbot común y corriente:&lt;br&gt;
un chatbot da principalmente respuestas; un Agente está más cerca de &amp;ldquo;recibir un objetivo y luego ejecutarlo&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-esto-es-importante&#34;&gt;Por qué esto es importante
&lt;/h2&gt;&lt;p&gt;En el pasado, gran parte de la automatización requería que supieras escribir guiones.&lt;/p&gt;
&lt;p&gt;Por ejemplo, supongamos que desea completar un flujo de trabajo entre software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;abrir una página web&lt;/li&gt;
&lt;li&gt;encontrar información&lt;/li&gt;
&lt;li&gt;copiar contenido&lt;/li&gt;
&lt;li&gt;pásalo a otra herramienta de IA&lt;/li&gt;
&lt;li&gt;guardar un archivo&lt;/li&gt;
&lt;li&gt;abre el directorio local y comprueba el resultado&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para automatizar esto de forma tradicional, es posible que necesite scripts de navegador, API, programas locales e incluso automatización de ventanas.&lt;/p&gt;
&lt;p&gt;Pero muchos usuarios comunes y corrientes no saben cómo escribir estas cosas.&lt;br&gt;
Incluso si lo hacen, puede que no valga la pena escribir un guión para una tarea temporal.&lt;/p&gt;
&lt;p&gt;Aquí es donde importa el uso de la computadora: empuja la &amp;ldquo;capacidad similar a un script&amp;rdquo; hacia el lenguaje natural.&lt;/p&gt;
&lt;p&gt;No es necesario que le diga exactamente dónde hacer clic.&lt;br&gt;
Puede decirle qué resultado desea y dejar que intente completar la tarea.&lt;/p&gt;
&lt;h2 id=&#34;flujos-de-trabajo-que-pueden-cambiar&#34;&gt;Flujos de trabajo que pueden cambiar
&lt;/h2&gt;&lt;p&gt;Creo que los primeros flujos de trabajo que cambiarán no serán trabajos extremadamente serios o de alto riesgo, sino tareas molestas, fragmentadas, repetitivas y para las que no vale la pena escribir un programa dedicado.&lt;/p&gt;
&lt;h3 id=&#34;1-mover-información-a-través-del-software&#34;&gt;1. Mover información a través del software
&lt;/h3&gt;&lt;p&gt;El caso más típico es el de mover información entre aplicaciones.&lt;/p&gt;
&lt;p&gt;Anteriormente, podía alternar entre un navegador, un documento, una ventana de chat y una carpeta local.&lt;br&gt;
En el futuro, podrás encargar este tipo de tarea a un Agente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;encontrar cierto tipo de información&lt;/li&gt;
&lt;li&gt;resumirlo en un documento&lt;/li&gt;
&lt;li&gt;guárdelo en un directorio específico&lt;/li&gt;
&lt;li&gt;abre el resultado para que lo revises&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este trabajo no es difícil, pero requiere atención.&lt;br&gt;
El valor de un Agente es que absorbe estas pequeñas operaciones.&lt;/p&gt;
&lt;h3 id=&#34;2-coordinación-entre-múltiples-herramientas-de-ia&#34;&gt;2. Coordinación entre múltiples herramientas de IA
&lt;/h3&gt;&lt;p&gt;El flujo de trabajo real de muchas personas ya no se basa en una única herramienta de inteligencia artificial.&lt;/p&gt;
&lt;p&gt;Puede verse así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;una herramienta escribe código&lt;/li&gt;
&lt;li&gt;una herramienta busca información&lt;/li&gt;
&lt;li&gt;una herramienta genera imágenes&lt;/li&gt;
&lt;li&gt;una herramienta organiza documentos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anteriormente, estas herramientas se conectaban mediante copiar y pegar manualmente.&lt;br&gt;
En el futuro, un Agente puede convertirse en la capa intermedia: abre herramientas, pasa contexto, espera resultados y organiza resultados.
Esto puede convertir &amp;ldquo;múltiples herramientas de IA trabajando juntas&amp;rdquo; de un proceso manual a un proceso semiautomático.&lt;/p&gt;
&lt;h3 id=&#34;3-automatización-del-software-de-oficina&#34;&gt;3. Automatización del software de oficina
&lt;/h3&gt;&lt;p&gt;Las hojas de cálculo, las presentaciones, los documentos y el correo electrónico comparten una característica: son potentes, pero muchas operaciones están fragmentadas.&lt;/p&gt;
&lt;p&gt;Si los agentes pueden controlar este software de forma fiable, la barrera a la automatización de oficinas disminuirá notablemente.&lt;/p&gt;
&lt;p&gt;No es necesario recordar dónde está un menú ni aprender atajos complicados.&lt;br&gt;
Solo necesitas describir el objetivo, como por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;convierta esta hoja de cálculo en un informe mensual&lt;/li&gt;
&lt;li&gt;hacer un resumen de una página de este documento&lt;/li&gt;
&lt;li&gt;combinar estos materiales en una explicación claramente estructurada&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las tediosas operaciones de los botones quedarán gradualmente ocultas detrás del lenguaje natural.&lt;/p&gt;
&lt;h2 id=&#34;qué-significa-para-los-usuarios-comunes&#34;&gt;Qué significa para los usuarios comunes
&lt;/h2&gt;&lt;p&gt;Para los usuarios comunes, este tipo de característica puede tener un impacto más directo que &amp;ldquo;el modelo se volvió un poco más inteligente&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Porque reduce la barrera operativa, no sólo la barrera del conocimiento.&lt;/p&gt;
&lt;p&gt;Muchas personas pueden describir lo que quieren, pero no saben dónde hacer clic o cómo combinar funciones dentro del software.&lt;br&gt;
Si los Agentes pueden hacerse cargo de esta parte, el uso de una computadora puede convertirse en:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I describe the goal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Agent operates the software
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I check the result
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto está más cerca de la productividad real que un simple chat.&lt;/p&gt;
&lt;h2 id=&#34;su-impacto-en-el-software&#34;&gt;Su impacto en el software
&lt;/h2&gt;&lt;p&gt;Si este tipo de capacidad del Agente continúa madurando, el software en sí también se verá afectado.&lt;/p&gt;
&lt;p&gt;En el pasado, el diseño de software se basaba principalmente en el clic humano.&lt;br&gt;
En el futuro, es posible que también sea necesario que el software sirva para la operación del Agente.&lt;/p&gt;
&lt;p&gt;Esto significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;los elementos de la interfaz deben ser más claros&lt;/li&gt;
&lt;li&gt;la retroalimentación de operación debe ser más estable&lt;/li&gt;
&lt;li&gt;los permisos locales deben ser más granulares&lt;/li&gt;
&lt;li&gt;el software puede proporcionar interfaces más adecuadas para las llamadas de los agentes&lt;/li&gt;
&lt;li&gt;A los usuarios les puede interesar más si la IA puede operar el software sin problemas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A largo plazo, los límites entre las aplicaciones pueden volverse más delgados.&lt;br&gt;
Es posible que a los usuarios les importe menos &amp;ldquo;qué aplicación debo abrir&amp;rdquo; y más &amp;ldquo;qué tarea quiero completar&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;no-lo-exageres-todavía&#34;&gt;No lo exageres todavía
&lt;/h2&gt;&lt;p&gt;Por supuesto, todavía no es momento de dejarlo ir por completo.&lt;/p&gt;
&lt;p&gt;Este tipo de capacidad todavía tiene varias limitaciones claras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la estabilidad aún necesita observación&lt;/li&gt;
&lt;li&gt;las tareas complejas pueden fallar en el medio&lt;/li&gt;
&lt;li&gt;los límites de los permisos deben manejarse con cuidado&lt;/li&gt;
&lt;li&gt;Las operaciones de eliminación de cuentas, pagos y archivos no deben delegarse a la ligera.&lt;/li&gt;
&lt;li&gt;el consumo de cuotas no es algo que puedas ignorar por completo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entonces, en esta etapa, el mejor caso de uso es no dejar que se haga cargo de toda la computadora, sino permitir que maneje tareas de bajo riesgo, revisables y con muchos pasos.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;organización de materiales&lt;/li&gt;
&lt;li&gt;generar borradores&lt;/li&gt;
&lt;li&gt;mover contenido entre herramientas&lt;/li&gt;
&lt;li&gt;abrir y comprobar archivos&lt;/li&gt;
&lt;li&gt;ejecutar flujos de trabajo semiautomáticos que pueden ser revisados por un humano&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;una-última-línea&#34;&gt;Una última línea
&lt;/h2&gt;&lt;p&gt;La verdadera importancia de esta actualización del Codex es que empuja a la IA de &amp;ldquo;responder preguntas&amp;rdquo; a &amp;ldquo;operar el entorno&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;A corto plazo, es una característica del uso de la computadora.&lt;br&gt;
A largo plazo, puede marcar un cambio en la forma en que se utilizan las computadoras personales.&lt;/p&gt;
&lt;p&gt;En el futuro, es posible que dediquemos menos tiempo a recordar botones, buscar menús y cambiar de ventana.&lt;br&gt;
Más a menudo, describiremos el objetivo, dejaremos que un Agente lo ejecute y luego dejaremos que los humanos tomen el juicio final.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>¿Por qué existe una habilidad del Codex en el directorio pero aún no aparece?</title>
        <link>https://knightli.com/es/2026/04/29/codex-skill-not-loaded-because-of-utf-8-bom/</link>
        <pubDate>Wed, 29 Apr 2026 11:18:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/29/codex-skill-not-loaded-because-of-utf-8-bom/</guid>
        <description>&lt;p&gt;Este problema era fácil de pasar por alto: varias habilidades ya estaban ubicadas en &lt;code&gt;~/.codex/skills&lt;/code&gt;, pero después de abrir un nuevo hilo del Codex, la barra lateral todavía mostraba solo un pequeño subconjunto de ellas.&lt;/p&gt;
&lt;p&gt;Al principio, parecía un problema de caché o de indexación. La causa real fue más específica: varios archivos &lt;code&gt;SKILL.md&lt;/code&gt; comenzaron con una lista de materiales UTF-8. El cargador de habilidades de Codex 0.111.0 no omitió esa secuencia de bytes, por lo que calculó erróneamente que los archivos no tenían contenido YAML válido.&lt;/p&gt;
&lt;h2 id=&#34;síntoma&#34;&gt;Síntoma
&lt;/h2&gt;&lt;p&gt;El directorio local contenía estas habilidades:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/git-commit-push/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/hugo-rsync-deploy/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/bilibili-speech-transcriber/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/product-cutout-normalize/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Pero después de abrir un hilo nuevo, las habilidades realmente expuestas fueron solo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bilibili-speech-transcriber
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;product-cutout-normalize
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En otras palabras, un archivo existente en el disco no significa que la sesión actual pueda cargarlo correctamente. Codex analiza primero la portada de cada &lt;code&gt;SKILL.md&lt;/code&gt;. Si el análisis falla, esa habilidad se excluye directamente.&lt;/p&gt;
&lt;h2 id=&#34;investigación&#34;&gt;Investigación
&lt;/h2&gt;&lt;p&gt;Iniciar una nueva sesión con &lt;code&gt;codex exec&lt;/code&gt; mostró un error más directo. En VS Code u otros IDE, es posible que estos registros no sean visibles:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;failed to load skill C:\Users\knightli\.codex\skills\git-commit-push\SKILL.md: missing YAML frontmatter delimited by ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;failed to load skill C:\Users\knightli\.codex\skills\hugo-rsync-deploy\SKILL.md: missing YAML frontmatter delimited by ---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Visualmente, estos archivos parecían tener un encabezado normal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: post-rewrite
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El verdadero problema estaba en el nivel de bytes.&lt;/p&gt;
&lt;p&gt;El comienzo de un archivo fallido fue:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EF-BB-BF-2D-2D-2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El comienzo de un archivo que se cargó correctamente fue:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2D-2D-2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;2D-2D-2D&lt;/code&gt; es &lt;code&gt;---&lt;/code&gt;. El &lt;code&gt;EF-BB-BF&lt;/code&gt; anterior es la lista de materiales UTF-8.&lt;/p&gt;
&lt;h2 id=&#34;causa&#34;&gt;Causa
&lt;/h2&gt;&lt;p&gt;En Codex 0.111.0, el cargador de habilidades espera que el primer byte de &lt;code&gt;SKILL.md&lt;/code&gt; sea el primer &lt;code&gt;-&lt;/code&gt; en &lt;code&gt;---&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si el archivo comienza con una lista de materiales UTF-8, el comienzo real será:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BOM + ---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Entonces, el cargador piensa que el archivo no comienza con el delimitador inicial e informa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;missing YAML frontmatter delimited by ---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El contenido de la habilidad no era incorrecto y el directorio tampoco era incorrecto. Un pequeño detalle de codificación impidió que el analizador reconociera el archivo.&lt;/p&gt;
&lt;h2 id=&#34;arreglar&#34;&gt;Arreglar
&lt;/h2&gt;&lt;p&gt;Convierta los archivos &lt;code&gt;SKILL.md&lt;/code&gt; afectados a UTF-8 sin BOM.&lt;/p&gt;
&lt;p&gt;En PowerShell, esto se puede hacer así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$paths&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;C:\Users\knightli\.codex\skills\git-commit-push\SKILL.md&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;C:\Users\knightli\.codex\skills\hugo-rsync-deploy\SKILL.md&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$utf8NoBom&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;New-Object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;UTF8Encoding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;$false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$p&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$paths&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$text&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;IO.File&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReadAllText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;Text.Encoding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UTF8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;no&#34;&gt;IO.File&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WriteAllText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$utf8NoBom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después del procesamiento, el encabezado del archivo debería cambiar de:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EF-BB-BF-2D-2D-2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;a:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2D-2D-2D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;verificación&#34;&gt;Verificación
&lt;/h2&gt;&lt;p&gt;Después de reiniciar una sesión del Codex, las habilidades visibles se restauraron en:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git-commit-push-zh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo-rsync-deploy
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bilibili-speech-transcriber
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;product-cutout-normalize
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si la barra lateral todavía muestra la lista anterior, cierre la barra lateral o ventana actual del Codex y vuelva a abrir el proyecto. La lista de habilidades generalmente se carga cuando comienza la sesión, por lo que es posible que los cambios realizados en mitad de una sesión no se actualicen inmediatamente.&lt;/p&gt;
&lt;h2 id=&#34;una-última-línea&#34;&gt;Una última línea
&lt;/h2&gt;&lt;p&gt;Este tipo de problema es fácil de confundir con &amp;ldquo;El Codex no se volvió a indexar&amp;rdquo; o &amp;ldquo;la habilidad no se instaló correctamente&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Al solucionar problemas, verifique primero estas tres cosas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si &lt;code&gt;SKILL.md&lt;/code&gt; está realmente en el directorio correcto&lt;/li&gt;
&lt;li&gt;si el archivo tiene un texto inicial &lt;code&gt;---&lt;/code&gt; válido en la parte superior&lt;/li&gt;
&lt;li&gt;si el archivo es UTF-8 sin BOM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La clave en este caso fue el tercer punto: el archivo se veía bien, pero su primer byte no era &amp;ldquo;-&amp;rdquo;, por lo que Codex no lo trató como una habilidad válida.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>¿Cuál es la diferencia entre ~/.codex/skills y Project .codex/skills en Codex?</title>
        <link>https://knightli.com/es/2026/04/29/difference-between-global-and-project-codex-skills/</link>
        <pubDate>Wed, 29 Apr 2026 11:08:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/29/difference-between-global-and-project-codex-skills/</guid>
        <description>&lt;p&gt;Al organizar las habilidades del Codex, la gente suele quedarse estancada en dos preguntas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cuál es la diferencia entre &lt;code&gt;~/.codex/skills&lt;/code&gt; y &lt;code&gt;project/.codex/skills&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;¿Por qué existe una habilidad en el directorio pero no aparece en la sesión actual?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquí está la versión corta.&lt;/p&gt;
&lt;h2 id=&#34;la-diferencia&#34;&gt;La diferencia
&lt;/h2&gt;&lt;p&gt;La forma más sencilla de recordarlo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt; es tu biblioteca de habilidades global&lt;/li&gt;
&lt;li&gt;&lt;code&gt;project/.codex/skills&lt;/code&gt; es la biblioteca de habilidades local para ese repositorio&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;codexskills&#34;&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Úselo para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Habilidades que reutilizas personalmente en todos los proyectos.&lt;/li&gt;
&lt;li&gt;flujos de trabajo generales que no están vinculados a un repositorio específico&lt;/li&gt;
&lt;li&gt;flujos de trabajo que claramente pertenecen a sus propios hábitos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;post-reescritura&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;post-traducir&lt;/code&gt;
-&lt;code&gt;git-commit-push&lt;/code&gt;
-&lt;code&gt;hugo-rsync-deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bilibili-transcriptor-de-voz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El rasgo clave de este tipo de habilidad es: &lt;strong&gt;todavía tiene sentido fuera del proyecto actual.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;proyectocodexskills&#34;&gt;&lt;code&gt;proyecto/.codex/skills&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Úselo para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flujos de trabajo que solo se aplican a este repositorio&lt;/li&gt;
&lt;li&gt;reglas estrechamente acopladas a la estructura, scripts o plantillas del proyecto actual&lt;/li&gt;
&lt;li&gt;Habilidades que deben ser compartidas por el equipo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un flujo de trabajo de publicación específico para este repositorio&lt;/li&gt;
&lt;li&gt;una plantilla de generación que solo funciona en este proyecto&lt;/li&gt;
&lt;li&gt;pasos de automatización estrechamente vinculados a scripts de proyectos privados&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El rasgo clave de este tipo de habilidad es: &lt;strong&gt;deja de ser significativo una vez que sale de este repositorio.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;cuándo-utilizar-habilidades-globales-y-cuándo-utilizar-habilidades-de-proyecto&#34;&gt;Cuándo utilizar habilidades globales y cuándo utilizar habilidades de proyecto
&lt;/h2&gt;&lt;p&gt;Esta regla general es suficiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si se trata de tus hábitos personales, ponlo en &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si se trata de reglas del repositorio, colóquelo en &lt;code&gt;project/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Si se puede reutilizar en todos los proyectos, prefiera global&lt;/li&gt;
&lt;li&gt;Si debe ser compartido por varias personas y evolucionar con el repositorio, prefiera el nivel de proyecto&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;el-repositorio-actual&#34;&gt;El repositorio actual
&lt;/h2&gt;&lt;p&gt;Basado en el estado actual:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;su máquina tiene &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;este repositorio no tiene &lt;code&gt;.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Así que ahora mismo dependes principalmente de las habilidades globales.&lt;/p&gt;
&lt;p&gt;Eso significa que flujos de trabajo como &amp;ldquo;post-reescritura&amp;rdquo;, &amp;ldquo;post-traducción&amp;rdquo; y &amp;ldquo;git-commit-push&amp;rdquo; son actualmente más bien parte de su flujo de trabajo personal, no algo incluido explícitamente con este repositorio.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-existe-una-habilidad-en-el-disco-pero-puede-no-aparecer-en-la-sesión-actual&#34;&gt;Por qué existe una habilidad en el disco pero puede no aparecer en la sesión actual
&lt;/h2&gt;&lt;p&gt;Hay dos cosas diferentes aquí:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Existente en el disco&lt;/strong&gt;: el archivo de habilidad existe en un directorio local&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expuesto a la sesión&lt;/strong&gt;: la sesión actual lo registró en la lista de habilidades disponibles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos no son lo mismo.&lt;/p&gt;
&lt;p&gt;Entonces esto puede suceder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ya existe una habilidad en &lt;code&gt;~/.codex/skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;pero no aparece en la lista después de &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por lo general, esto no significa que la habilidad esté rota. Más a menudo significa: &lt;strong&gt;la sesión actual no la ha vuelto a indexar.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;cómo-hacer-que-una-habilidad-esté-disponible-en-la-sesión-actual&#34;&gt;Cómo hacer que una habilidad esté disponible en la sesión actual
&lt;/h2&gt;&lt;p&gt;La lista de verificación práctica es breve.&lt;/p&gt;
&lt;h3 id=&#34;1-colóquelo-en-el-directorio-correcto&#34;&gt;1. Colóquelo en el directorio correcto
&lt;/h3&gt;&lt;p&gt;Mundiales:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.codex/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nivel de proyecto:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;project/.codex/skills/&amp;lt;skill-name&amp;gt;/SKILL.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-haga-que-el-encabezado-skillmd-sea-reconocible&#34;&gt;2. Haga que el encabezado &lt;code&gt;SKILL.md&lt;/code&gt; sea reconocible
&lt;/h3&gt;&lt;p&gt;Como mínimo, necesita:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: your-skill-name
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description: What this skill does
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-abra-una-nueva-sesión-después-de-crearla-o-editarla&#34;&gt;3. Abra una nueva sesión después de crearla o editarla
&lt;/h3&gt;&lt;p&gt;En muchos casos, una habilidad no aparece porque la sesión actual ya fijó su lista de habilidades disponibles cuando comenzó.&lt;/p&gt;
&lt;p&gt;Entonces, si crea una habilidad en medio de una sesión, es posible que ya exista en el disco, pero es posible que esta sesión no la reconozca.&lt;/p&gt;
&lt;p&gt;El flujo de trabajo más confiable es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ponga en práctica la habilidad&lt;/li&gt;
&lt;li&gt;Finalizar la sesión actual&lt;/li&gt;
&lt;li&gt;Vuelva a ingresar al proyecto.&lt;/li&gt;
&lt;li&gt;Abre una nueva sesión&lt;/li&gt;
&lt;li&gt;Compruebe si aparece debajo de &lt;code&gt;/&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;4-implemente-las-habilidades-para-el-proyecto-antes-de-comenzar&#34;&gt;4. Implemente las habilidades para el proyecto antes de comenzar
&lt;/h3&gt;&lt;p&gt;Si desea que &lt;code&gt;project/.codex/skills&lt;/code&gt; se reconozca de manera más confiable, coloque esas habilidades en el proyecto antes de ingresar al repositorio e iniciar la sesión.&lt;/p&gt;
&lt;h2 id=&#34;una-última-línea&#34;&gt;Una última línea
&lt;/h2&gt;&lt;p&gt;La conclusión más corta es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.codex/skills&lt;/code&gt; es tu biblioteca de habilidades personales&lt;/li&gt;
&lt;li&gt;&lt;code&gt;project/.codex/skills&lt;/code&gt; es la biblioteca de reglas local del repositorio&lt;/li&gt;
&lt;li&gt;una habilidad existente en el directorio no significa que la sesión actual siempre la mostrará&lt;/li&gt;
&lt;li&gt;la solución más común es colocarlo en el directorio correcto, escribir un &lt;code&gt;SKILL.md&lt;/code&gt; válido y luego iniciar una nueva sesión&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
