{
  "name": "Golden Path",
  "description": "Conceptos, patrones y aprendizajes transferibles para diseñar entornos donde los agentes hacen buen trabajo sin llevarse producción puesta.",
  "language": "es",
  "generatedAt": "2026-10-13T18:35:37.531Z",
  "count": 35,
  "entries": [
    {
      "slug": "modelos-guiados-el-entorno-es-la-politica",
      "title": "Modelos guiados — el entorno es la política",
      "summary": "Trabajar con un agente de forma segura depende menos de que el modelo recuerde pedir permiso y más de que el harness, el sistema operativo y las credenciales hagan imposible actuar fuera del alcance previsto.",
      "type": "concept",
      "order": 10,
      "tags": [
        "agentes",
        "permisos",
        "sandbox",
        "codex",
        "claude-code",
        "opencode",
        "seguridad"
      ],
      "related": [
        "orquestacion",
        "agent-terminals",
        "workspaces-y-worktrees"
      ],
      "area": "Gobierno de agentes",
      "glyph": "⚿",
      "hue": "rgba(237,195,94,.25)",
      "file": "modelos-guiados-entorno-politica.md",
      "html": "<blockquote>\n<p>Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.</p>\n</blockquote>\n<h2 id=\"idea-central\">Idea central</h2>\n<p>Un modelo guiado es un agente al que se le permite razonar y proponer con amplitud, pero cuya capacidad de actuar está recortada por un entorno diseñado para exigir intervención humana en los puntos sensibles.</p>\n<p>La seguridad no debería depender de que el modelo “se acuerde” de preguntar. Una instrucción como <em>pedime permiso antes de instalar algo</em> mejora el comportamiento esperado, pero no constituye una barrera. Si el harness permite ejecutar cualquier comando, el proceso tiene acceso a credenciales y la red alcanza producción, la acción sigue siendo técnicamente posible.</p>\n<p>La prevención de desastre surge de qué tan bien está armado el lugar donde trabaja el agente:</p>\n<ul>\n<li>qué herramientas puede invocar;</li>\n<li>qué acciones requieren aprobación;</li>\n<li>qué rutas puede leer o escribir;</li>\n<li>qué red puede alcanzar;</li>\n<li>qué credenciales existen en su proceso;</li>\n<li>qué rama o worktree puede modificar;</li>\n<li>qué comandos están bloqueados aunque el modelo los solicite.</li>\n</ul>\n<p>La regla madre es simple: <strong>las instrucciones orientan; el entorno limita</strong>.</p>\n<h2 id=\"las-cuatro-capas-de-control\">Las cuatro capas de control</h2>\n<h3 id=\"1-instrucciones\">1. Instrucciones</h3>\n<p>Definen intención y método:</p>\n<ul>\n<li>objetivo;</li>\n<li>alcance;</li>\n<li>archivos permitidos;</li>\n<li>acciones que debe consultar;</li>\n<li>pruebas requeridas;</li>\n<li>condiciones de detención.</li>\n</ul>\n<p>Son imprescindibles para producir buen trabajo, pero son una política blanda. El modelo puede interpretar mal una frase, olvidar una restricción después de una conversación larga o creer que una acción es una consecuencia obvia del objetivo.</p>\n<h3 id=\"2-harness\">2. Harness</h3>\n<p>Es el CLI o entorno que traduce decisiones del modelo en acciones reales: Codex, Claude Code, OpenCode u otro agente.</p>\n<p>El harness puede:</p>\n<ul>\n<li>ocultar una herramienta;</li>\n<li>permitirla;</li>\n<li>bloquearla;</li>\n<li>pedir aprobación;</li>\n<li>limitar filesystem y red;</li>\n<li>registrar qué ocurrió.</li>\n</ul>\n<p>Esta es la primera capa de enforcement. Si <code>ssh</code>, <code>git push</code> o una edición están en <code>deny</code>, el modelo no debería poder convertir su intención en esa acción mediante la herramienta normal.</p>\n<h3 id=\"3-entorno-de-ejecucion\">3. Entorno de ejecución</h3>\n<p>Incluye el sistema operativo, contenedor, sandbox, usuario, worktree y conectividad.</p>\n<p>Un agente puede tener permiso de ejecutar shell y aun así estar contenido si:</p>\n<ul>\n<li>corre como usuario sin privilegios;</li>\n<li>sólo puede escribir dentro de un worktree;</li>\n<li>no tiene acceso a sockets sensibles;</li>\n<li>no puede salir a Internet;</li>\n<li>los hosts productivos no son alcanzables desde esa red.</li>\n</ul>\n<p>Esta capa protege incluso cuando el harness está mal configurado o aparece una vía no contemplada.</p>\n<h3 id=\"4-autoridad-externa\">4. Autoridad externa</h3>\n<p>Son las credenciales y permisos del sistema destino:</p>\n<ul>\n<li>token read-only;</li>\n<li>clave SSH de un host de desarrollo, no de producción;</li>\n<li>usuario de base sin permisos de escritura;</li>\n<li>cuenta cloud sin capacidad de deploy;</li>\n<li>branch protection y revisión obligatoria.</li>\n</ul>\n<p>Es la última red. Aunque el agente escape de las capas anteriores, no debería poseer autoridad para realizar una acción que nunca necesitó.</p>\n<h2 id=\"un-caso-concreto-glm-5-3-desde-opencode\">Un caso concreto: GLM 5.3 desde OpenCode</h2>\n<p>En una sesión de OpenCode con GLM 5.3, el agente podía instalar una librería o conectarse por SSH sin consultar. Sólo frenaba si la instrucción le pedía expresamente solicitar permiso primero.</p>\n<p>El comportamiento no se explica únicamente por la personalidad del modelo. En OpenCode V1, la mayoría de los permisos parten de <code>allow</code>; el agente Build tiene acceso amplio y tanto instalar dependencias como ejecutar <code>ssh</code> pasan por <code>bash</code>. Si <code>bash</code> está habilitado, no hay una pausa obligatoria entre la decisión y la ejecución.</p>\n<p>La instrucción “preguntame antes” agregaba una convención. El entorno seguía permitiendo actuar sin ella.</p>\n<p>Para esa configuración V1, la solución durable no es redactar una amenaza más dramática en el prompt. Es configurar <code>bash</code> para que las acciones sensibles sean <code>ask</code> o <code>deny</code>, y quitar del entorno las credenciales que el agente no necesita.</p>\n<h2 id=\"no-confundir-modelo-proveedor-y-harness\">No confundir modelo, proveedor y harness</h2>\n<p>Usar un modelo externo a OpenAI o Anthropic no implica quedar sin controles. Si GLM, DeepSeek, Qwen o cualquier otro modelo corre dentro de OpenCode, las llamadas a herramientas siguen pasando por OpenCode y pueden quedar sometidas a sus permisos.</p>\n<p>Lo que cambia es el grado de integración y previsibilidad:</p>\n<ul>\n<li>algunos modelos entienden mejor los estados de aprobación del CLI;</li>\n<li>algunos respetan con mayor consistencia instrucciones negativas;</li>\n<li>algunos proponen acciones más agresivas para completar la tarea;</li>\n<li>algunos harnesses ofrecen sandboxes, perfiles o revisores más sofisticados.</li>\n</ul>\n<p>Por eso el modelo no debe ser la frontera. La política tiene que sobrevivir al cambio de proveedor.</p>\n<h2 id=\"como-expresan-el-control-los-distintos-clis\">Cómo expresan el control los distintos CLIs</h2>\n<h3 id=\"codex\">Codex</h3>\n<p>Codex separa dos dimensiones que suelen mezclarse:</p>\n<ol>\n<li><strong>Sandbox:</strong> qué puede alcanzar la ejecución.</li>\n<li><strong>Approval policy:</strong> cuándo debe detenerse y pedir autorización.</li>\n</ol>\n<p>Los tres niveles clásicos del sandbox son:</p>\n<ul>\n<li><code>read-only</code>;</li>\n<li><code>workspace-write</code>;</li>\n<li><code>danger-full-access</code>.</li>\n</ul>\n<p>Pero eso no equivale a tres modos completos de operación. La aprobación se configura aparte mediante políticas como <code>on-request</code>, <code>never</code> o controles granulares por categoría. También existen perfiles de permisos integrados como <code>:read-only</code>, <code>:workspace</code> y <code>:danger-full-access</code>.</p>\n<p>El valor de esta separación es que se puede permitir edición dentro del workspace y, al mismo tiempo, exigir aprobación para una escalada o rechazar directamente ciertas clases de solicitud. La referencia actual agrega <code>approvals_reviewer = &quot;user&quot; | &quot;auto_review&quot;</code>: cambia quién revisa solicitudes elegibles, no el sandbox ni las acciones ya permitidas dentro de él. <a href=\"https://learn.chatgpt.com/docs/config-file/config-reference\" target=\"_blank\" rel=\"noopener noreferrer\">Configuración de Codex</a>.</p>\n<h3 id=\"claude-code\">Claude Code</h3>\n<p>Claude Code ofrece modos de interacción como:</p>\n<ul>\n<li><code>default</code>, mostrado como Manual;</li>\n<li><code>acceptEdits</code>;</li>\n<li><code>plan</code>;</li>\n<li><code>bypassPermissions</code> cuando está habilitado;</li>\n<li><code>auto</code> cuando está disponible en la sesión;</li>\n<li><code>dontAsk</code>, que rechaza llamadas que necesitarían preguntar.</li>\n</ul>\n<p>En <code>auto</code>, un clasificador revisa acciones elegibles; no equivale a aprobación humana en cada paso. <code>bypassPermissions</code> conserva excepciones documentadas y no elimina todos los controles. <a href=\"https://code.claude.com/docs/en/permissions\" target=\"_blank\" rel=\"noopener noreferrer\">Permisos actuales</a>.</p>\n<p>Además de esos modos, las reglas permiten clasificar herramientas o comandos como allow, ask o deny. <code>bypassPermissions</code> no debe confundirse con “trabajar más rápido”: elimina pausas y sólo tiene sentido dentro de un contenedor o VM donde el alcance ya esté controlado por afuera.</p>\n<h3 id=\"opencode\">OpenCode</h3>\n<p>OpenCode usa permisos <code>allow</code>, <code>ask</code> y <code>deny</code>, configurables globalmente y por agente. Puede aplicar reglas a edición, shell, acceso a directorios externos, web, skills y subagentes, incluso discriminando comandos mediante patrones.</p>\n<p>En V1, Plan restringe ediciones y bash; <code>--auto</code> aprueba solicitudes que quedarían en <code>ask</code>, respetando <code>deny</code>. V2 cambia el esquema a un array <code>permissions</code> con <code>action</code>, <code>resource</code> y <code>effect</code>, y renombra <code>bash</code> a <code>shell</code> y <code>task</code> a <code>subagent</code>. Su Plan bloquea ediciones salvo archivos de planificación, pero eso no constituye un bloqueo general de shell. <a href=\"https://opencode.ai/v2/docs/permissions/\" target=\"_blank\" rel=\"noopener noreferrer\">Permisos V2</a>.</p>\n<p>La conclusión no es que OpenCode carezca de control. Es que <strong>hay que diseñarlo</strong>: sus defaults priorizan fluidez y no representan automáticamente una política conservadora.</p>\n<h2 id=\"control-declarado-y-control-comprobado-en-el-caso-v4\">Control declarado y control comprobado en el caso V4</h2>\n<p>La revisión operativa del 12 de octubre de 2026 agrega una distinción práctica a este principio. Un perfil de rol puede decir “sólo lectura” y, aun así, no haber demostrado que la sesión cargue esas reglas o que todas sus herramientas respeten el límite. En la instalación OMP revisada, el enforcement efectivo seguía sin verificarse y las operaciones LSP requerían atención específica. Eso es un control pendiente de validar, no un sandbox garantizado.</p>\n<p>En la integración n8n del mismo caso se retiró un proxy que generaba copias y se pasó a un catálogo positivo de herramientas, un filtro de escrituras acotadas y readback, la lectura posterior que compara el estado real con el cambio permitido. Los registros revisados muestran pruebas positivas y negativas para ese circuito; no demuestran todos los posibles modos de falla. No se midieron fallo, salida inválida ni timeout del hook, por lo que lectura posterior y recuperación siguieron siendo necesarias.</p>\n<p>El aprendizaje no es que un filtro vuelva segura cualquier herramienta. Es que la autorización debe describir el objeto y la operación, la comprobación debe observar su efecto y los límites no probados deben permanecer visibles. La autonomía LIVE pequeña del <a href=\"/entrada/caso-orca-cockpit-multiagente\">caso V4</a> depende de ese alcance explícito; no permite aplicar la misma autoridad a cualquier agente o proyecto.</p>\n<h2 id=\"un-perfil-portable-de-trabajo-guiado\">Un perfil portable de trabajo guiado</h2>\n<p>Más que memorizar nombres de modos que cambian entre herramientas, conviene definir capacidades estables.</p>\n<h3 id=\"observador\">Observador</h3>\n<ul>\n<li>lectura del repositorio;</li>\n<li>búsqueda y análisis;</li>\n<li>sin edición;</li>\n<li>sin shell mutativo;</li>\n<li>sin red privada;</li>\n<li>sin credenciales de escritura.</li>\n</ul>\n<p>Uso: discovery, auditoría, planificación y revisión.</p>\n<h3 id=\"implementador-guiado\">Implementador guiado</h3>\n<ul>\n<li>escritura sólo dentro del worktree;</li>\n<li>lectura amplia del proyecto;</li>\n<li>comandos locales seguros permitidos;</li>\n<li>instalación de dependencias con aprobación;</li>\n<li>SSH, deploy, push y migraciones con aprobación o bloqueo;</li>\n<li>sin acceso a secretos productivos.</li>\n</ul>\n<p>Uso: desarrollo cotidiano con intervención humana en cambios de superficie.</p>\n<h3 id=\"implementador-acotado\">Implementador acotado</h3>\n<ul>\n<li>autonomía dentro de un worktree descartable;</li>\n<li>allowlist de comandos y destinos;</li>\n<li>sin acceso a otros repositorios;</li>\n<li>sin credenciales productivas;</li>\n<li>integración mediante PR y revisión.</li>\n</ul>\n<p>Uso: tareas bien especificadas y fáciles de validar.</p>\n<h3 id=\"autonomo-aislado\">Autónomo aislado</h3>\n<ul>\n<li>permisos amplios dentro de un contenedor o VM descartable;</li>\n<li>red controlada;</li>\n<li>secretos efímeros y mínimos;</li>\n<li>ningún acceso directo a producción;</li>\n<li>salida mediante artifacts, commits o PR.</li>\n</ul>\n<p>Uso: trabajos largos donde las pausas manuales cuestan más que recrear el entorno.</p>\n<h2 id=\"ejemplo-conservador-para-opencode\">Ejemplo conservador para OpenCode</h2>\n<p>Este ejemplo conserva el formato V1: no lo copies como configuración V2. En V2 hay que migrar reglas y probar sus efectos; renombrar una clave no convierte el objeto en el array requerido. Este perfil permite exploración local, pregunta antes de editar o instalar y bloquea accesos que no deberían ocurrir desde un worker común:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-json\"><span class=\"line\"><span style=\"color:#8E899D\">{</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  \"</span><span style=\"color:#FFE8A1\">$schema</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"https://opencode.ai/config.json\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  \"</span><span style=\"color:#FFE8A1\">permission</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> {</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">read</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">glob</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">grep</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">list</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">lsp</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">edit</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">external_directory</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"deny\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">bash</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> {</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">git status*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">git diff*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">git log*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">rg *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"allow\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">npm install*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">pnpm add*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">ssh *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">scp *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">rsync *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">docker *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"ask\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">git push*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"deny\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">sudo *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"deny\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">rm -rf *</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"deny\"</span><span style=\"color:#8E899D\">,</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">*deploy*</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"deny\"</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    }</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  }</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">}</span></span></code></pre>\n<p>OpenCode evalúa reglas por coincidencia y prevalece la última que coincide, por eso el catch-all aparece primero y las excepciones después.</p>\n<p>Este ejemplo es una base editorial, no una configuración universal. Cada proyecto debe declarar sus comandos seguros y sus operaciones prohibidas. Un patrón demasiado amplio como <code>*deploy*</code> también puede bloquear comandos inocentes con ese texto; la política real debe probarse con el CLI y versión utilizados.</p>\n<h2 id=\"como-preparar-un-entorno-antes-de-lanzar-el-agente\">Cómo preparar un entorno antes de lanzar el agente</h2>\n<ol>\n<li>Crear una rama y worktree exclusivos.</li>\n<li>Elegir el perfil de capacidad: observador, guiado, acotado o aislado.</li>\n<li>Configurar allow, ask y deny en el harness.</li>\n<li>Ejecutar el agente con un usuario sin privilegios innecesarios.</li>\n<li>Retirar credenciales y variables que no correspondan a la tarea.</li>\n<li>Limitar red y hosts accesibles.</li>\n<li>Proteger merge, deploy y producción fuera del agente.</li>\n<li>Probar una acción permitida, una que deba preguntar y una bloqueada.</li>\n<li>Recién entonces entregar el objetivo real.</li>\n</ol>\n<p>La prueba negativa es clave. Ver que <code>git status</code> funciona no demuestra que <code>ssh producción</code> esté bloqueado.</p>\n<h2 id=\"que-debe-decir-la-instruccion-aunque-existan-barreras\">Qué debe decir la instrucción aunque existan barreras</h2>\n<p>El enforcement evita acciones no autorizadas, pero una buena instrucción reduce intentos inútiles y mejora el razonamiento:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>Trabajás en un entorno guiado.</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>Podés inspeccionar el repositorio y ejecutar validaciones locales de solo lectura.</span></span>\n<span class=\"line\"><span>Antes de editar, instalar dependencias, usar red privada o iniciar una conexión SSH,</span></span>\n<span class=\"line\"><span>explicá por qué es necesario y solicitá aprobación.</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>No realices push, deploy, migraciones ni cambios externos.</span></span>\n<span class=\"line\"><span>Si una acción necesaria está bloqueada, no busques una vía alternativa:</span></span>\n<span class=\"line\"><span>detenete y entregá el comando o cambio propuesto para revisión humana.</span></span></code></pre>\n<p>La frase más importante es <strong>no busques una vía alternativa</strong>. Un agente orientado a completar objetivos puede interpretar un bloqueo como un obstáculo técnico que debe resolver. La instrucción aclara que, en este contexto, el bloqueo es una decisión de gobierno.</p>\n<h2 id=\"senales-de-un-entorno-mal-disenado\">Señales de un entorno mal diseñado</h2>\n<ul>\n<li>el agente puede conectarse a cualquier host porque heredó todas las claves SSH;</li>\n<li>puede instalar paquetes sin que exista lockfile o revisión del diff;</li>\n<li>conoce secretos productivos para una tarea puramente local;</li>\n<li>un “modo plan” conserva shell o edición efectiva;</li>\n<li>la única protección es una frase dentro del prompt;</li>\n<li>el mismo agente puede implementar, aprobar, pushear y desplegar;</li>\n<li>se prueba el camino permitido, pero nunca el bloqueo;</li>\n<li>cambiar de modelo obliga a reconstruir toda la política.</li>\n</ul>\n<h2 id=\"principio-transferible\">Principio transferible</h2>\n<p>Un buen entorno no intenta adivinar si el modelo será obediente. Parte de que cualquier modelo puede equivocarse, olvidar contexto o perseguir el objetivo con demasiado entusiasmo.</p>\n<p>La calidad del modelo determina cuánto trabajo útil produce dentro del perímetro. <strong>La calidad del entorno determina cuánto daño puede producir fuera de él.</strong></p>\n<h2 id=\"referencias\">Referencias</h2>\n<ul>\n<li><a href=\"https://learn.chatgpt.com/docs/config-file/config-reference\" target=\"_blank\" rel=\"noopener noreferrer\">Codex — referencia de configuración</a></li>\n<li><a href=\"https://code.claude.com/docs/en/permissions\" target=\"_blank\" rel=\"noopener noreferrer\">Claude Code — permisos</a></li>\n<li><a href=\"https://opencode.ai/docs/permissions/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode — permisos</a></li>\n<li><a href=\"https://opencode.ai/docs/agents\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode — agentes</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Idea central",
          "depth": 2,
          "id": "idea-central"
        },
        {
          "label": "Las cuatro capas de control",
          "depth": 2,
          "id": "las-cuatro-capas-de-control"
        },
        {
          "label": "1. Instrucciones",
          "depth": 3,
          "id": "1-instrucciones"
        },
        {
          "label": "2. Harness",
          "depth": 3,
          "id": "2-harness"
        },
        {
          "label": "3. Entorno de ejecución",
          "depth": 3,
          "id": "3-entorno-de-ejecucion"
        },
        {
          "label": "4. Autoridad externa",
          "depth": 3,
          "id": "4-autoridad-externa"
        },
        {
          "label": "Un caso concreto: GLM 5.3 desde OpenCode",
          "depth": 2,
          "id": "un-caso-concreto-glm-5-3-desde-opencode"
        },
        {
          "label": "No confundir modelo, proveedor y harness",
          "depth": 2,
          "id": "no-confundir-modelo-proveedor-y-harness"
        },
        {
          "label": "Cómo expresan el control los distintos CLIs",
          "depth": 2,
          "id": "como-expresan-el-control-los-distintos-clis"
        },
        {
          "label": "Codex",
          "depth": 3,
          "id": "codex"
        },
        {
          "label": "Claude Code",
          "depth": 3,
          "id": "claude-code"
        },
        {
          "label": "OpenCode",
          "depth": 3,
          "id": "opencode"
        },
        {
          "label": "Control declarado y control comprobado en el caso V4",
          "depth": 2,
          "id": "control-declarado-y-control-comprobado-en-el-caso-v4"
        },
        {
          "label": "Un perfil portable de trabajo guiado",
          "depth": 2,
          "id": "un-perfil-portable-de-trabajo-guiado"
        },
        {
          "label": "Observador",
          "depth": 3,
          "id": "observador"
        },
        {
          "label": "Implementador guiado",
          "depth": 3,
          "id": "implementador-guiado"
        },
        {
          "label": "Implementador acotado",
          "depth": 3,
          "id": "implementador-acotado"
        },
        {
          "label": "Autónomo aislado",
          "depth": 3,
          "id": "autonomo-aislado"
        },
        {
          "label": "Ejemplo conservador para OpenCode",
          "depth": 2,
          "id": "ejemplo-conservador-para-opencode"
        },
        {
          "label": "Cómo preparar un entorno antes de lanzar el agente",
          "depth": 2,
          "id": "como-preparar-un-entorno-antes-de-lanzar-el-agente"
        },
        {
          "label": "Qué debe decir la instrucción aunque existan barreras",
          "depth": 2,
          "id": "que-debe-decir-la-instruccion-aunque-existan-barreras"
        },
        {
          "label": "Señales de un entorno mal diseñado",
          "depth": 2,
          "id": "senales-de-un-entorno-mal-disenado"
        },
        {
          "label": "Principio transferible",
          "depth": 2,
          "id": "principio-transferible"
        },
        {
          "label": "Referencias",
          "depth": 2,
          "id": "referencias"
        }
      ],
      "raw": "---\nslug: modelos-guiados-el-entorno-es-la-politica\ntitle: Modelos guiados — el entorno es la política\ntype: concept\norder: 10\nsummary: Trabajar con un agente de forma segura depende menos de que el modelo recuerde pedir permiso y más de que el harness, el sistema operativo y las credenciales hagan imposible actuar fuera del alcance previsto.\ntags: [agentes, permisos, sandbox, codex, claude-code, opencode, seguridad]\nrelated: [orquestacion, agent-terminals, workspaces-y-worktrees]\narea: Gobierno de agentes\nglyph: ⚿\nhue: rgba(237,195,94,.25)\n---\n\n# Modelos guiados — el entorno es la política\n\n> Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.\n\n## Idea central\n\nUn modelo guiado es un agente al que se le permite razonar y proponer con amplitud, pero cuya capacidad de actuar está recortada por un entorno diseñado para exigir intervención humana en los puntos sensibles.\n\nLa seguridad no debería depender de que el modelo “se acuerde” de preguntar. Una instrucción como *pedime permiso antes de instalar algo* mejora el comportamiento esperado, pero no constituye una barrera. Si el harness permite ejecutar cualquier comando, el proceso tiene acceso a credenciales y la red alcanza producción, la acción sigue siendo técnicamente posible.\n\nLa prevención de desastre surge de qué tan bien está armado el lugar donde trabaja el agente:\n\n- qué herramientas puede invocar;\n- qué acciones requieren aprobación;\n- qué rutas puede leer o escribir;\n- qué red puede alcanzar;\n- qué credenciales existen en su proceso;\n- qué rama o worktree puede modificar;\n- qué comandos están bloqueados aunque el modelo los solicite.\n\nLa regla madre es simple: **las instrucciones orientan; el entorno limita**.\n\n## Las cuatro capas de control\n\n### 1. Instrucciones\n\nDefinen intención y método:\n\n- objetivo;\n- alcance;\n- archivos permitidos;\n- acciones que debe consultar;\n- pruebas requeridas;\n- condiciones de detención.\n\nSon imprescindibles para producir buen trabajo, pero son una política blanda. El modelo puede interpretar mal una frase, olvidar una restricción después de una conversación larga o creer que una acción es una consecuencia obvia del objetivo.\n\n### 2. Harness\n\nEs el CLI o entorno que traduce decisiones del modelo en acciones reales: Codex, Claude Code, OpenCode u otro agente.\n\nEl harness puede:\n\n- ocultar una herramienta;\n- permitirla;\n- bloquearla;\n- pedir aprobación;\n- limitar filesystem y red;\n- registrar qué ocurrió.\n\nEsta es la primera capa de enforcement. Si `ssh`, `git push` o una edición están en `deny`, el modelo no debería poder convertir su intención en esa acción mediante la herramienta normal.\n\n### 3. Entorno de ejecución\n\nIncluye el sistema operativo, contenedor, sandbox, usuario, worktree y conectividad.\n\nUn agente puede tener permiso de ejecutar shell y aun así estar contenido si:\n\n- corre como usuario sin privilegios;\n- sólo puede escribir dentro de un worktree;\n- no tiene acceso a sockets sensibles;\n- no puede salir a Internet;\n- los hosts productivos no son alcanzables desde esa red.\n\nEsta capa protege incluso cuando el harness está mal configurado o aparece una vía no contemplada.\n\n### 4. Autoridad externa\n\nSon las credenciales y permisos del sistema destino:\n\n- token read-only;\n- clave SSH de un host de desarrollo, no de producción;\n- usuario de base sin permisos de escritura;\n- cuenta cloud sin capacidad de deploy;\n- branch protection y revisión obligatoria.\n\nEs la última red. Aunque el agente escape de las capas anteriores, no debería poseer autoridad para realizar una acción que nunca necesitó.\n\n## Un caso concreto: GLM 5.3 desde OpenCode\n\nEn una sesión de OpenCode con GLM 5.3, el agente podía instalar una librería o conectarse por SSH sin consultar. Sólo frenaba si la instrucción le pedía expresamente solicitar permiso primero.\n\nEl comportamiento no se explica únicamente por la personalidad del modelo. En OpenCode V1, la mayoría de los permisos parten de `allow`; el agente Build tiene acceso amplio y tanto instalar dependencias como ejecutar `ssh` pasan por `bash`. Si `bash` está habilitado, no hay una pausa obligatoria entre la decisión y la ejecución.\n\nLa instrucción “preguntame antes” agregaba una convención. El entorno seguía permitiendo actuar sin ella.\n\nPara esa configuración V1, la solución durable no es redactar una amenaza más dramática en el prompt. Es configurar `bash` para que las acciones sensibles sean `ask` o `deny`, y quitar del entorno las credenciales que el agente no necesita.\n\n## No confundir modelo, proveedor y harness\n\nUsar un modelo externo a OpenAI o Anthropic no implica quedar sin controles. Si GLM, DeepSeek, Qwen o cualquier otro modelo corre dentro de OpenCode, las llamadas a herramientas siguen pasando por OpenCode y pueden quedar sometidas a sus permisos.\n\nLo que cambia es el grado de integración y previsibilidad:\n\n- algunos modelos entienden mejor los estados de aprobación del CLI;\n- algunos respetan con mayor consistencia instrucciones negativas;\n- algunos proponen acciones más agresivas para completar la tarea;\n- algunos harnesses ofrecen sandboxes, perfiles o revisores más sofisticados.\n\nPor eso el modelo no debe ser la frontera. La política tiene que sobrevivir al cambio de proveedor.\n\n## Cómo expresan el control los distintos CLIs\n\n### Codex\n\nCodex separa dos dimensiones que suelen mezclarse:\n\n1. **Sandbox:** qué puede alcanzar la ejecución.\n2. **Approval policy:** cuándo debe detenerse y pedir autorización.\n\nLos tres niveles clásicos del sandbox son:\n\n- `read-only`;\n- `workspace-write`;\n- `danger-full-access`.\n\nPero eso no equivale a tres modos completos de operación. La aprobación se configura aparte mediante políticas como `on-request`, `never` o controles granulares por categoría. También existen perfiles de permisos integrados como `:read-only`, `:workspace` y `:danger-full-access`.\n\nEl valor de esta separación es que se puede permitir edición dentro del workspace y, al mismo tiempo, exigir aprobación para una escalada o rechazar directamente ciertas clases de solicitud. La referencia actual agrega `approvals_reviewer = \"user\" | \"auto_review\"`: cambia quién revisa solicitudes elegibles, no el sandbox ni las acciones ya permitidas dentro de él. [Configuración de Codex](https://learn.chatgpt.com/docs/config-file/config-reference).\n\n### Claude Code\n\nClaude Code ofrece modos de interacción como:\n\n- `default`, mostrado como Manual;\n- `acceptEdits`;\n- `plan`;\n- `bypassPermissions` cuando está habilitado;\n- `auto` cuando está disponible en la sesión;\n- `dontAsk`, que rechaza llamadas que necesitarían preguntar.\n\nEn `auto`, un clasificador revisa acciones elegibles; no equivale a aprobación humana en cada paso. `bypassPermissions` conserva excepciones documentadas y no elimina todos los controles. [Permisos actuales](https://code.claude.com/docs/en/permissions).\n\nAdemás de esos modos, las reglas permiten clasificar herramientas o comandos como allow, ask o deny. `bypassPermissions` no debe confundirse con “trabajar más rápido”: elimina pausas y sólo tiene sentido dentro de un contenedor o VM donde el alcance ya esté controlado por afuera.\n\n### OpenCode\n\nOpenCode usa permisos `allow`, `ask` y `deny`, configurables globalmente y por agente. Puede aplicar reglas a edición, shell, acceso a directorios externos, web, skills y subagentes, incluso discriminando comandos mediante patrones.\n\nEn V1, Plan restringe ediciones y bash; `--auto` aprueba solicitudes que quedarían en `ask`, respetando `deny`. V2 cambia el esquema a un array `permissions` con `action`, `resource` y `effect`, y renombra `bash` a `shell` y `task` a `subagent`. Su Plan bloquea ediciones salvo archivos de planificación, pero eso no constituye un bloqueo general de shell. [Permisos V2](https://opencode.ai/v2/docs/permissions/).\n\nLa conclusión no es que OpenCode carezca de control. Es que **hay que diseñarlo**: sus defaults priorizan fluidez y no representan automáticamente una política conservadora.\n\n## Control declarado y control comprobado en el caso V4\n\nLa revisión operativa del 12 de octubre de 2026 agrega una distinción práctica a este principio. Un perfil de rol puede decir “sólo lectura” y, aun así, no haber demostrado que la sesión cargue esas reglas o que todas sus herramientas respeten el límite. En la instalación OMP revisada, el enforcement efectivo seguía sin verificarse y las operaciones LSP requerían atención específica. Eso es un control pendiente de validar, no un sandbox garantizado.\n\nEn la integración n8n del mismo caso se retiró un proxy que generaba copias y se pasó a un catálogo positivo de herramientas, un filtro de escrituras acotadas y readback, la lectura posterior que compara el estado real con el cambio permitido. Los registros revisados muestran pruebas positivas y negativas para ese circuito; no demuestran todos los posibles modos de falla. No se midieron fallo, salida inválida ni timeout del hook, por lo que lectura posterior y recuperación siguieron siendo necesarias.\n\nEl aprendizaje no es que un filtro vuelva segura cualquier herramienta. Es que la autorización debe describir el objeto y la operación, la comprobación debe observar su efecto y los límites no probados deben permanecer visibles. La autonomía LIVE pequeña del [caso V4](/entrada/caso-orca-cockpit-multiagente) depende de ese alcance explícito; no permite aplicar la misma autoridad a cualquier agente o proyecto.\n\n## Un perfil portable de trabajo guiado\n\nMás que memorizar nombres de modos que cambian entre herramientas, conviene definir capacidades estables.\n\n### Observador\n\n- lectura del repositorio;\n- búsqueda y análisis;\n- sin edición;\n- sin shell mutativo;\n- sin red privada;\n- sin credenciales de escritura.\n\nUso: discovery, auditoría, planificación y revisión.\n\n### Implementador guiado\n\n- escritura sólo dentro del worktree;\n- lectura amplia del proyecto;\n- comandos locales seguros permitidos;\n- instalación de dependencias con aprobación;\n- SSH, deploy, push y migraciones con aprobación o bloqueo;\n- sin acceso a secretos productivos.\n\nUso: desarrollo cotidiano con intervención humana en cambios de superficie.\n\n### Implementador acotado\n\n- autonomía dentro de un worktree descartable;\n- allowlist de comandos y destinos;\n- sin acceso a otros repositorios;\n- sin credenciales productivas;\n- integración mediante PR y revisión.\n\nUso: tareas bien especificadas y fáciles de validar.\n\n### Autónomo aislado\n\n- permisos amplios dentro de un contenedor o VM descartable;\n- red controlada;\n- secretos efímeros y mínimos;\n- ningún acceso directo a producción;\n- salida mediante artifacts, commits o PR.\n\nUso: trabajos largos donde las pausas manuales cuestan más que recrear el entorno.\n\n## Ejemplo conservador para OpenCode\n\nEste ejemplo conserva el formato V1: no lo copies como configuración V2. En V2 hay que migrar reglas y probar sus efectos; renombrar una clave no convierte el objeto en el array requerido. Este perfil permite exploración local, pregunta antes de editar o instalar y bloquea accesos que no deberían ocurrir desde un worker común:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"permission\": {\n    \"*\": \"ask\",\n    \"read\": \"allow\",\n    \"glob\": \"allow\",\n    \"grep\": \"allow\",\n    \"list\": \"allow\",\n    \"lsp\": \"allow\",\n    \"edit\": \"ask\",\n    \"external_directory\": \"deny\",\n    \"bash\": {\n      \"*\": \"ask\",\n      \"git status*\": \"allow\",\n      \"git diff*\": \"allow\",\n      \"git log*\": \"allow\",\n      \"rg *\": \"allow\",\n      \"npm install*\": \"ask\",\n      \"pnpm add*\": \"ask\",\n      \"ssh *\": \"ask\",\n      \"scp *\": \"ask\",\n      \"rsync *\": \"ask\",\n      \"docker *\": \"ask\",\n      \"git push*\": \"deny\",\n      \"sudo *\": \"deny\",\n      \"rm -rf *\": \"deny\",\n      \"*deploy*\": \"deny\"\n    }\n  }\n}\n```\n\nOpenCode evalúa reglas por coincidencia y prevalece la última que coincide, por eso el catch-all aparece primero y las excepciones después.\n\nEste ejemplo es una base editorial, no una configuración universal. Cada proyecto debe declarar sus comandos seguros y sus operaciones prohibidas. Un patrón demasiado amplio como `*deploy*` también puede bloquear comandos inocentes con ese texto; la política real debe probarse con el CLI y versión utilizados.\n\n## Cómo preparar un entorno antes de lanzar el agente\n\n1. Crear una rama y worktree exclusivos.\n2. Elegir el perfil de capacidad: observador, guiado, acotado o aislado.\n3. Configurar allow, ask y deny en el harness.\n4. Ejecutar el agente con un usuario sin privilegios innecesarios.\n5. Retirar credenciales y variables que no correspondan a la tarea.\n6. Limitar red y hosts accesibles.\n7. Proteger merge, deploy y producción fuera del agente.\n8. Probar una acción permitida, una que deba preguntar y una bloqueada.\n9. Recién entonces entregar el objetivo real.\n\nLa prueba negativa es clave. Ver que `git status` funciona no demuestra que `ssh producción` esté bloqueado.\n\n## Qué debe decir la instrucción aunque existan barreras\n\nEl enforcement evita acciones no autorizadas, pero una buena instrucción reduce intentos inútiles y mejora el razonamiento:\n\n```text\nTrabajás en un entorno guiado.\n\nPodés inspeccionar el repositorio y ejecutar validaciones locales de solo lectura.\nAntes de editar, instalar dependencias, usar red privada o iniciar una conexión SSH,\nexplicá por qué es necesario y solicitá aprobación.\n\nNo realices push, deploy, migraciones ni cambios externos.\nSi una acción necesaria está bloqueada, no busques una vía alternativa:\ndetenete y entregá el comando o cambio propuesto para revisión humana.\n```\n\nLa frase más importante es **no busques una vía alternativa**. Un agente orientado a completar objetivos puede interpretar un bloqueo como un obstáculo técnico que debe resolver. La instrucción aclara que, en este contexto, el bloqueo es una decisión de gobierno.\n\n## Señales de un entorno mal diseñado\n\n- el agente puede conectarse a cualquier host porque heredó todas las claves SSH;\n- puede instalar paquetes sin que exista lockfile o revisión del diff;\n- conoce secretos productivos para una tarea puramente local;\n- un “modo plan” conserva shell o edición efectiva;\n- la única protección es una frase dentro del prompt;\n- el mismo agente puede implementar, aprobar, pushear y desplegar;\n- se prueba el camino permitido, pero nunca el bloqueo;\n- cambiar de modelo obliga a reconstruir toda la política.\n\n## Principio transferible\n\nUn buen entorno no intenta adivinar si el modelo será obediente. Parte de que cualquier modelo puede equivocarse, olvidar contexto o perseguir el objetivo con demasiado entusiasmo.\n\nLa calidad del modelo determina cuánto trabajo útil produce dentro del perímetro. **La calidad del entorno determina cuánto daño puede producir fuera de él.**\n\n## Referencias\n\n- [Codex — referencia de configuración](https://learn.chatgpt.com/docs/config-file/config-reference)\n- [Claude Code — permisos](https://code.claude.com/docs/en/permissions)\n- [OpenCode — permisos](https://opencode.ai/docs/permissions/)\n- [OpenCode — agentes](https://opencode.ai/docs/agents)\n"
    },
    {
      "slug": "terminal-vs-web-superficies-trabajo",
      "title": "CLI vs. web — el agente dentro del proyecto",
      "summary": "La terminal no vuelve más inteligente al modelo: lo ubica dentro del sistema que debe comprender, modificar y verificar. La web conserva ventaja para pensar, investigar y comunicar.",
      "type": "concept",
      "order": 11,
      "tags": [
        "cli",
        "web",
        "terminal",
        "agentes",
        "codex",
        "claude-code",
        "opencode",
        "worktrees"
      ],
      "related": [
        "agent-terminals",
        "modelos-guiados-el-entorno-es-la-politica",
        "workspaces-y-worktrees",
        "orquestacion"
      ],
      "area": "Gobierno de agentes",
      "glyph": "⌨",
      "hue": "rgba(87,217,232,.22)",
      "file": "terminal-vs-web-superficies-trabajo.md",
      "html": "<blockquote>\n<p>Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.</p>\n</blockquote>\n<h2 id=\"no-es-una-competencia-de-inteligencia\">No es una competencia de inteligencia</h2>\n<p>Trabajar desde Codex, Claude Code u OpenCode en una terminal no vuelve más capaz al modelo que conversa en una web. Cambia su <strong>posición respecto del trabajo</strong>.</p>\n<p>En un chat sin entorno de ejecución conectado, el modelo recibe una pregunta, archivos elegidos por la persona o una copia del contexto. En un CLI, el agente puede habitar el repositorio: leer su estado actual, inspeccionar el historial, modificar archivos, ejecutar comandos y observar el resultado.</p>\n<p>La diferencia útil es <strong>contexto entregado versus contexto verificable</strong>, y <strong>recomendación versus ciclo de ejecución</strong>. Esa frontera no coincide necesariamente con navegador versus terminal: Claude Code también puede trabajar sobre repositorios desde la web. Elegí por acceso al entorno, herramientas y permisos, no sólo por la apariencia de la interfaz. <a href=\"https://code.claude.com/docs/en/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Superficies oficiales</a>.</p>\n<blockquote>\n<p>La diferencia decisiva es si el agente puede inspeccionar, actuar y verificar en el entorno real de ejecución.</p>\n</blockquote>\n<h2 id=\"que-habilita-realmente-la-terminal\">Qué habilita realmente la terminal</h2>\n<h3 id=\"un-ciclo-cerrado\">Un ciclo cerrado</h3>\n<p>El CLI puede recorrer una secuencia completa sin que una persona copie cada resultado:</p>\n<ol>\n<li>inspeccionar el repositorio;</li>\n<li>formular una hipótesis;</li>\n<li>editar en una rama o worktree;</li>\n<li>ejecutar tests, lint o build;</li>\n<li>leer errores y corregir;</li>\n<li>revisar el diff;</li>\n<li>dejar un cambio trazable.</li>\n</ol>\n<p>Ese feedback reduce la distancia entre lo que el modelo cree y lo que el sistema hace. Una respuesta convincente puede estar equivocada; una prueba ejecutada contra el proyecto ofrece evidencia.</p>\n<h3 id=\"contexto-nativo-del-proyecto\">Contexto nativo del proyecto</h3>\n<p>Desde la terminal, el agente puede acceder —si el entorno lo permite— a:</p>\n<ul>\n<li>estructura y archivos reales del repositorio;</li>\n<li>versión exacta de dependencias y runtime;</li>\n<li>estado de Git, ramas y worktrees;</li>\n<li>instrucciones persistentes como <code>AGENTS.md</code> o <code>CLAUDE.md</code>;</li>\n<li>scripts, linters, tests y generadores ya existentes;</li>\n<li>herramientas internas, hooks, skills y servidores MCP;</li>\n<li>logs y servicios de desarrollo.</li>\n</ul>\n<p>No hace falta comprimir manualmente todo eso en un prompt. El agente puede descubrirlo y citar su evidencia.</p>\n<h3 id=\"composicion-y-repetibilidad\">Composición y repetibilidad</h3>\n<p>Un CLI se integra con pipes, scripts, CI, tareas programadas y procesos no interactivos. También permite repetir el mismo método en sesiones distintas: preparar un worktree, ejecutar una auditoría, validar un resultado y producir un artifact.</p>\n<p>Esto lo vuelve especialmente valioso para un esquema coordinador–workers: una terminal conserva la visión global y otras resuelven tareas acotadas en espacios aislados.</p>\n<h2 id=\"donde-la-web-sigue-siendo-mejor\">Dónde la web sigue siendo mejor</h2>\n<p>Las interfaces web como ChatGPT o Claude son una superficie especialmente cómoda para:</p>\n<ul>\n<li>convertir una intuición ambigua en un problema bien formulado;</li>\n<li>investigar y contrastar documentación;</li>\n<li>trabajar con imágenes, documentos y fuentes heterogéneas;</li>\n<li>explorar opciones antes de tocar un repositorio;</li>\n<li>escribir explicaciones, propuestas y piezas editoriales;</li>\n<li>compartir una conversación o resultado sin preparar un entorno local;</li>\n<li>delegar tareas largas a un agente cloud cuando el repositorio no está disponible localmente.</li>\n</ul>\n<p>La frontera tampoco es absoluta. Las experiencias web modernas pueden conectar repositorios y ejecutar agentes remotos; los CLIs pueden conversar, investigar y producir documentación. La pregunta correcta es <strong>dónde vive el contexto autoritativo y dónde conviene cerrar el loop</strong>.</p>\n<h2 id=\"mapa-rapido-de-eleccion\">Mapa rápido de elección</h2>\n<table>\n<thead>\n<tr>\n<th>Trabajo</th>\n<th>Superficie sugerida</th>\n<th>Motivo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Explorar una idea o comparar enfoques</td>\n<td>Web</td>\n<td>Conversación amplia y mezcla de fuentes</td>\n</tr>\n<tr>\n<td>Entender el comportamiento exacto de un repo</td>\n<td>CLI</td>\n<td>Acceso al estado y herramientas reales</td>\n</tr>\n<tr>\n<td>Implementar un cambio multiarchivo</td>\n<td>CLI en worktree</td>\n<td>Edición, pruebas y diff trazable</td>\n</tr>\n<tr>\n<td>Producir un informe o guía portable</td>\n<td>Web, con evidencia del CLI</td>\n<td>Mejor síntesis sin perder verificación</td>\n</tr>\n<tr>\n<td>Prototipar una dirección visual</td>\n<td>Web o canvas</td>\n<td>Iteración visual más directa</td>\n</tr>\n<tr>\n<td>Integrar el prototipo al producto</td>\n<td>CLI</td>\n<td>Ajuste contra componentes, build y tests</td>\n</tr>\n<tr>\n<td>Automatizar una tarea repetible</td>\n<td>CLI o SDK</td>\n<td>Ejecución componible y no interactiva</td>\n</tr>\n<tr>\n<td>Operar sobre producción</td>\n<td>Gate humano y entorno restringido</td>\n<td>La superficie no reemplaza el control</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"el-costo-escondido-del-cli-autoridad\">El costo escondido del CLI: autoridad</h2>\n<p>La terminal también aumenta el radio de impacto. Si el proceso ve claves SSH, tokens cloud, una base productiva y una shell sin restricciones, el agente puede actuar sobre todo eso.</p>\n<p>Por eso <strong>CLI no significa seguro</strong>. Significa cercano al sistema. Esa cercanía es una ventaja sólo cuando se acompaña con:</p>\n<ul>\n<li>worktrees o contenedores descartables;</li>\n<li>credenciales mínimas y efímeras;</li>\n<li>red y hosts limitados;</li>\n<li>permisos <code>allow</code>, <code>ask</code> y <code>deny</code> explícitos;</li>\n<li>revisión de diffs antes de integrar;</li>\n<li>bloqueos externos para push, deploy y producción.</li>\n</ul>\n<p>La editorial sobre <a href=\"https://ia.dmaledicte.cloud/#modelos-guiados-el-entorno-es-la-politica\" target=\"_blank\" rel=\"noopener noreferrer\">modelos guiados</a> desarrolla esta idea: las instrucciones orientan, pero el entorno limita.</p>\n<h2 id=\"el-flujo-hibrido-que-mejor-aprovecha-ambas\">El flujo híbrido que mejor aprovecha ambas</h2>\n<h3 id=\"1-enmarcar-en-la-web\">1. Enmarcar en la web</h3>\n<p>Usar la conversación para clarificar objetivo, audiencia, restricciones, riesgos y criterios de éxito.</p>\n<h3 id=\"2-descubrir-en-un-cli-coordinador\">2. Descubrir en un CLI coordinador</h3>\n<p>Abrir el proyecto, verificar el estado real y transformar la intención en un plan apoyado en archivos, comandos y dependencias concretas.</p>\n<h3 id=\"3-ejecutar-con-workers-aislados\">3. Ejecutar con workers aislados</h3>\n<p>Delegar implementaciones, auditorías o pruebas en worktrees separados. Cada worker recibe una tarea verificable y la autoridad mínima necesaria.</p>\n<h3 id=\"4-integrar-con-evidencia\">4. Integrar con evidencia</h3>\n<p>El coordinador revisa diffs, corre la suite relevante y resuelve interacciones entre cambios.</p>\n<h3 id=\"5-volver-a-una-superficie-editorial\">5. Volver a una superficie editorial</h3>\n<p>Traducir el resultado en una guía, decisión o artifact que otra persona —o su agente— pueda reutilizar sin heredar todo el ruido operativo.</p>\n<h2 id=\"regla-de-salida\">Regla de salida</h2>\n<p>Conviene pasar de la web a la terminal cuando la respuesta depende del <strong>estado vivo de un sistema</strong> y necesita un ciclo de inspección, acción y verificación. Conviene volver a la web cuando el valor principal está en <strong>comprender, decidir o comunicar</strong>.</p>\n<p>No hay una superficie superior. Hay una superficie más honesta respecto de la tarea.</p>\n<h2 id=\"fuentes-oficiales-para-profundizar\">Fuentes oficiales para profundizar</h2>\n<ul>\n<li><a href=\"https://learn.chatgpt.com/docs/models\" target=\"_blank\" rel=\"noopener noreferrer\">Codex: modelos y niveles de razonamiento</a></li>\n<li><a href=\"https://code.claude.com/docs/en/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Claude Code: descripción general y superficies disponibles</a></li>\n<li><a href=\"https://opencode.ai/docs/tui/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode: interfaz de terminal</a></li>\n<li><a href=\"https://opencode.ai/docs/permissions/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode: permisos</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "No es una competencia de inteligencia",
          "depth": 2,
          "id": "no-es-una-competencia-de-inteligencia"
        },
        {
          "label": "Qué habilita realmente la terminal",
          "depth": 2,
          "id": "que-habilita-realmente-la-terminal"
        },
        {
          "label": "Un ciclo cerrado",
          "depth": 3,
          "id": "un-ciclo-cerrado"
        },
        {
          "label": "Contexto nativo del proyecto",
          "depth": 3,
          "id": "contexto-nativo-del-proyecto"
        },
        {
          "label": "Composición y repetibilidad",
          "depth": 3,
          "id": "composicion-y-repetibilidad"
        },
        {
          "label": "Dónde la web sigue siendo mejor",
          "depth": 2,
          "id": "donde-la-web-sigue-siendo-mejor"
        },
        {
          "label": "Mapa rápido de elección",
          "depth": 2,
          "id": "mapa-rapido-de-eleccion"
        },
        {
          "label": "El costo escondido del CLI: autoridad",
          "depth": 2,
          "id": "el-costo-escondido-del-cli-autoridad"
        },
        {
          "label": "El flujo híbrido que mejor aprovecha ambas",
          "depth": 2,
          "id": "el-flujo-hibrido-que-mejor-aprovecha-ambas"
        },
        {
          "label": "1. Enmarcar en la web",
          "depth": 3,
          "id": "1-enmarcar-en-la-web"
        },
        {
          "label": "2. Descubrir en un CLI coordinador",
          "depth": 3,
          "id": "2-descubrir-en-un-cli-coordinador"
        },
        {
          "label": "3. Ejecutar con workers aislados",
          "depth": 3,
          "id": "3-ejecutar-con-workers-aislados"
        },
        {
          "label": "4. Integrar con evidencia",
          "depth": 3,
          "id": "4-integrar-con-evidencia"
        },
        {
          "label": "5. Volver a una superficie editorial",
          "depth": 3,
          "id": "5-volver-a-una-superficie-editorial"
        },
        {
          "label": "Regla de salida",
          "depth": 2,
          "id": "regla-de-salida"
        },
        {
          "label": "Fuentes oficiales para profundizar",
          "depth": 2,
          "id": "fuentes-oficiales-para-profundizar"
        }
      ],
      "raw": "---\nslug: terminal-vs-web-superficies-trabajo\ntitle: CLI vs. web — el agente dentro del proyecto\ntype: concept\norder: 11\nsummary: \"La terminal no vuelve más inteligente al modelo: lo ubica dentro del sistema que debe comprender, modificar y verificar. La web conserva ventaja para pensar, investigar y comunicar.\"\ntags: [cli, web, terminal, agentes, codex, claude-code, opencode, worktrees]\nrelated: [agent-terminals, modelos-guiados-el-entorno-es-la-politica, workspaces-y-worktrees, orquestacion]\narea: Gobierno de agentes\nglyph: ⌨\nhue: rgba(87,217,232,.22)\n---\n\n# CLI vs. web — el agente dentro del proyecto\n\n> Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.\n\n## No es una competencia de inteligencia\n\nTrabajar desde Codex, Claude Code u OpenCode en una terminal no vuelve más capaz al modelo que conversa en una web. Cambia su **posición respecto del trabajo**.\n\nEn un chat sin entorno de ejecución conectado, el modelo recibe una pregunta, archivos elegidos por la persona o una copia del contexto. En un CLI, el agente puede habitar el repositorio: leer su estado actual, inspeccionar el historial, modificar archivos, ejecutar comandos y observar el resultado.\n\nLa diferencia útil es **contexto entregado versus contexto verificable**, y **recomendación versus ciclo de ejecución**. Esa frontera no coincide necesariamente con navegador versus terminal: Claude Code también puede trabajar sobre repositorios desde la web. Elegí por acceso al entorno, herramientas y permisos, no sólo por la apariencia de la interfaz. [Superficies oficiales](https://code.claude.com/docs/en/overview).\n\n> La diferencia decisiva es si el agente puede inspeccionar, actuar y verificar en el entorno real de ejecución.\n\n## Qué habilita realmente la terminal\n\n### Un ciclo cerrado\n\nEl CLI puede recorrer una secuencia completa sin que una persona copie cada resultado:\n\n1. inspeccionar el repositorio;\n2. formular una hipótesis;\n3. editar en una rama o worktree;\n4. ejecutar tests, lint o build;\n5. leer errores y corregir;\n6. revisar el diff;\n7. dejar un cambio trazable.\n\nEse feedback reduce la distancia entre lo que el modelo cree y lo que el sistema hace. Una respuesta convincente puede estar equivocada; una prueba ejecutada contra el proyecto ofrece evidencia.\n\n### Contexto nativo del proyecto\n\nDesde la terminal, el agente puede acceder —si el entorno lo permite— a:\n\n- estructura y archivos reales del repositorio;\n- versión exacta de dependencias y runtime;\n- estado de Git, ramas y worktrees;\n- instrucciones persistentes como `AGENTS.md` o `CLAUDE.md`;\n- scripts, linters, tests y generadores ya existentes;\n- herramientas internas, hooks, skills y servidores MCP;\n- logs y servicios de desarrollo.\n\nNo hace falta comprimir manualmente todo eso en un prompt. El agente puede descubrirlo y citar su evidencia.\n\n### Composición y repetibilidad\n\nUn CLI se integra con pipes, scripts, CI, tareas programadas y procesos no interactivos. También permite repetir el mismo método en sesiones distintas: preparar un worktree, ejecutar una auditoría, validar un resultado y producir un artifact.\n\nEsto lo vuelve especialmente valioso para un esquema coordinador–workers: una terminal conserva la visión global y otras resuelven tareas acotadas en espacios aislados.\n\n## Dónde la web sigue siendo mejor\n\nLas interfaces web como ChatGPT o Claude son una superficie especialmente cómoda para:\n\n- convertir una intuición ambigua en un problema bien formulado;\n- investigar y contrastar documentación;\n- trabajar con imágenes, documentos y fuentes heterogéneas;\n- explorar opciones antes de tocar un repositorio;\n- escribir explicaciones, propuestas y piezas editoriales;\n- compartir una conversación o resultado sin preparar un entorno local;\n- delegar tareas largas a un agente cloud cuando el repositorio no está disponible localmente.\n\nLa frontera tampoco es absoluta. Las experiencias web modernas pueden conectar repositorios y ejecutar agentes remotos; los CLIs pueden conversar, investigar y producir documentación. La pregunta correcta es **dónde vive el contexto autoritativo y dónde conviene cerrar el loop**.\n\n## Mapa rápido de elección\n\n| Trabajo | Superficie sugerida | Motivo |\n|---|---|---|\n| Explorar una idea o comparar enfoques | Web | Conversación amplia y mezcla de fuentes |\n| Entender el comportamiento exacto de un repo | CLI | Acceso al estado y herramientas reales |\n| Implementar un cambio multiarchivo | CLI en worktree | Edición, pruebas y diff trazable |\n| Producir un informe o guía portable | Web, con evidencia del CLI | Mejor síntesis sin perder verificación |\n| Prototipar una dirección visual | Web o canvas | Iteración visual más directa |\n| Integrar el prototipo al producto | CLI | Ajuste contra componentes, build y tests |\n| Automatizar una tarea repetible | CLI o SDK | Ejecución componible y no interactiva |\n| Operar sobre producción | Gate humano y entorno restringido | La superficie no reemplaza el control |\n\n## El costo escondido del CLI: autoridad\n\nLa terminal también aumenta el radio de impacto. Si el proceso ve claves SSH, tokens cloud, una base productiva y una shell sin restricciones, el agente puede actuar sobre todo eso.\n\nPor eso **CLI no significa seguro**. Significa cercano al sistema. Esa cercanía es una ventaja sólo cuando se acompaña con:\n\n- worktrees o contenedores descartables;\n- credenciales mínimas y efímeras;\n- red y hosts limitados;\n- permisos `allow`, `ask` y `deny` explícitos;\n- revisión de diffs antes de integrar;\n- bloqueos externos para push, deploy y producción.\n\nLa editorial sobre [modelos guiados](https://ia.dmaledicte.cloud/#modelos-guiados-el-entorno-es-la-politica) desarrolla esta idea: las instrucciones orientan, pero el entorno limita.\n\n## El flujo híbrido que mejor aprovecha ambas\n\n### 1. Enmarcar en la web\n\nUsar la conversación para clarificar objetivo, audiencia, restricciones, riesgos y criterios de éxito.\n\n### 2. Descubrir en un CLI coordinador\n\nAbrir el proyecto, verificar el estado real y transformar la intención en un plan apoyado en archivos, comandos y dependencias concretas.\n\n### 3. Ejecutar con workers aislados\n\nDelegar implementaciones, auditorías o pruebas en worktrees separados. Cada worker recibe una tarea verificable y la autoridad mínima necesaria.\n\n### 4. Integrar con evidencia\n\nEl coordinador revisa diffs, corre la suite relevante y resuelve interacciones entre cambios.\n\n### 5. Volver a una superficie editorial\n\nTraducir el resultado en una guía, decisión o artifact que otra persona —o su agente— pueda reutilizar sin heredar todo el ruido operativo.\n\n## Regla de salida\n\nConviene pasar de la web a la terminal cuando la respuesta depende del **estado vivo de un sistema** y necesita un ciclo de inspección, acción y verificación. Conviene volver a la web cuando el valor principal está en **comprender, decidir o comunicar**.\n\nNo hay una superficie superior. Hay una superficie más honesta respecto de la tarea.\n\n## Fuentes oficiales para profundizar\n\n- [Codex: modelos y niveles de razonamiento](https://learn.chatgpt.com/docs/models)\n- [Claude Code: descripción general y superficies disponibles](https://code.claude.com/docs/en/overview)\n- [OpenCode: interfaz de terminal](https://opencode.ai/docs/tui/)\n- [OpenCode: permisos](https://opencode.ai/docs/permissions/)\n\n"
    },
    {
      "slug": "guia-escalado-modelos",
      "title": "Elegir modelo y nivel de razonamiento",
      "summary": "Una guía práctica para asignar coordinadores y workers, subir razonamiento antes de pagar un modelo mayor y escalar cuando aparece una brecha real de capacidad.",
      "type": "guide",
      "order": 12,
      "tags": [
        "modelos",
        "razonamiento",
        "openai",
        "claude",
        "opencode-go",
        "coordinador",
        "workers"
      ],
      "related": [
        "orquestacion",
        "terminal-vs-web-superficies-trabajo",
        "modelos-guiados-el-entorno-es-la-politica",
        "caso-orca-cockpit-multiagente"
      ],
      "area": "Gobierno de agentes",
      "glyph": "△",
      "hue": "rgba(168,106,255,.24)",
      "file": "guia-escalado-modelos.md",
      "html": "<blockquote>\n<p>Revisada el 12 de octubre de 2026. Los nombres, límites y catálogos cambian; verificar las fichas oficiales antes de convertir esta guía en política.</p>\n</blockquote>\n<h2 id=\"la-decision-no-empieza-por-la-marca\">La decisión no empieza por la marca</h2>\n<p>Elegir modelo es asignar capacidad a una tarea. Antes de mirar el selector, conviene responder:</p>\n<ol>\n<li>¿La tarea está bien especificada?</li>\n<li>¿El resultado se puede verificar automáticamente?</li>\n<li>¿Cuánto contexto y cuántas dependencias debe sostener?</li>\n<li>¿Un error cuesta una corrección local o una decisión equivocada de arquitectura?</li>\n<li>¿Necesita producir trabajo, coordinarlo o juzgarlo?</li>\n</ol>\n<p>Un worker con objetivo acotado, tests claros y poco contexto no necesita el modelo más grande. Un coordinador que debe conservar la intención, detectar conflictos entre cinco cambios y decidir qué integrar sí puede justificarlo.</p>\n<p>La regla económica es <strong>costo por tarea resuelta</strong>, no costo por token. Un modelo barato que entra en loops, falla pruebas o necesita tres reintentos puede resultar más caro que uno superior usado una sola vez.</p>\n<h2 id=\"la-escalera-correcta\">La escalera correcta</h2>\n<p>Antes de cambiar de familia o subir al modelo premium:</p>\n<ol>\n<li>mejorar la especificación y los criterios de aceptación;</li>\n<li>reducir el alcance o dividir el trabajo;</li>\n<li>aportar las herramientas y el contexto faltantes;</li>\n<li>subir un nivel de razonamiento;</li>\n<li>recién entonces escalar de modelo.</li>\n</ol>\n<p>Subir razonamiento sirve cuando el modelo <strong>puede</strong> resolver el problema pero necesita explorar más. Subir de modelo sirve cuando aparece una <strong>brecha de capacidad</strong>: pierde relaciones, no sostiene el horizonte, juzga mal los tradeoffs o repite el mismo tipo de error.</p>\n<h2 id=\"openai-gpt-6-luna-gpt-6-1-sol-y-gpt-6-astra\">OpenAI: GPT-6 Luna, GPT-6.1 Sol y GPT-6 Astra</h2>\n<table>\n<thead>\n<tr>\n<th>Modelo</th>\n<th>Rol sugerido</th>\n<th>Tareas recomendadas</th>\n<th>Cuándo subir</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>GPT-6 Luna</td>\n<td>Worker rápido y eficiente</td>\n<td>Extracción, resúmenes, tests, documentación y cambios locales verificables</td>\n<td>La tarea requiere juicio sostenido entre archivos</td>\n</tr>\n<tr>\n<td>GPT-6.1 Sol</td>\n<td>Generalista fuerte o coordinador, cuando esté disponible</td>\n<td>Código complejo, investigación, herramientas y flujos agénticos con varias restricciones</td>\n<td>Aun con razonamiento alto no sostiene el trabajo de punta a punta</td>\n</tr>\n<tr>\n<td>GPT-6 Astra</td>\n<td>Coordinador y juez de máxima exigencia</td>\n<td>Arquitectura, síntesis extensa, decisiones ambiguas, investigación profunda y workflows largos</td>\n<td>Reservar para la cola difícil, no como default</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"cuando-pasar-de-luna-a-sol\">Cuándo pasar de Luna a Sol</h3>\n<p>Luna es ideal cuando el contrato de la tarea cabe en pocas frases y el resultado tiene una comprobación clara. Sol es el siguiente escalón para trabajo que ya necesita interpretación, autonomía y coordinación.</p>\n<p>Pasar a Sol cuando aparezcan varias de estas señales:</p>\n<ul>\n<li>el cambio atraviesa múltiples capas del sistema;</li>\n<li>hay que elegir entre alternativas y explicar tradeoffs;</li>\n<li>los tests no describen por completo el éxito;</li>\n<li>el agente debe recuperarse de hallazgos inesperados;</li>\n<li>varios workers dependen de una decisión central.</li>\n</ul>\n<p>Astra se justifica cuando el problema combina amplitud, ambigüedad y consecuencias: no sólo debe escribir bien, sino preservar coherencia durante un proceso largo y juzgar el conjunto.</p>\n<p>GPT-6.1 Sol es la recomendación actual de OpenAI para código complejo cuando la cuenta y el cliente lo habilitan. GPT-6 Sol y GPT-5.6 siguen siendo alternativas durante el despliegue. La disponibilidad depende del plan, el cliente y el workspace; cambiar el nombre en una configuración no concede acceso. <a href=\"https://learn.chatgpt.com/docs/models\" target=\"_blank\" rel=\"noopener noreferrer\">Modelos y disponibilidad</a>.</p>\n<h2 id=\"claude-haiku-sonnet-opus-y-fable\">Claude: Haiku, Sonnet, Opus y Fable</h2>\n<p>Haiku 5.5 se publicó el 7 de octubre y Sonnet 5.5 el 28 de septiembre de 2026. Son versiones del catálogo de Anthropic; cada proveedor y harness debe exponerlas por separado. <a href=\"https://platform.claude.com/docs/en/models/haiku-5-5/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Haiku</a> · <a href=\"https://platform.claude.com/docs/en/models/sonnet-5-5/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Sonnet</a>.</p>\n<table>\n<thead>\n<tr>\n<th>Modelo</th>\n<th>Rol sugerido</th>\n<th>Tareas recomendadas</th>\n<th>Cuándo subir</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Claude Haiku 5.5</td>\n<td>Worker veloz</td>\n<td>Clasificación, extracción, cambios repetitivos, subagentes acotados y tareas de alto volumen</td>\n<td>Falta consistencia o el trabajo exige razonamiento entre varias piezas</td>\n</tr>\n<tr>\n<td>Claude Sonnet 5.5</td>\n<td>Default equilibrado</td>\n<td>Desarrollo cotidiano, análisis, contenido, uso de herramientas y agentes con alcance medio</td>\n<td>El horizonte se alarga o el costo del juicio incorrecto aumenta</td>\n</tr>\n<tr>\n<td>Claude Opus 5.5</td>\n<td>Coordinador senior</td>\n<td>Coding agente complejo, planificación amplia, revisión crítica y decisiones de alto impacto</td>\n<td>Opus con esfuerzo alto sigue sin cerrar el problema</td>\n</tr>\n<tr>\n<td>Claude Fable 5.1</td>\n<td>Frontera para la cola difícil</td>\n<td>Razonamiento muy demandante y trabajo agente de largo horizonte</td>\n<td>Usar de forma selectiva y medir si mejora la tasa de resolución</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"cuando-pasar-de-haiku-a-sonnet-y-de-sonnet-a-opus\">Cuándo pasar de Haiku a Sonnet y de Sonnet a Opus</h3>\n<p>Haiku funciona mejor como ejecutor de unidades pequeñas y comprobables. Sonnet es un punto de partida práctico cuando la tarea necesita comprender intención además de seguir instrucciones. La documentación actual de Anthropic recomienda comenzar con Opus 5.5 para la mayoría de los trabajos; esta guía prioriza el costo por tarea resuelta dentro de una orquestación con workers.</p>\n<p>Subir de Sonnet a Opus cuando:</p>\n<ul>\n<li>la tarea no admite una descomposición limpia;</li>\n<li>necesita sostener muchas restricciones durante bastante tiempo;</li>\n<li>coordina otros agentes o evalúa sus resultados;</li>\n<li>un error plausible puede propagarse por el diseño;</li>\n<li>los reintentos con Sonnet cuestan más que una ejecución buena con Opus.</li>\n</ul>\n<p>La documentación de Anthropic recomienda probar primero más <code>effort</code> cuando el modelo tiene esa opción. Si Opus en sus niveles más altos no alcanza, Fable es hoy el paso siguiente para problemas de frontera.</p>\n<h2 id=\"que-significa-el-nivel-de-razonamiento\">Qué significa el nivel de razonamiento</h2>\n<p>El nivel de razonamiento es un presupuesto de deliberación, no un multiplicador mágico de inteligencia. En general, más razonamiento implica más tiempo y más tokens, y permite explorar hipótesis, revisar decisiones y sostener pasos intermedios.</p>\n<table>\n<thead>\n<tr>\n<th>Nivel conceptual</th>\n<th>Usarlo para</th>\n<th>Evitarlo cuando</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Bajo o light</td>\n<td>Ediciones locales, consultas directas y tareas con camino obvio</td>\n<td>Hay ambigüedad o varias restricciones en tensión</td>\n</tr>\n<tr>\n<td>Medio</td>\n<td>Desarrollo diario, debugging moderado y decisiones reversibles</td>\n<td>La tarea es trivial o extremadamente compleja</td>\n</tr>\n<tr>\n<td>Alto o extra high</td>\n<td>Arquitectura, bugs esquivos, migraciones y síntesis multiarchivo</td>\n<td>El resultado se verifica con una transformación simple</td>\n</tr>\n<tr>\n<td>Max</td>\n<td>Un único modelo necesita agotar una investigación difícil</td>\n<td>La tarea puede dividirse mejor entre agentes</td>\n</tr>\n<tr>\n<td>Ultra</td>\n<td>El trabajo se separa naturalmente y conviene delegar en subagentes</td>\n<td>Hay una sola pieza indivisible o mucha coordinación accidental</td>\n</tr>\n</tbody>\n</table>\n<p>En Codex, <code>Max</code> entrega más deliberación al mismo modelo; <code>Ultra</code> puede delegar automáticamente en subagentes. GPT-6 Luna llega hasta Max, sin Ultra. En Claude, el comportamiento depende del modelo: el pensamiento adaptativo y <code>effort</code> son controles blandos, y Haiku 5.5 admite pensamiento adaptativo y <code>effort</code>, a diferencia de Haiku 4.5. <a href=\"https://platform.claude.com/docs/en/models/haiku-5-5/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Ficha de Haiku 5.5</a>.</p>\n<p>Dos advertencias:</p>\n<ul>\n<li>razonamiento alto no reemplaza contexto, herramientas ni tests;</li>\n<li>mostrar el texto de <em>thinking</em> no cambia por sí solo cuánto razona el modelo. En OpenCode V2, las variantes <code>provider/model#variant</code> configuran opciones como esfuerzo o presupuesto; sus nombres y efectos dependen del modelo y proveedor. <a href=\"https://opencode.ai/v2/docs/models/\" target=\"_blank\" rel=\"noopener noreferrer\">Variantes</a>.</li>\n</ul>\n<h2 id=\"opencode-go-mapa-practico-del-catalogo\">OpenCode Go: mapa práctico del catálogo</h2>\n<p>OpenCode Go reúne modelos de varios proveedores y ofrece Go y Go Plus. La tabla siguiente es una <strong>heurística editorial de arranque</strong>, no un benchmark oficial de OpenCode. Agrupa opciones relevantes del catálogo consultado el 12 de octubre de 2026; la lista exacta y los límites deben comprobarse en <code>/models</code> y en la ficha oficial antes de asignar un worker.</p>\n<table>\n<thead>\n<tr>\n<th>Opciones del catálogo de Go</th>\n<th>Punto de partida sugerido</th>\n<th>Papel inicial</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Grok 4.7 y 4.6</td>\n<td>Revisión independiente, razonamiento amplio y segunda opinión</td>\n<td>Coordinador o reviewer selectivo</td>\n</tr>\n<tr>\n<td>GLM 5.3 Flash, 5.3, 5.2</td>\n<td>5.3 Flash para trabajo acotado; 5.3 para planificación y cambios cruzados</td>\n<td>Worker económico; 5.3 como escalamiento</td>\n</tr>\n<tr>\n<td>GPT-6 Luna y GPT-5.6 Luna</td>\n<td>GPT-6 Luna para implementación, refactors, tests y documentación verificable; 5.6 como fallback probado</td>\n<td>Worker general</td>\n</tr>\n<tr>\n<td>Kimi K3, K2.7 Code, K2.6</td>\n<td>K2.7 Code para código; K3 para síntesis y tareas más exigentes</td>\n<td>Worker de código; K3 selectivo</td>\n</tr>\n<tr>\n<td>LongCat 2.0</td>\n<td>Mantenimiento simple, lotes y tareas repetibles</td>\n<td>Worker de volumen</td>\n</tr>\n<tr>\n<td>MiMo V2.6 Flash y Pro; V2.5 y Pro</td>\n<td>V2.6 Flash para tareas baratas y comprobables; Pro cuando hace falta más juicio; V2.5 como fallback</td>\n<td>Worker económico</td>\n</tr>\n<tr>\n<td>MiniMax M3 y M2.7</td>\n<td>M3 como generalista; M2.7 como fallback evaluado</td>\n<td>Worker general</td>\n</tr>\n<tr>\n<td>Muse Spark 1.3 y 1.2 Contributor (regiones limitadas)</td>\n<td>Implementación, tests y docs con alcance bien delimitado</td>\n<td>Contributor acotado</td>\n</tr>\n<tr>\n<td>Qwen3.8 Max, 3.8 Flash, 3.7 Plus</td>\n<td>3.8 Flash para volumen; 3.8 Max para planificación y revisión</td>\n<td>Worker o reviewer según variante</td>\n</tr>\n<tr>\n<td>DeepSeek V4.1 Flash, V4 Pro, V4 Flash, V4 Flash Vision Exp</td>\n<td>V4.1 Flash para trabajo corriente; Pro para debugging/revisión; Vision para insumos visuales</td>\n<td>Worker especializado</td>\n</tr>\n<tr>\n<td>Hy4 preview y Hy3</td>\n<td>Hy4 sólo en sandbox de evaluación; Hy3 después de una prueba contra el repo</td>\n<td>Experimental o worker evaluado</td>\n</tr>\n<tr>\n<td>LongCat 2.5 Preview Free y Step 5 Preview Free</td>\n<td>Probar sólo con tareas reproducibles y sin depender de su disponibilidad futura</td>\n<td>Experimentación temporal</td>\n</tr>\n<tr>\n<td>Claude Haiku 5.5</td>\n<td>Extracción, clasificación y subagentes acotados</td>\n<td>Worker de volumen</td>\n</tr>\n<tr>\n<td>Space Bunny</td>\n<td>Evaluar cambios pequeños con tests</td>\n<td>Worker experimental</td>\n</tr>\n</tbody>\n</table>\n<p>Los cupos de cinco horas, semana y mes se expresan en dólares de uso por modelo: los recuentos de solicitudes son estimaciones, no cantidades garantizadas. Una opción barata puede tener un cupo menor; las variantes gratuitas son temporales. <a href=\"https://opencode.ai/v2/docs/console/go\" target=\"_blank\" rel=\"noopener noreferrer\">Catálogo y límites</a>.</p>\n<h3 id=\"como-usar-esta-tabla-sin-enamorarse-del-ranking\">Cómo usar esta tabla sin enamorarse del ranking</h3>\n<p>Para cada familia que parezca prometedora, construir un set pequeño de tareas reales:</p>\n<ul>\n<li>una lectura y explicación de arquitectura;</li>\n<li>un cambio local con tests;</li>\n<li>un bug multiarchivo;</li>\n<li>una revisión de diff con errores sembrados;</li>\n<li>una tarea que deba detenerse ante un permiso sensible.</li>\n</ul>\n<p>Medir tasa de resolución, reintentos, tiempo, costo y respeto del contrato. La elección final puede diferir por repositorio: un modelo excelente programando puede ser un coordinador mediocre, y uno muy convincente puede ignorar límites operativos si el entorno no los aplica.</p>\n<p>Las versiones anteriores del catálogo sirven como fallback cuando una integración o comportamiento está validado, pero no deberían conservarse por inercia. Las variantes <code>preview</code> o <code>Exp</code> deben permanecer fuera del camino crítico hasta superar una evaluación propia.</p>\n<h2 id=\"asignacion-recomendada-en-una-orquestacion\">Asignación recomendada en una orquestación</h2>\n<table>\n<thead>\n<tr>\n<th>Responsabilidad</th>\n<th>Capacidad mínima útil</th>\n<th>Escalamiento</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Discovery de sólo lectura</td>\n<td>Modelo rápido con razonamiento bajo</td>\n<td>Subir si omite relaciones importantes</td>\n</tr>\n<tr>\n<td>Cambio aislado con tests</td>\n<td>Worker económico con razonamiento bajo o medio</td>\n<td>Mejorar el contrato; luego subir modelo</td>\n</tr>\n<tr>\n<td>Bug multiarchivo</td>\n<td>Generalista con razonamiento medio o alto</td>\n<td>Escalar si repite hipótesis fallidas</td>\n</tr>\n<tr>\n<td>Coordinación de varios workers</td>\n<td>Modelo fuerte con razonamiento alto</td>\n<td>Modelo frontera si no integra el panorama</td>\n</tr>\n<tr>\n<td>Auditoría de seguridad o arquitectura</td>\n<td>Modelo fuerte y segunda opinión de otra familia</td>\n<td>Escalar por desacuerdo o evidencia incompleta</td>\n</tr>\n<tr>\n<td>Acción irreversible</td>\n<td>Ningún modelo decide solo</td>\n<td>Gate humano y enforcement externo</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"una-politica-simple-para-empezar\">Una política simple para empezar</h2>\n<ol>\n<li>Elegir el modelo más pequeño que razonablemente puede cerrar la tarea.</li>\n<li>Asignar workers por unidades verificables, no por prestigio del modelo.</li>\n<li>Subir razonamiento cuando falta exploración; subir modelo cuando falta capacidad.</li>\n<li>Reservar el modelo frontera para coordinación, juicio y excepciones difíciles.</li>\n<li>Comparar familias con el mismo set de pruebas del repositorio.</li>\n<li>Registrar modelo, esfuerzo, reintentos y resultado para aprender del uso real.</li>\n<li>Mantener permisos y credenciales independientes del modelo elegido.</li>\n</ol>\n<p>El selector no es una jerarquía de empleados. Es una caja de cambios: el mejor nivel es el que entrega suficiente control y potencia sin gastar complejidad donde no agrega valor.</p>\n<h2 id=\"fuentes-oficiales\">Fuentes oficiales</h2>\n<ul>\n<li><a href=\"https://learn.chatgpt.com/docs/models\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI: modelos recomendados y niveles de razonamiento</a></li>\n<li><a href=\"https://developers.openai.com/api/docs/guides/latest-model\" target=\"_blank\" rel=\"noopener noreferrer\">OpenAI: guía del modelo más reciente</a></li>\n<li><a href=\"https://platform.claude.com/docs/en/models/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Anthropic: panorama actual de modelos Claude</a></li>\n<li><a href=\"https://platform.claude.com/docs/en/about-claude/models/choosing-a-model\" target=\"_blank\" rel=\"noopener noreferrer\">Anthropic: cómo elegir un modelo</a></li>\n<li><a href=\"https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence\" target=\"_blank\" rel=\"noopener noreferrer\">Anthropic: optimizar costo e inteligencia</a></li>\n<li><a href=\"https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost\" target=\"_blank\" rel=\"noopener noreferrer\">Anthropic: thinking, effort y costo</a></li>\n<li><a href=\"https://opencode.ai/v2/docs/console/go\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode Go: modelos, precios y límites vigentes</a></li>\n<li><a href=\"https://opencode.ai/v2/docs/models/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode V2: modelos y variantes de razonamiento</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "La decisión no empieza por la marca",
          "depth": 2,
          "id": "la-decision-no-empieza-por-la-marca"
        },
        {
          "label": "La escalera correcta",
          "depth": 2,
          "id": "la-escalera-correcta"
        },
        {
          "label": "OpenAI: GPT-6 Luna, GPT-6.1 Sol y GPT-6 Astra",
          "depth": 2,
          "id": "openai-gpt-6-luna-gpt-6-1-sol-y-gpt-6-astra"
        },
        {
          "label": "Cuándo pasar de Luna a Sol",
          "depth": 3,
          "id": "cuando-pasar-de-luna-a-sol"
        },
        {
          "label": "Claude: Haiku, Sonnet, Opus y Fable",
          "depth": 2,
          "id": "claude-haiku-sonnet-opus-y-fable"
        },
        {
          "label": "Cuándo pasar de Haiku a Sonnet y de Sonnet a Opus",
          "depth": 3,
          "id": "cuando-pasar-de-haiku-a-sonnet-y-de-sonnet-a-opus"
        },
        {
          "label": "Qué significa el nivel de razonamiento",
          "depth": 2,
          "id": "que-significa-el-nivel-de-razonamiento"
        },
        {
          "label": "OpenCode Go: mapa práctico del catálogo",
          "depth": 2,
          "id": "opencode-go-mapa-practico-del-catalogo"
        },
        {
          "label": "Cómo usar esta tabla sin enamorarse del ranking",
          "depth": 3,
          "id": "como-usar-esta-tabla-sin-enamorarse-del-ranking"
        },
        {
          "label": "Asignación recomendada en una orquestación",
          "depth": 2,
          "id": "asignacion-recomendada-en-una-orquestacion"
        },
        {
          "label": "Una política simple para empezar",
          "depth": 2,
          "id": "una-politica-simple-para-empezar"
        },
        {
          "label": "Fuentes oficiales",
          "depth": 2,
          "id": "fuentes-oficiales"
        }
      ],
      "raw": "---\nslug: guia-escalado-modelos\ntitle: Elegir modelo y nivel de razonamiento\ntype: guide\norder: 12\nsummary: Una guía práctica para asignar coordinadores y workers, subir razonamiento antes de pagar un modelo mayor y escalar cuando aparece una brecha real de capacidad.\ntags: [modelos, razonamiento, openai, claude, opencode-go, coordinador, workers]\nrelated: [orquestacion, terminal-vs-web-superficies-trabajo, modelos-guiados-el-entorno-es-la-politica, caso-orca-cockpit-multiagente]\narea: Gobierno de agentes\nglyph: △\nhue: rgba(168,106,255,.24)\n---\n\n# Elegir modelo y nivel de razonamiento\n\n> Revisada el 12 de octubre de 2026. Los nombres, límites y catálogos cambian; verificar las fichas oficiales antes de convertir esta guía en política.\n\n## La decisión no empieza por la marca\n\nElegir modelo es asignar capacidad a una tarea. Antes de mirar el selector, conviene responder:\n\n1. ¿La tarea está bien especificada?\n2. ¿El resultado se puede verificar automáticamente?\n3. ¿Cuánto contexto y cuántas dependencias debe sostener?\n4. ¿Un error cuesta una corrección local o una decisión equivocada de arquitectura?\n5. ¿Necesita producir trabajo, coordinarlo o juzgarlo?\n\nUn worker con objetivo acotado, tests claros y poco contexto no necesita el modelo más grande. Un coordinador que debe conservar la intención, detectar conflictos entre cinco cambios y decidir qué integrar sí puede justificarlo.\n\nLa regla económica es **costo por tarea resuelta**, no costo por token. Un modelo barato que entra en loops, falla pruebas o necesita tres reintentos puede resultar más caro que uno superior usado una sola vez.\n\n## La escalera correcta\n\nAntes de cambiar de familia o subir al modelo premium:\n\n1. mejorar la especificación y los criterios de aceptación;\n2. reducir el alcance o dividir el trabajo;\n3. aportar las herramientas y el contexto faltantes;\n4. subir un nivel de razonamiento;\n5. recién entonces escalar de modelo.\n\nSubir razonamiento sirve cuando el modelo **puede** resolver el problema pero necesita explorar más. Subir de modelo sirve cuando aparece una **brecha de capacidad**: pierde relaciones, no sostiene el horizonte, juzga mal los tradeoffs o repite el mismo tipo de error.\n\n## OpenAI: GPT-6 Luna, GPT-6.1 Sol y GPT-6 Astra\n\n| Modelo | Rol sugerido | Tareas recomendadas | Cuándo subir |\n|---|---|---|---|\n| GPT-6 Luna | Worker rápido y eficiente | Extracción, resúmenes, tests, documentación y cambios locales verificables | La tarea requiere juicio sostenido entre archivos |\n| GPT-6.1 Sol | Generalista fuerte o coordinador, cuando esté disponible | Código complejo, investigación, herramientas y flujos agénticos con varias restricciones | Aun con razonamiento alto no sostiene el trabajo de punta a punta |\n| GPT-6 Astra | Coordinador y juez de máxima exigencia | Arquitectura, síntesis extensa, decisiones ambiguas, investigación profunda y workflows largos | Reservar para la cola difícil, no como default |\n\n### Cuándo pasar de Luna a Sol\n\nLuna es ideal cuando el contrato de la tarea cabe en pocas frases y el resultado tiene una comprobación clara. Sol es el siguiente escalón para trabajo que ya necesita interpretación, autonomía y coordinación.\n\nPasar a Sol cuando aparezcan varias de estas señales:\n\n- el cambio atraviesa múltiples capas del sistema;\n- hay que elegir entre alternativas y explicar tradeoffs;\n- los tests no describen por completo el éxito;\n- el agente debe recuperarse de hallazgos inesperados;\n- varios workers dependen de una decisión central.\n\nAstra se justifica cuando el problema combina amplitud, ambigüedad y consecuencias: no sólo debe escribir bien, sino preservar coherencia durante un proceso largo y juzgar el conjunto.\n\nGPT-6.1 Sol es la recomendación actual de OpenAI para código complejo cuando la cuenta y el cliente lo habilitan. GPT-6 Sol y GPT-5.6 siguen siendo alternativas durante el despliegue. La disponibilidad depende del plan, el cliente y el workspace; cambiar el nombre en una configuración no concede acceso. [Modelos y disponibilidad](https://learn.chatgpt.com/docs/models).\n\n## Claude: Haiku, Sonnet, Opus y Fable\n\nHaiku 5.5 se publicó el 7 de octubre y Sonnet 5.5 el 28 de septiembre de 2026. Son versiones del catálogo de Anthropic; cada proveedor y harness debe exponerlas por separado. [Haiku](https://platform.claude.com/docs/en/models/haiku-5-5/overview) · [Sonnet](https://platform.claude.com/docs/en/models/sonnet-5-5/overview).\n\n| Modelo | Rol sugerido | Tareas recomendadas | Cuándo subir |\n|---|---|---|---|\n| Claude Haiku 5.5 | Worker veloz | Clasificación, extracción, cambios repetitivos, subagentes acotados y tareas de alto volumen | Falta consistencia o el trabajo exige razonamiento entre varias piezas |\n| Claude Sonnet 5.5 | Default equilibrado | Desarrollo cotidiano, análisis, contenido, uso de herramientas y agentes con alcance medio | El horizonte se alarga o el costo del juicio incorrecto aumenta |\n| Claude Opus 5.5 | Coordinador senior | Coding agente complejo, planificación amplia, revisión crítica y decisiones de alto impacto | Opus con esfuerzo alto sigue sin cerrar el problema |\n| Claude Fable 5.1 | Frontera para la cola difícil | Razonamiento muy demandante y trabajo agente de largo horizonte | Usar de forma selectiva y medir si mejora la tasa de resolución |\n\n### Cuándo pasar de Haiku a Sonnet y de Sonnet a Opus\n\nHaiku funciona mejor como ejecutor de unidades pequeñas y comprobables. Sonnet es un punto de partida práctico cuando la tarea necesita comprender intención además de seguir instrucciones. La documentación actual de Anthropic recomienda comenzar con Opus 5.5 para la mayoría de los trabajos; esta guía prioriza el costo por tarea resuelta dentro de una orquestación con workers.\n\nSubir de Sonnet a Opus cuando:\n\n- la tarea no admite una descomposición limpia;\n- necesita sostener muchas restricciones durante bastante tiempo;\n- coordina otros agentes o evalúa sus resultados;\n- un error plausible puede propagarse por el diseño;\n- los reintentos con Sonnet cuestan más que una ejecución buena con Opus.\n\nLa documentación de Anthropic recomienda probar primero más `effort` cuando el modelo tiene esa opción. Si Opus en sus niveles más altos no alcanza, Fable es hoy el paso siguiente para problemas de frontera.\n\n## Qué significa el nivel de razonamiento\n\nEl nivel de razonamiento es un presupuesto de deliberación, no un multiplicador mágico de inteligencia. En general, más razonamiento implica más tiempo y más tokens, y permite explorar hipótesis, revisar decisiones y sostener pasos intermedios.\n\n| Nivel conceptual | Usarlo para | Evitarlo cuando |\n|---|---|---|\n| Bajo o light | Ediciones locales, consultas directas y tareas con camino obvio | Hay ambigüedad o varias restricciones en tensión |\n| Medio | Desarrollo diario, debugging moderado y decisiones reversibles | La tarea es trivial o extremadamente compleja |\n| Alto o extra high | Arquitectura, bugs esquivos, migraciones y síntesis multiarchivo | El resultado se verifica con una transformación simple |\n| Max | Un único modelo necesita agotar una investigación difícil | La tarea puede dividirse mejor entre agentes |\n| Ultra | El trabajo se separa naturalmente y conviene delegar en subagentes | Hay una sola pieza indivisible o mucha coordinación accidental |\n\nEn Codex, `Max` entrega más deliberación al mismo modelo; `Ultra` puede delegar automáticamente en subagentes. GPT-6 Luna llega hasta Max, sin Ultra. En Claude, el comportamiento depende del modelo: el pensamiento adaptativo y `effort` son controles blandos, y Haiku 5.5 admite pensamiento adaptativo y `effort`, a diferencia de Haiku 4.5. [Ficha de Haiku 5.5](https://platform.claude.com/docs/en/models/haiku-5-5/overview).\n\nDos advertencias:\n\n- razonamiento alto no reemplaza contexto, herramientas ni tests;\n- mostrar el texto de *thinking* no cambia por sí solo cuánto razona el modelo. En OpenCode V2, las variantes `provider/model#variant` configuran opciones como esfuerzo o presupuesto; sus nombres y efectos dependen del modelo y proveedor. [Variantes](https://opencode.ai/v2/docs/models/).\n\n## OpenCode Go: mapa práctico del catálogo\n\nOpenCode Go reúne modelos de varios proveedores y ofrece Go y Go Plus. La tabla siguiente es una **heurística editorial de arranque**, no un benchmark oficial de OpenCode. Agrupa opciones relevantes del catálogo consultado el 12 de octubre de 2026; la lista exacta y los límites deben comprobarse en `/models` y en la ficha oficial antes de asignar un worker.\n\n| Opciones del catálogo de Go | Punto de partida sugerido | Papel inicial |\n|---|---|---|\n| Grok 4.7 y 4.6 | Revisión independiente, razonamiento amplio y segunda opinión | Coordinador o reviewer selectivo |\n| GLM 5.3 Flash, 5.3, 5.2 | 5.3 Flash para trabajo acotado; 5.3 para planificación y cambios cruzados | Worker económico; 5.3 como escalamiento |\n| GPT-6 Luna y GPT-5.6 Luna | GPT-6 Luna para implementación, refactors, tests y documentación verificable; 5.6 como fallback probado | Worker general |\n| Kimi K3, K2.7 Code, K2.6 | K2.7 Code para código; K3 para síntesis y tareas más exigentes | Worker de código; K3 selectivo |\n| LongCat 2.0 | Mantenimiento simple, lotes y tareas repetibles | Worker de volumen |\n| MiMo V2.6 Flash y Pro; V2.5 y Pro | V2.6 Flash para tareas baratas y comprobables; Pro cuando hace falta más juicio; V2.5 como fallback | Worker económico |\n| MiniMax M3 y M2.7 | M3 como generalista; M2.7 como fallback evaluado | Worker general |\n| Muse Spark 1.3 y 1.2 Contributor (regiones limitadas) | Implementación, tests y docs con alcance bien delimitado | Contributor acotado |\n| Qwen3.8 Max, 3.8 Flash, 3.7 Plus | 3.8 Flash para volumen; 3.8 Max para planificación y revisión | Worker o reviewer según variante |\n| DeepSeek V4.1 Flash, V4 Pro, V4 Flash, V4 Flash Vision Exp | V4.1 Flash para trabajo corriente; Pro para debugging/revisión; Vision para insumos visuales | Worker especializado |\n| Hy4 preview y Hy3 | Hy4 sólo en sandbox de evaluación; Hy3 después de una prueba contra el repo | Experimental o worker evaluado |\n| LongCat 2.5 Preview Free y Step 5 Preview Free | Probar sólo con tareas reproducibles y sin depender de su disponibilidad futura | Experimentación temporal |\n| Claude Haiku 5.5 | Extracción, clasificación y subagentes acotados | Worker de volumen |\n| Space Bunny | Evaluar cambios pequeños con tests | Worker experimental |\n\nLos cupos de cinco horas, semana y mes se expresan en dólares de uso por modelo: los recuentos de solicitudes son estimaciones, no cantidades garantizadas. Una opción barata puede tener un cupo menor; las variantes gratuitas son temporales. [Catálogo y límites](https://opencode.ai/v2/docs/console/go).\n\n### Cómo usar esta tabla sin enamorarse del ranking\n\nPara cada familia que parezca prometedora, construir un set pequeño de tareas reales:\n\n- una lectura y explicación de arquitectura;\n- un cambio local con tests;\n- un bug multiarchivo;\n- una revisión de diff con errores sembrados;\n- una tarea que deba detenerse ante un permiso sensible.\n\nMedir tasa de resolución, reintentos, tiempo, costo y respeto del contrato. La elección final puede diferir por repositorio: un modelo excelente programando puede ser un coordinador mediocre, y uno muy convincente puede ignorar límites operativos si el entorno no los aplica.\n\nLas versiones anteriores del catálogo sirven como fallback cuando una integración o comportamiento está validado, pero no deberían conservarse por inercia. Las variantes `preview` o `Exp` deben permanecer fuera del camino crítico hasta superar una evaluación propia.\n\n## Asignación recomendada en una orquestación\n\n| Responsabilidad | Capacidad mínima útil | Escalamiento |\n|---|---|---|\n| Discovery de sólo lectura | Modelo rápido con razonamiento bajo | Subir si omite relaciones importantes |\n| Cambio aislado con tests | Worker económico con razonamiento bajo o medio | Mejorar el contrato; luego subir modelo |\n| Bug multiarchivo | Generalista con razonamiento medio o alto | Escalar si repite hipótesis fallidas |\n| Coordinación de varios workers | Modelo fuerte con razonamiento alto | Modelo frontera si no integra el panorama |\n| Auditoría de seguridad o arquitectura | Modelo fuerte y segunda opinión de otra familia | Escalar por desacuerdo o evidencia incompleta |\n| Acción irreversible | Ningún modelo decide solo | Gate humano y enforcement externo |\n\n## Una política simple para empezar\n\n1. Elegir el modelo más pequeño que razonablemente puede cerrar la tarea.\n2. Asignar workers por unidades verificables, no por prestigio del modelo.\n3. Subir razonamiento cuando falta exploración; subir modelo cuando falta capacidad.\n4. Reservar el modelo frontera para coordinación, juicio y excepciones difíciles.\n5. Comparar familias con el mismo set de pruebas del repositorio.\n6. Registrar modelo, esfuerzo, reintentos y resultado para aprender del uso real.\n7. Mantener permisos y credenciales independientes del modelo elegido.\n\nEl selector no es una jerarquía de empleados. Es una caja de cambios: el mejor nivel es el que entrega suficiente control y potencia sin gastar complejidad donde no agrega valor.\n\n## Fuentes oficiales\n\n- [OpenAI: modelos recomendados y niveles de razonamiento](https://learn.chatgpt.com/docs/models)\n- [OpenAI: guía del modelo más reciente](https://developers.openai.com/api/docs/guides/latest-model)\n- [Anthropic: panorama actual de modelos Claude](https://platform.claude.com/docs/en/models/overview)\n- [Anthropic: cómo elegir un modelo](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model)\n- [Anthropic: optimizar costo e inteligencia](https://platform.claude.com/docs/en/about-claude/models/optimizing-for-cost-and-intelligence)\n- [Anthropic: thinking, effort y costo](https://platform.claude.com/docs/en/build-with-claude/thinking-steering-and-cost)\n- [OpenCode Go: modelos, precios y límites vigentes](https://opencode.ai/v2/docs/console/go)\n- [OpenCode V2: modelos y variantes de razonamiento](https://opencode.ai/v2/docs/models/)\n"
    },
    {
      "slug": "preflight-despliegue-backend",
      "title": "Antes de publicar, probá el arranque real",
      "summary": "Un build exitoso no garantiza que el backend pueda iniciar. Un preflight con el comando de producción y un healthcheck bloqueante cierran esa brecha.",
      "type": "guide",
      "order": 12,
      "tags": [
        "deploy",
        "backend",
        "preflight",
        "healthcheck",
        "produccion",
        "agentes"
      ],
      "related": [
        "modelos-guiados-el-entorno-es-la-politica",
        "continuidad-y-observabilidad",
        "orquestacion"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◉",
      "hue": "rgba(237,195,94,.25)",
      "file": "preflight-despliegue-backend.md",
      "html": "<h2 id=\"el-falso-positivo-del-build-verde\">El falso positivo del build verde</h2>\n<p>Un backend puede compilar y aun así fallar al iniciar. El build verifica que sus pasos terminaron; no demuestra que el proceso de producción resuelva sus imports, cargue la configuración, abra el puerto y responda una petición.</p>\n<p>En un incidente real, un archivo de entrada terminó con contenido duplicado. La publicación avanzó, pero el servidor entró en un ciclo de fallas por declaraciones repetidas. La recuperación exigió corregir el código y volver a publicar. El problema que importaba ya estaba en el repositorio: faltaba una prueba capaz de verlo antes del deploy.</p>\n<h2 id=\"tres-controles-tres-preguntas-distintas\">Tres controles, tres preguntas distintas</h2>\n<h3 id=\"1-el-archivo-de-entrada-conserva-una-estructura-valida\">1. ¿El archivo de entrada conserva una estructura válida?</h3>\n<p>Si un generador, un merge o un agente modifica el punto de arranque, revisá el diff y ejecutá la comprobación sintáctica del runtime. Detectá duplicaciones evidentes de imports, inicialización del servidor o bloques completos antes de dar por terminado el cambio.</p>\n<p>Esta revisión es específica del proyecto: no alcanza con buscar una cadena repetida y asumir que toda repetición es un error.</p>\n<h3 id=\"2-arranca-el-comando-que-usa-produccion\">2. ¿Arranca el comando que usa producción?</h3>\n<p>Ejecutá el comando de producción en un entorno de prueba con la configuración necesaria. Esperá a que el proceso abra el puerto y hacé una solicitud HTTP a un endpoint liviano. Si el proceso muere o la solicitud falla, la publicación queda bloqueada.</p>\n<p>No sustituyas esta comprobación por el modo de desarrollo. Los scripts, variables, bundlers y rutas de imports pueden ser distintos.</p>\n<p>Una secuencia mínima, adaptada al proyecto, se parece a esto:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-bash\"><span class=\"line\"><span style=\"color:#57D9E8\">npm</span><span style=\"color:#EDC35E\"> run</span><span style=\"color:#EDC35E\"> build</span></span>\n<span class=\"line\"><span style=\"color:#C9F5F4\">PORT</span><span style=\"color:#A86AFF\">=</span><span style=\"color:#EDC35E\">5000</span><span style=\"color:#57D9E8\"> npm</span><span style=\"color:#EDC35E\"> run</span><span style=\"color:#EDC35E\"> start</span></span>\n<span class=\"line\"><span style=\"color:#6B6580;font-style:italic\"># En otra terminal:</span></span>\n<span class=\"line\"><span style=\"color:#57D9E8\">curl</span><span style=\"color:#EC5FBD\"> --fail</span><span style=\"color:#EC5FBD\"> --show-error</span><span style=\"color:#EDC35E\"> http://127.0.0.1:5000/health</span></span></code></pre>\n<p>El ejemplo supone que existen <code>start</code> y <code>/health</code>; usá los nombres reales del servicio. El proceso debe poder cerrarse limpiamente al terminar la prueba.</p>\n<h3 id=\"3-el-despliegue-espera-una-respuesta-saludable\">3. ¿El despliegue espera una respuesta saludable?</h3>\n<p>Configurá el healthcheck del hosting para que una publicación sólo se considere lista cuando el backend responde. Una página estática o un proceso iniciado durante un instante no prueban que la API esté operativa.</p>\n<p>El endpoint de salud debería ser barato y representar la capacidad que necesitás para servir tráfico. Si depende de servicios externos, distinguí entre <strong>proceso vivo</strong> y <strong>servicio listo</strong> para evitar reinicios causados por una dependencia temporalmente caída.</p>\n<h2 id=\"el-orden-importa\">El orden importa</h2>\n<ol>\n<li>Revisar el diff del punto de entrada.</li>\n<li>Correr build y comprobación sintáctica.</li>\n<li>Levantar el comando real en un entorno de prueba.</li>\n<li>Probar una respuesta HTTP.</li>\n<li>Publicar con healthcheck bloqueante.</li>\n<li>Confirmar la respuesta desde la URL desplegada.</li>\n</ol>\n<p>Cada paso responde una pregunta distinta. Un check verde no reemplaza al siguiente.</p>\n<h2 id=\"cuando-trabaja-un-agente\">Cuando trabaja un agente</h2>\n<p>El contrato de la tarea tiene que pedir evidencia concreta: comando ejecutado, salida relevante, código de respuesta HTTP y resultado del despliegue. La frase «funciona» no alcanza para cruzar el límite de producción.</p>\n<p>Si el preflight falla, el agente corrige y repite la prueba. Si falta configuración que sólo existe en producción, registra qué pudo verificar y qué queda pendiente para un entorno equivalente; no convierte una suposición en aprobación.</p>\n<h2 id=\"del-test-local-al-efecto-publicado\">Del test local al efecto publicado</h2>\n<p>Los registros del caso operativo revisados el 12 de octubre de 2026 aportan otra variante del mismo problema. Una integración n8n había pasado 56 tests, auditoría y revisión estática, pero todavía no había ejecutado su nodo HTTP real. La primera petición real al workflow ya publicado falló en su nodo HTTP. Es un resultado de ese circuito y esa configuración, no un defecto universal de n8n ni una prueba de que los tests fueran inútiles: faltaba cubrir el camino que producía el efecto.</p>\n<p>En la aceptación posterior quedaron registrados dos recorridos: modificar un parámetro autorizado, publicar, leer el estado y comprobar la respuesta del webhook; después restaurar, <strong>volver a publicar</strong> y verificar que el webhook recuperara el comportamiento original. Restaurar una definición sin comprobar la versión activa no cerraba el ciclo.</p>\n<p>Esta evidencia fue leída en los registros del proyecto, no reproducida para esta editorial. Tampoco cubrió fallos o timeouts del hook de control. La distinción vigente es útil para cualquier handoff: <strong>listo local no es aplicado; aplicado no es aceptado</strong>. El postflight inmediato prueba una condición puntual; cuando el objetivo depende del uso habitual, hace falta observar el ciclo natural acordado antes de cerrar. Ver <a href=\"/entrada/caso-orca-cockpit-multiagente\">la evolución del cockpit</a>.</p>\n<h2 id=\"regla-transferible\">Regla transferible</h2>\n<p><strong>La publicación empieza antes del botón de deploy.</strong> Primero hay que demostrar que el mismo programa que va a recibir tráfico puede arrancar y responder. Después, el hosting tiene que negarse a declarar exitoso un despliegue que no supera esa prueba.</p>\n<blockquote>\n<p>Caso basado en un incidente real. Se omitieron nombres, fechas, repositorios y detalles operativos identificables.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "El falso positivo del build verde",
          "depth": 2,
          "id": "el-falso-positivo-del-build-verde"
        },
        {
          "label": "Tres controles, tres preguntas distintas",
          "depth": 2,
          "id": "tres-controles-tres-preguntas-distintas"
        },
        {
          "label": "1. ¿El archivo de entrada conserva una estructura válida?",
          "depth": 3,
          "id": "1-el-archivo-de-entrada-conserva-una-estructura-valida"
        },
        {
          "label": "2. ¿Arranca el comando que usa producción?",
          "depth": 3,
          "id": "2-arranca-el-comando-que-usa-produccion"
        },
        {
          "label": "3. ¿El despliegue espera una respuesta saludable?",
          "depth": 3,
          "id": "3-el-despliegue-espera-una-respuesta-saludable"
        },
        {
          "label": "El orden importa",
          "depth": 2,
          "id": "el-orden-importa"
        },
        {
          "label": "Cuando trabaja un agente",
          "depth": 2,
          "id": "cuando-trabaja-un-agente"
        },
        {
          "label": "Del test local al efecto publicado",
          "depth": 2,
          "id": "del-test-local-al-efecto-publicado"
        },
        {
          "label": "Regla transferible",
          "depth": 2,
          "id": "regla-transferible"
        }
      ],
      "raw": "---\nslug: preflight-despliegue-backend\ntitle: Antes de publicar, probá el arranque real\ntype: guide\norder: 12\nsummary: \"Un build exitoso no garantiza que el backend pueda iniciar. Un preflight con el comando de producción y un healthcheck bloqueante cierran esa brecha.\"\ntags: [deploy, backend, preflight, healthcheck, produccion, agentes]\nrelated: [modelos-guiados-el-entorno-es-la-politica, continuidad-y-observabilidad, orquestacion]\narea: Gobierno de agentes\nglyph: ◉\nhue: rgba(237,195,94,.25)\n---\n\n# Antes de publicar, probá el arranque real\n\n## El falso positivo del build verde\n\nUn backend puede compilar y aun así fallar al iniciar. El build verifica que sus pasos terminaron; no demuestra que el proceso de producción resuelva sus imports, cargue la configuración, abra el puerto y responda una petición.\n\nEn un incidente real, un archivo de entrada terminó con contenido duplicado. La publicación avanzó, pero el servidor entró en un ciclo de fallas por declaraciones repetidas. La recuperación exigió corregir el código y volver a publicar. El problema que importaba ya estaba en el repositorio: faltaba una prueba capaz de verlo antes del deploy.\n\n## Tres controles, tres preguntas distintas\n\n### 1. ¿El archivo de entrada conserva una estructura válida?\n\nSi un generador, un merge o un agente modifica el punto de arranque, revisá el diff y ejecutá la comprobación sintáctica del runtime. Detectá duplicaciones evidentes de imports, inicialización del servidor o bloques completos antes de dar por terminado el cambio.\n\nEsta revisión es específica del proyecto: no alcanza con buscar una cadena repetida y asumir que toda repetición es un error.\n\n### 2. ¿Arranca el comando que usa producción?\n\nEjecutá el comando de producción en un entorno de prueba con la configuración necesaria. Esperá a que el proceso abra el puerto y hacé una solicitud HTTP a un endpoint liviano. Si el proceso muere o la solicitud falla, la publicación queda bloqueada.\n\nNo sustituyas esta comprobación por el modo de desarrollo. Los scripts, variables, bundlers y rutas de imports pueden ser distintos.\n\nUna secuencia mínima, adaptada al proyecto, se parece a esto:\n\n```bash\nnpm run build\nPORT=5000 npm run start\n# En otra terminal:\ncurl --fail --show-error http://127.0.0.1:5000/health\n```\n\nEl ejemplo supone que existen `start` y `/health`; usá los nombres reales del servicio. El proceso debe poder cerrarse limpiamente al terminar la prueba.\n\n### 3. ¿El despliegue espera una respuesta saludable?\n\nConfigurá el healthcheck del hosting para que una publicación sólo se considere lista cuando el backend responde. Una página estática o un proceso iniciado durante un instante no prueban que la API esté operativa.\n\nEl endpoint de salud debería ser barato y representar la capacidad que necesitás para servir tráfico. Si depende de servicios externos, distinguí entre **proceso vivo** y **servicio listo** para evitar reinicios causados por una dependencia temporalmente caída.\n\n## El orden importa\n\n1. Revisar el diff del punto de entrada.\n2. Correr build y comprobación sintáctica.\n3. Levantar el comando real en un entorno de prueba.\n4. Probar una respuesta HTTP.\n5. Publicar con healthcheck bloqueante.\n6. Confirmar la respuesta desde la URL desplegada.\n\nCada paso responde una pregunta distinta. Un check verde no reemplaza al siguiente.\n\n## Cuando trabaja un agente\n\nEl contrato de la tarea tiene que pedir evidencia concreta: comando ejecutado, salida relevante, código de respuesta HTTP y resultado del despliegue. La frase «funciona» no alcanza para cruzar el límite de producción.\n\nSi el preflight falla, el agente corrige y repite la prueba. Si falta configuración que sólo existe en producción, registra qué pudo verificar y qué queda pendiente para un entorno equivalente; no convierte una suposición en aprobación.\n\n## Del test local al efecto publicado\n\nLos registros del caso operativo revisados el 12 de octubre de 2026 aportan otra variante del mismo problema. Una integración n8n había pasado 56 tests, auditoría y revisión estática, pero todavía no había ejecutado su nodo HTTP real. La primera petición real al workflow ya publicado falló en su nodo HTTP. Es un resultado de ese circuito y esa configuración, no un defecto universal de n8n ni una prueba de que los tests fueran inútiles: faltaba cubrir el camino que producía el efecto.\n\nEn la aceptación posterior quedaron registrados dos recorridos: modificar un parámetro autorizado, publicar, leer el estado y comprobar la respuesta del webhook; después restaurar, **volver a publicar** y verificar que el webhook recuperara el comportamiento original. Restaurar una definición sin comprobar la versión activa no cerraba el ciclo.\n\nEsta evidencia fue leída en los registros del proyecto, no reproducida para esta editorial. Tampoco cubrió fallos o timeouts del hook de control. La distinción vigente es útil para cualquier handoff: **listo local no es aplicado; aplicado no es aceptado**. El postflight inmediato prueba una condición puntual; cuando el objetivo depende del uso habitual, hace falta observar el ciclo natural acordado antes de cerrar. Ver [la evolución del cockpit](/entrada/caso-orca-cockpit-multiagente).\n\n## Regla transferible\n\n**La publicación empieza antes del botón de deploy.** Primero hay que demostrar que el mismo programa que va a recibir tráfico puede arrancar y responder. Después, el hosting tiene que negarse a declarar exitoso un despliegue que no supera esa prueba.\n\n> Caso basado en un incidente real. Se omitieron nombres, fechas, repositorios y detalles operativos identificables.\n"
    },
    {
      "slug": "amp-fabrica-agentes-cloud",
      "title": "Amp y la fábrica de agentes en la nube",
      "summary": "Amp empaqueta agente, máquina, contexto y Git en una sola superficie. No inventa el desarrollo multiagente, pero vuelve producto una práctica que todavía solemos construir a mano.",
      "type": "editorial",
      "order": 13,
      "tags": [
        "amp",
        "orbs",
        "agentes",
        "cloud",
        "orca",
        "github",
        "multi-modelo",
        "automatizaciones"
      ],
      "related": [
        "orquestacion",
        "caso-orca-cockpit-multiagente",
        "workspaces-y-worktrees",
        "guia-escalado-modelos"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◌",
      "hue": "rgba(87,217,232,.22)",
      "file": "amp-fabrica-agentes-cloud.md",
      "html": "<blockquote>\n<p>Vigencia editorial: 12 de octubre de 2026. Amp declara una filosofía de frontera y sin compromiso de compatibilidad hacia atrás; modelos, routing, precios y funciones pueden cambiar con rapidez.</p>\n</blockquote>\n<p>Amp no resulta interesante porque haya inventado otro agente capaz de editar archivos. Ese espacio ya está lleno. Lo atractivo es que intenta convertir en producto todo lo que rodea al agente: la máquina donde trabaja, el contexto que conserva, el repositorio que modifica, las pruebas que ejecuta, los agentes que coordina y la continuidad necesaria para terminar aunque la computadora del usuario esté apagada.</p>\n<p>En otras palabras, Amp comercializa una versión ordenada de una fábrica que muchos equipos todavía arman artesanalmente con CLIs, worktrees, sesiones persistentes, servidores y bastante disciplina operativa.</p>\n<h2 id=\"el-agente-no-trabaja-en-el-vacio\">El agente no trabaja en el vacío</h2>\n<p>Una conversación puede producir una buena idea, pero el desarrollo real exige un entorno. Hay que clonar código, instalar dependencias, ejecutar servicios, inspeccionar CI, probar la aplicación y devolver cambios revisables.</p>\n<p>Amp reúne esas piezas alrededor de sus <strong>Threads</strong> y <strong>Orbs</strong>. Un Thread conserva la conversación y el trabajo; un Orb es una máquina remota aislada, creada para ese hilo, con su propia copia del repositorio y sus herramientas. Puede seguir ejecutándose cuando el usuario cierra la notebook, dormirse cuando queda inactivo y despertar después con archivos, servicios e historial disponibles.</p>\n<p>La novedad no está en ninguna pieza aislada. Está en tratarlas como una sola unidad operativa:</p>\n<p><strong>agente + contexto + máquina + código + evidencia</strong>.</p>\n<p>Esa combinación permite pedir algo más exigente que “escribí esta función”. Se le puede pedir que implemente el cambio, levante el sistema, lo pruebe de punta a punta y deje una rama o un pull request acompañado por evidencia.</p>\n<h2 id=\"the-dial-elegir-esfuerzo-antes-que-marca\">The Dial: elegir esfuerzo antes que marca</h2>\n<p>Amp ofrece cuatro modos de base en The Dial: <code>low</code>, <code>medium</code>, <code>high</code> y <code>ultra</code>. La idea es elegir según la dificultad y el costo de equivocarse, no enamorarse del nombre de un modelo.</p>\n<table>\n<thead>\n<tr>\n<th>Modo</th>\n<th>Lectura práctica</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>low</code></td>\n<td>Cambios chicos, tests y refactors con resultado evidente</td>\n</tr>\n<tr>\n<td><code>medium</code></td>\n<td>Desarrollo cotidiano con algo de ambigüedad o varios pasos</td>\n</tr>\n<tr>\n<td><code>high</code></td>\n<td>Trabajo delicado que debería llegar cerca de una revisión final</td>\n</tr>\n<tr>\n<td><code>ultra</code></td>\n<td>Arquitectura, migraciones y problemas abiertos entre varios sistemas</td>\n</tr>\n</tbody>\n</table>\n<p>Detrás de cada posición, Amp puede combinar modelo principal, nivel de razonamiento, herramientas, instrucciones, subagentes y un <strong>Oracle</strong> que aporta una segunda opinión. El routing automático cambia cuando aparecen mejores modelos, mientras que la intención del modo permanece estable.</p>\n<p>La abstracción es sana: una organización no debería reescribir su política cada vez que cambia el ranking de proveedores. “Usar capacidad alta cuando una omisión sutil sería cara” envejece mejor que “usar siempre el modelo X”.</p>\n<p>Sin embargo, Amp no obliga a entregar todo el control. Es posible fijar modelos y esfuerzo por separado para el agente principal, el Oracle y los subagentes, además de definir modos personalizados mediante plugins.</p>\n<p>El <a href=\"https://ampcode.com/docs/the-dial\" target=\"_blank\" rel=\"noopener noreferrer\">Dial</a> se puede personalizar, pero el modo de un Thread queda fijado al enviar su primer mensaje: cambiarlo exige abrir otro hilo. Conviene elegir el esfuerzo antes de empezar.</p>\n<h2 id=\"dos-formas-de-delegar\">Dos formas de delegar</h2>\n<p>Amp distingue entre subagentes especializados y agentes completos ejecutados en otros Threads.</p>\n<p>Los subagentes internos sirven para búsquedas, investigación, lectura de conversaciones previas y consultas difíciles al Oracle. Trabajan con una ventana de contexto separada y devuelven un resumen al agente principal. Mantienen limpio el hilo central, aunque tienen límites claros: no conversan entre sí y no pueden ser orientados a mitad del trabajo.</p>\n<p>La delegación entre agentes completos es más ambiciosa. Un agente puede iniciar otro Thread en un Orb, transferirle instrucciones o archivos y continuar trabajando mientras espera el resultado. Cada hilo obtiene su propia conversación, copia de trabajo y máquina. Eso habilita fan-out real: varias investigaciones, navegadores, resoluciones o proyectos avanzando en paralelo.</p>\n<p>El aislamiento es deliberado. Los archivos sin commit y los cambios no aparecen mágicamente en los otros entornos; deben transferirse o integrarse de forma explícita. Esa fricción evita bastante caos, pero no elimina la necesidad de un buen coordinador.</p>\n<h2 id=\"amp-frente-a-un-cockpit-como-orca\">Amp frente a un cockpit como Orca</h2>\n<p>Amp y Orca se pisan, pero no son exactamente el mismo producto.</p>\n<table>\n<thead>\n<tr>\n<th>Dimensión</th>\n<th>Cockpit con Orca y CLIs</th>\n<th>Amp</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Unidad de trabajo</td>\n<td>Sesión, terminal y worktree administrados por el usuario</td>\n<td>Thread con working copy y Orb aislado</td>\n</tr>\n<tr>\n<td>Infraestructura</td>\n<td>Máquina local, WSL, SSH y servidores propios</td>\n<td>Orbs cloud, ejecución local o runners propios</td>\n</tr>\n<tr>\n<td>Selección de modelos</td>\n<td>Explícita y granular por herramienta</td>\n<td>Routing por dificultad, con posibilidad de fijarlo</td>\n</tr>\n<tr>\n<td>Coordinación</td>\n<td>Flexible, visible y artesanal</td>\n<td>Delegación integrada entre subagentes y Threads</td>\n</tr>\n<tr>\n<td>Continuidad</td>\n<td>Depende de procesos y hosts administrados</td>\n<td>El Orb sigue trabajando y se pausa automáticamente</td>\n</tr>\n<tr>\n<td>GitHub</td>\n<td>Credenciales y flujo del entorno local</td>\n<td>GitHub App, tokens breves, branches, PR y CI integrados</td>\n</tr>\n<tr>\n<td>Dependencia de plataforma</td>\n<td>Menor: piezas intercambiables</td>\n<td>Mayor: Orbs, Threads y coordinación viven en Amp</td>\n</tr>\n</tbody>\n</table>\n<p>Orca funciona especialmente bien como <strong>cabina de mando</strong>. Permite observar varias herramientas, elegir deliberadamente qué CLI y qué proveedor ocupa cada rol, intervenir sesiones y conservar control sobre la infraestructura.</p>\n<p>Amp funciona más como una <strong>fábrica administrada</strong>. Entrega entornos remotos descartables, continuidad, aislamiento y un camino directo desde la consigna hasta una PR. Reduce trabajo operativo a cambio de aceptar más decisiones y más infraestructura de la plataforma.</p>\n<p>No hay un ganador universal. Hay dos preferencias distintas: gobernar cada pieza o comprar una unidad de ejecución ya resuelta.</p>\n<h2 id=\"github-como-frontera-de-control\">GitHub como frontera de control</h2>\n<p>La integración con GitHub está pensada para trabajar sin distribuir tokens permanentes dentro de cada Orb. Amp usa una GitHub App y entrega credenciales breves cuando Git o <code>gh</code> necesitan comunicarse. Puede clonar repositorios privados, crear ramas y pull requests, consultar CI y firmar commits; las reglas de protección siguen aplicándose como si actuara el usuario.</p>\n<p>Es una base razonable para equipos, pero la prudencia sigue siendo la misma: empezar con repositorios seleccionados, permisos mínimos y ramas protegidas. Que un agente tenga una máquina aislada no significa que deba recibir acceso a toda la organización.</p>\n<h2 id=\"automatizar-con-memoria\">Automatizar con memoria</h2>\n<p>Las automatizaciones de Amp permiten que un Thread se reactive una vez o de forma recurrente conservando su historia. Puede revisar errores cada hora, observar un proceso largo, verificar CI después de un cambio o recordar el retiro de un feature flag.</p>\n<p>Eso es más expresivo que un cron aislado porque el agente retoma decisiones y evidencia anteriores. También es más riesgoso si la consigna es vaga o los permisos son amplios. Una automatización agéntica necesita:</p>\n<ul>\n<li>una fuente de evidencia definida;</li>\n<li>permisos mínimos;</li>\n<li>una condición explícita de finalización;</li>\n<li>límites sobre qué puede modificar;</li>\n<li>un canal claro para escalar incertidumbre.</li>\n</ul>\n<p>La continuidad no reemplaza al gobierno. Lo vuelve más importante.</p>\n<h2 id=\"el-costo-real-no-es-solo-el-modelo\">El costo real no es sólo el modelo</h2>\n<p>La <a href=\"https://ampcode.com/docs/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">tarifa actual</a> combina planes mensuales y pago por uso; distingue consumo de agentes y herramientas de la asignación de Orbs. Los Orbs se miden por minuto, los tamaños mayores consumen más asignación y la pausa no genera costo.</p>\n<p>Se pueden conectar claves o suscripciones compatibles, pero hay que revisar el routing efectivo. La suscripción de Claude cubre el modo <strong>Claude Code</strong>, no los modos propios de Amp. Con ChatGPT, las llamadas y herramientas no cubiertas siguen consumiendo créditos de Amp; la suscripción tampoco cubre el Orb. <a href=\"https://ampcode.com/docs/the-dial\" target=\"_blank\" rel=\"noopener noreferrer\">Detalle por modo</a>.</p>\n<p>Para evaluar el producto no alcanza con comparar precio por token. Hay que medir:</p>\n<ol>\n<li>tiempo desde la consigna hasta una PR revisable;</li>\n<li>cantidad de correcciones humanas posteriores;</li>\n<li>porcentaje de tareas resueltas en un intento;</li>\n<li>costo de modelo, herramientas y máquina;</li>\n<li>trabajo operativo que deja de hacer una persona;</li>\n<li>facilidad para auditar cómo se llegó al cambio.</li>\n</ol>\n<p>Un agente barato que necesita tres rondas no necesariamente es económico. Un Orb que cuesta centavos puede ahorrar una hora de preparación o, si queda sobredimensionado y mal controlado, sumar gasto sin mejorar el resultado.</p>\n<h2 id=\"una-adopcion-sensata\">Una adopción sensata</h2>\n<p>Amp no debería reemplazar de golpe un entorno multiagente que ya funciona. La prueba útil es acotada:</p>\n<ul>\n<li>un repositorio no crítico;</li>\n<li>acceso de GitHub restringido a ese repositorio;</li>\n<li>una feature mediana con criterios de aceptación y tests;</li>\n<li>un Orb pequeño o mediano;</li>\n<li>comparación contra el mismo tipo de tarea realizado en el cockpit habitual.</li>\n</ul>\n<p>Los primeros casos adecuados son features autónomas que terminan en PR, investigaciones largas que no conviene ejecutar localmente y tareas paralelas entre repositorios. Producción, secretos amplios y automatizaciones con capacidad de mutación deberían llegar después de validar el comportamiento real.</p>\n<h2 id=\"veredicto\">Veredicto</h2>\n<p>Amp no reemplaza la necesidad de pensar cómo trabajan los agentes. La vuelve visible como producto.</p>\n<p>Su aporte más fuerte no es prometer un modelo milagroso, sino reconocer que la calidad del desarrollo agéntico depende tanto del entorno como de la inteligencia: aislamiento, continuidad, herramientas, permisos, coordinación y evidencia.</p>\n<p>Para quien ya construyó un cockpit artesanal, Amp puede sentirse menos como una revolución y más como una industrialización. La pregunta no es si puede escribir código. La pregunta es cuánto control conviene conservar y cuánto trabajo operativo vale la pena delegar a la plataforma.</p>\n<hr>\n<h2 id=\"fuentes-oficiales\">Fuentes oficiales</h2>\n<ul>\n<li><a href=\"https://ampcode.com/docs\" target=\"_blank\" rel=\"noopener noreferrer\">Introducción a Amp</a></li>\n<li><a href=\"https://ampcode.com/docs/the-dial\" target=\"_blank\" rel=\"noopener noreferrer\">The Dial</a></li>\n<li><a href=\"https://ampcode.com/docs/models-and-subagents\" target=\"_blank\" rel=\"noopener noreferrer\">Modes &amp; Models</a></li>\n<li><a href=\"https://ampcode.com/docs/orbs\" target=\"_blank\" rel=\"noopener noreferrer\">Orbs</a></li>\n<li><a href=\"https://ampcode.com/docs/orbs/agent-to-agent\" target=\"_blank\" rel=\"noopener noreferrer\">Agent to Agent</a></li>\n<li><a href=\"https://ampcode.com/docs/github\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub &amp; Git</a></li>\n<li><a href=\"https://ampcode.com/docs/orbs/automations\" target=\"_blank\" rel=\"noopener noreferrer\">Automations</a></li>\n<li><a href=\"https://ampcode.com/docs/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">Pricing</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "El agente no trabaja en el vacío",
          "depth": 2,
          "id": "el-agente-no-trabaja-en-el-vacio"
        },
        {
          "label": "The Dial: elegir esfuerzo antes que marca",
          "depth": 2,
          "id": "the-dial-elegir-esfuerzo-antes-que-marca"
        },
        {
          "label": "Dos formas de delegar",
          "depth": 2,
          "id": "dos-formas-de-delegar"
        },
        {
          "label": "Amp frente a un cockpit como Orca",
          "depth": 2,
          "id": "amp-frente-a-un-cockpit-como-orca"
        },
        {
          "label": "GitHub como frontera de control",
          "depth": 2,
          "id": "github-como-frontera-de-control"
        },
        {
          "label": "Automatizar con memoria",
          "depth": 2,
          "id": "automatizar-con-memoria"
        },
        {
          "label": "El costo real no es sólo el modelo",
          "depth": 2,
          "id": "el-costo-real-no-es-solo-el-modelo"
        },
        {
          "label": "Una adopción sensata",
          "depth": 2,
          "id": "una-adopcion-sensata"
        },
        {
          "label": "Veredicto",
          "depth": 2,
          "id": "veredicto"
        },
        {
          "label": "Fuentes oficiales",
          "depth": 2,
          "id": "fuentes-oficiales"
        }
      ],
      "raw": "---\nslug: amp-fabrica-agentes-cloud\ntitle: Amp y la fábrica de agentes en la nube\ntype: editorial\norder: 13\nsummary: Amp empaqueta agente, máquina, contexto y Git en una sola superficie. No inventa el desarrollo multiagente, pero vuelve producto una práctica que todavía solemos construir a mano.\ntags: [amp, orbs, agentes, cloud, orca, github, multi-modelo, automatizaciones]\nrelated: [orquestacion, caso-orca-cockpit-multiagente, workspaces-y-worktrees, guia-escalado-modelos]\narea: Gobierno de agentes\nglyph: ◌\nhue: rgba(87,217,232,.22)\n---\n\n# Amp y la fábrica de agentes en la nube\n\n> Vigencia editorial: 12 de octubre de 2026. Amp declara una filosofía de frontera y sin compromiso de compatibilidad hacia atrás; modelos, routing, precios y funciones pueden cambiar con rapidez.\n\nAmp no resulta interesante porque haya inventado otro agente capaz de editar archivos. Ese espacio ya está lleno. Lo atractivo es que intenta convertir en producto todo lo que rodea al agente: la máquina donde trabaja, el contexto que conserva, el repositorio que modifica, las pruebas que ejecuta, los agentes que coordina y la continuidad necesaria para terminar aunque la computadora del usuario esté apagada.\n\nEn otras palabras, Amp comercializa una versión ordenada de una fábrica que muchos equipos todavía arman artesanalmente con CLIs, worktrees, sesiones persistentes, servidores y bastante disciplina operativa.\n\n## El agente no trabaja en el vacío\n\nUna conversación puede producir una buena idea, pero el desarrollo real exige un entorno. Hay que clonar código, instalar dependencias, ejecutar servicios, inspeccionar CI, probar la aplicación y devolver cambios revisables.\n\nAmp reúne esas piezas alrededor de sus **Threads** y **Orbs**. Un Thread conserva la conversación y el trabajo; un Orb es una máquina remota aislada, creada para ese hilo, con su propia copia del repositorio y sus herramientas. Puede seguir ejecutándose cuando el usuario cierra la notebook, dormirse cuando queda inactivo y despertar después con archivos, servicios e historial disponibles.\n\nLa novedad no está en ninguna pieza aislada. Está en tratarlas como una sola unidad operativa:\n\n**agente + contexto + máquina + código + evidencia**.\n\nEsa combinación permite pedir algo más exigente que “escribí esta función”. Se le puede pedir que implemente el cambio, levante el sistema, lo pruebe de punta a punta y deje una rama o un pull request acompañado por evidencia.\n\n## The Dial: elegir esfuerzo antes que marca\n\nAmp ofrece cuatro modos de base en The Dial: `low`, `medium`, `high` y `ultra`. La idea es elegir según la dificultad y el costo de equivocarse, no enamorarse del nombre de un modelo.\n\n| Modo | Lectura práctica |\n|---|---|\n| `low` | Cambios chicos, tests y refactors con resultado evidente |\n| `medium` | Desarrollo cotidiano con algo de ambigüedad o varios pasos |\n| `high` | Trabajo delicado que debería llegar cerca de una revisión final |\n| `ultra` | Arquitectura, migraciones y problemas abiertos entre varios sistemas |\n\nDetrás de cada posición, Amp puede combinar modelo principal, nivel de razonamiento, herramientas, instrucciones, subagentes y un **Oracle** que aporta una segunda opinión. El routing automático cambia cuando aparecen mejores modelos, mientras que la intención del modo permanece estable.\n\nLa abstracción es sana: una organización no debería reescribir su política cada vez que cambia el ranking de proveedores. “Usar capacidad alta cuando una omisión sutil sería cara” envejece mejor que “usar siempre el modelo X”.\n\nSin embargo, Amp no obliga a entregar todo el control. Es posible fijar modelos y esfuerzo por separado para el agente principal, el Oracle y los subagentes, además de definir modos personalizados mediante plugins.\n\nEl [Dial](https://ampcode.com/docs/the-dial) se puede personalizar, pero el modo de un Thread queda fijado al enviar su primer mensaje: cambiarlo exige abrir otro hilo. Conviene elegir el esfuerzo antes de empezar.\n\n## Dos formas de delegar\n\nAmp distingue entre subagentes especializados y agentes completos ejecutados en otros Threads.\n\nLos subagentes internos sirven para búsquedas, investigación, lectura de conversaciones previas y consultas difíciles al Oracle. Trabajan con una ventana de contexto separada y devuelven un resumen al agente principal. Mantienen limpio el hilo central, aunque tienen límites claros: no conversan entre sí y no pueden ser orientados a mitad del trabajo.\n\nLa delegación entre agentes completos es más ambiciosa. Un agente puede iniciar otro Thread en un Orb, transferirle instrucciones o archivos y continuar trabajando mientras espera el resultado. Cada hilo obtiene su propia conversación, copia de trabajo y máquina. Eso habilita fan-out real: varias investigaciones, navegadores, resoluciones o proyectos avanzando en paralelo.\n\nEl aislamiento es deliberado. Los archivos sin commit y los cambios no aparecen mágicamente en los otros entornos; deben transferirse o integrarse de forma explícita. Esa fricción evita bastante caos, pero no elimina la necesidad de un buen coordinador.\n\n## Amp frente a un cockpit como Orca\n\nAmp y Orca se pisan, pero no son exactamente el mismo producto.\n\n| Dimensión | Cockpit con Orca y CLIs | Amp |\n|---|---|---|\n| Unidad de trabajo | Sesión, terminal y worktree administrados por el usuario | Thread con working copy y Orb aislado |\n| Infraestructura | Máquina local, WSL, SSH y servidores propios | Orbs cloud, ejecución local o runners propios |\n| Selección de modelos | Explícita y granular por herramienta | Routing por dificultad, con posibilidad de fijarlo |\n| Coordinación | Flexible, visible y artesanal | Delegación integrada entre subagentes y Threads |\n| Continuidad | Depende de procesos y hosts administrados | El Orb sigue trabajando y se pausa automáticamente |\n| GitHub | Credenciales y flujo del entorno local | GitHub App, tokens breves, branches, PR y CI integrados |\n| Dependencia de plataforma | Menor: piezas intercambiables | Mayor: Orbs, Threads y coordinación viven en Amp |\n\nOrca funciona especialmente bien como **cabina de mando**. Permite observar varias herramientas, elegir deliberadamente qué CLI y qué proveedor ocupa cada rol, intervenir sesiones y conservar control sobre la infraestructura.\n\nAmp funciona más como una **fábrica administrada**. Entrega entornos remotos descartables, continuidad, aislamiento y un camino directo desde la consigna hasta una PR. Reduce trabajo operativo a cambio de aceptar más decisiones y más infraestructura de la plataforma.\n\nNo hay un ganador universal. Hay dos preferencias distintas: gobernar cada pieza o comprar una unidad de ejecución ya resuelta.\n\n## GitHub como frontera de control\n\nLa integración con GitHub está pensada para trabajar sin distribuir tokens permanentes dentro de cada Orb. Amp usa una GitHub App y entrega credenciales breves cuando Git o `gh` necesitan comunicarse. Puede clonar repositorios privados, crear ramas y pull requests, consultar CI y firmar commits; las reglas de protección siguen aplicándose como si actuara el usuario.\n\nEs una base razonable para equipos, pero la prudencia sigue siendo la misma: empezar con repositorios seleccionados, permisos mínimos y ramas protegidas. Que un agente tenga una máquina aislada no significa que deba recibir acceso a toda la organización.\n\n## Automatizar con memoria\n\nLas automatizaciones de Amp permiten que un Thread se reactive una vez o de forma recurrente conservando su historia. Puede revisar errores cada hora, observar un proceso largo, verificar CI después de un cambio o recordar el retiro de un feature flag.\n\nEso es más expresivo que un cron aislado porque el agente retoma decisiones y evidencia anteriores. También es más riesgoso si la consigna es vaga o los permisos son amplios. Una automatización agéntica necesita:\n\n- una fuente de evidencia definida;\n- permisos mínimos;\n- una condición explícita de finalización;\n- límites sobre qué puede modificar;\n- un canal claro para escalar incertidumbre.\n\nLa continuidad no reemplaza al gobierno. Lo vuelve más importante.\n\n## El costo real no es sólo el modelo\n\nLa [tarifa actual](https://ampcode.com/docs/pricing) combina planes mensuales y pago por uso; distingue consumo de agentes y herramientas de la asignación de Orbs. Los Orbs se miden por minuto, los tamaños mayores consumen más asignación y la pausa no genera costo.\n\nSe pueden conectar claves o suscripciones compatibles, pero hay que revisar el routing efectivo. La suscripción de Claude cubre el modo **Claude Code**, no los modos propios de Amp. Con ChatGPT, las llamadas y herramientas no cubiertas siguen consumiendo créditos de Amp; la suscripción tampoco cubre el Orb. [Detalle por modo](https://ampcode.com/docs/the-dial).\n\nPara evaluar el producto no alcanza con comparar precio por token. Hay que medir:\n\n1. tiempo desde la consigna hasta una PR revisable;\n2. cantidad de correcciones humanas posteriores;\n3. porcentaje de tareas resueltas en un intento;\n4. costo de modelo, herramientas y máquina;\n5. trabajo operativo que deja de hacer una persona;\n6. facilidad para auditar cómo se llegó al cambio.\n\nUn agente barato que necesita tres rondas no necesariamente es económico. Un Orb que cuesta centavos puede ahorrar una hora de preparación o, si queda sobredimensionado y mal controlado, sumar gasto sin mejorar el resultado.\n\n## Una adopción sensata\n\nAmp no debería reemplazar de golpe un entorno multiagente que ya funciona. La prueba útil es acotada:\n\n- un repositorio no crítico;\n- acceso de GitHub restringido a ese repositorio;\n- una feature mediana con criterios de aceptación y tests;\n- un Orb pequeño o mediano;\n- comparación contra el mismo tipo de tarea realizado en el cockpit habitual.\n\nLos primeros casos adecuados son features autónomas que terminan en PR, investigaciones largas que no conviene ejecutar localmente y tareas paralelas entre repositorios. Producción, secretos amplios y automatizaciones con capacidad de mutación deberían llegar después de validar el comportamiento real.\n\n## Veredicto\n\nAmp no reemplaza la necesidad de pensar cómo trabajan los agentes. La vuelve visible como producto.\n\nSu aporte más fuerte no es prometer un modelo milagroso, sino reconocer que la calidad del desarrollo agéntico depende tanto del entorno como de la inteligencia: aislamiento, continuidad, herramientas, permisos, coordinación y evidencia.\n\nPara quien ya construyó un cockpit artesanal, Amp puede sentirse menos como una revolución y más como una industrialización. La pregunta no es si puede escribir código. La pregunta es cuánto control conviene conservar y cuánto trabajo operativo vale la pena delegar a la plataforma.\n\n---\n\n## Fuentes oficiales\n\n- [Introducción a Amp](https://ampcode.com/docs)\n- [The Dial](https://ampcode.com/docs/the-dial)\n- [Modes & Models](https://ampcode.com/docs/models-and-subagents)\n- [Orbs](https://ampcode.com/docs/orbs)\n- [Agent to Agent](https://ampcode.com/docs/orbs/agent-to-agent)\n- [GitHub & Git](https://ampcode.com/docs/github)\n- [Automations](https://ampcode.com/docs/orbs/automations)\n- [Pricing](https://ampcode.com/docs/pricing)\n"
    },
    {
      "slug": "como-leer-rankings-openrouter",
      "title": "Cómo leer los rankings de OpenRouter",
      "summary": "Una guía para interpretar uso, gasto, velocidad y benchmarks de OpenRouter, seguir sus trece secciones de texto y convertir las señales en pruebas comparables.",
      "type": "guide",
      "order": 13,
      "tags": [
        "openrouter",
        "modelos",
        "rankings",
        "benchmarks",
        "evaluacion",
        "costos",
        "harness"
      ],
      "related": [
        "guia-escalado-modelos",
        "comparar-harness-cli-codex-claude-opencode-cline",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "Gobierno de agentes",
      "glyph": "△",
      "hue": "rgba(168,106,255,.24)",
      "file": "como-leer-rankings-openrouter.md",
      "html": "<p><em>Guía de seguimiento para elegir qué modelos probar</em></p>\n<p>Recorrido de interfaz del 3 de octubre de 2026 · Revisión documental del 12 de octubre de 2026. En esta última consulta, la portada mostraba datos de uso hasta el 11 de octubre.</p>\n<p>Un ranking resulta útil cuando ayuda a tomar una decisión concreta: qué modelo conviene probar, para qué trabajo y con qué costo de equivocarse. El problema aparece cuando una posición se convierte en una conclusión que la medición nunca prometió.</p>\n<p>OpenRouter reúne señales de uso real, gasto, velocidad y evaluaciones de capacidad. La propuesta de esta guía es recorrer sus secciones, identificar qué cuenta cada una y convertirlas en un seguimiento repetible. <strong>Primero elegimos qué observar; después verificamos si esa señal mejora nuestro trabajo.</strong></p>\n<p>El recorrido principal cubre las trece subsecciones de Text. También incluye las otras pestañas de Rankings y sus unidades. Los nombres y controles del recorrido corresponden al 3 de octubre; los ejemplos numéricos son didácticos y no presentan ganadores actuales. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a></p>\n<h2 id=\"la-pregunta-que-conviene-hacer-antes-del-primer-puesto\">La pregunta que conviene hacer antes del primer puesto</h2>\n<p>Antes de comparar dos modelos, anotá cinco cosas: unidad, población, ventana temporal, agregación y condiciones. Es una ficha mínima que evita conclusiones enormes a partir de números pequeños.</p>\n<ul>\n<li>\n<p><strong>Unidad:</strong> tokens, solicitudes, dólares, segundos o puntos de un benchmark. Un cambio de unidad cambia la pregunta.</p>\n</li>\n<li>\n<p><strong>Población:</strong> todo el tráfico elegible, una muestra clasificada, un idioma, una aplicación o una prueba concreta.</p>\n</li>\n<li>\n<p><strong>Ventana:</strong> un día completo, siete días, treinta días o la fecha de un experimento. La fecha de consulta no reemplaza a la fecha de los datos.</p>\n</li>\n<li>\n<p><strong>Agregación:</strong> suma, cuota, variación, mediana o índice compuesto. Un promedio y una mediana pueden contar historias diferentes.</p>\n</li>\n<li>\n<p><strong>Condiciones:</strong> versión, variante, proveedor, esfuerzo de razonamiento, caché, herramientas y harness. El mismo nombre puede cubrir configuraciones distintas.</p>\n</li>\n</ul>\n<p>OpenRouter observa el tráfico que pasa por su plataforma y entra en cada dataset público. Esa población no permite inferir por sí sola la cuota mundial de un laboratorio, su número de clientes o todo su negocio. Los datos privados y las exclusiones documentadas también importan. <a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">[2]</a></p>\n<h2 id=\"el-recorrido-por-las-trece-secciones\">El recorrido por las trece secciones</h2>\n<h3 id=\"1-top-models\">1 Top Models</h3>\n<p>Es el panorama histórico del volumen semanal de tokens. Permite ver qué modelos sostienen actividad, cuáles aparecen de golpe y cómo cambia el tamaño total del tráfico. La visualización destaca nueve modelos y agrupa el resto en Others. La unidad suma entrada y salida; cada variante se trata por separado. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a></p>\n<p><strong>Cómo seguirlo:</strong> compará varias semanas, registrá la escala y mirá el total además de cada color. La escala lineal ayuda a dimensionar diferencias absolutas; la logarítmica facilita ver órdenes de magnitud. Cambiar de escala no modifica los datos, pero sí su apariencia.</p>\n<p><strong>Qué evitar:</strong> interpretar más tokens como más personas o más productividad. Un agente que relee un repositorio, encadena turnos o genera respuestas largas puede mover mucho volumen. Los tokenizadores tampoco segmentan el texto de manera idéntica entre proveedores. <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<h3 id=\"2-leaderboard\">2 Leaderboard</h3>\n<p>La tabla permite ordenar ese uso y elegir modelos abiertos, cerrados o todos. Today, This Week y This Month abarcan respectivamente 1, 7 y 30 días completos, con cierre en UTC. New &amp; Trending compara los últimos siete días con los siete anteriores; exige un millón de tokens en la ventana actual y puede anteponer hasta cinco modelos nuevos. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a></p>\n<p>El crecimiento compara volúmenes: pasar de 10 a 15 millones de tokens representa un aumento del 50%. No significa subir cincuenta puntos de cuota. Y new señala falta de una base previa comparable, no una tasa de crecimiento infinita.</p>\n<p><strong>Cómo seguirlo:</strong> conservá una vista semanal para la tendencia y una mensual para la persistencia. Separá lanzamientos, variantes gratuitas y versiones estables. Un filtro de apertura cambia el conjunto comparado; no certifica licencias, permisos de uso ni calidad del modelo.</p>\n<h3 id=\"3-top-models-by-task\">3 Top models by task</h3>\n<p>Esta sección acerca el ranking al trabajo concreto. Permite alternar <strong>Share of spend</strong> y <strong>Share of tokens</strong>. Las tareas se infieren sobre una muestra de prompts y la interfaz indica que corrige las magnitudes por muestreo. La documentación del Auto Router vincula la vista de gasto con una ventana móvil de siete días. <a href=\"https://openrouter.ai/docs/guides/routing/routers/auto-router\" target=\"_blank\" rel=\"noopener noreferrer\">[3]</a> <a href=\"https://openrouter.ai/blog/announcements/introducing-the-new-auto-router/\" target=\"_blank\" rel=\"noopener noreferrer\">[4]</a></p>\n<p>El mapa de rectángulos o treemap contiene dos niveles que conviene leer por separado. El área de una tarea indica cuánto representa dentro del total de la métrica elegida. Al abrirla, la lista muestra la participación de cada modelo dentro de esa tarea. El tamaño de Classification y el porcentaje de un modelo en Classification tienen denominadores diferentes.</p>\n<p><strong>Ejemplo:</strong> si una tarea concentra el 10% del gasto y un modelo reúne el 20% del gasto de esa tarea, su porción del total sería el 2%, siempre que ambos porcentajes compartan universo y ventana. Leer el 20% como cuota de todo OpenRouter multiplicaría por diez la interpretación.</p>\n<p>Los colores distinguen cuatro familias. En la revisión había 29 etiquetas; conservar sus nombres facilita encontrarlas aunque cambie su posición en el gráfico:</p>\n<ul>\n<li>\n<p><strong>General:</strong> Classification, Content Writing, Roleplay &amp; Fiction, Q&amp;A &amp; Knowledge, Conversation, Research &amp; Reports, Customer Support, Summarization, Security Audit, Math, Finance &amp; Trading, Translation y DevOps</p>\n</li>\n<li>\n<p><strong>Agent:</strong> Workflow Execution, Multi-step Planning, Tool Dispatch, Web Search y Memory Extraction</p>\n</li>\n<li>\n<p><strong>Code:</strong> Code Generation, Debugging, File I/O, Code Review, Shell Execution, Frontend &amp; UI, Repo Scanning, DevOps &amp; Config y SQL &amp; Database</p>\n</li>\n<li>\n<p><strong>Data:</strong> Data Extraction y Data Transformation</p>\n</li>\n</ul>\n<p><strong>Cómo seguirlo:</strong> elegí la tarea más cercana a tu trabajo y alterná gasto y tokens. Si un modelo gana mucho más espacio en gasto, investigá precio, longitud, razonamiento y mezcla de trabajo. Si gana en tokens, investigá volumen y variantes gratuitas. Ninguna de esas diferencias identifica por sí sola qué respuestas fueron correctas.</p>\n<p>La clasificación es una estimación de la intención del prompt. Una sesión de programación puede pasar por planificación, lectura de archivos, búsqueda, generación y revisión. No conviene tratar cada casillero como una industria separada ni sumar sus posiciones para inventar una nota general.</p>\n<p><strong>Límite metodológico:</strong> la interfaz explica que los deltas comparan con la ventana anterior, pero no desarrolla allí todos sus detalles. Antes de publicar una variación como puntos porcentuales, verificá la definición concreta. Tampoco se publica en estas vistas una ficha completa de tamaño muestral, precisión del clasificador, intervalos de confianza y tratamiento contable del gasto.</p>\n<p>Hay además una diferencia relevante para quien quiera automatizar el seguimiento: la API de clasificaciones documenta cuotas de solicitudes y tokens, excluye other del denominador y ordena modelos por solicitudes. Esos campos no sustituyen automáticamente la cuota de gasto del treemap. Un nombre parecido no garantiza el mismo cálculo. <a href=\"https://openrouter.ai/docs/api/api-reference/classifications/task-classification-market-share\" target=\"_blank\" rel=\"noopener noreferrer\">[5]</a></p>\n<h3 id=\"4-cost-per-session\">4 Cost per session</h3>\n<p>Acá la pregunta pasa al costo observado de una sesión de agente. La unidad es USD por sesión y el resumen es la mediana, separado por harness. La interfaz revisada mostraba Hermes Agent, Claude Code, Kilo Code y Codex, con tramos de 1, 2 a 9, 10 a 49 y 50 o más turnos.</p>\n<p>El tooltip define una ventana de 30 días, uso pago y escala logarítmica. Una sesión se atribuye a un modelo cuando ese modelo procesó al menos el 80% de sus tokens. La referencia del dataset confirma que las aplicaciones no se mezclan, que se publican medianas y que el snapshot se actualiza semanalmente. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a> <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/cost-per-session-by-harness-and-model\" target=\"_blank\" rel=\"noopener noreferrer\">[6]</a></p>\n<p><strong>Cómo seguirlo:</strong> fijá primero el harness y después un tramo comparable. La mediana describe el centro de la distribución: la mitad de las sesiones queda por debajo y la otra mitad por encima. No muestra cuánto cuesta la cola de sesiones difíciles ni alcanza para presupuestar un mes completo.</p>\n<p>Una sesión barata puede haber sido simple, corta, abortada o fallida. Una larga puede haber resuelto un trabajo valioso. Para decidir en tu entorno, agregá éxito, reintentos y tiempo de revisión. La regla del 80% también limita la lectura de flujos que reparten mucho trabajo entre varios modelos. La delimitación exacta de sesión y los umbrales de publicación no quedan especificados en la referencia consultada.</p>\n<h3 id=\"5-market-share\">5 Market Share</h3>\n<p>Agrupa por autor del modelo y cuenta solicitudes de texto. Absolute muestra magnitudes; Percentage, la parte de cada autor sobre el total del período. El autor del modelo no necesariamente coincide con la empresa que sirve el endpoint. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a></p>\n<p><strong>Cómo seguirlo:</strong> mirá ambas vistas. Si un autor pasa de 100 a 120 solicitudes mientras el total pasa de 200 a 300, su volumen crece un 20% y su cuota cae de 50% a 40%. Las dos observaciones son compatibles.</p>\n<p>Esta sección permite detectar cambios en la composición del tráfico. Para explicar la causa necesitás más evidencia: lanzamientos, disponibilidad, precios, integraciones o decisiones de routing. No alcanza con que dos curvas se muevan a la vez. Conservá también la fecha del punto observado; el texto resumido y el gráfico pueden referirse a cortes distintos.</p>\n<h3 id=\"6-benchmarks\">6 Benchmarks</h3>\n<p>Esta es la sección para comparar resultados de evaluaciones. El selector revisado reunía trece métricas de tres familias: evaluaciones ejecutadas por OpenRouter, índices de Artificial Analysis y ratings de Design Arena. Conviene conservar esa procedencia junto al puntaje. <a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">[2]</a></p>\n<ul>\n<li>\n<p><strong>GPQA Diamond, τ²-Bench Airline y VGI-Bench:</strong> el panel presenta accuracy. Para GPQA Diamond y VGI-Bench, el tooltip precisa mediana de accuracy entre proveedores, medida por OpenRouter. Cada prueba tiene su propio protocolo; conviene abrir su ficha antes de interpretar el porcentaje.</p>\n</li>\n<li>\n<p><strong>Intelligence Index, Coding Index y Agentic Index:</strong> son índices compuestos de Artificial Analysis. Sirven para una preselección general, de código o de agentes. Un valor de índice no debe leerse automáticamente como porcentaje de tareas resueltas.</p>\n</li>\n<li>\n<p><strong>Code Categories, UI Component, Game Development, Data Visualization, 3D, Image y SVG ELO:</strong> son ratings de Design Arena para comparaciones cara a cara. Su escala es relativa al sistema de evaluación y a sus participantes; 1.500 puntos Elo no equivalen a un 75% de calidad.</p>\n</li>\n</ul>\n<p>En una evaluación de exactitud, el denominador son los casos evaluados bajo un protocolo. En un índice compuesto intervienen varias pruebas y sus reglas de combinación. En Elo intervienen comparaciones y resultados relativos. Estas metodologías responden preguntas diferentes: no conviene promediarlas como si compartieran una escala.</p>\n<p><strong>GPQA Diamond</strong> usa preguntas científicas de opción múltiple. La ficha actual presenta variabilidad entre ejecuciones y costo, y publica snapshots descargables. El protocolo de 90 días descrito en la revisión anterior no pudo reconfirmarse en la ficha accesible el 12 de octubre: no lo extrapoles como regla vigente. El widget y la tabla detallada pueden usar representaciones distintas; citá la vista y el snapshot de los que sale tu cifra. <a href=\"https://openrouter.ai/benchmarks/gpqa-diamond/\" target=\"_blank\" rel=\"noopener noreferrer\">[23]</a></p>\n<p>La siguiente descripción de VGI-Bench se conserva como registro del 3 de octubre: su ficha no pudo reconfirmarse el 12 de octubre. No tomes esos umbrales como un contrato vigente.</p>\n<p><strong>VGI-Bench</strong> significa Video General Intelligence Bench y evalúa comprensión de videos largos. La implementación de OpenRouter entrega el video y una pregunta de opción múltiple en un turno, con temperatura 0, y corrige la letra final. Usa un conjunto público de 439 preguntas, exige al menos 395 respuestas para incluir una ejecución y considera los últimos 90 días. Sirve para investigar comprensión temporal y audiovisual; su accuracy no es una nota de generación de video. <a href=\"https://openrouter.ai/benchmarks/vgi-bench\" target=\"_blank\" rel=\"noopener noreferrer\">[21]</a></p>\n<p><strong>τ²-Bench Airline</strong> evalúa atención al cliente con un usuario simulado y herramientas de aerolínea. El éxito exige el estado final esperado de la base de datos y los mensajes requeridos, sin crédito parcial. La ficha fija el simulador, limita la ejecución a 200 pasos y agrega pruebas de 90 días ponderadas por tareas, con mínimo de 45 por pareja modelo y proveedor. Su resultado principal usa routing predeterminado si existe; en otro caso, la mediana entre proveedores. Esa regla de la ficha detallada no debe generalizarse a todo el widget. <a href=\"https://openrouter.ai/benchmarks/tau2-bench-airline/\" target=\"_blank\" rel=\"noopener noreferrer\">[22]</a></p>\n<p>También cambia el eje económico. El gráfico ofrece Weighted Avg Input Price, Input List Price y Avg Price Per 100 Requests. Las dos primeras vistas se expresan por millón de tokens de entrada; la tercera usa solicitudes. El precio efectivo de las fichas incorpora el uso observado, donde caché y descuentos pueden separarlo del precio publicado. <a href=\"https://openrouter.ai/nvidia/nemotron-3-ultra-550b-a55b/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">[9]</a></p>\n<p><strong>Cómo seguirlo:</strong> fijá el benchmark y el eje de precio antes de comparar. El precio de entrada deja fuera la salida y otros componentes de tu factura; el promedio por solicitudes depende del tamaño de esas solicitudes. Ninguno equivale sin más a costo por tarea resuelta.</p>\n<p>Show Pareto ayuda a encontrar opciones que no quedan superadas simultáneamente en las dos dimensiones elegidas. Si dos candidatos tienen la misma nota y uno cuesta menos, el más caro queda dominado en ese gráfico. Esa conclusión puede cambiar al agregar latencia, confiabilidad, permisos o desempeño en español. La frontera visible tampoco representa modelos que el gráfico no incluyó.</p>\n<p>El enlace View all benchmarks lleva a un catálogo más amplio con familias Agents, Media, Artifacts, Reasoning y Search. Sus experimentos pueden evaluar también herramientas, motores de búsqueda y presupuestos. Revisá la ejecución concreta: la última fecha general del catálogo no actualiza retrospectivamente cada tarjeta. <a href=\"https://openrouter.ai/benchmarks\" target=\"_blank\" rel=\"noopener noreferrer\">[8]</a></p>\n<h3 id=\"7-fastest-models\">7 Fastest models</h3>\n<p>Tiene dos modos: Highest throughput y Lowest latency. El tooltip de elegibilidad admite modelos con al menos 100.000 solicitudes en las últimas 24 horas. Ese umbral describe quién puede aparecer; por sí solo no especifica cómo se agregaron todos los valores de rendimiento.</p>\n<p>Throughput expresa la velocidad de generación en tokens por segundo. La latencia requiere leer su definición en la vista correspondiente: esperar el primer token y recibir la respuesta completa son experiencias distintas. Las fichas de rendimiento de OpenRouter distinguen TTFT y medidas de latencia; no conviene asumir que todos los paneles usan el mismo percentil o ventana. <a href=\"https://openrouter.ai/docs/guides/best-practices/latency-and-performance\" target=\"_blank\" rel=\"noopener noreferrer\">[10]</a> <a href=\"https://openrouter.ai/amazon/nova-2-lite-v1/performance\" target=\"_blank\" rel=\"noopener noreferrer\">[11]</a></p>\n<p><strong>Cómo seguirlo:</strong> compará el mismo endpoint, contexto y configuración. Para una respuesta larga importa la velocidad sostenida; para una interacción breve puede dominar la espera inicial. En un agente, sumá además herramientas, turnos y reintentos. Un modelo rápido escribiendo puede tardar más en terminar el trabajo.</p>\n<p>No atribuyas automáticamente el mejor rendimiento de un proveedor a todos los que sirven ese modelo. Si la vista no declara el percentil, la ventana o la ponderación entre proveedores, conservá esa limitación en la comparación.</p>\n<h3 id=\"8-languages\">8 Languages</h3>\n<p>Permite segmentar por idioma natural y alternar magnitud absoluta o porcentaje. Los datos por idioma proceden de muestras extrapoladas; la referencia pública los trata como estimaciones semanales. La cuota se interpreta dentro del idioma seleccionado, no sobre todos los idiomas. <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<p><strong>Cómo seguirlo:</strong> para un producto en español, mirá español aunque el panorama general esté dominado por inglés. Después probá tareas reales: comprensión de consignas, registro, regionalismos, extracción y fidelidad de las respuestas. El tráfico en un idioma no evalúa por sí mismo la calidad en ese idioma.</p>\n<p>Una conversación puede mezclar idiomas, código y citas. Sin una definición publicada del clasificador y su error, cambios pequeños merecen cautela. La extrapolación da una estimación de volumen; no elimina el sesgo de selección ni garantiza representatividad de todo uso del español.</p>\n<p>Para automatizar: los filtros <code>category</code> y <code>language_type</code> usan estimaciones semanales, rechazan <code>period=day</code> y no se combinan con filtros exactos de modalidad/contexto ni entre sí. La última semana puede superar <code>end_date</code>; el agrupamiento mensual asigna cada semana al mes en que comienza. Un corte mensual no es necesariamente exacto en sus bordes. <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<h3 id=\"9-programming\">9 Programming</h3>\n<p>Aplica una lectura similar a lenguajes de programación, con Python como selección inicial en la revisión. Muestra uso por tokens en una muestra clasificada. Las vistas absolutas y porcentuales conservan la unidad del segmento, que no es una tasa de resolución de problemas. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a> <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<p><strong>Cómo seguirlo:</strong> compará el lenguaje de tu repositorio y cruzalo con Coding Index o un benchmark de código pertinente. Eso arma una lista de candidatos. La prueba propia debe incluir comprensión del proyecto, un cambio con tests, un bug y una revisión de diff.</p>\n<p>Que un modelo aparezca mucho en Python puede reflejar la integración de una aplicación o el volumen de un usuario intensivo. Tampoco identifica framework, dificultad, versión ni resultado final. Un cambio de participación justifica investigar; para reemplazar el modelo hace falta verificar una mejora.</p>\n<h3 id=\"10-context-length\">10 Context Length</h3>\n<p>Cuenta solicitudes por la longitud observada de prompt y completion. El selector ofrece menos de 1K, 1K a 10K, 10K a 100K, 100K a 1M y 1M a 10M tokens. La unidad del gráfico es solicitudes, con vista absoluta o porcentual. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a></p>\n<p><strong>Cómo seguirlo:</strong> elegí el tramo de tus cargas de trabajo. Ver uso con entradas y salidas extensas puede indicar que vale la pena probar un modelo para documentos largos o repositorios grandes. La ventana máxima anunciada requiere una consulta separada a la ficha del modelo.</p>\n<p>La capacidad nominal, la longitud realmente utilizada y la calidad al recuperar información son tres mediciones diferentes. Para validar contexto largo, usá datos relevantes ubicados en distintas partes del material y verificá relaciones entre ellos. Caber en el límite no demuestra comprensión.</p>\n<h3 id=\"11-tool-calls\">11 Tool Calls</h3>\n<p>Presenta la distribución de actividad de herramientas entre modelos. El filtro público tool_calling identifica solicitudes donde se registró al menos una llamada; eso no permite equiparar automáticamente solicitudes con cantidad de llamadas individuales. Al exportar datos, conservá el campo contado por esa vista. <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<p><strong>Cómo seguirlo:</strong> usalo para identificar modelos presentes en flujos con herramientas. Después medí selección de herramienta, argumentos válidos, interpretación del resultado, recuperación de errores y respeto de permisos.</p>\n<p>Más actividad puede acompañar un agente útil o un loop improductivo. También puede cambiar por cómo el harness divide una operación. La cuota del gráfico no revela qué porcentaje de llamadas tuvo éxito ni qué porcentaje de todo el tráfico de ese modelo usó herramientas.</p>\n<h3 id=\"12-images\">12 Images</h3>\n<p>Dentro de Text, Images muestra imágenes procesadas por modelos y permite alternar volumen o participación. Es importante distinguir este bloque de la pestaña superior Image, orientada a generación de imágenes. El dataset documenta por separado entrada image y salida image_output. <a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">[1]</a> <a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">[7]</a></p>\n<p><strong>Cómo seguirlo:</strong> para entender capturas, facturas o gráficos, mirá el uso multimodal y armá pruebas de lectura concretas. Para generar ilustraciones, elegí la pestaña de generación y sus evaluaciones correspondientes.</p>\n<p>Una solicitud puede contener más de una imagen. Cantidad de imágenes, solicitudes con imágenes y tokens de imagen no son intercambiables. Y procesar muchas imágenes no demuestra exactitud en OCR, conteo, interpretación espacial o seguimiento visual de instrucciones.</p>\n<h3 id=\"13-top-apps\">13 Top Apps</h3>\n<p>Ordena aplicaciones y agentes que participan en la atribución pública de uso. El volumen está expresado en tokens y el selector permite cambiar el período. Las apps ocultas o privadas quedan fuera; el dataset puede reunir aliases de una misma aplicación. <a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">[2]</a></p>\n<p><strong>Cómo seguirlo:</strong> cruzalo con los movimientos de modelos. Una integración grande puede alterar la demanda sin que haya cambiado el modelo. La app añade instrucciones, herramientas, memoria y routing, por lo que conviene evaluarla como sistema.</p>\n<p>El ranking no cuenta instalaciones, usuarios activos ni toda la actividad de una aplicación fuera de OpenRouter. Tampoco todos los controles llamados trending comparten fórmula: la API de apps describe crecimiento absoluto excedente frente a tres períodos previos, mientras el ranking de modelos compara crecimiento porcentual entre dos ventanas. <a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">[2]</a></p>\n<h2 id=\"las-otras-pestanas-tambien-cambian-la-unidad\">Las otras pestañas también cambian la unidad</h2>\n<p>La barra superior permite salir de Text. En Image, Video, Speech, Embeddings, Rerank y Transcription, las tablas se ordenan por solicitudes y el gráfico superior puede ofrecer otra unidad. Batch parte de subsolicitudes y también permite ordenar por tokens. Verificá cuál de los dos componentes cambia con cada selector. <a href=\"https://openrouter.ai/rankings/image\" target=\"_blank\" rel=\"noopener noreferrer\">[13]</a> <a href=\"https://openrouter.ai/rankings/video\" target=\"_blank\" rel=\"noopener noreferrer\">[14]</a> <a href=\"https://openrouter.ai/rankings/speech\" target=\"_blank\" rel=\"noopener noreferrer\">[15]</a> <a href=\"https://openrouter.ai/rankings/embeddings\" target=\"_blank\" rel=\"noopener noreferrer\">[16]</a> <a href=\"https://openrouter.ai/rankings/rerank\" target=\"_blank\" rel=\"noopener noreferrer\">[17]</a> <a href=\"https://openrouter.ai/rankings/transcription\" target=\"_blank\" rel=\"noopener noreferrer\">[18]</a> <a href=\"https://openrouter.ai/rankings/batch\" target=\"_blank\" rel=\"noopener noreferrer\">[19]</a></p>\n<ul>\n<li>\n<p><strong>Image:</strong> el gráfico alterna solicitudes e imágenes. Una solicitud que devuelve varias imágenes cuenta una vez en la tabla por solicitudes.</p>\n</li>\n<li>\n<p><strong>Video:</strong> solicitudes u horas en el gráfico. Un número de solicitudes no informa duración total, resolución ni costo de los clips.</p>\n</li>\n<li>\n<p><strong>Speech:</strong> solicitudes en la vista revisada. Para una prueba propia importan también duración del audio, inteligibilidad, pronunciación y seguimiento del estilo.</p>\n</li>\n<li>\n<p><strong>Embeddings:</strong> solicitudes o tokens en el gráfico. Evaluá además la recuperación con tu corpus; más volumen no demuestra mejores vecinos semánticos.</p>\n</li>\n<li>\n<p><strong>Rerank:</strong> solicitudes o documentos. Un pedido puede reordenar muchos documentos, así que ambos volúmenes responden preguntas distintas.</p>\n</li>\n<li>\n<p><strong>Transcription:</strong> el gráfico alterna solicitudes y caracteres; la tabla conserva solicitudes. Evalúa el uso de transcripción de voz a texto. Para elegir, medí errores sobre audios representativos, acentos y condiciones acústicas.</p>\n</li>\n<li>\n<p><strong>Batch:</strong> el selector Subrequests o Tokens modifica tanto el gráfico como la tabla. Ofrece filtro de texto, embeddings o todas las modalidades. Las subsolicitudes cuentan el trabajo dentro de los lotes, no el número de lotes. Agregá tiempo de finalización, fallos y costo al comparar alternativas.</p>\n</li>\n</ul>\n<p>Las primeras seis pestañas incluyen Top Models, Leaderboard y Market Share. Esta última conserva solicitudes por autor. Batch incluye las dos primeras. No todas las modalidades replican las trece secciones de Text.</p>\n<p>En las tablas se mantienen controles de período como Today, This Week, This Month y New &amp; Trending. La disponibilidad de un control no basta para atribuirle todos los umbrales y reglas del ranking de texto; verificá la nota metodológica de esa modalidad antes de reutilizar su cálculo.</p>\n<h2 id=\"cinco-errores-que-cambian-una-decision\">Cinco errores que cambian una decisión</h2>\n<ul>\n<li>\n<p><strong>Confundir participación y crecimiento.</strong> Pasar de 10% a 15% es ganar 5 puntos porcentuales y crecer 50% respecto de la cuota inicial. Indicá cuál calculaste.</p>\n</li>\n<li>\n<p><strong>Leer una cuota sin su total.</strong> Un segmento puede ganar participación mientras cae su volumen. Guardá ambos cuando estén disponibles.</p>\n</li>\n<li>\n<p><strong>Comparar cortes distintos.</strong> Un día parcial, un cierre UTC y una semana de clasificación no describen exactamente el mismo período.</p>\n</li>\n<li>\n<p><strong>Tratar ausencia como cero.</strong> Un modelo fuera del top visible, sin datos suficientes o sin puntaje publicado puede ser simplemente no observable en esa vista.</p>\n</li>\n<li>\n<p><strong>Explicar correlaciones como causas.</strong> Un lanzamiento, una oferta gratuita o un cambio de routing son hipótesis hasta contar con evidencia adicional.</p>\n</li>\n</ul>\n<p>El límite más importante atraviesa toda la guía: <strong>el uso observado ayuda a elegir candidatos; la aptitud para nuestro trabajo se comprueba con resultados.</strong> OpenRouter también recomienda contrastar benchmarks generales con prompts reales y costo por tarea completada. <a href=\"https://openrouter.ai/blog/tutorials/choose-best-ai-model/\" target=\"_blank\" rel=\"noopener noreferrer\">[12]</a></p>\n<h2 id=\"una-rutina-de-seguimiento-que-termina-en-una-prueba\">Una rutina de seguimiento que termina en una prueba</h2>\n<p>No hace falta mirar todos los paneles cada día. Conviene mantener una pregunta estable y usar las secciones que aportan evidencia para responderla.</p>\n<ol>\n<li>\n<p><strong>Definir el trabajo.</strong> Por ejemplo, revisar cambios de un backend en Python con tests disponibles y sin acceso a producción. Acordar qué cuenta como éxito antes de ver las respuestas.</p>\n</li>\n<li>\n<p><strong>Elegir el segmento.</strong> Abrir Code Review, Programming en Python y el tramo de contexto habitual. Usar el ranking general como contexto.</p>\n</li>\n<li>\n<p><strong>Guardar la observación.</strong> Registrar fecha de consulta, fecha de datos, unidad, filtro, período, variante exacta y fuente. Si se usa la API, conservar también los metadatos.</p>\n</li>\n<li>\n<p><strong>Armar una lista breve.</strong> Incluir el modelo actual, un candidato de costo menor y otro que prometa mayor capacidad. Un pico de uso alcanza para entrar a la prueba, no para ganar.</p>\n</li>\n<li>\n<p><strong>Fijar condiciones comparables.</strong> Mismo conjunto de casos, contexto, herramientas, presupuesto y criterios de evaluación. Registrar proveedor, esfuerzo y límites; documentar cualquier diferencia necesaria.</p>\n</li>\n<li>\n<p><strong>Medir el resultado completo.</strong> Éxito, errores relevantes, intentos, tiempo hasta un resultado utilizable, costo total y revisión humana. Contar también fallos y abandonos.</p>\n</li>\n<li>\n<p><strong>Repetir donde haya variación.</strong> Usar varios intentos cuando corresponda, conservar los casos difíciles y revisar las diferencias pequeñas con prudencia. Separar mejoras consistentes de una buena ejecución aislada.</p>\n</li>\n<li>\n<p><strong>Tomar una decisión reversible.</strong> Mantener, probar en un entorno acotado o reemplazar. Definir qué deterioro justificaría volver al modelo anterior y cuándo revisar otra vez.</p>\n</li>\n</ol>\n<p>La métrica económica interna puede ser tan concreta como gasto de todos los intentos dividido por tareas aceptadas. Por ejemplo, USD 12 para 30 tareas aceptadas da USD 0,40 por tarea aceptada. Un segundo modelo que gastó USD 9 pero sólo cerró 15 queda en USD 0,60. El precio por token no hacía visible esa diferencia.</p>\n<p>El costo de revisión humana conviene registrarlo aparte y, si importa para la decisión, incorporarlo con un criterio explícito. No hace falta fingir una precisión que todavía no existe: un registro consistente vale más que una cifra muy exacta cuyo denominador cambia cada semana.</p>\n<h2 id=\"que-merece-quedar-en-el-registro\">Qué merece quedar en el registro</h2>\n<p>Una ficha útil puede ocupar diez líneas: objetivo; casos y criterio de aceptación; fecha; modelo y variante; proveedor; harness y herramientas; configuración; éxitos sobre intentos; costo y tiempo; decisión. Para el seguimiento público, agregá la vista exacta de OpenRouter y su unidad.</p>\n<p>Si un panel no publica tamaño de muestra, incertidumbre, ventana o tratamiento de caché y descuentos, anotá no publicado en vez de completar el hueco por intuición. El estudio histórico State of AI y un panel actual pueden usar taxonomías o métodos distintos; una explicación de 2025 no debe trasladarse automáticamente a la interfaz de 2026.</p>\n<p>Para republicar datos, OpenRouter permite reutilización con atribución bajo CC BY 4.0. Guardá el snapshot, citá la fuente y su fecha real, y señalá tus transformaciones. Los ejemplos de respuesta de una documentación describen el formato: sus cifras no son observaciones actuales. <a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">[2]</a> <a href=\"https://creativecommons.org/licenses/by/4.0/\" target=\"_blank\" rel=\"noopener noreferrer\">[20]</a></p>\n<h2 id=\"una-politica-que-sobreviva-al-proximo-lanzamiento\">Una política que sobreviva al próximo lanzamiento</h2>\n<p>El valor de Rankings está en reducir el espacio de búsqueda. Permite detectar dónde aumenta la actividad, qué tareas atraen inversión y qué alternativas merecen una evaluación. El beneficio aparece cuando esa observación termina en una prueba bien definida.</p>\n<p>Para Golden Path, el criterio de cierre es práctico: <strong>elegir la combinación de modelo, proveedor y harness que resuelva el trabajo con suficiente calidad, costo y control.</strong> Conservar la evidencia de esa elección hace posible revisarla cuando cambie el catálogo, sin empezar de cero ni perseguir cada nuevo primer puesto.</p>\n<h2 id=\"fuentes-y-acceso-directo\">Fuentes y acceso directo</h2>\n<p>Recorrido y fuentes originales del 3 de octubre de 2026. El 12 de octubre se reconfirmaron Rankings, Data API, los datasets de tokens y sesiones, clasificación por tarea y τ²-Bench Airline; se revisó la ficha actual de GPQA. Los controles dinámicos y las demás fichas conservan la fecha original. Los enlaces a Rankings abren vistas dinámicas; sus valores pueden cambiar después de esta revisión. Las capturas de referencia aportadas para la guía corresponden a la navegación de Text y a Top models by task.</p>\n<ol>\n<li>\n<p><a href=\"https://openrouter.ai/rankings\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings y controles de la interfaz</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/cookbook/administration/data-api\" target=\"_blank\" rel=\"noopener noreferrer\">Data API y criterios del dataset público</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/guides/routing/routers/auto-router\" target=\"_blank\" rel=\"noopener noreferrer\">Auto Router y clasificación por tarea</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/blog/announcements/introducing-the-new-auto-router/\" target=\"_blank\" rel=\"noopener noreferrer\">Presentación de la clasificación por gasto</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/api/api-reference/classifications/task-classification-market-share\" target=\"_blank\" rel=\"noopener noreferrer\">API de clasificaciones y denominadores</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/api/api-reference/datasets/cost-per-session-by-harness-and-model\" target=\"_blank\" rel=\"noopener noreferrer\">Coste por sesión y por harness</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models\" target=\"_blank\" rel=\"noopener noreferrer\">Dataset de rankings y filtros</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/benchmarks\" target=\"_blank\" rel=\"noopener noreferrer\">Catálogo de benchmarks</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/nvidia/nemotron-3-ultra-550b-a55b/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">Ejemplo de ficha de precios efectivos y de lista</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/docs/guides/best-practices/latency-and-performance\" target=\"_blank\" rel=\"noopener noreferrer\">Latencia y rendimiento en OpenRouter</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/amazon/nova-2-lite-v1/performance\" target=\"_blank\" rel=\"noopener noreferrer\">Ejemplo de ficha de rendimiento</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/blog/tutorials/choose-best-ai-model/\" target=\"_blank\" rel=\"noopener noreferrer\">Cómo elegir un modelo según la tarea</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/image\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de generación de imágenes</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/video\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de video</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/speech\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de voz</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/embeddings\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de embeddings</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/rerank\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de reranking</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/transcription\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de transcripción</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/rankings/batch\" target=\"_blank\" rel=\"noopener noreferrer\">Rankings de batch</a></p>\n</li>\n<li>\n<p><a href=\"https://creativecommons.org/licenses/by/4.0/\" target=\"_blank\" rel=\"noopener noreferrer\">Licencia de reutilización de los datos</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/benchmarks/vgi-bench\" target=\"_blank\" rel=\"noopener noreferrer\">Protocolo de VGI Bench</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/benchmarks/tau2-bench-airline/\" target=\"_blank\" rel=\"noopener noreferrer\">Protocolo de tau2 Bench Airline</a></p>\n</li>\n<li>\n<p><a href=\"https://openrouter.ai/benchmarks/gpqa-diamond/\" target=\"_blank\" rel=\"noopener noreferrer\">Protocolo de GPQA Diamond</a></p>\n</li>\n</ol>\n",
      "headings": [
        {
          "label": "La pregunta que conviene hacer antes del primer puesto",
          "depth": 2,
          "id": "la-pregunta-que-conviene-hacer-antes-del-primer-puesto"
        },
        {
          "label": "El recorrido por las trece secciones",
          "depth": 2,
          "id": "el-recorrido-por-las-trece-secciones"
        },
        {
          "label": "1 Top Models",
          "depth": 3,
          "id": "1-top-models"
        },
        {
          "label": "2 Leaderboard",
          "depth": 3,
          "id": "2-leaderboard"
        },
        {
          "label": "3 Top models by task",
          "depth": 3,
          "id": "3-top-models-by-task"
        },
        {
          "label": "4 Cost per session",
          "depth": 3,
          "id": "4-cost-per-session"
        },
        {
          "label": "5 Market Share",
          "depth": 3,
          "id": "5-market-share"
        },
        {
          "label": "6 Benchmarks",
          "depth": 3,
          "id": "6-benchmarks"
        },
        {
          "label": "7 Fastest models",
          "depth": 3,
          "id": "7-fastest-models"
        },
        {
          "label": "8 Languages",
          "depth": 3,
          "id": "8-languages"
        },
        {
          "label": "9 Programming",
          "depth": 3,
          "id": "9-programming"
        },
        {
          "label": "10 Context Length",
          "depth": 3,
          "id": "10-context-length"
        },
        {
          "label": "11 Tool Calls",
          "depth": 3,
          "id": "11-tool-calls"
        },
        {
          "label": "12 Images",
          "depth": 3,
          "id": "12-images"
        },
        {
          "label": "13 Top Apps",
          "depth": 3,
          "id": "13-top-apps"
        },
        {
          "label": "Las otras pestañas también cambian la unidad",
          "depth": 2,
          "id": "las-otras-pestanas-tambien-cambian-la-unidad"
        },
        {
          "label": "Cinco errores que cambian una decisión",
          "depth": 2,
          "id": "cinco-errores-que-cambian-una-decision"
        },
        {
          "label": "Una rutina de seguimiento que termina en una prueba",
          "depth": 2,
          "id": "una-rutina-de-seguimiento-que-termina-en-una-prueba"
        },
        {
          "label": "Qué merece quedar en el registro",
          "depth": 2,
          "id": "que-merece-quedar-en-el-registro"
        },
        {
          "label": "Una política que sobreviva al próximo lanzamiento",
          "depth": 2,
          "id": "una-politica-que-sobreviva-al-proximo-lanzamiento"
        },
        {
          "label": "Fuentes y acceso directo",
          "depth": 2,
          "id": "fuentes-y-acceso-directo"
        }
      ],
      "raw": "---\nslug: como-leer-rankings-openrouter\ntitle: Cómo leer los rankings de OpenRouter\ntype: guide\norder: 13\nsummary: Una guía para interpretar uso, gasto, velocidad y benchmarks de OpenRouter, seguir sus trece secciones de texto y convertir las señales en pruebas comparables.\ntags: [openrouter, modelos, rankings, benchmarks, evaluacion, costos, harness]\nrelated: [guia-escalado-modelos, comparar-harness-cli-codex-claude-opencode-cline, modelos-guiados-el-entorno-es-la-politica]\narea: Gobierno de agentes\nglyph: △\nhue: rgba(168,106,255,.24)\n---\n\n# Cómo leer los rankings de OpenRouter\n\n*Guía de seguimiento para elegir qué modelos probar*\n\nRecorrido de interfaz del 3 de octubre de 2026 · Revisión documental del 12 de octubre de 2026. En esta última consulta, la portada mostraba datos de uso hasta el 11 de octubre.\n\nUn ranking resulta útil cuando ayuda a tomar una decisión concreta: qué modelo conviene probar, para qué trabajo y con qué costo de equivocarse. El problema aparece cuando una posición se convierte en una conclusión que la medición nunca prometió.\n\nOpenRouter reúne señales de uso real, gasto, velocidad y evaluaciones de capacidad. La propuesta de esta guía es recorrer sus secciones, identificar qué cuenta cada una y convertirlas en un seguimiento repetible. **Primero elegimos qué observar; después verificamos si esa señal mejora nuestro trabajo.**\n\nEl recorrido principal cubre las trece subsecciones de Text. También incluye las otras pestañas de Rankings y sus unidades. Los nombres y controles del recorrido corresponden al 3 de octubre; los ejemplos numéricos son didácticos y no presentan ganadores actuales. [[1]](https://openrouter.ai/rankings)\n\n## La pregunta que conviene hacer antes del primer puesto\n\nAntes de comparar dos modelos, anotá cinco cosas: unidad, población, ventana temporal, agregación y condiciones. Es una ficha mínima que evita conclusiones enormes a partir de números pequeños.\n\n- **Unidad:** tokens, solicitudes, dólares, segundos o puntos de un benchmark. Un cambio de unidad cambia la pregunta.\n\n- **Población:** todo el tráfico elegible, una muestra clasificada, un idioma, una aplicación o una prueba concreta.\n\n- **Ventana:** un día completo, siete días, treinta días o la fecha de un experimento. La fecha de consulta no reemplaza a la fecha de los datos.\n\n- **Agregación:** suma, cuota, variación, mediana o índice compuesto. Un promedio y una mediana pueden contar historias diferentes.\n\n- **Condiciones:** versión, variante, proveedor, esfuerzo de razonamiento, caché, herramientas y harness. El mismo nombre puede cubrir configuraciones distintas.\n\nOpenRouter observa el tráfico que pasa por su plataforma y entra en cada dataset público. Esa población no permite inferir por sí sola la cuota mundial de un laboratorio, su número de clientes o todo su negocio. Los datos privados y las exclusiones documentadas también importan. [[2]](https://openrouter.ai/docs/cookbook/administration/data-api)\n\n## El recorrido por las trece secciones\n\n### 1 Top Models\n\nEs el panorama histórico del volumen semanal de tokens. Permite ver qué modelos sostienen actividad, cuáles aparecen de golpe y cómo cambia el tamaño total del tráfico. La visualización destaca nueve modelos y agrupa el resto en Others. La unidad suma entrada y salida; cada variante se trata por separado. [[1]](https://openrouter.ai/rankings)\n\n**Cómo seguirlo:** compará varias semanas, registrá la escala y mirá el total además de cada color. La escala lineal ayuda a dimensionar diferencias absolutas; la logarítmica facilita ver órdenes de magnitud. Cambiar de escala no modifica los datos, pero sí su apariencia.\n\n**Qué evitar:** interpretar más tokens como más personas o más productividad. Un agente que relee un repositorio, encadena turnos o genera respuestas largas puede mover mucho volumen. Los tokenizadores tampoco segmentan el texto de manera idéntica entre proveedores. [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n### 2 Leaderboard\n\nLa tabla permite ordenar ese uso y elegir modelos abiertos, cerrados o todos. Today, This Week y This Month abarcan respectivamente 1, 7 y 30 días completos, con cierre en UTC. New & Trending compara los últimos siete días con los siete anteriores; exige un millón de tokens en la ventana actual y puede anteponer hasta cinco modelos nuevos. [[1]](https://openrouter.ai/rankings)\n\nEl crecimiento compara volúmenes: pasar de 10 a 15 millones de tokens representa un aumento del 50%. No significa subir cincuenta puntos de cuota. Y new señala falta de una base previa comparable, no una tasa de crecimiento infinita.\n\n**Cómo seguirlo:** conservá una vista semanal para la tendencia y una mensual para la persistencia. Separá lanzamientos, variantes gratuitas y versiones estables. Un filtro de apertura cambia el conjunto comparado; no certifica licencias, permisos de uso ni calidad del modelo.\n\n### 3 Top models by task\n\nEsta sección acerca el ranking al trabajo concreto. Permite alternar **Share of spend** y **Share of tokens**. Las tareas se infieren sobre una muestra de prompts y la interfaz indica que corrige las magnitudes por muestreo. La documentación del Auto Router vincula la vista de gasto con una ventana móvil de siete días. [[3]](https://openrouter.ai/docs/guides/routing/routers/auto-router) [[4]](https://openrouter.ai/blog/announcements/introducing-the-new-auto-router/)\n\nEl mapa de rectángulos o treemap contiene dos niveles que conviene leer por separado. El área de una tarea indica cuánto representa dentro del total de la métrica elegida. Al abrirla, la lista muestra la participación de cada modelo dentro de esa tarea. El tamaño de Classification y el porcentaje de un modelo en Classification tienen denominadores diferentes.\n\n**Ejemplo:** si una tarea concentra el 10% del gasto y un modelo reúne el 20% del gasto de esa tarea, su porción del total sería el 2%, siempre que ambos porcentajes compartan universo y ventana. Leer el 20% como cuota de todo OpenRouter multiplicaría por diez la interpretación.\n\nLos colores distinguen cuatro familias. En la revisión había 29 etiquetas; conservar sus nombres facilita encontrarlas aunque cambie su posición en el gráfico:\n\n- **General:** Classification, Content Writing, Roleplay & Fiction, Q&A & Knowledge, Conversation, Research & Reports, Customer Support, Summarization, Security Audit, Math, Finance & Trading, Translation y DevOps\n\n- **Agent:** Workflow Execution, Multi-step Planning, Tool Dispatch, Web Search y Memory Extraction\n\n- **Code:** Code Generation, Debugging, File I/O, Code Review, Shell Execution, Frontend & UI, Repo Scanning, DevOps & Config y SQL & Database\n\n- **Data:** Data Extraction y Data Transformation\n\n**Cómo seguirlo:** elegí la tarea más cercana a tu trabajo y alterná gasto y tokens. Si un modelo gana mucho más espacio en gasto, investigá precio, longitud, razonamiento y mezcla de trabajo. Si gana en tokens, investigá volumen y variantes gratuitas. Ninguna de esas diferencias identifica por sí sola qué respuestas fueron correctas.\n\nLa clasificación es una estimación de la intención del prompt. Una sesión de programación puede pasar por planificación, lectura de archivos, búsqueda, generación y revisión. No conviene tratar cada casillero como una industria separada ni sumar sus posiciones para inventar una nota general.\n\n**Límite metodológico:** la interfaz explica que los deltas comparan con la ventana anterior, pero no desarrolla allí todos sus detalles. Antes de publicar una variación como puntos porcentuales, verificá la definición concreta. Tampoco se publica en estas vistas una ficha completa de tamaño muestral, precisión del clasificador, intervalos de confianza y tratamiento contable del gasto.\n\nHay además una diferencia relevante para quien quiera automatizar el seguimiento: la API de clasificaciones documenta cuotas de solicitudes y tokens, excluye other del denominador y ordena modelos por solicitudes. Esos campos no sustituyen automáticamente la cuota de gasto del treemap. Un nombre parecido no garantiza el mismo cálculo. [[5]](https://openrouter.ai/docs/api/api-reference/classifications/task-classification-market-share)\n\n### 4 Cost per session\n\nAcá la pregunta pasa al costo observado de una sesión de agente. La unidad es USD por sesión y el resumen es la mediana, separado por harness. La interfaz revisada mostraba Hermes Agent, Claude Code, Kilo Code y Codex, con tramos de 1, 2 a 9, 10 a 49 y 50 o más turnos.\n\nEl tooltip define una ventana de 30 días, uso pago y escala logarítmica. Una sesión se atribuye a un modelo cuando ese modelo procesó al menos el 80% de sus tokens. La referencia del dataset confirma que las aplicaciones no se mezclan, que se publican medianas y que el snapshot se actualiza semanalmente. [[1]](https://openrouter.ai/rankings) [[6]](https://openrouter.ai/docs/api/api-reference/datasets/cost-per-session-by-harness-and-model)\n\n**Cómo seguirlo:** fijá primero el harness y después un tramo comparable. La mediana describe el centro de la distribución: la mitad de las sesiones queda por debajo y la otra mitad por encima. No muestra cuánto cuesta la cola de sesiones difíciles ni alcanza para presupuestar un mes completo.\n\nUna sesión barata puede haber sido simple, corta, abortada o fallida. Una larga puede haber resuelto un trabajo valioso. Para decidir en tu entorno, agregá éxito, reintentos y tiempo de revisión. La regla del 80% también limita la lectura de flujos que reparten mucho trabajo entre varios modelos. La delimitación exacta de sesión y los umbrales de publicación no quedan especificados en la referencia consultada.\n\n### 5 Market Share\n\nAgrupa por autor del modelo y cuenta solicitudes de texto. Absolute muestra magnitudes; Percentage, la parte de cada autor sobre el total del período. El autor del modelo no necesariamente coincide con la empresa que sirve el endpoint. [[1]](https://openrouter.ai/rankings)\n\n**Cómo seguirlo:** mirá ambas vistas. Si un autor pasa de 100 a 120 solicitudes mientras el total pasa de 200 a 300, su volumen crece un 20% y su cuota cae de 50% a 40%. Las dos observaciones son compatibles.\n\nEsta sección permite detectar cambios en la composición del tráfico. Para explicar la causa necesitás más evidencia: lanzamientos, disponibilidad, precios, integraciones o decisiones de routing. No alcanza con que dos curvas se muevan a la vez. Conservá también la fecha del punto observado; el texto resumido y el gráfico pueden referirse a cortes distintos.\n\n### 6 Benchmarks\n\nEsta es la sección para comparar resultados de evaluaciones. El selector revisado reunía trece métricas de tres familias: evaluaciones ejecutadas por OpenRouter, índices de Artificial Analysis y ratings de Design Arena. Conviene conservar esa procedencia junto al puntaje. [[2]](https://openrouter.ai/docs/cookbook/administration/data-api)\n\n- **GPQA Diamond, τ²-Bench Airline y VGI-Bench:** el panel presenta accuracy. Para GPQA Diamond y VGI-Bench, el tooltip precisa mediana de accuracy entre proveedores, medida por OpenRouter. Cada prueba tiene su propio protocolo; conviene abrir su ficha antes de interpretar el porcentaje.\n\n- **Intelligence Index, Coding Index y Agentic Index:** son índices compuestos de Artificial Analysis. Sirven para una preselección general, de código o de agentes. Un valor de índice no debe leerse automáticamente como porcentaje de tareas resueltas.\n\n- **Code Categories, UI Component, Game Development, Data Visualization, 3D, Image y SVG ELO:** son ratings de Design Arena para comparaciones cara a cara. Su escala es relativa al sistema de evaluación y a sus participantes; 1.500 puntos Elo no equivalen a un 75% de calidad.\n\nEn una evaluación de exactitud, el denominador son los casos evaluados bajo un protocolo. En un índice compuesto intervienen varias pruebas y sus reglas de combinación. En Elo intervienen comparaciones y resultados relativos. Estas metodologías responden preguntas diferentes: no conviene promediarlas como si compartieran una escala.\n\n**GPQA Diamond** usa preguntas científicas de opción múltiple. La ficha actual presenta variabilidad entre ejecuciones y costo, y publica snapshots descargables. El protocolo de 90 días descrito en la revisión anterior no pudo reconfirmarse en la ficha accesible el 12 de octubre: no lo extrapoles como regla vigente. El widget y la tabla detallada pueden usar representaciones distintas; citá la vista y el snapshot de los que sale tu cifra. [[23]](https://openrouter.ai/benchmarks/gpqa-diamond/)\n\nLa siguiente descripción de VGI-Bench se conserva como registro del 3 de octubre: su ficha no pudo reconfirmarse el 12 de octubre. No tomes esos umbrales como un contrato vigente.\n\n**VGI-Bench** significa Video General Intelligence Bench y evalúa comprensión de videos largos. La implementación de OpenRouter entrega el video y una pregunta de opción múltiple en un turno, con temperatura 0, y corrige la letra final. Usa un conjunto público de 439 preguntas, exige al menos 395 respuestas para incluir una ejecución y considera los últimos 90 días. Sirve para investigar comprensión temporal y audiovisual; su accuracy no es una nota de generación de video. [[21]](https://openrouter.ai/benchmarks/vgi-bench)\n\n**τ²-Bench Airline** evalúa atención al cliente con un usuario simulado y herramientas de aerolínea. El éxito exige el estado final esperado de la base de datos y los mensajes requeridos, sin crédito parcial. La ficha fija el simulador, limita la ejecución a 200 pasos y agrega pruebas de 90 días ponderadas por tareas, con mínimo de 45 por pareja modelo y proveedor. Su resultado principal usa routing predeterminado si existe; en otro caso, la mediana entre proveedores. Esa regla de la ficha detallada no debe generalizarse a todo el widget. [[22]](https://openrouter.ai/benchmarks/tau2-bench-airline/)\n\nTambién cambia el eje económico. El gráfico ofrece Weighted Avg Input Price, Input List Price y Avg Price Per 100 Requests. Las dos primeras vistas se expresan por millón de tokens de entrada; la tercera usa solicitudes. El precio efectivo de las fichas incorpora el uso observado, donde caché y descuentos pueden separarlo del precio publicado. [[9]](https://openrouter.ai/nvidia/nemotron-3-ultra-550b-a55b/pricing)\n\n**Cómo seguirlo:** fijá el benchmark y el eje de precio antes de comparar. El precio de entrada deja fuera la salida y otros componentes de tu factura; el promedio por solicitudes depende del tamaño de esas solicitudes. Ninguno equivale sin más a costo por tarea resuelta.\n\nShow Pareto ayuda a encontrar opciones que no quedan superadas simultáneamente en las dos dimensiones elegidas. Si dos candidatos tienen la misma nota y uno cuesta menos, el más caro queda dominado en ese gráfico. Esa conclusión puede cambiar al agregar latencia, confiabilidad, permisos o desempeño en español. La frontera visible tampoco representa modelos que el gráfico no incluyó.\n\nEl enlace View all benchmarks lleva a un catálogo más amplio con familias Agents, Media, Artifacts, Reasoning y Search. Sus experimentos pueden evaluar también herramientas, motores de búsqueda y presupuestos. Revisá la ejecución concreta: la última fecha general del catálogo no actualiza retrospectivamente cada tarjeta. [[8]](https://openrouter.ai/benchmarks)\n\n### 7 Fastest models\n\nTiene dos modos: Highest throughput y Lowest latency. El tooltip de elegibilidad admite modelos con al menos 100.000 solicitudes en las últimas 24 horas. Ese umbral describe quién puede aparecer; por sí solo no especifica cómo se agregaron todos los valores de rendimiento.\n\nThroughput expresa la velocidad de generación en tokens por segundo. La latencia requiere leer su definición en la vista correspondiente: esperar el primer token y recibir la respuesta completa son experiencias distintas. Las fichas de rendimiento de OpenRouter distinguen TTFT y medidas de latencia; no conviene asumir que todos los paneles usan el mismo percentil o ventana. [[10]](https://openrouter.ai/docs/guides/best-practices/latency-and-performance) [[11]](https://openrouter.ai/amazon/nova-2-lite-v1/performance)\n\n**Cómo seguirlo:** compará el mismo endpoint, contexto y configuración. Para una respuesta larga importa la velocidad sostenida; para una interacción breve puede dominar la espera inicial. En un agente, sumá además herramientas, turnos y reintentos. Un modelo rápido escribiendo puede tardar más en terminar el trabajo.\n\nNo atribuyas automáticamente el mejor rendimiento de un proveedor a todos los que sirven ese modelo. Si la vista no declara el percentil, la ventana o la ponderación entre proveedores, conservá esa limitación en la comparación.\n\n### 8 Languages\n\nPermite segmentar por idioma natural y alternar magnitud absoluta o porcentaje. Los datos por idioma proceden de muestras extrapoladas; la referencia pública los trata como estimaciones semanales. La cuota se interpreta dentro del idioma seleccionado, no sobre todos los idiomas. [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n**Cómo seguirlo:** para un producto en español, mirá español aunque el panorama general esté dominado por inglés. Después probá tareas reales: comprensión de consignas, registro, regionalismos, extracción y fidelidad de las respuestas. El tráfico en un idioma no evalúa por sí mismo la calidad en ese idioma.\n\nUna conversación puede mezclar idiomas, código y citas. Sin una definición publicada del clasificador y su error, cambios pequeños merecen cautela. La extrapolación da una estimación de volumen; no elimina el sesgo de selección ni garantiza representatividad de todo uso del español.\n\nPara automatizar: los filtros `category` y `language_type` usan estimaciones semanales, rechazan `period=day` y no se combinan con filtros exactos de modalidad/contexto ni entre sí. La última semana puede superar `end_date`; el agrupamiento mensual asigna cada semana al mes en que comienza. Un corte mensual no es necesariamente exacto en sus bordes. [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n### 9 Programming\n\nAplica una lectura similar a lenguajes de programación, con Python como selección inicial en la revisión. Muestra uso por tokens en una muestra clasificada. Las vistas absolutas y porcentuales conservan la unidad del segmento, que no es una tasa de resolución de problemas. [[1]](https://openrouter.ai/rankings) [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n**Cómo seguirlo:** compará el lenguaje de tu repositorio y cruzalo con Coding Index o un benchmark de código pertinente. Eso arma una lista de candidatos. La prueba propia debe incluir comprensión del proyecto, un cambio con tests, un bug y una revisión de diff.\n\nQue un modelo aparezca mucho en Python puede reflejar la integración de una aplicación o el volumen de un usuario intensivo. Tampoco identifica framework, dificultad, versión ni resultado final. Un cambio de participación justifica investigar; para reemplazar el modelo hace falta verificar una mejora.\n\n### 10 Context Length\n\nCuenta solicitudes por la longitud observada de prompt y completion. El selector ofrece menos de 1K, 1K a 10K, 10K a 100K, 100K a 1M y 1M a 10M tokens. La unidad del gráfico es solicitudes, con vista absoluta o porcentual. [[1]](https://openrouter.ai/rankings)\n\n**Cómo seguirlo:** elegí el tramo de tus cargas de trabajo. Ver uso con entradas y salidas extensas puede indicar que vale la pena probar un modelo para documentos largos o repositorios grandes. La ventana máxima anunciada requiere una consulta separada a la ficha del modelo.\n\nLa capacidad nominal, la longitud realmente utilizada y la calidad al recuperar información son tres mediciones diferentes. Para validar contexto largo, usá datos relevantes ubicados en distintas partes del material y verificá relaciones entre ellos. Caber en el límite no demuestra comprensión.\n\n### 11 Tool Calls\n\nPresenta la distribución de actividad de herramientas entre modelos. El filtro público tool_calling identifica solicitudes donde se registró al menos una llamada; eso no permite equiparar automáticamente solicitudes con cantidad de llamadas individuales. Al exportar datos, conservá el campo contado por esa vista. [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n**Cómo seguirlo:** usalo para identificar modelos presentes en flujos con herramientas. Después medí selección de herramienta, argumentos válidos, interpretación del resultado, recuperación de errores y respeto de permisos.\n\nMás actividad puede acompañar un agente útil o un loop improductivo. También puede cambiar por cómo el harness divide una operación. La cuota del gráfico no revela qué porcentaje de llamadas tuvo éxito ni qué porcentaje de todo el tráfico de ese modelo usó herramientas.\n\n### 12 Images\n\nDentro de Text, Images muestra imágenes procesadas por modelos y permite alternar volumen o participación. Es importante distinguir este bloque de la pestaña superior Image, orientada a generación de imágenes. El dataset documenta por separado entrada image y salida image_output. [[1]](https://openrouter.ai/rankings) [[7]](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n**Cómo seguirlo:** para entender capturas, facturas o gráficos, mirá el uso multimodal y armá pruebas de lectura concretas. Para generar ilustraciones, elegí la pestaña de generación y sus evaluaciones correspondientes.\n\nUna solicitud puede contener más de una imagen. Cantidad de imágenes, solicitudes con imágenes y tokens de imagen no son intercambiables. Y procesar muchas imágenes no demuestra exactitud en OCR, conteo, interpretación espacial o seguimiento visual de instrucciones.\n\n### 13 Top Apps\n\nOrdena aplicaciones y agentes que participan en la atribución pública de uso. El volumen está expresado en tokens y el selector permite cambiar el período. Las apps ocultas o privadas quedan fuera; el dataset puede reunir aliases de una misma aplicación. [[2]](https://openrouter.ai/docs/cookbook/administration/data-api)\n\n**Cómo seguirlo:** cruzalo con los movimientos de modelos. Una integración grande puede alterar la demanda sin que haya cambiado el modelo. La app añade instrucciones, herramientas, memoria y routing, por lo que conviene evaluarla como sistema.\n\nEl ranking no cuenta instalaciones, usuarios activos ni toda la actividad de una aplicación fuera de OpenRouter. Tampoco todos los controles llamados trending comparten fórmula: la API de apps describe crecimiento absoluto excedente frente a tres períodos previos, mientras el ranking de modelos compara crecimiento porcentual entre dos ventanas. [[2]](https://openrouter.ai/docs/cookbook/administration/data-api)\n\n## Las otras pestañas también cambian la unidad\n\nLa barra superior permite salir de Text. En Image, Video, Speech, Embeddings, Rerank y Transcription, las tablas se ordenan por solicitudes y el gráfico superior puede ofrecer otra unidad. Batch parte de subsolicitudes y también permite ordenar por tokens. Verificá cuál de los dos componentes cambia con cada selector. [[13]](https://openrouter.ai/rankings/image) [[14]](https://openrouter.ai/rankings/video) [[15]](https://openrouter.ai/rankings/speech) [[16]](https://openrouter.ai/rankings/embeddings) [[17]](https://openrouter.ai/rankings/rerank) [[18]](https://openrouter.ai/rankings/transcription) [[19]](https://openrouter.ai/rankings/batch)\n\n- **Image:** el gráfico alterna solicitudes e imágenes. Una solicitud que devuelve varias imágenes cuenta una vez en la tabla por solicitudes.\n\n- **Video:** solicitudes u horas en el gráfico. Un número de solicitudes no informa duración total, resolución ni costo de los clips.\n\n- **Speech:** solicitudes en la vista revisada. Para una prueba propia importan también duración del audio, inteligibilidad, pronunciación y seguimiento del estilo.\n\n- **Embeddings:** solicitudes o tokens en el gráfico. Evaluá además la recuperación con tu corpus; más volumen no demuestra mejores vecinos semánticos.\n\n- **Rerank:** solicitudes o documentos. Un pedido puede reordenar muchos documentos, así que ambos volúmenes responden preguntas distintas.\n\n- **Transcription:** el gráfico alterna solicitudes y caracteres; la tabla conserva solicitudes. Evalúa el uso de transcripción de voz a texto. Para elegir, medí errores sobre audios representativos, acentos y condiciones acústicas.\n\n- **Batch:** el selector Subrequests o Tokens modifica tanto el gráfico como la tabla. Ofrece filtro de texto, embeddings o todas las modalidades. Las subsolicitudes cuentan el trabajo dentro de los lotes, no el número de lotes. Agregá tiempo de finalización, fallos y costo al comparar alternativas.\n\nLas primeras seis pestañas incluyen Top Models, Leaderboard y Market Share. Esta última conserva solicitudes por autor. Batch incluye las dos primeras. No todas las modalidades replican las trece secciones de Text.\n\nEn las tablas se mantienen controles de período como Today, This Week, This Month y New & Trending. La disponibilidad de un control no basta para atribuirle todos los umbrales y reglas del ranking de texto; verificá la nota metodológica de esa modalidad antes de reutilizar su cálculo.\n\n## Cinco errores que cambian una decisión\n\n- **Confundir participación y crecimiento.** Pasar de 10% a 15% es ganar 5 puntos porcentuales y crecer 50% respecto de la cuota inicial. Indicá cuál calculaste.\n\n- **Leer una cuota sin su total.** Un segmento puede ganar participación mientras cae su volumen. Guardá ambos cuando estén disponibles.\n\n- **Comparar cortes distintos.** Un día parcial, un cierre UTC y una semana de clasificación no describen exactamente el mismo período.\n\n- **Tratar ausencia como cero.** Un modelo fuera del top visible, sin datos suficientes o sin puntaje publicado puede ser simplemente no observable en esa vista.\n\n- **Explicar correlaciones como causas.** Un lanzamiento, una oferta gratuita o un cambio de routing son hipótesis hasta contar con evidencia adicional.\n\nEl límite más importante atraviesa toda la guía: **el uso observado ayuda a elegir candidatos; la aptitud para nuestro trabajo se comprueba con resultados.** OpenRouter también recomienda contrastar benchmarks generales con prompts reales y costo por tarea completada. [[12]](https://openrouter.ai/blog/tutorials/choose-best-ai-model/)\n\n## Una rutina de seguimiento que termina en una prueba\n\nNo hace falta mirar todos los paneles cada día. Conviene mantener una pregunta estable y usar las secciones que aportan evidencia para responderla.\n\n1. **Definir el trabajo.** Por ejemplo, revisar cambios de un backend en Python con tests disponibles y sin acceso a producción. Acordar qué cuenta como éxito antes de ver las respuestas.\n\n2. **Elegir el segmento.** Abrir Code Review, Programming en Python y el tramo de contexto habitual. Usar el ranking general como contexto.\n\n3. **Guardar la observación.** Registrar fecha de consulta, fecha de datos, unidad, filtro, período, variante exacta y fuente. Si se usa la API, conservar también los metadatos.\n\n4. **Armar una lista breve.** Incluir el modelo actual, un candidato de costo menor y otro que prometa mayor capacidad. Un pico de uso alcanza para entrar a la prueba, no para ganar.\n\n5. **Fijar condiciones comparables.** Mismo conjunto de casos, contexto, herramientas, presupuesto y criterios de evaluación. Registrar proveedor, esfuerzo y límites; documentar cualquier diferencia necesaria.\n\n6. **Medir el resultado completo.** Éxito, errores relevantes, intentos, tiempo hasta un resultado utilizable, costo total y revisión humana. Contar también fallos y abandonos.\n\n7. **Repetir donde haya variación.** Usar varios intentos cuando corresponda, conservar los casos difíciles y revisar las diferencias pequeñas con prudencia. Separar mejoras consistentes de una buena ejecución aislada.\n\n8. **Tomar una decisión reversible.** Mantener, probar en un entorno acotado o reemplazar. Definir qué deterioro justificaría volver al modelo anterior y cuándo revisar otra vez.\n\nLa métrica económica interna puede ser tan concreta como gasto de todos los intentos dividido por tareas aceptadas. Por ejemplo, USD 12 para 30 tareas aceptadas da USD 0,40 por tarea aceptada. Un segundo modelo que gastó USD 9 pero sólo cerró 15 queda en USD 0,60. El precio por token no hacía visible esa diferencia.\n\nEl costo de revisión humana conviene registrarlo aparte y, si importa para la decisión, incorporarlo con un criterio explícito. No hace falta fingir una precisión que todavía no existe: un registro consistente vale más que una cifra muy exacta cuyo denominador cambia cada semana.\n\n## Qué merece quedar en el registro\n\nUna ficha útil puede ocupar diez líneas: objetivo; casos y criterio de aceptación; fecha; modelo y variante; proveedor; harness y herramientas; configuración; éxitos sobre intentos; costo y tiempo; decisión. Para el seguimiento público, agregá la vista exacta de OpenRouter y su unidad.\n\nSi un panel no publica tamaño de muestra, incertidumbre, ventana o tratamiento de caché y descuentos, anotá no publicado en vez de completar el hueco por intuición. El estudio histórico State of AI y un panel actual pueden usar taxonomías o métodos distintos; una explicación de 2025 no debe trasladarse automáticamente a la interfaz de 2026.\n\nPara republicar datos, OpenRouter permite reutilización con atribución bajo CC BY 4.0. Guardá el snapshot, citá la fuente y su fecha real, y señalá tus transformaciones. Los ejemplos de respuesta de una documentación describen el formato: sus cifras no son observaciones actuales. [[2]](https://openrouter.ai/docs/cookbook/administration/data-api) [[20]](https://creativecommons.org/licenses/by/4.0/)\n\n## Una política que sobreviva al próximo lanzamiento\n\nEl valor de Rankings está en reducir el espacio de búsqueda. Permite detectar dónde aumenta la actividad, qué tareas atraen inversión y qué alternativas merecen una evaluación. El beneficio aparece cuando esa observación termina en una prueba bien definida.\n\nPara Golden Path, el criterio de cierre es práctico: **elegir la combinación de modelo, proveedor y harness que resuelva el trabajo con suficiente calidad, costo y control.** Conservar la evidencia de esa elección hace posible revisarla cuando cambie el catálogo, sin empezar de cero ni perseguir cada nuevo primer puesto.\n\n## Fuentes y acceso directo\n\nRecorrido y fuentes originales del 3 de octubre de 2026. El 12 de octubre se reconfirmaron Rankings, Data API, los datasets de tokens y sesiones, clasificación por tarea y τ²-Bench Airline; se revisó la ficha actual de GPQA. Los controles dinámicos y las demás fichas conservan la fecha original. Los enlaces a Rankings abren vistas dinámicas; sus valores pueden cambiar después de esta revisión. Las capturas de referencia aportadas para la guía corresponden a la navegación de Text y a Top models by task.\n\n1. [Rankings y controles de la interfaz](https://openrouter.ai/rankings)\n\n2. [Data API y criterios del dataset público](https://openrouter.ai/docs/cookbook/administration/data-api)\n\n3. [Auto Router y clasificación por tarea](https://openrouter.ai/docs/guides/routing/routers/auto-router)\n\n4. [Presentación de la clasificación por gasto](https://openrouter.ai/blog/announcements/introducing-the-new-auto-router/)\n\n5. [API de clasificaciones y denominadores](https://openrouter.ai/docs/api/api-reference/classifications/task-classification-market-share)\n\n6. [Coste por sesión y por harness](https://openrouter.ai/docs/api/api-reference/datasets/cost-per-session-by-harness-and-model)\n\n7. [Dataset de rankings y filtros](https://openrouter.ai/docs/api/api-reference/datasets/daily-token-totals-for-top-50-models)\n\n8. [Catálogo de benchmarks](https://openrouter.ai/benchmarks)\n\n9. [Ejemplo de ficha de precios efectivos y de lista](https://openrouter.ai/nvidia/nemotron-3-ultra-550b-a55b/pricing)\n\n10. [Latencia y rendimiento en OpenRouter](https://openrouter.ai/docs/guides/best-practices/latency-and-performance)\n\n11. [Ejemplo de ficha de rendimiento](https://openrouter.ai/amazon/nova-2-lite-v1/performance)\n\n12. [Cómo elegir un modelo según la tarea](https://openrouter.ai/blog/tutorials/choose-best-ai-model/)\n\n13. [Rankings de generación de imágenes](https://openrouter.ai/rankings/image)\n\n14. [Rankings de video](https://openrouter.ai/rankings/video)\n\n15. [Rankings de voz](https://openrouter.ai/rankings/speech)\n\n16. [Rankings de embeddings](https://openrouter.ai/rankings/embeddings)\n\n17. [Rankings de reranking](https://openrouter.ai/rankings/rerank)\n\n18. [Rankings de transcripción](https://openrouter.ai/rankings/transcription)\n\n19. [Rankings de batch](https://openrouter.ai/rankings/batch)\n\n20. [Licencia de reutilización de los datos](https://creativecommons.org/licenses/by/4.0/)\n\n21. [Protocolo de VGI Bench](https://openrouter.ai/benchmarks/vgi-bench)\n\n22. [Protocolo de tau2 Bench Airline](https://openrouter.ai/benchmarks/tau2-bench-airline/)\n\n23. [Protocolo de GPQA Diamond](https://openrouter.ai/benchmarks/gpqa-diamond/)\n"
    },
    {
      "slug": "jev-decisiones-estructuradas",
      "title": "Jev: decisiones pequeñas dentro de sistemas grandes",
      "summary": "Qué hace un modelo de decisiones estructuradas y dónde conviene ponerlo: routing, clasificación, scoring y gates antes de cambiar el estado.",
      "type": "concept",
      "order": 13,
      "tags": [
        "jev",
        "decisiones",
        "routing",
        "scoring",
        "agentes",
        "arquitectura"
      ],
      "related": [
        "caso-jev-director-narrativo",
        "modelos-guiados-el-entorno-es-la-politica",
        "orquestacion"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◈",
      "hue": "rgba(168,106,255,.24)",
      "file": "jev-decisiones-estructuradas.md",
      "html": "<h2 id=\"una-pregunta-distinta-a-escribime-una-respuesta\">Una pregunta distinta a «escribime una respuesta»</h2>\n<p>Muchos pasos de una aplicación con IA no necesitan otro párrafo. Necesitan saber <strong>qué hacer a continuación</strong>: a qué equipo enviar un pedido, si una afirmación está respaldada, qué candidato revisar primero o si vale la pena llamar a un modelo más costoso.</p>\n<p><a href=\"https://openrouter.ai/typesafe/jev-1.13\" target=\"_blank\" rel=\"noopener noreferrer\">Jev 1.13</a>, de TypeSafe, está diseñado para ese tipo de decisiones. Recibe texto o estado estructurado y devuelve respuestas tipadas, no prosa libre. La <a href=\"https://docs.typesafe.ai/concepts/system-one\" target=\"_blank\" rel=\"noopener noreferrer\">documentación de System One</a> distingue tres primitivas:</p>\n<table>\n<thead>\n<tr>\n<th>Primitiva</th>\n<th>Pregunta</th>\n<th>Respuesta</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Choice</strong></td>\n<td>¿Cuál de estas opciones describe mejor el caso?</td>\n<td>Una opción y probabilidades</td>\n</tr>\n<tr>\n<td><strong>Score</strong></td>\n<td>¿Dónde cae el caso en una escala definida?</td>\n<td>Una puntuación sobre los niveles configurados</td>\n</tr>\n<tr>\n<td><strong>Noul</strong></td>\n<td>¿Se cumple esta condición?</td>\n<td>Una probabilidad entre 0 y 1</td>\n</tr>\n</tbody>\n</table>\n<p>Las opciones y los criterios los define la aplicación. Jev juzga un estado dentro de ese marco; el código decide qué acción corresponde, con sus propias reglas y permisos.</p>\n<h2 id=\"cuatro-lugares-donde-tiene-sentido-probarlo\">Cuatro lugares donde tiene sentido probarlo</h2>\n<h3 id=\"routing-y-clasificacion\">Routing y clasificación</h3>\n<p>Una solicitud entrante puede ir a soporte técnico, facturación o revisión manual. Si la elección es ambigua, la aplicación puede pedirle a Jev una categoría y enviar los casos de baja confianza a una persona. La misma idea sirve para clasificar incidentes o separar señales útiles del ruido en una cola.</p>\n<h3 id=\"scoring-y-orden-de-candidatos\">Scoring y orden de candidatos</h3>\n<p>Cuando ya existe una lista acotada de opciones, Jev puede puntuar cuáles parecen más pertinentes: recuerdos recuperados, alertas o tareas por revisar. Primero conviene reducir el conjunto con filtros baratos; pedir una decisión sobre toda la base aumenta costo y ruido.</p>\n<h3 id=\"gates-antes-de-persistir\">Gates antes de persistir</h3>\n<p>Un LLM generativo puede extraer datos de una conversación, pero redactar una afirmación no la convierte en un hecho. Un gate puede evaluar si hay evidencia, si el dato parece duradero o si contradice lo ya registrado. Las mutaciones siguen pasando por validación e idempotencia del sistema.</p>\n<h3 id=\"escalamiento-entre-modelos\">Escalamiento entre modelos</h3>\n<p>Si la tarea sólo requiere elegir entre rutas conocidas, quizá no haga falta llamar a un modelo de razonamiento largo. Jev puede ayudar a derivar casos claros y dejar los difíciles para otro modelo o una revisión humana. El ahorro real se mide junto con los errores de derivación: abaratar una llamada a costa de perder casos importantes sería una pésima cuenta.</p>\n<h2 id=\"la-confianza-no-es-un-permiso\">La confianza no es un permiso</h2>\n<p>Una probabilidad alta no demuestra que la respuesta individual sea correcta. TypeSafe describe la calibración como una propiedad que se mide sobre conjuntos de predicciones, no como una garantía por caso. Hay que probar con datos del dominio, idiomas reales y ejemplos difíciles antes de elegir umbrales.</p>\n<p>Además, <em>Score</em> usa la escala configurada: si los criterios tienen cinco niveles, no se debe interpretar su valor crudo como un número entre 0 y 1 sin normalizarlo. Y una decisión bien formada tampoco autoriza por sí misma un envío, una escritura o una publicación.</p>\n<p>La arquitectura útil suele tener cuatro piezas: <strong>estado relevante → pregunta acotada → respuesta tipada → regla determinista</strong>. Se registran las decisiones para poder comparar aciertos y errores; ante fallos del proveedor, la aplicación elige un fallback explícito.</p>\n<h2 id=\"que-uso-termino-siendo-concreto\">Qué uso terminó siendo concreto</h2>\n<p>En una v2 de ficción interactiva probamos a Jev como parte de un Director que observa escenas y decide qué relaciones, hechos, temas y promesas dejan consecuencias. Ahí la pregunta no era «escribí una escena mejor», sino «¿qué cambió realmente y quién puede recordarlo?».</p>\n<p>El diseño, las correcciones encontradas en las pruebas y sus límites están en <a href=\"/entrada/caso-jev-director-narrativo\">el caso del Director narrativo</a>. Es un ejemplo de aplicación; routing, scoring y gates son otros puntos de partida que requieren su propia evaluación.</p>\n",
      "headings": [
        {
          "label": "Una pregunta distinta a «escribime una respuesta»",
          "depth": 2,
          "id": "una-pregunta-distinta-a-escribime-una-respuesta"
        },
        {
          "label": "Cuatro lugares donde tiene sentido probarlo",
          "depth": 2,
          "id": "cuatro-lugares-donde-tiene-sentido-probarlo"
        },
        {
          "label": "Routing y clasificación",
          "depth": 3,
          "id": "routing-y-clasificacion"
        },
        {
          "label": "Scoring y orden de candidatos",
          "depth": 3,
          "id": "scoring-y-orden-de-candidatos"
        },
        {
          "label": "Gates antes de persistir",
          "depth": 3,
          "id": "gates-antes-de-persistir"
        },
        {
          "label": "Escalamiento entre modelos",
          "depth": 3,
          "id": "escalamiento-entre-modelos"
        },
        {
          "label": "La confianza no es un permiso",
          "depth": 2,
          "id": "la-confianza-no-es-un-permiso"
        },
        {
          "label": "Qué uso terminó siendo concreto",
          "depth": 2,
          "id": "que-uso-termino-siendo-concreto"
        }
      ],
      "raw": "---\nslug: jev-decisiones-estructuradas\ntitle: \"Jev: decisiones pequeñas dentro de sistemas grandes\"\ntype: concept\norder: 13\nsummary: \"Qué hace un modelo de decisiones estructuradas y dónde conviene ponerlo: routing, clasificación, scoring y gates antes de cambiar el estado.\"\ntags: [jev, decisiones, routing, scoring, agentes, arquitectura]\nrelated: [caso-jev-director-narrativo, modelos-guiados-el-entorno-es-la-politica, orquestacion]\narea: Gobierno de agentes\nglyph: ◈\nhue: rgba(168,106,255,.24)\n---\n\n# Jev: decisiones pequeñas dentro de sistemas grandes\n\n## Una pregunta distinta a «escribime una respuesta»\n\nMuchos pasos de una aplicación con IA no necesitan otro párrafo. Necesitan saber **qué hacer a continuación**: a qué equipo enviar un pedido, si una afirmación está respaldada, qué candidato revisar primero o si vale la pena llamar a un modelo más costoso.\n\n[Jev 1.13](https://openrouter.ai/typesafe/jev-1.13), de TypeSafe, está diseñado para ese tipo de decisiones. Recibe texto o estado estructurado y devuelve respuestas tipadas, no prosa libre. La [documentación de System One](https://docs.typesafe.ai/concepts/system-one) distingue tres primitivas:\n\n| Primitiva | Pregunta | Respuesta |\n| --- | --- | --- |\n| **Choice** | ¿Cuál de estas opciones describe mejor el caso? | Una opción y probabilidades |\n| **Score** | ¿Dónde cae el caso en una escala definida? | Una puntuación sobre los niveles configurados |\n| **Noul** | ¿Se cumple esta condición? | Una probabilidad entre 0 y 1 |\n\nLas opciones y los criterios los define la aplicación. Jev juzga un estado dentro de ese marco; el código decide qué acción corresponde, con sus propias reglas y permisos.\n\n## Cuatro lugares donde tiene sentido probarlo\n\n### Routing y clasificación\n\nUna solicitud entrante puede ir a soporte técnico, facturación o revisión manual. Si la elección es ambigua, la aplicación puede pedirle a Jev una categoría y enviar los casos de baja confianza a una persona. La misma idea sirve para clasificar incidentes o separar señales útiles del ruido en una cola.\n\n### Scoring y orden de candidatos\n\nCuando ya existe una lista acotada de opciones, Jev puede puntuar cuáles parecen más pertinentes: recuerdos recuperados, alertas o tareas por revisar. Primero conviene reducir el conjunto con filtros baratos; pedir una decisión sobre toda la base aumenta costo y ruido.\n\n### Gates antes de persistir\n\nUn LLM generativo puede extraer datos de una conversación, pero redactar una afirmación no la convierte en un hecho. Un gate puede evaluar si hay evidencia, si el dato parece duradero o si contradice lo ya registrado. Las mutaciones siguen pasando por validación e idempotencia del sistema.\n\n### Escalamiento entre modelos\n\nSi la tarea sólo requiere elegir entre rutas conocidas, quizá no haga falta llamar a un modelo de razonamiento largo. Jev puede ayudar a derivar casos claros y dejar los difíciles para otro modelo o una revisión humana. El ahorro real se mide junto con los errores de derivación: abaratar una llamada a costa de perder casos importantes sería una pésima cuenta.\n\n## La confianza no es un permiso\n\nUna probabilidad alta no demuestra que la respuesta individual sea correcta. TypeSafe describe la calibración como una propiedad que se mide sobre conjuntos de predicciones, no como una garantía por caso. Hay que probar con datos del dominio, idiomas reales y ejemplos difíciles antes de elegir umbrales.\n\nAdemás, *Score* usa la escala configurada: si los criterios tienen cinco niveles, no se debe interpretar su valor crudo como un número entre 0 y 1 sin normalizarlo. Y una decisión bien formada tampoco autoriza por sí misma un envío, una escritura o una publicación.\n\nLa arquitectura útil suele tener cuatro piezas: **estado relevante → pregunta acotada → respuesta tipada → regla determinista**. Se registran las decisiones para poder comparar aciertos y errores; ante fallos del proveedor, la aplicación elige un fallback explícito.\n\n## Qué uso terminó siendo concreto\n\nEn una v2 de ficción interactiva probamos a Jev como parte de un Director que observa escenas y decide qué relaciones, hechos, temas y promesas dejan consecuencias. Ahí la pregunta no era «escribí una escena mejor», sino «¿qué cambió realmente y quién puede recordarlo?».\n\nEl diseño, las correcciones encontradas en las pruebas y sus límites están en [el caso del Director narrativo](/entrada/caso-jev-director-narrativo). Es un ejemplo de aplicación; routing, scoring y gates son otros puntos de partida que requieren su propia evaluación.\n\n"
    },
    {
      "slug": "gentle-ai-engram-memoria-y-proceso",
      "title": "Gentle AI y Engram: memoria y proceso para agentes de código",
      "summary": "Qué aporta un configurador de entorno y qué resuelve una memoria persistente cuando el trabajo de agentes cruza sesiones, herramientas y proyectos.",
      "type": "editorial",
      "order": 14,
      "tags": [
        "gentle-ai",
        "engram",
        "memoria",
        "agentes",
        "gobierno",
        "workflow"
      ],
      "related": [
        "orquestacion",
        "continuidad-y-observabilidad",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◈",
      "hue": "rgba(168,106,255,.24)",
      "file": "gentle-ai-engram-memoria-y-proceso.md",
      "html": "<blockquote>\n<p>Revisión documental: 12 de octubre de 2026. Las integraciones y sus capacidades varían; esta revisión no implica una nueva prueba del entorno.</p>\n</blockquote>\n<h2 id=\"el-problema-no-empieza-cuando-el-agente-se-equivoca\">El problema no empieza cuando el agente se equivoca</h2>\n<p>Un agente puede terminar una tarea correctamente y, al abrir una sesión nueva, volver a preguntar por decisiones que el equipo ya tomó. También puede recordar una regla vieja, aplicar un proceso enorme a un cambio trivial o entregar código sin una prueba verificable. Son fallas distintas: continuidad, vigencia del contexto y evidencia del resultado.</p>\n<p>El ecosistema de <a href=\"https://gentlemanprogramming.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Gentleman Programming</a> propone dos piezas relacionadas. <strong>Gentle AI</strong> configura los agentes de código que ya usás con componentes de memoria, flujo de trabajo, skills y revisión. <strong>Engram</strong> aporta una memoria persistente, consultable desde distintos agentes. Una pieza organiza el entorno; la otra conserva conocimiento entre sesiones. No hace falta adoptar todo el ecosistema para evaluar cada una.</p>\n<h2 id=\"gentle-ai-configurar-el-modo-de-trabajo\">Gentle AI: configurar el modo de trabajo</h2>\n<p><a href=\"https://github.com/Gentleman-Programming/gentle-ai\" target=\"_blank\" rel=\"noopener noreferrer\">Gentle AI</a> es un configurador, no un modelo ni un agente nuevo. Prepara integraciones para herramientas como Claude Code, OpenCode y Codex, y ofrece componentes y presets para elegir cuánto gobierno necesita el entorno. La <a href=\"https://github.com/Gentleman-Programming/gentle-ai/blob/main/docs/intended-usage.md\" target=\"_blank\" rel=\"noopener noreferrer\">guía de uso previsto</a> describe <strong>Organic Driven Development (ODD)</strong> como el camino cotidiano: explorar el proyecto, hacer cambios entendidos con un flujo liviano, verificar el resultado y dejar una referencia recuperable cuando el trabajo crece.</p>\n<p>Esa proporcionalidad importa. Si corregir una etiqueta exige el mismo ritual que migrar un módulo, el equipo termina ignorando el ritual. Para un cambio grande, en cambio, una descripción de la feature y sus avances permite que otra sesión retome el trabajo sin reconstruir la historia a partir de commits y chats.</p>\n<table>\n<thead>\n<tr>\n<th>Capa</th>\n<th>Pregunta que responde</th>\n<th>Evidencia esperada</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Configuración</td>\n<td>¿Qué herramientas y reglas tiene este agente?</td>\n<td>Componentes instalados y diagnóstico del entorno</td>\n</tr>\n<tr>\n<td>Proceso</td>\n<td>¿Cómo se explora, implementa y retoma esta tarea?</td>\n<td>Alcance, decisiones y estado actual</td>\n</tr>\n<tr>\n<td>Verificación</td>\n<td>¿Qué comportamiento se comprobó?</td>\n<td>Pruebas, revisión o chequeos pertinentes</td>\n</tr>\n<tr>\n<td>Memoria</td>\n<td>¿Qué conviene recuperar en la próxima sesión?</td>\n<td>Observaciones con contexto y proyecto</td>\n</tr>\n</tbody>\n</table>\n<p>La <a href=\"https://github.com/Gentleman-Programming/gentle-ai\" target=\"_blank\" rel=\"noopener noreferrer\">documentación actual</a> establece test-first cuando existe una prueba pertinente y ejecutable; si no, exige explicar la excepción y verificar por otra vía. RDD está habilitado por defecto con opt-out, respeta desactivaciones explícitas y vincula la revisión al candidato congelado. La revisión automática se reserva para candidatos de alto riesgo; las capacidades difieren por integración. Eso no autoriza commit, push ni release. Un workflow prolijo no convierte una comprobación superficial en evidencia.</p>\n<h2 id=\"engram-recordar-decisiones-no-grabar-todo\">Engram: recordar decisiones, no grabar todo</h2>\n<p><a href=\"https://github.com/Gentleman-Programming/engram\" target=\"_blank\" rel=\"noopener noreferrer\">Engram</a> es una memoria local para agentes, implementada como binario de Go con SQLite y búsqueda de texto completo. Expone CLI, servidor MCP, API HTTP y TUI. El agente puede guardar y buscar observaciones sobre decisiones, descubrimientos, errores resueltos o convenciones del proyecto. La documentación lo presenta como <strong>memoria curada</strong>, no como un registro indiscriminado de cada conversación.</p>\n<p>Supongamos que un portal usa IDs largos como strings para no perder precisión en JavaScript. Al terminar una sesión, guardar «los IDs de CRM se tratan como strings en API, ordenamiento y exportación; revisar el adaptador antes de normalizarlos» sirve más que conservar cien mensajes donde apareció el tema. La próxima sesión puede buscar la decisión, comprobar que sigue vigente en el código y trabajar desde ahí.</p>\n<p>Esa última comprobación es crucial. Una memoria es una pista con procedencia, no una orden superior ni la fuente de verdad del repositorio. Si el contrato cambió, hay que corregir o reemplazar la observación. Engram mantiene SQLite local como fuente autoritativa: Git Sync exporta fragmentos portables y Engram Cloud ofrece replicación y acceso compartido opcionales por proyecto. Compartir memoria exige definir quién puede escribir, qué información se guarda y cómo se resuelven decisiones contradictorias.</p>\n<h2 id=\"un-punto-dulce-para-un-entorno-con-varios-agentes\">Un punto dulce para un entorno con varios agentes</h2>\n<p>En un entorno donde un coordinador deriva trabajo a distintos modelos, cada worker debería recibir el contexto mínimo necesario: objetivo, límites, estado del repo y decisiones relevantes. Engram puede ayudar a recuperar estas últimas; Gentle AI puede dar una configuración y un recorrido de trabajo repetibles. La coordinación y la autorización de cambios siguen perteneciendo al sistema que dirige el trabajo y a las personas responsables.</p>\n<p>Un piloto razonable sería:</p>\n<ol>\n<li>Elegir <strong>un repositorio</strong> con decisiones que se repiten entre sesiones.</li>\n<li>Guardar pocas observaciones útiles: contratos, convenciones, errores difíciles y motivos de arquitectura. Vincularlas al código o documento vigente.</li>\n<li>Pedir al agente que busque contexto al empezar y que <strong>verifique cada recuerdo</strong> antes de aplicarlo.</li>\n<li>Medir durante varias tareas cuántas aclaraciones se evitaron, cuántos recuerdos fueron pertinentes y cuántos estaban desactualizados.</li>\n<li>Recién entonces sumar un proceso de trabajo o revisión donde la frecuencia y el riesgo del cambio lo justifiquen.</li>\n</ol>\n<p>No conviene medir el éxito por la cantidad de recuerdos guardados. La señal útil es que la próxima persona o agente pueda tomar una decisión correcta con menos reconstrucción y con evidencia visible.</p>\n<h2 id=\"el-limite-que-define-si-sirve\">El límite que define si sirve</h2>\n<p>La memoria persistente introduce una deuda propia: información obsoleta que suena convincente. El proceso también puede volverse burocracia si se aplica sin escala. Por eso hay que separar <strong>recuerdo</strong>, <strong>estado actual</strong>, <strong>prueba</strong> y <strong>permiso</strong>. Ninguna observación habilita por sí sola una escritura en producción; ningún checklist demuestra que se ejecutó el comando correcto.</p>\n<p>Gentle AI y Engram son interesantes cuando el dolor real es volver a explicar el contexto, perder decisiones entre herramientas o no poder retomar trabajo delegado. Probados por separado y con métricas simples, pueden darle continuidad al entorno sin convertir cada tarea en una ceremonia.</p>\n",
      "headings": [
        {
          "label": "El problema no empieza cuando el agente se equivoca",
          "depth": 2,
          "id": "el-problema-no-empieza-cuando-el-agente-se-equivoca"
        },
        {
          "label": "Gentle AI: configurar el modo de trabajo",
          "depth": 2,
          "id": "gentle-ai-configurar-el-modo-de-trabajo"
        },
        {
          "label": "Engram: recordar decisiones, no grabar todo",
          "depth": 2,
          "id": "engram-recordar-decisiones-no-grabar-todo"
        },
        {
          "label": "Un punto dulce para un entorno con varios agentes",
          "depth": 2,
          "id": "un-punto-dulce-para-un-entorno-con-varios-agentes"
        },
        {
          "label": "El límite que define si sirve",
          "depth": 2,
          "id": "el-limite-que-define-si-sirve"
        }
      ],
      "raw": "---\nslug: gentle-ai-engram-memoria-y-proceso\ntitle: \"Gentle AI y Engram: memoria y proceso para agentes de código\"\ntype: editorial\norder: 14\nsummary: \"Qué aporta un configurador de entorno y qué resuelve una memoria persistente cuando el trabajo de agentes cruza sesiones, herramientas y proyectos.\"\ntags: [gentle-ai, engram, memoria, agentes, gobierno, workflow]\nrelated: [orquestacion, continuidad-y-observabilidad, modelos-guiados-el-entorno-es-la-politica]\narea: Gobierno de agentes\nglyph: ◈\nhue: rgba(168,106,255,.24)\n---\n\n# Gentle AI y Engram: memoria y proceso para agentes de código\n\n> Revisión documental: 12 de octubre de 2026. Las integraciones y sus capacidades varían; esta revisión no implica una nueva prueba del entorno.\n\n## El problema no empieza cuando el agente se equivoca\n\nUn agente puede terminar una tarea correctamente y, al abrir una sesión nueva, volver a preguntar por decisiones que el equipo ya tomó. También puede recordar una regla vieja, aplicar un proceso enorme a un cambio trivial o entregar código sin una prueba verificable. Son fallas distintas: continuidad, vigencia del contexto y evidencia del resultado.\n\nEl ecosistema de [Gentleman Programming](https://gentlemanprogramming.com/) propone dos piezas relacionadas. **Gentle AI** configura los agentes de código que ya usás con componentes de memoria, flujo de trabajo, skills y revisión. **Engram** aporta una memoria persistente, consultable desde distintos agentes. Una pieza organiza el entorno; la otra conserva conocimiento entre sesiones. No hace falta adoptar todo el ecosistema para evaluar cada una.\n\n## Gentle AI: configurar el modo de trabajo\n\n[Gentle AI](https://github.com/Gentleman-Programming/gentle-ai) es un configurador, no un modelo ni un agente nuevo. Prepara integraciones para herramientas como Claude Code, OpenCode y Codex, y ofrece componentes y presets para elegir cuánto gobierno necesita el entorno. La [guía de uso previsto](https://github.com/Gentleman-Programming/gentle-ai/blob/main/docs/intended-usage.md) describe **Organic Driven Development (ODD)** como el camino cotidiano: explorar el proyecto, hacer cambios entendidos con un flujo liviano, verificar el resultado y dejar una referencia recuperable cuando el trabajo crece.\n\nEsa proporcionalidad importa. Si corregir una etiqueta exige el mismo ritual que migrar un módulo, el equipo termina ignorando el ritual. Para un cambio grande, en cambio, una descripción de la feature y sus avances permite que otra sesión retome el trabajo sin reconstruir la historia a partir de commits y chats.\n\n| Capa | Pregunta que responde | Evidencia esperada |\n| --- | --- | --- |\n| Configuración | ¿Qué herramientas y reglas tiene este agente? | Componentes instalados y diagnóstico del entorno |\n| Proceso | ¿Cómo se explora, implementa y retoma esta tarea? | Alcance, decisiones y estado actual |\n| Verificación | ¿Qué comportamiento se comprobó? | Pruebas, revisión o chequeos pertinentes |\n| Memoria | ¿Qué conviene recuperar en la próxima sesión? | Observaciones con contexto y proyecto |\n\nLa [documentación actual](https://github.com/Gentleman-Programming/gentle-ai) establece test-first cuando existe una prueba pertinente y ejecutable; si no, exige explicar la excepción y verificar por otra vía. RDD está habilitado por defecto con opt-out, respeta desactivaciones explícitas y vincula la revisión al candidato congelado. La revisión automática se reserva para candidatos de alto riesgo; las capacidades difieren por integración. Eso no autoriza commit, push ni release. Un workflow prolijo no convierte una comprobación superficial en evidencia.\n\n## Engram: recordar decisiones, no grabar todo\n\n[Engram](https://github.com/Gentleman-Programming/engram) es una memoria local para agentes, implementada como binario de Go con SQLite y búsqueda de texto completo. Expone CLI, servidor MCP, API HTTP y TUI. El agente puede guardar y buscar observaciones sobre decisiones, descubrimientos, errores resueltos o convenciones del proyecto. La documentación lo presenta como **memoria curada**, no como un registro indiscriminado de cada conversación.\n\nSupongamos que un portal usa IDs largos como strings para no perder precisión en JavaScript. Al terminar una sesión, guardar «los IDs de CRM se tratan como strings en API, ordenamiento y exportación; revisar el adaptador antes de normalizarlos» sirve más que conservar cien mensajes donde apareció el tema. La próxima sesión puede buscar la decisión, comprobar que sigue vigente en el código y trabajar desde ahí.\n\nEsa última comprobación es crucial. Una memoria es una pista con procedencia, no una orden superior ni la fuente de verdad del repositorio. Si el contrato cambió, hay que corregir o reemplazar la observación. Engram mantiene SQLite local como fuente autoritativa: Git Sync exporta fragmentos portables y Engram Cloud ofrece replicación y acceso compartido opcionales por proyecto. Compartir memoria exige definir quién puede escribir, qué información se guarda y cómo se resuelven decisiones contradictorias.\n\n## Un punto dulce para un entorno con varios agentes\n\nEn un entorno donde un coordinador deriva trabajo a distintos modelos, cada worker debería recibir el contexto mínimo necesario: objetivo, límites, estado del repo y decisiones relevantes. Engram puede ayudar a recuperar estas últimas; Gentle AI puede dar una configuración y un recorrido de trabajo repetibles. La coordinación y la autorización de cambios siguen perteneciendo al sistema que dirige el trabajo y a las personas responsables.\n\nUn piloto razonable sería:\n\n1. Elegir **un repositorio** con decisiones que se repiten entre sesiones.\n2. Guardar pocas observaciones útiles: contratos, convenciones, errores difíciles y motivos de arquitectura. Vincularlas al código o documento vigente.\n3. Pedir al agente que busque contexto al empezar y que **verifique cada recuerdo** antes de aplicarlo.\n4. Medir durante varias tareas cuántas aclaraciones se evitaron, cuántos recuerdos fueron pertinentes y cuántos estaban desactualizados.\n5. Recién entonces sumar un proceso de trabajo o revisión donde la frecuencia y el riesgo del cambio lo justifiquen.\n\nNo conviene medir el éxito por la cantidad de recuerdos guardados. La señal útil es que la próxima persona o agente pueda tomar una decisión correcta con menos reconstrucción y con evidencia visible.\n\n## El límite que define si sirve\n\nLa memoria persistente introduce una deuda propia: información obsoleta que suena convincente. El proceso también puede volverse burocracia si se aplica sin escala. Por eso hay que separar **recuerdo**, **estado actual**, **prueba** y **permiso**. Ninguna observación habilita por sí sola una escritura en producción; ningún checklist demuestra que se ejecutó el comando correcto.\n\nGentle AI y Engram son interesantes cuando el dolor real es volver a explicar el contexto, perder decisiones entre herramientas o no poder retomar trabajo delegado. Probados por separado y con métricas simples, pueden darle continuidad al entorno sin convertir cada tarea en una ceremonia.\n"
    },
    {
      "slug": "tailscale-red-privada-identidad",
      "title": "Tailscale: una red privada que empieza por la identidad",
      "summary": "Tailnets, WireGuard, conexiones directas y relays: un mapa para entender qué resuelve Tailscale y qué responsabilidades siguen siendo tuyas.",
      "type": "concept",
      "order": 14,
      "tags": [
        "tailscale",
        "redes",
        "wireguard",
        "identidad",
        "infraestructura"
      ],
      "related": [
        "tailscale-permisos-grants",
        "tailscale-entorno-agentes",
        "acceso-portatil-orca"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◈",
      "hue": "rgba(87,217,232,.24)",
      "file": "tailscale-red-privada-identidad.md",
      "html": "<h2 id=\"el-problema-de-las-maquinas-dispersas\">El problema de las máquinas dispersas</h2>\n<p>Una estación con WSL, una notebook de viaje y una VPS pueden tener todo lo necesario para colaborar y, aun así, no poder hablarse con facilidad. Las direcciones cambian, hay NAT de por medio y publicar SSH o un panel de administración en Internet suma una superficie que después hay que cuidar.</p>\n<p>Tailscale permite conectar usuarios y dispositivos en una <strong>tailnet</strong>, una red privada superpuesta a las redes donde ya viven. Cada dispositivo entra autenticado, recibe una dirección estable dentro de esa red y puede encontrar a otros por nombre con MagicDNS. Instalarlo no convierte automáticamente a cada servicio en una aplicación segura: primero hay que definir quién se conecta y qué puede alcanzar. <a href=\"https://tailscale.com/docs/concepts/tailnet\" target=\"_blank\" rel=\"noopener noreferrer\">Qué es una tailnet</a> · <a href=\"https://tailscale.com/docs/features/magicdns\" target=\"_blank\" rel=\"noopener noreferrer\">MagicDNS</a></p>\n<h2 id=\"que-ocurre-cuando-dos-nodos-se-hablan\">Qué ocurre cuando dos nodos se hablan</h2>\n<p>WireGuard cifra el tráfico entre los dispositivos. El plano de control coordina identidades, claves y políticas; el plano de datos transporta los paquetes cifrados. Tailscale intenta establecer una conexión directa por UDP. Si la red no lo permite, puede usar un peer relay de la tailnet o un relay DERP. En los tres casos el tráfico entre los extremos mantiene cifrado de extremo a extremo; lo que suele cambiar es la latencia y el caudal. <a href=\"https://tailscale.com/docs/concepts/control-data-planes\" target=\"_blank\" rel=\"noopener noreferrer\">Plano de control y de datos</a> · <a href=\"https://tailscale.com/docs/reference/connection-types\" target=\"_blank\" rel=\"noopener noreferrer\">Tipos de conexión</a></p>\n<p>La distinción importa: que un salto pase por un relay no significa que el servicio al otro lado se haya vuelto público. También evita prometer una conexión directa que depende del NAT, los firewalls y la red de cada extremo.</p>\n<h2 id=\"cuatro-piezas-para-no-mezclar-conceptos\">Cuatro piezas para no mezclar conceptos</h2>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Responde a</th>\n<th>Ejemplo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Tailnet</td>\n<td>¿Qué identidades y dispositivos pertenecen a la red?</td>\n<td>Notebook, estación y VPS</td>\n</tr>\n<tr>\n<td>MagicDNS</td>\n<td>¿Cómo encuentro un nodo por un nombre estable?</td>\n<td><code>estacion</code> en vez de una IP cambiante</td>\n</tr>\n<tr>\n<td>Grant</td>\n<td>¿Quién puede llegar a qué destino y puerto?</td>\n<td>Notebook → estación por TCP 22</td>\n</tr>\n<tr>\n<td>Servicio</td>\n<td>¿Quién puede usar la aplicación una vez conectado?</td>\n<td>Login y permisos del panel interno</td>\n</tr>\n</tbody>\n</table>\n<p>Un grant de red habilita una conexión; no implementa por sí solo las autorizaciones de una app. Y un nombre de MagicDNS simplifica el destino; no otorga permisos. Esas dos confusiones son bastante caras cuando el primer prototipo empieza a crecer.</p>\n<h2 id=\"donde-si-cambia-el-trabajo-cotidiano\">Dónde sí cambia el trabajo cotidiano</h2>\n<p>Desde una notebook podés entrar por SSH al entorno que ya tiene tus repos y agentes. Una VPS puede aceptar conexiones de administración dentro de la tailnet sin exponer ese puerto públicamente. Un panel de desarrollo puede compartirse con un equipo pequeño por Tailscale Serve, sujeto a las reglas de acceso de la red. En cada caso la identidad y el destino quedan explícitos. <a href=\"https://tailscale.com/docs/features/tailscale-serve\" target=\"_blank\" rel=\"noopener noreferrer\">Serve</a></p>\n<p>Tailscale tampoco enciende una computadora apagada, arregla un proceso caído ni sustituye backups. Si Orca vive en una estación de trabajo, el acceso remoto depende de que esa estación y WSL estén disponibles. La guía <a href=\"/entrada/acceso-portatil-orca\">Acceso portátil a Orca</a> desarrolla esa topología.</p>\n<h2 id=\"una-primera-decision-razonable\">Una primera decisión razonable</h2>\n<p>Elegí <strong>un cliente, un host y un servicio</strong>. Incorporá ambos dispositivos a la tailnet; comprobá el nombre y la conexión; limitá el acceso al puerto que realmente necesitás. Recién después sumá otros destinos. La próxima entrada baja esa decisión a políticas, grants y pruebas negativas: <a href=\"/entrada/tailscale-permisos-grants\">Permisos que se pueden explicar</a>.</p>\n",
      "headings": [
        {
          "label": "El problema de las máquinas dispersas",
          "depth": 2,
          "id": "el-problema-de-las-maquinas-dispersas"
        },
        {
          "label": "Qué ocurre cuando dos nodos se hablan",
          "depth": 2,
          "id": "que-ocurre-cuando-dos-nodos-se-hablan"
        },
        {
          "label": "Cuatro piezas para no mezclar conceptos",
          "depth": 2,
          "id": "cuatro-piezas-para-no-mezclar-conceptos"
        },
        {
          "label": "Dónde sí cambia el trabajo cotidiano",
          "depth": 2,
          "id": "donde-si-cambia-el-trabajo-cotidiano"
        },
        {
          "label": "Una primera decisión razonable",
          "depth": 2,
          "id": "una-primera-decision-razonable"
        }
      ],
      "raw": "---\nslug: tailscale-red-privada-identidad\ntitle: \"Tailscale: una red privada que empieza por la identidad\"\ntype: concept\norder: 14\nsummary: \"Tailnets, WireGuard, conexiones directas y relays: un mapa para entender qué resuelve Tailscale y qué responsabilidades siguen siendo tuyas.\"\ntags: [tailscale, redes, wireguard, identidad, infraestructura]\nrelated: [tailscale-permisos-grants, tailscale-entorno-agentes, acceso-portatil-orca]\narea: Gobierno de agentes\nglyph: ◈\nhue: rgba(87,217,232,.24)\n---\n\n# Tailscale: una red privada que empieza por la identidad\n\n## El problema de las máquinas dispersas\n\nUna estación con WSL, una notebook de viaje y una VPS pueden tener todo lo necesario para colaborar y, aun así, no poder hablarse con facilidad. Las direcciones cambian, hay NAT de por medio y publicar SSH o un panel de administración en Internet suma una superficie que después hay que cuidar.\n\nTailscale permite conectar usuarios y dispositivos en una **tailnet**, una red privada superpuesta a las redes donde ya viven. Cada dispositivo entra autenticado, recibe una dirección estable dentro de esa red y puede encontrar a otros por nombre con MagicDNS. Instalarlo no convierte automáticamente a cada servicio en una aplicación segura: primero hay que definir quién se conecta y qué puede alcanzar. [Qué es una tailnet](https://tailscale.com/docs/concepts/tailnet) · [MagicDNS](https://tailscale.com/docs/features/magicdns)\n\n## Qué ocurre cuando dos nodos se hablan\n\nWireGuard cifra el tráfico entre los dispositivos. El plano de control coordina identidades, claves y políticas; el plano de datos transporta los paquetes cifrados. Tailscale intenta establecer una conexión directa por UDP. Si la red no lo permite, puede usar un peer relay de la tailnet o un relay DERP. En los tres casos el tráfico entre los extremos mantiene cifrado de extremo a extremo; lo que suele cambiar es la latencia y el caudal. [Plano de control y de datos](https://tailscale.com/docs/concepts/control-data-planes) · [Tipos de conexión](https://tailscale.com/docs/reference/connection-types)\n\nLa distinción importa: que un salto pase por un relay no significa que el servicio al otro lado se haya vuelto público. También evita prometer una conexión directa que depende del NAT, los firewalls y la red de cada extremo.\n\n## Cuatro piezas para no mezclar conceptos\n\n| Pieza | Responde a | Ejemplo |\n| --- | --- | --- |\n| Tailnet | ¿Qué identidades y dispositivos pertenecen a la red? | Notebook, estación y VPS |\n| MagicDNS | ¿Cómo encuentro un nodo por un nombre estable? | `estacion` en vez de una IP cambiante |\n| Grant | ¿Quién puede llegar a qué destino y puerto? | Notebook → estación por TCP 22 |\n| Servicio | ¿Quién puede usar la aplicación una vez conectado? | Login y permisos del panel interno |\n\nUn grant de red habilita una conexión; no implementa por sí solo las autorizaciones de una app. Y un nombre de MagicDNS simplifica el destino; no otorga permisos. Esas dos confusiones son bastante caras cuando el primer prototipo empieza a crecer.\n\n## Dónde sí cambia el trabajo cotidiano\n\nDesde una notebook podés entrar por SSH al entorno que ya tiene tus repos y agentes. Una VPS puede aceptar conexiones de administración dentro de la tailnet sin exponer ese puerto públicamente. Un panel de desarrollo puede compartirse con un equipo pequeño por Tailscale Serve, sujeto a las reglas de acceso de la red. En cada caso la identidad y el destino quedan explícitos. [Serve](https://tailscale.com/docs/features/tailscale-serve)\n\nTailscale tampoco enciende una computadora apagada, arregla un proceso caído ni sustituye backups. Si Orca vive en una estación de trabajo, el acceso remoto depende de que esa estación y WSL estén disponibles. La guía [Acceso portátil a Orca](/entrada/acceso-portatil-orca) desarrolla esa topología.\n\n## Una primera decisión razonable\n\nElegí **un cliente, un host y un servicio**. Incorporá ambos dispositivos a la tailnet; comprobá el nombre y la conexión; limitá el acceso al puerto que realmente necesitás. Recién después sumá otros destinos. La próxima entrada baja esa decisión a políticas, grants y pruebas negativas: [Permisos que se pueden explicar](/entrada/tailscale-permisos-grants).\n"
    },
    {
      "slug": "tailscale-permisos-grants",
      "title": "Tailscale: permisos que se pueden explicar",
      "summary": "Diseñar grants por identidad, destino y puerto; comprobar accesos permitidos y denegados; distinguir red, SSH y permisos de aplicación.",
      "type": "guide",
      "order": 15,
      "tags": [
        "tailscale",
        "grants",
        "acl",
        "ssh",
        "seguridad",
        "politicas"
      ],
      "related": [
        "tailscale-red-privada-identidad",
        "tailscale-entorno-agentes",
        "acceso-portatil-orca"
      ],
      "area": "Gobierno de agentes",
      "glyph": "⚿",
      "hue": "rgba(168,106,255,.24)",
      "file": "tailscale-permisos-grants.md",
      "html": "<h2 id=\"estar-en-la-tailnet-no-alcanza\">Estar en la tailnet no alcanza</h2>\n<p>El primer prototipo suele conectar dos dispositivos y celebrar que se ven. Para operar un entorno con agentes, VPS y paneles internos hace falta una pregunta más precisa: <strong>¿qué identidad puede iniciar una conexión a qué destino y en qué puerto?</strong></p>\n<p>Tailscale recomienda <strong>grants</strong> para expresar esos permisos. Cada grant define <code>src</code>, <code>dst</code> y capacidades de red (<code>ip</code>) o de aplicación (<code>app</code>). Las conexiones que no tengan una regla que las permita quedan denegadas; atención, porque una tailnet recién creada suele traer una política inicial <em>allow all</em>. Hay que revisar y reemplazar esa regla amplia antes de dar por hecho el mínimo privilegio. <a href=\"https://tailscale.com/docs/features/access-control/grants\" target=\"_blank\" rel=\"noopener noreferrer\">Grants</a> · <a href=\"https://tailscale.com/docs/features/access-control/acls\" target=\"_blank\" rel=\"noopener noreferrer\">Política inicial y ACL</a></p>\n<h2 id=\"dibujar-la-politica-antes-del-archivo\">Dibujar la política antes del archivo</h2>\n<p>Supongamos una notebook, un host de desarrollo y una VPS. El objetivo es notebook → host por SSH, host → VPS por HTTPS, y ningún acceso de la notebook a la base de datos de la VPS. Esa matriz se puede revisar sin conocer la sintaxis de HuJSON.</p>\n<table>\n<thead>\n<tr>\n<th>Origen</th>\n<th>Destino</th>\n<th>Puerto</th>\n<th>Decisión</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Notebook de trabajo</td>\n<td>Host de desarrollo</td>\n<td>TCP 22</td>\n<td>Permitir</td>\n</tr>\n<tr>\n<td>Host de desarrollo</td>\n<td>API interna de la VPS</td>\n<td>TCP 443</td>\n<td>Permitir</td>\n</tr>\n<tr>\n<td>Notebook de trabajo</td>\n<td>Base de datos de la VPS</td>\n<td>TCP 5432</td>\n<td>Denegar</td>\n</tr>\n</tbody>\n</table>\n<p>Una forma esquemática de llevarla a grants sería:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-json\"><span class=\"line\"><span style=\"color:#8E899D\">{</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  \"</span><span style=\"color:#FFE8A1\">tagOwners</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> {</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">tag:dev-host</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"autogroup:admin\"</span><span style=\"color:#8E899D\">],</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    \"</span><span style=\"color:#FFE8A1\">tag:internal-api</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"autogroup:admin\"</span><span style=\"color:#8E899D\">]</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  },</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  \"</span><span style=\"color:#FFE8A1\">grants</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    {</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">src</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"persona@ejemplo.com\"</span><span style=\"color:#8E899D\">],</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">dst</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"tag:dev-host\"</span><span style=\"color:#8E899D\">],</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">ip</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"tcp:22\"</span><span style=\"color:#8E899D\">]</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    },</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    {</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">src</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"tag:dev-host\"</span><span style=\"color:#8E899D\">],</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">dst</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"tag:internal-api\"</span><span style=\"color:#8E899D\">],</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">      \"</span><span style=\"color:#FFE8A1\">ip</span><span style=\"color:#8E899D\">\"</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"tcp:443\"</span><span style=\"color:#8E899D\">]</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">    }</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  ]</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">}</span></span></code></pre>\n<p>Es un ejemplo para adaptar: los nombres y la identidad son ficticios; los tags sólo tienen sentido si los dispositivos tienen esas etiquetas asignadas. Antes de aplicar una política real, revisá los grants y ACL existentes: una regla amplia que permanezca activa puede seguir habilitando tráfico. Las políticas permiten sumar accesos, no escribir una regla <code>deny</code> para restar los que otra ya concedió. <a href=\"https://tailscale.com/docs/reference/syntax/grants\" target=\"_blank\" rel=\"noopener noreferrer\">Sintaxis de grants</a> · <a href=\"https://tailscale.com/docs/features/tags\" target=\"_blank\" rel=\"noopener noreferrer\">Tags</a></p>\n<p>El <code>src</code> por correo identifica al usuario, no exclusivamente a su notebook: también puede habilitar sus otros dispositivos con identidad de usuario. Para limitarlo a una sola máquina, usá un selector de dispositivo, como su IP de Tailscale o un alias <code>hosts</code>, y verificá el alcance en la vista previa. <a href=\"https://tailscale.com/docs/reference/syntax/grants\" target=\"_blank\" rel=\"noopener noreferrer\">Selectores de grants</a></p>\n<h2 id=\"ssh-tiene-dos-modos-de-operacion\">SSH tiene dos modos de operación</h2>\n<p><strong>SSH habitual sobre Tailscale</strong> conserva <code>sshd</code>, usuarios y claves SSH del host; la tailnet aporta una ruta privada y el grant habilita el puerto. <strong>Tailscale SSH</strong> deja que Tailscale gestione autenticación y autorización SSH en nodos compatibles, con sus propias reglas <code>ssh</code> y opciones como <code>check</code>. Activar sólo el grant de TCP 22 no equivale a haber configurado Tailscale SSH. Tampoco sirve para hacer Tailscale SSH hacia una máquina que sólo está detrás de un subnet router. <a href=\"https://tailscale.com/docs/features/tailscale-ssh\" target=\"_blank\" rel=\"noopener noreferrer\">Tailscale SSH</a></p>\n<p>Si ya existe un flujo SSH que funciona para Orca, el primer paso puede ser conservarlo y limitar la ruta. Una migración a Tailscale SSH merece su propia prueba de usuarios, sesiones y recuperación.</p>\n<h2 id=\"probar-que-el-limite-existe\">Probar que el límite existe</h2>\n<p>Primero usá <strong>Preview rules</strong> para inspeccionar los destinos que ve una identidad y agregá tests de política para las conexiones esperadas. Después probá desde un dispositivo real: SSH al host permitido y conexión al puerto restringido de un destino que esté encendido y escuchando. Un timeout hacia una máquina apagada no demuestra que un grant esté funcionando. <a href=\"https://tailscale.com/docs/features/tailnet-policy-file/manage-tailnet-policies\" target=\"_blank\" rel=\"noopener noreferrer\">Editar y previsualizar políticas</a></p>\n<p>Para diagnosticar, <code>tailscale ping --tsmp</code> verifica conectividad antes de comprobar la política; <code>tailscale ping --icmp</code> verifica conectividad incluyendo las reglas. Si ambos pasan pero la aplicación falla, revisá el puerto, el servicio y sus permisos. Para el puerto concreto, probá el protocolo real: un ping no verifica que TCP 22 o 443 esté habilitado. <a href=\"https://tailscale.com/docs/features/tailnet-policy-file/manage-tailnet-policies\" target=\"_blank\" rel=\"noopener noreferrer\">Diagnóstico de políticas</a></p>\n<p>El resultado que queremos poder escribir en una línea es: «esta identidad llega a este servicio por este puerto; a aquel otro no». Con esa política lista, el <a href=\"/entrada/tailscale-entorno-agentes\">caso de un entorno con agentes</a> muestra dónde ubicar cada conexión.</p>\n",
      "headings": [
        {
          "label": "Estar en la tailnet no alcanza",
          "depth": 2,
          "id": "estar-en-la-tailnet-no-alcanza"
        },
        {
          "label": "Dibujar la política antes del archivo",
          "depth": 2,
          "id": "dibujar-la-politica-antes-del-archivo"
        },
        {
          "label": "SSH tiene dos modos de operación",
          "depth": 2,
          "id": "ssh-tiene-dos-modos-de-operacion"
        },
        {
          "label": "Probar que el límite existe",
          "depth": 2,
          "id": "probar-que-el-limite-existe"
        }
      ],
      "raw": "---\nslug: tailscale-permisos-grants\ntitle: \"Tailscale: permisos que se pueden explicar\"\ntype: guide\norder: 15\nsummary: \"Diseñar grants por identidad, destino y puerto; comprobar accesos permitidos y denegados; distinguir red, SSH y permisos de aplicación.\"\ntags: [tailscale, grants, acl, ssh, seguridad, politicas]\nrelated: [tailscale-red-privada-identidad, tailscale-entorno-agentes, acceso-portatil-orca]\narea: Gobierno de agentes\nglyph: ⚿\nhue: rgba(168,106,255,.24)\n---\n\n# Tailscale: permisos que se pueden explicar\n\n## Estar en la tailnet no alcanza\n\nEl primer prototipo suele conectar dos dispositivos y celebrar que se ven. Para operar un entorno con agentes, VPS y paneles internos hace falta una pregunta más precisa: **¿qué identidad puede iniciar una conexión a qué destino y en qué puerto?**\n\nTailscale recomienda **grants** para expresar esos permisos. Cada grant define `src`, `dst` y capacidades de red (`ip`) o de aplicación (`app`). Las conexiones que no tengan una regla que las permita quedan denegadas; atención, porque una tailnet recién creada suele traer una política inicial *allow all*. Hay que revisar y reemplazar esa regla amplia antes de dar por hecho el mínimo privilegio. [Grants](https://tailscale.com/docs/features/access-control/grants) · [Política inicial y ACL](https://tailscale.com/docs/features/access-control/acls)\n\n## Dibujar la política antes del archivo\n\nSupongamos una notebook, un host de desarrollo y una VPS. El objetivo es notebook → host por SSH, host → VPS por HTTPS, y ningún acceso de la notebook a la base de datos de la VPS. Esa matriz se puede revisar sin conocer la sintaxis de HuJSON.\n\n| Origen | Destino | Puerto | Decisión |\n| --- | --- | --- | --- |\n| Notebook de trabajo | Host de desarrollo | TCP 22 | Permitir |\n| Host de desarrollo | API interna de la VPS | TCP 443 | Permitir |\n| Notebook de trabajo | Base de datos de la VPS | TCP 5432 | Denegar |\n\nUna forma esquemática de llevarla a grants sería:\n\n```json\n{\n  \"tagOwners\": {\n    \"tag:dev-host\": [\"autogroup:admin\"],\n    \"tag:internal-api\": [\"autogroup:admin\"]\n  },\n  \"grants\": [\n    {\n      \"src\": [\"persona@ejemplo.com\"],\n      \"dst\": [\"tag:dev-host\"],\n      \"ip\": [\"tcp:22\"]\n    },\n    {\n      \"src\": [\"tag:dev-host\"],\n      \"dst\": [\"tag:internal-api\"],\n      \"ip\": [\"tcp:443\"]\n    }\n  ]\n}\n```\n\nEs un ejemplo para adaptar: los nombres y la identidad son ficticios; los tags sólo tienen sentido si los dispositivos tienen esas etiquetas asignadas. Antes de aplicar una política real, revisá los grants y ACL existentes: una regla amplia que permanezca activa puede seguir habilitando tráfico. Las políticas permiten sumar accesos, no escribir una regla `deny` para restar los que otra ya concedió. [Sintaxis de grants](https://tailscale.com/docs/reference/syntax/grants) · [Tags](https://tailscale.com/docs/features/tags)\n\nEl `src` por correo identifica al usuario, no exclusivamente a su notebook: también puede habilitar sus otros dispositivos con identidad de usuario. Para limitarlo a una sola máquina, usá un selector de dispositivo, como su IP de Tailscale o un alias `hosts`, y verificá el alcance en la vista previa. [Selectores de grants](https://tailscale.com/docs/reference/syntax/grants)\n\n## SSH tiene dos modos de operación\n\n**SSH habitual sobre Tailscale** conserva `sshd`, usuarios y claves SSH del host; la tailnet aporta una ruta privada y el grant habilita el puerto. **Tailscale SSH** deja que Tailscale gestione autenticación y autorización SSH en nodos compatibles, con sus propias reglas `ssh` y opciones como `check`. Activar sólo el grant de TCP 22 no equivale a haber configurado Tailscale SSH. Tampoco sirve para hacer Tailscale SSH hacia una máquina que sólo está detrás de un subnet router. [Tailscale SSH](https://tailscale.com/docs/features/tailscale-ssh)\n\nSi ya existe un flujo SSH que funciona para Orca, el primer paso puede ser conservarlo y limitar la ruta. Una migración a Tailscale SSH merece su propia prueba de usuarios, sesiones y recuperación.\n\n## Probar que el límite existe\n\nPrimero usá **Preview rules** para inspeccionar los destinos que ve una identidad y agregá tests de política para las conexiones esperadas. Después probá desde un dispositivo real: SSH al host permitido y conexión al puerto restringido de un destino que esté encendido y escuchando. Un timeout hacia una máquina apagada no demuestra que un grant esté funcionando. [Editar y previsualizar políticas](https://tailscale.com/docs/features/tailnet-policy-file/manage-tailnet-policies)\n\nPara diagnosticar, `tailscale ping --tsmp` verifica conectividad antes de comprobar la política; `tailscale ping --icmp` verifica conectividad incluyendo las reglas. Si ambos pasan pero la aplicación falla, revisá el puerto, el servicio y sus permisos. Para el puerto concreto, probá el protocolo real: un ping no verifica que TCP 22 o 443 esté habilitado. [Diagnóstico de políticas](https://tailscale.com/docs/features/tailnet-policy-file/manage-tailnet-policies)\n\nEl resultado que queremos poder escribir en una línea es: «esta identidad llega a este servicio por este puerto; a aquel otro no». Con esa política lista, el [caso de un entorno con agentes](/entrada/tailscale-entorno-agentes) muestra dónde ubicar cada conexión.\n"
    },
    {
      "slug": "comparar-harness-cli-codex-claude-opencode-cline",
      "title": "Comparar harness CLI: Codex, Claude Code, OpenCode V2, Cline y OMP",
      "summary": "Ventajas, diferencias y desventajas de cinco harness de programación: cómo elegirlos, repartir responsabilidades y evaluar el costo real de trabajar con agentes.",
      "type": "editorial",
      "order": 18,
      "tags": [
        "harness",
        "cli",
        "codex",
        "claude-code",
        "opencode",
        "cline",
        "omp",
        "agentes",
        "permisos"
      ],
      "related": [
        "guia-escalado-modelos",
        "terminal-vs-web-superficies-trabajo",
        "orquestacion",
        "enrutamiento-modelo-esfuerzo-rol-harness"
      ],
      "area": "Gobierno de agentes",
      "glyph": "⚿",
      "hue": "rgba(168,106,255,.24)",
      "file": "comparar-harness-cli-codex-claude-opencode-cline.md",
      "html": "<blockquote>\n<p>Actualizada el 12 de octubre de 2026. Las capacidades dependen de la versión y la configuración instalada.</p>\n</blockquote>\n<p>Elegir un agente de programación suele empezar por una pregunta: ¿qué modelo conviene usar? Pero hay otra decisión que cambia el trabajo cotidiano: qué harness va a convertir las respuestas de ese modelo en acciones sobre un proyecto.</p>\n<p>Codex CLI, Claude Code, OpenCode, Cline y Oh My Pi (OMP) pueden ocupar ese lugar. Comparten el objetivo de trabajar con código y herramientas, pero ofrecen distintas maneras de organizar contexto, permisos, extensiones y ejecución. Entender esas diferencias permite elegir con criterio y también combinarlos sin convertir el repositorio en una pelea de cuatro agentes por el mismo archivo.</p>\n<p>Esta comparación distingue capacidades documentadas de recomendaciones editoriales. Los roles sugeridos son una propuesta de uso; no representan un benchmark de calidad, velocidad o costo.</p>\n<h2 id=\"que-es-un-harness-y-que-aporta-la-cli\">Qué es un harness y qué aporta la CLI</h2>\n<p>El modelo interpreta información y propone acciones. El harness administra el ciclo de trabajo: prepara el contexto, expone herramientas, ejecuta llamadas, recoge resultados y permite continuar hasta obtener una entrega o encontrar un bloqueo.</p>\n<p>La CLI es la interfaz de terminal para acceder a ese sistema. Harness y CLI están relacionados, pero no son sinónimos: un mismo agente puede tener terminal, extensión de editor y aplicación de escritorio.</p>\n<p>Esto explica por qué cambiar de interfaz no siempre equivale a cambiar de agente y por qué usar un modelo parecido en dos herramientas puede producir experiencias distintas. Importan las instrucciones que recibe, las herramientas disponibles y la forma en que se gestiona la sesión.</p>\n<p>Para elegir conviene mirar cinco cosas: el modelo disponible, el control de ejecución, la continuidad del contexto, la integración con el proyecto y el costo de operar todo ese conjunto.</p>\n<h2 id=\"codex-cli-y-el-trabajo-dentro-de-limites-explicitos\">Codex CLI y el trabajo dentro de límites explícitos</h2>\n<p>Codex CLI permite inspeccionar un repositorio, editar archivos y ejecutar herramientas locales. Admite trabajo interactivo y automatización mediante <code>codex exec</code>, además de seleccionar modelo, esfuerzo de razonamiento y permisos. <a href=\"https://learn.chatgpt.com/docs/codex/cli\" target=\"_blank\" rel=\"noopener noreferrer\">Documentación oficial</a>.</p>\n<p>Su sandbox establece límites para los comandos que ejecuta, con implementación específica por plataforma. La política de aprobación decide cuándo una acción necesita autorización; es una capa diferente del sandbox. <a href=\"https://learn.chatgpt.com/docs/sandboxing\" target=\"_blank\" rel=\"noopener noreferrer\">Sandbox de Codex</a>.</p>\n<p><strong>Ventaja editorial:</strong> resulta atractivo cuando querés delegar una implementación y revisar una entrega concreta: cambios, comandos ejecutados y validación. El límite de ejecución ayuda a definir qué puede hacer el agente durante ese trabajo.</p>\n<p><strong>Desventaja práctica:</strong> un entorno mal preparado puede bloquear instalaciones, acceso de red o herramientas que el proyecto necesita. Resolverlo exige configurar permisos y dependencias; dar acceso total como respuesta automática elimina una parte del control que motivó la elección.</p>\n<p>Codex también admite proveedores personalizados con un endpoint compatible con Responses API y proveedores locales mediante <code>--oss</code>. No basta con que el servicio ofrezca Chat Completions: hay que validar protocolo, herramientas y autenticación. <a href=\"https://learn.chatgpt.com/docs/config-file/config-advanced\" target=\"_blank\" rel=\"noopener noreferrer\">Configuración de proveedores</a>.</p>\n<p><strong>Dónde lo pondría:</strong> implementación delimitada, diagnóstico de errores y revisión de cambios que se puedan comprobar con las herramientas reales del repositorio.</p>\n<h2 id=\"claude-code-y-la-especializacion-del-flujo-de-trabajo\">Claude Code y la especialización del flujo de trabajo</h2>\n<p>Claude Code dispone de contexto de proyecto mediante <code>CLAUDE.md</code>, skills, MCP, hooks y plugins. Los hooks permiten asociar acciones al ciclo de ejecución. <a href=\"https://code.claude.com/docs/en/features-overview\" target=\"_blank\" rel=\"noopener noreferrer\">Extensiones de Claude Code</a>.</p>\n<p>Sus subagentes pueden tener instrucciones, herramientas y permisos propios, además de contexto separado. Sus solicitudes consumen los límites de uso correspondientes; delegar no vuelve gratuito el trabajo. <a href=\"https://code.claude.com/docs/en/sub-agents\" target=\"_blank\" rel=\"noopener noreferrer\">Subagentes de Claude Code</a>.</p>\n<p><strong>Ventaja editorial:</strong> ofrece piezas útiles para convertir un flujo habitual en una configuración reutilizable. Por ejemplo, separar exploración, implementación y revisión con responsabilidades claras.</p>\n<p><strong>Desventaja práctica:</strong> cada especialización agrega algo que mantener. Instrucciones repetidas, hooks innecesarios y delegaciones demasiado amplias pueden aumentar el consumo y dificultar entender por qué el agente actuó de determinada manera.</p>\n<p>Su propuesta está centrada en el ecosistema Claude. Eso simplifica algunas decisiones, pero conviene considerarlo si buscás una infraestructura de ejecución que alterne entre proveedores independientes.</p>\n<p><strong>Dónde lo pondría:</strong> como candidato a coordinar tareas que requieren dividir responsabilidades y sostener convenciones del proyecto. Ese rol es una decisión de arquitectura, no una afirmación de superioridad frente a Codex.</p>\n<h2 id=\"opencode-v2-y-la-flexibilidad-de-proveedores\">OpenCode V2 y la flexibilidad de proveedores</h2>\n<p>El sitio oficial de OpenCode referencia V2 en su instalación y presenta una herramienta abierta disponible en terminal, editor y escritorio, con soporte para múltiples proveedores y modelos locales. <a href=\"https://opencode.ai/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode</a>. Esta editorial cubre su oferta actual; no atribuye a V2 un listado de mejoras frente a V1 sin una comparación de versiones.</p>\n<p>OpenCode documenta agentes principales, subagentes y configuración de modelos por agente. Incluye Build y Plan, con distinto acceso a herramientas. <a href=\"https://opencode.ai/v2/docs/agents/\" target=\"_blank\" rel=\"noopener noreferrer\">Agentes</a>. Sus permisos permiten autorizar, preguntar o denegar acciones; la documentación describe defaults mayormente permisivos. <a href=\"https://opencode.ai/v2/docs/permissions/\" target=\"_blank\" rel=\"noopener noreferrer\">Permisos</a>.</p>\n<p><strong>Ventaja editorial:</strong> permite diseñar un reparto de modelos según la tarea. Podés probar un proveedor para exploración y otro para implementación sin reemplazar necesariamente toda la interfaz de trabajo.</p>\n<p><strong>Desventaja práctica:</strong> esa libertad traslada decisiones al operador. Hay que evaluar modelos, compatibilidad con herramientas, límites del proveedor y comportamiento ante errores. Que dos modelos aparezcan en el mismo selector no significa que resuelvan una tarea con la misma confiabilidad.</p>\n<p>V2 tiene documentación y esquema propios: <code>permissions</code>, <code>shell</code> y <code>subagent</code> reemplazan nombres de V1. “Allow always” guarda aprobaciones por proyecto; los subagentes usan sus propios permisos. Revisá esos alcances antes de migrar. <a href=\"https://opencode.ai/v2/docs/permissions/\" target=\"_blank\" rel=\"noopener noreferrer\">Permisos V2</a>.</p>\n<p>La configuración de permisos merece atención propia. Una regla del harness y una barrera del sistema operativo son mecanismos diferentes; no corresponde tratarlos como equivalentes.</p>\n<p><strong>Dónde lo pondría:</strong> ejecutores especializados y pruebas controladas de proveedores. Para reducir costos, mediría tareas aceptadas y correcciones posteriores, no solamente precio por token.</p>\n<h2 id=\"cline-y-las-tareas-que-entran-y-salen-de-la-terminal\">Cline y las tareas que entran y salen de la terminal</h2>\n<p>Cline tiene CLI interactiva y modo headless. Documenta ejecución desde pipes, salida JSON, selección de proveedor mediante autenticación y gestión de MCP. También contempla ejecución sin intervención mediante autoaprobación, que puede modificar archivos y ejecutar comandos. <a href=\"https://docs.cline.bot/usage/cli-overview\" target=\"_blank\" rel=\"noopener noreferrer\">CLI de Cline</a>.</p>\n<p><strong>Ventaja editorial:</strong> es un candidato práctico para encargos puntuales que reciben una entrada concreta y devuelven un resultado: analizar un diff, explicar un fallo o preparar una revisión. Su CLI permite incorporar esas tareas a scripts.</p>\n<p><strong>Desventaja práctica:</strong> un encargo aparentemente pequeño puede crecer si no tiene límite. Un pedido de revisión puede terminar convertido en una sesión de implementación si el objetivo y los permisos quedan abiertos. Además, cambiar de proveedor requiere volver a evaluar la calidad del resultado.</p>\n<p>La referencia actual de Cline marca <code>--auto-approve</code> con default <code>true</code> y no ofrece una allowlist/denylist nativa de comandos shell: remite a hooks <code>PreToolUse</code>. No des por hecho que habrá confirmación ni que un encargo de revisión será de sólo lectura. <a href=\"https://docs.cline.bot/usage/cli-overview\" target=\"_blank\" rel=\"noopener noreferrer\">Controles de CLI</a>.</p>\n<p>Headless describe una forma de ejecutar sin interfaz interactiva; no acredita por sí solo aislamiento ni confiabilidad. Para automatizar, hace falta decidir qué cambios están autorizados y cómo se acepta la salida.</p>\n<p><strong>Dónde lo pondría:</strong> como comodín para tareas acotadas y una segunda mirada sobre cambios preparados por otro agente. También puede asumir trabajo principal si encaja mejor con el proyecto; el rol de comodín es una elección operativa.</p>\n<h2 id=\"oh-my-pi-omp-y-la-instrumentacion-del-harness\">Oh My Pi (OMP) y la instrumentación del harness</h2>\n<p>OMP es un fork de Pi orientado a programación. Su propuesta combina acceso a múltiples proveedores con herramientas integradas de búsqueda, LSP, depuración, ejecución y edición con anclajes hash. También admite extensiones y subagentes. <a href=\"https://github.com/can1357/oh-my-pi\" target=\"_blank\" rel=\"noopener noreferrer\">Proyecto OMP</a>.</p>\n<p><strong>Ventaja editorial:</strong> es un candidato sólido para experimentar con una misma familia de modelos sobre superficies de herramientas distintas. Sus herramientas especializadas pueden resultar útiles en navegación simbólica, refactors localizados e inspección de código.</p>\n<p><strong>Desventaja práctica:</strong> más herramientas no garantizan mejor resultado. La integración LSP depende del entorno y del lenguaje, las extensiones requieren mantenimiento y no corresponde equiparar automáticamente sus controles de permisos con el sandbox de Codex.</p>\n<p><strong>Dónde lo pondría:</strong> exploración estructural, cambios acotados y pruebas A/B contra otro harness usando el mismo modelo. Los beneficios alegados por su proyecto deben comprobarse en el repositorio propio; no son un benchmark independiente frente a Codex.</p>\n<h2 id=\"comparacion-de-ventajas-y-costos-operativos\">Comparación de ventajas y costos operativos</h2>\n<p>La siguiente tabla resume el criterio editorial desarrollado arriba.</p>\n<table>\n<thead>\n<tr>\n<th>Harness</th>\n<th>Ventaja para aprovechar</th>\n<th>Desventaja a gestionar</th>\n<th>Rol sugerido</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Codex CLI</td>\n<td>Trabajo local con límites de ejecución configurables</td>\n<td>Fricción si permisos o entorno no acompañan al proyecto</td>\n<td>Implementación y validación delimitadas</td>\n</tr>\n<tr>\n<td>Claude Code</td>\n<td>Especialización mediante contexto, extensiones y subagentes</td>\n<td>Consumo y mantenimiento de la configuración</td>\n<td>Coordinación de responsabilidades</td>\n</tr>\n<tr>\n<td>OpenCode V2</td>\n<td>Flexibilidad para combinar proveedores y agentes</td>\n<td>Evaluación y configuración a cargo del operador</td>\n<td>Ejecutores especializados</td>\n</tr>\n<tr>\n<td>Cline CLI</td>\n<td>Encargos interactivos o integrados a scripts</td>\n<td>Control del alcance y aceptación de la salida</td>\n<td>Comodín y revisión adicional</td>\n</tr>\n<tr>\n<td>OMP</td>\n<td>LSP, herramientas de edición y ejecución extensibles; multiproveedor</td>\n<td>Complejidad de configuración y validación de controles</td>\n<td>Exploración estructural y experimentación entre harnesses</td>\n</tr>\n</tbody>\n</table>\n<p>Los roles se superponen. El enfoque de asignar también el harness por función se desarrolla en <a href=\"/entrada/enrutamiento-modelo-esfuerzo-rol-harness\">Enrutamiento avanzado: modelo, esfuerzo, rol y harness</a>. La tabla propone por dónde empezar a probar cada herramienta, no exclusividades.</p>\n<h2 id=\"como-combinarlos-sin-multiplicar-el-desorden\">Cómo combinarlos sin multiplicar el desorden</h2>\n<p>Una combinación razonable empieza con un responsable de la tarea. Ese agente o persona conserva el objetivo, decide qué se delega y acepta el resultado. Cada ejecutor recibe un encargo que puede terminar de forma verificable.</p>\n<p>Por ejemplo, para corregir una integración:</p>\n<ol>\n<li>El responsable define el contrato esperado y reproduce el error.</li>\n<li>Un ejecutor prepara el cambio en una rama o worktree propio.</li>\n<li>Otro agente revisa el diff con acceso de lectura y busca casos omitidos.</li>\n<li>El responsable comprueba la ejecución real, resuelve observaciones y prepara la entrega.</li>\n</ol>\n<p>El reparto puede hacerse entre estos cinco harness, pero no requiere usarlos todos. Dos herramientas con responsabilidades claras pueden aportar más que cinco sesiones abiertas con contexto duplicado.</p>\n<p>La delegación entre productos necesita una integración explícita: comando, script, API u otro mecanismo disponible. Un subagente nativo de un harness no se convierte automáticamente en una sesión de otro.</p>\n<p>Cada encargo debería definir objetivo, archivos autorizados, restricciones, validación y salida esperada. Ese contrato hace posible cambiar de herramienta sin reconstruir toda la intención del trabajo.</p>\n<h2 id=\"como-evaluar-cual-conviene-en-tu-proyecto\">Cómo evaluar cuál conviene en tu proyecto</h2>\n<p>Elegí algunas tareas representativas: un bug reproducible, una modificación pequeña y una revisión de código. Prepará el mismo punto de partida y registrá modelo, versión, permisos y contexto de cada prueba.</p>\n<p>Compará tiempo hasta obtener un resultado aceptable, intervenciones humanas, costo o consumo de cuota y defectos encontrados después. Cuando cambies simultáneamente de modelo y harness, interpretá el resultado como evaluación de la combinación completa.</p>\n<p>La pregunta que importa es cuánto trabajo confiable obtenés por el costo total. Ese costo incluye revisar, corregir, mantener configuración y recuperar contexto, además de pagar inferencia.</p>\n<h2 id=\"elegir-segun-la-responsabilidad-que-vas-a-delegar\">Elegir según la responsabilidad que vas a delegar</h2>\n<p>Codex, Claude Code, OpenCode, Cline y OMP ofrecen puntos de entrada distintos a un mismo problema: transformar una intención en trabajo ejecutable y revisable.</p>\n<p>La elección mejora cuando el proyecto conserva sus contratos, convenciones y comprobaciones fuera de una sesión particular. Así, el harness puede cambiar y el equipo sigue sabiendo qué había que hacer, qué se hizo y cómo se verificó.</p>\n<p>La autonomía que vale la pena ampliar es la que produce evidencia suficiente para confiar en la entrega.</p>\n",
      "headings": [
        {
          "label": "Qué es un harness y qué aporta la CLI",
          "depth": 2,
          "id": "que-es-un-harness-y-que-aporta-la-cli"
        },
        {
          "label": "Codex CLI y el trabajo dentro de límites explícitos",
          "depth": 2,
          "id": "codex-cli-y-el-trabajo-dentro-de-limites-explicitos"
        },
        {
          "label": "Claude Code y la especialización del flujo de trabajo",
          "depth": 2,
          "id": "claude-code-y-la-especializacion-del-flujo-de-trabajo"
        },
        {
          "label": "OpenCode V2 y la flexibilidad de proveedores",
          "depth": 2,
          "id": "opencode-v2-y-la-flexibilidad-de-proveedores"
        },
        {
          "label": "Cline y las tareas que entran y salen de la terminal",
          "depth": 2,
          "id": "cline-y-las-tareas-que-entran-y-salen-de-la-terminal"
        },
        {
          "label": "Oh My Pi (OMP) y la instrumentación del harness",
          "depth": 2,
          "id": "oh-my-pi-omp-y-la-instrumentacion-del-harness"
        },
        {
          "label": "Comparación de ventajas y costos operativos",
          "depth": 2,
          "id": "comparacion-de-ventajas-y-costos-operativos"
        },
        {
          "label": "Cómo combinarlos sin multiplicar el desorden",
          "depth": 2,
          "id": "como-combinarlos-sin-multiplicar-el-desorden"
        },
        {
          "label": "Cómo evaluar cuál conviene en tu proyecto",
          "depth": 2,
          "id": "como-evaluar-cual-conviene-en-tu-proyecto"
        },
        {
          "label": "Elegir según la responsabilidad que vas a delegar",
          "depth": 2,
          "id": "elegir-segun-la-responsabilidad-que-vas-a-delegar"
        }
      ],
      "raw": "---\nslug: comparar-harness-cli-codex-claude-opencode-cline\ntitle: \"Comparar harness CLI: Codex, Claude Code, OpenCode V2, Cline y OMP\"\ntype: editorial\norder: 18\nsummary: \"Ventajas, diferencias y desventajas de cinco harness de programación: cómo elegirlos, repartir responsabilidades y evaluar el costo real de trabajar con agentes.\"\ntags: [harness, cli, codex, claude-code, opencode, cline, omp, agentes, permisos]\nrelated: [guia-escalado-modelos, terminal-vs-web-superficies-trabajo, orquestacion, enrutamiento-modelo-esfuerzo-rol-harness]\narea: Gobierno de agentes\nglyph: ⚿\nhue: rgba(168,106,255,.24)\n---\n\n# Comparar harness CLI: Codex, Claude Code, OpenCode V2, Cline y OMP\n\n> Actualizada el 12 de octubre de 2026. Las capacidades dependen de la versión y la configuración instalada.\n\nElegir un agente de programación suele empezar por una pregunta: ¿qué modelo conviene usar? Pero hay otra decisión que cambia el trabajo cotidiano: qué harness va a convertir las respuestas de ese modelo en acciones sobre un proyecto.\n\nCodex CLI, Claude Code, OpenCode, Cline y Oh My Pi (OMP) pueden ocupar ese lugar. Comparten el objetivo de trabajar con código y herramientas, pero ofrecen distintas maneras de organizar contexto, permisos, extensiones y ejecución. Entender esas diferencias permite elegir con criterio y también combinarlos sin convertir el repositorio en una pelea de cuatro agentes por el mismo archivo.\n\nEsta comparación distingue capacidades documentadas de recomendaciones editoriales. Los roles sugeridos son una propuesta de uso; no representan un benchmark de calidad, velocidad o costo.\n\n## Qué es un harness y qué aporta la CLI\n\nEl modelo interpreta información y propone acciones. El harness administra el ciclo de trabajo: prepara el contexto, expone herramientas, ejecuta llamadas, recoge resultados y permite continuar hasta obtener una entrega o encontrar un bloqueo.\n\nLa CLI es la interfaz de terminal para acceder a ese sistema. Harness y CLI están relacionados, pero no son sinónimos: un mismo agente puede tener terminal, extensión de editor y aplicación de escritorio.\n\nEsto explica por qué cambiar de interfaz no siempre equivale a cambiar de agente y por qué usar un modelo parecido en dos herramientas puede producir experiencias distintas. Importan las instrucciones que recibe, las herramientas disponibles y la forma en que se gestiona la sesión.\n\nPara elegir conviene mirar cinco cosas: el modelo disponible, el control de ejecución, la continuidad del contexto, la integración con el proyecto y el costo de operar todo ese conjunto.\n\n## Codex CLI y el trabajo dentro de límites explícitos\n\nCodex CLI permite inspeccionar un repositorio, editar archivos y ejecutar herramientas locales. Admite trabajo interactivo y automatización mediante `codex exec`, además de seleccionar modelo, esfuerzo de razonamiento y permisos. [Documentación oficial](https://learn.chatgpt.com/docs/codex/cli).\n\nSu sandbox establece límites para los comandos que ejecuta, con implementación específica por plataforma. La política de aprobación decide cuándo una acción necesita autorización; es una capa diferente del sandbox. [Sandbox de Codex](https://learn.chatgpt.com/docs/sandboxing).\n\n**Ventaja editorial:** resulta atractivo cuando querés delegar una implementación y revisar una entrega concreta: cambios, comandos ejecutados y validación. El límite de ejecución ayuda a definir qué puede hacer el agente durante ese trabajo.\n\n**Desventaja práctica:** un entorno mal preparado puede bloquear instalaciones, acceso de red o herramientas que el proyecto necesita. Resolverlo exige configurar permisos y dependencias; dar acceso total como respuesta automática elimina una parte del control que motivó la elección.\n\nCodex también admite proveedores personalizados con un endpoint compatible con Responses API y proveedores locales mediante `--oss`. No basta con que el servicio ofrezca Chat Completions: hay que validar protocolo, herramientas y autenticación. [Configuración de proveedores](https://learn.chatgpt.com/docs/config-file/config-advanced).\n\n**Dónde lo pondría:** implementación delimitada, diagnóstico de errores y revisión de cambios que se puedan comprobar con las herramientas reales del repositorio.\n\n## Claude Code y la especialización del flujo de trabajo\n\nClaude Code dispone de contexto de proyecto mediante `CLAUDE.md`, skills, MCP, hooks y plugins. Los hooks permiten asociar acciones al ciclo de ejecución. [Extensiones de Claude Code](https://code.claude.com/docs/en/features-overview).\n\nSus subagentes pueden tener instrucciones, herramientas y permisos propios, además de contexto separado. Sus solicitudes consumen los límites de uso correspondientes; delegar no vuelve gratuito el trabajo. [Subagentes de Claude Code](https://code.claude.com/docs/en/sub-agents).\n\n**Ventaja editorial:** ofrece piezas útiles para convertir un flujo habitual en una configuración reutilizable. Por ejemplo, separar exploración, implementación y revisión con responsabilidades claras.\n\n**Desventaja práctica:** cada especialización agrega algo que mantener. Instrucciones repetidas, hooks innecesarios y delegaciones demasiado amplias pueden aumentar el consumo y dificultar entender por qué el agente actuó de determinada manera.\n\nSu propuesta está centrada en el ecosistema Claude. Eso simplifica algunas decisiones, pero conviene considerarlo si buscás una infraestructura de ejecución que alterne entre proveedores independientes.\n\n**Dónde lo pondría:** como candidato a coordinar tareas que requieren dividir responsabilidades y sostener convenciones del proyecto. Ese rol es una decisión de arquitectura, no una afirmación de superioridad frente a Codex.\n\n## OpenCode V2 y la flexibilidad de proveedores\n\nEl sitio oficial de OpenCode referencia V2 en su instalación y presenta una herramienta abierta disponible en terminal, editor y escritorio, con soporte para múltiples proveedores y modelos locales. [OpenCode](https://opencode.ai/). Esta editorial cubre su oferta actual; no atribuye a V2 un listado de mejoras frente a V1 sin una comparación de versiones.\n\nOpenCode documenta agentes principales, subagentes y configuración de modelos por agente. Incluye Build y Plan, con distinto acceso a herramientas. [Agentes](https://opencode.ai/v2/docs/agents/). Sus permisos permiten autorizar, preguntar o denegar acciones; la documentación describe defaults mayormente permisivos. [Permisos](https://opencode.ai/v2/docs/permissions/).\n\n**Ventaja editorial:** permite diseñar un reparto de modelos según la tarea. Podés probar un proveedor para exploración y otro para implementación sin reemplazar necesariamente toda la interfaz de trabajo.\n\n**Desventaja práctica:** esa libertad traslada decisiones al operador. Hay que evaluar modelos, compatibilidad con herramientas, límites del proveedor y comportamiento ante errores. Que dos modelos aparezcan en el mismo selector no significa que resuelvan una tarea con la misma confiabilidad.\n\nV2 tiene documentación y esquema propios: `permissions`, `shell` y `subagent` reemplazan nombres de V1. “Allow always” guarda aprobaciones por proyecto; los subagentes usan sus propios permisos. Revisá esos alcances antes de migrar. [Permisos V2](https://opencode.ai/v2/docs/permissions/).\n\nLa configuración de permisos merece atención propia. Una regla del harness y una barrera del sistema operativo son mecanismos diferentes; no corresponde tratarlos como equivalentes.\n\n**Dónde lo pondría:** ejecutores especializados y pruebas controladas de proveedores. Para reducir costos, mediría tareas aceptadas y correcciones posteriores, no solamente precio por token.\n\n## Cline y las tareas que entran y salen de la terminal\n\nCline tiene CLI interactiva y modo headless. Documenta ejecución desde pipes, salida JSON, selección de proveedor mediante autenticación y gestión de MCP. También contempla ejecución sin intervención mediante autoaprobación, que puede modificar archivos y ejecutar comandos. [CLI de Cline](https://docs.cline.bot/usage/cli-overview).\n\n**Ventaja editorial:** es un candidato práctico para encargos puntuales que reciben una entrada concreta y devuelven un resultado: analizar un diff, explicar un fallo o preparar una revisión. Su CLI permite incorporar esas tareas a scripts.\n\n**Desventaja práctica:** un encargo aparentemente pequeño puede crecer si no tiene límite. Un pedido de revisión puede terminar convertido en una sesión de implementación si el objetivo y los permisos quedan abiertos. Además, cambiar de proveedor requiere volver a evaluar la calidad del resultado.\n\nLa referencia actual de Cline marca `--auto-approve` con default `true` y no ofrece una allowlist/denylist nativa de comandos shell: remite a hooks `PreToolUse`. No des por hecho que habrá confirmación ni que un encargo de revisión será de sólo lectura. [Controles de CLI](https://docs.cline.bot/usage/cli-overview).\n\nHeadless describe una forma de ejecutar sin interfaz interactiva; no acredita por sí solo aislamiento ni confiabilidad. Para automatizar, hace falta decidir qué cambios están autorizados y cómo se acepta la salida.\n\n**Dónde lo pondría:** como comodín para tareas acotadas y una segunda mirada sobre cambios preparados por otro agente. También puede asumir trabajo principal si encaja mejor con el proyecto; el rol de comodín es una elección operativa.\n\n## Oh My Pi (OMP) y la instrumentación del harness\n\nOMP es un fork de Pi orientado a programación. Su propuesta combina acceso a múltiples proveedores con herramientas integradas de búsqueda, LSP, depuración, ejecución y edición con anclajes hash. También admite extensiones y subagentes. [Proyecto OMP](https://github.com/can1357/oh-my-pi).\n\n**Ventaja editorial:** es un candidato sólido para experimentar con una misma familia de modelos sobre superficies de herramientas distintas. Sus herramientas especializadas pueden resultar útiles en navegación simbólica, refactors localizados e inspección de código.\n\n**Desventaja práctica:** más herramientas no garantizan mejor resultado. La integración LSP depende del entorno y del lenguaje, las extensiones requieren mantenimiento y no corresponde equiparar automáticamente sus controles de permisos con el sandbox de Codex.\n\n**Dónde lo pondría:** exploración estructural, cambios acotados y pruebas A/B contra otro harness usando el mismo modelo. Los beneficios alegados por su proyecto deben comprobarse en el repositorio propio; no son un benchmark independiente frente a Codex.\n\n## Comparación de ventajas y costos operativos\n\nLa siguiente tabla resume el criterio editorial desarrollado arriba.\n\n| Harness | Ventaja para aprovechar | Desventaja a gestionar | Rol sugerido |\n| --- | --- | --- | --- |\n| Codex CLI | Trabajo local con límites de ejecución configurables | Fricción si permisos o entorno no acompañan al proyecto | Implementación y validación delimitadas |\n| Claude Code | Especialización mediante contexto, extensiones y subagentes | Consumo y mantenimiento de la configuración | Coordinación de responsabilidades |\n| OpenCode V2 | Flexibilidad para combinar proveedores y agentes | Evaluación y configuración a cargo del operador | Ejecutores especializados |\n| Cline CLI | Encargos interactivos o integrados a scripts | Control del alcance y aceptación de la salida | Comodín y revisión adicional |\n| OMP | LSP, herramientas de edición y ejecución extensibles; multiproveedor | Complejidad de configuración y validación de controles | Exploración estructural y experimentación entre harnesses |\n\nLos roles se superponen. El enfoque de asignar también el harness por función se desarrolla en [Enrutamiento avanzado: modelo, esfuerzo, rol y harness](/entrada/enrutamiento-modelo-esfuerzo-rol-harness). La tabla propone por dónde empezar a probar cada herramienta, no exclusividades.\n\n## Cómo combinarlos sin multiplicar el desorden\n\nUna combinación razonable empieza con un responsable de la tarea. Ese agente o persona conserva el objetivo, decide qué se delega y acepta el resultado. Cada ejecutor recibe un encargo que puede terminar de forma verificable.\n\nPor ejemplo, para corregir una integración:\n\n1. El responsable define el contrato esperado y reproduce el error.\n2. Un ejecutor prepara el cambio en una rama o worktree propio.\n3. Otro agente revisa el diff con acceso de lectura y busca casos omitidos.\n4. El responsable comprueba la ejecución real, resuelve observaciones y prepara la entrega.\n\nEl reparto puede hacerse entre estos cinco harness, pero no requiere usarlos todos. Dos herramientas con responsabilidades claras pueden aportar más que cinco sesiones abiertas con contexto duplicado.\n\nLa delegación entre productos necesita una integración explícita: comando, script, API u otro mecanismo disponible. Un subagente nativo de un harness no se convierte automáticamente en una sesión de otro.\n\nCada encargo debería definir objetivo, archivos autorizados, restricciones, validación y salida esperada. Ese contrato hace posible cambiar de herramienta sin reconstruir toda la intención del trabajo.\n\n## Cómo evaluar cuál conviene en tu proyecto\n\nElegí algunas tareas representativas: un bug reproducible, una modificación pequeña y una revisión de código. Prepará el mismo punto de partida y registrá modelo, versión, permisos y contexto de cada prueba.\n\nCompará tiempo hasta obtener un resultado aceptable, intervenciones humanas, costo o consumo de cuota y defectos encontrados después. Cuando cambies simultáneamente de modelo y harness, interpretá el resultado como evaluación de la combinación completa.\n\nLa pregunta que importa es cuánto trabajo confiable obtenés por el costo total. Ese costo incluye revisar, corregir, mantener configuración y recuperar contexto, además de pagar inferencia.\n\n## Elegir según la responsabilidad que vas a delegar\n\nCodex, Claude Code, OpenCode, Cline y OMP ofrecen puntos de entrada distintos a un mismo problema: transformar una intención en trabajo ejecutable y revisable.\n\nLa elección mejora cuando el proyecto conserva sus contratos, convenciones y comprobaciones fuera de una sesión particular. Así, el harness puede cambiar y el equipo sigue sabiendo qué había que hacer, qué se hizo y cómo se verificó.\n\nLa autonomía que vale la pena ampliar es la que produce evidencia suficiente para confiar en la entrega.\n"
    },
    {
      "slug": "enrutamiento-modelo-esfuerzo-rol-harness",
      "title": "Enrutamiento avanzado de agentes: modelo, esfuerzo, rol y harness",
      "summary": "Por qué elegir un agente exige evaluar no solo el modelo y su razonamiento, sino la función y el harness: Codex frente a OMP como caso de contraste.",
      "type": "editorial",
      "order": 19,
      "tags": [
        "orquestacion",
        "harness",
        "cli",
        "codex",
        "omp",
        "routing",
        "agentes",
        "benchmarks",
        "gobierno"
      ],
      "related": [
        "comparar-harness-cli-codex-claude-opencode-cline",
        "guia-escalado-modelos",
        "orquestacion",
        "protocolos-humanos-cuota-rct-overdrive"
      ],
      "area": "Gobierno de agentes",
      "glyph": "⌘",
      "hue": "rgba(87,217,232,.24)",
      "file": "enrutamiento-modelo-esfuerzo-rol-harness.md",
      "html": "<blockquote>\n<p>Propuesta arquitectónica, 8 de octubre de 2026. No describe una implementación ya validada. Diferenciamos capacidades documentadas, hipótesis y resultados que todavía hay que medir.</p>\n</blockquote>\n<h2 id=\"el-cuarto-parametro\">El cuarto parámetro</h2>\n<p>Las primeras estrategias de orquestación respondían dos preguntas: <strong>qué modelo</strong> utilizar y <strong>cuánto esfuerzo de razonamiento</strong> asignarle. Incorporar roles agrega otra: <strong>para qué función</strong> se lo necesita. Pero todavía falta una decisión: <strong>en qué harness ejecutar ese trabajo</strong>.</p>\n<p>La configuración operativa deja de ser solo <code>modelo + esfuerzo</code> y pasa a ser <strong><code>modelo + esfuerzo + rol + harness</code></strong>. No es una fórmula de puntuación ni una afirmación de que cuatro variables bastan: permisos, repositorio, presupuesto, contexto y disponibilidad siguen siendo restricciones de elegibilidad.</p>\n<p>Un modelo puede mostrar comportamientos diferentes según cómo el harness le entregue instrucciones, resultados de lectura, herramientas de edición y mecanismos de compactación. Por eso, comparar modelos ignorando su entorno de ejecución puede confundir causas.</p>\n<h2 id=\"caso-de-contraste-openai-en-codex-y-en-omp\">Caso de contraste: OpenAI en Codex y en OMP</h2>\n<p>Codex CLI y Oh My Pi pueden operar con modelos de la familia OpenAI, según la autenticación y las versiones compatibles. Eso permite diseñar un contraste útil: <strong>mismo modelo, mismo esfuerzo y misma tarea; distinto harness</strong>.</p>\n<p>Codex ofrece un ciclo integrado de lectura, edición, comandos, aprobaciones y sandbox. Es una opción inicial razonable para cambios completos que exigen pruebas y una entrega verificable. <a href=\"https://github.com/openai/codex\" target=\"_blank\" rel=\"noopener noreferrer\">Codex</a>.</p>\n<p>OMP, derivado de Pi, ofrece herramientas especializadas, incluida integración LSP, depuración y edición con anclajes hash, además de extensibilidad y acceso multiproveedor. Es un candidato interesante para explorar referencias, localizar símbolos y hacer modificaciones focalizadas. <a href=\"https://github.com/can1357/oh-my-pi\" target=\"_blank\" rel=\"noopener noreferrer\">OMP</a>.</p>\n<p>La diferencia <strong>no demuestra que uno programe mejor que el otro</strong>. LSP puede ahorrar exploración cuando el lenguaje y el servidor están disponibles; también puede aportar poco en un proyecto pequeño o mal indexado. Un flujo integrado puede mejorar la coherencia de tareas largas, pero eso también requiere medición. Los benchmarks publicados por un proveedor no sustituyen las pruebas sobre un proyecto propio.</p>\n<table>\n<thead>\n<tr>\n<th>Dimensión</th>\n<th>Codex CLI</th>\n<th>OMP</th>\n<th>Hipótesis que vale probar</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Ciclo de ejecución</td>\n<td>Herramientas, comandos y controles integrados</td>\n<td>Superficie de herramientas especializada y extensible</td>\n<td>¿Cuál termina la tarea con menos intervenciones?</td>\n</tr>\n<tr>\n<td>Exploración</td>\n<td>Lectura y búsqueda del repositorio</td>\n<td>Búsqueda y operaciones LSP cuando están disponibles</td>\n<td>¿Cuál localiza cambios correctos con menos lecturas?</td>\n</tr>\n<tr>\n<td>Edición</td>\n<td>Edición según herramientas del agente</td>\n<td>Edición hash-anchored y operaciones estructuradas</td>\n<td>¿Cuál produce menos intentos fallidos?</td>\n</tr>\n<tr>\n<td>Contexto</td>\n<td>Gestión integrada de sesión y compactación</td>\n<td>Configuración y estrategias propias de sesión</td>\n<td>¿Cuál conserva mejor las restricciones?</td>\n</tr>\n<tr>\n<td>Seguridad</td>\n<td>Sandbox y aprobaciones explícitos</td>\n<td>Controles dependientes de configuración y herramientas</td>\n<td>¿Cuál respeta el mismo contrato de permisos?</td>\n</tr>\n<tr>\n<td>Costo</td>\n<td>Cuota de suscripción o API, según acceso</td>\n<td>Suscripción compatible u otras API, según proveedor</td>\n<td>¿Cuál reduce costo total por tarea aceptada?</td>\n</tr>\n</tbody>\n</table>\n<p>No hay que confundir <strong>harness</strong> con <strong>proveedor de inferencia</strong>. En OMP, la ruta de autenticación puede afectar facturación, límites y modelos disponibles; una suscripción de Codex y una clave de OpenAI API no son intercambiables por definición. Antes del A/B, fijar el identificador efectivo de modelo y las condiciones de acceso. Un alias del harness tampoco basta: OpenCode V2, por ejemplo, separa el ID del catálogo de <code>modelID</code>, enviado al proveedor. Registrá ambos antes de afirmar que dos ejecuciones usaron el mismo modelo. <a href=\"https://opencode.ai/v2/docs/providers/\" target=\"_blank\" rel=\"noopener noreferrer\">Aliases y proveedores</a>.</p>\n<h2 id=\"el-selector-como-planificador-de-trabajo\">El selector como planificador de trabajo</h2>\n<p>Un coordinador que solo escoge el modelo más fuerte puede terminar pagando por capacidad ociosa y usando herramientas inadecuadas. Un planificador más fino resuelve la tarea por etapas:</p>\n<ol>\n<li><strong>Clasificar el trabajo:</strong> exploración, implementación, refactor, depuración, test, revisión o documentación.</li>\n<li><strong>Aplicar restricciones duras:</strong> permisos, secretos, lenguaje, herramientas disponibles, límites de cuota, latencia aceptable y aislamiento requerido.</li>\n<li><strong>Seleccionar un rol:</strong> responsable, explorador, implementador, revisor o verificador; cada rol con alcance y salida esperada.</li>\n<li><strong>Evaluar parejas modelo–harness:</strong> compatibilidad real, esfuerzo configurable, herramientas y evidencia empírica para ese tipo de tarea.</li>\n<li><strong>Ejecutar y verificar:</strong> en worktree aislado, con tests, diff, registro de consumo y aceptación humana cuando corresponda.</li>\n<li><strong>Aprender sin automatizar a ciegas:</strong> registrar resultados, ajustar reglas y conservar una ruta de fallback segura.</li>\n</ol>\n<p>El rol no es una etiqueta estética: define el contrato. Un revisor no debería adquirir permisos de escritura por elegir otro CLI. El harness se elige <strong>después</strong> de establecer qué acciones están autorizadas.</p>\n<h2 id=\"una-matriz-de-enrutamiento-inicial\">Una matriz de enrutamiento inicial</h2>\n<table>\n<thead>\n<tr>\n<th>Tipo de encargo</th>\n<th>Rol</th>\n<th>Harness candidato inicial</th>\n<th>Condición para preferirlo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Localizar impacto entre módulos</td>\n<td>Explorador</td>\n<td>OMP</td>\n<td>LSP operativo y ahorro medido de lecturas</td>\n</tr>\n<tr>\n<td>Corregir bug con tests</td>\n<td>Implementador</td>\n<td>Codex</td>\n<td>Mayor tasa de resolución aceptada</td>\n</tr>\n<tr>\n<td>Refactor de símbolos</td>\n<td>Implementador especializado</td>\n<td>OMP</td>\n<td>Edición y renombres estructurados verificables</td>\n</tr>\n<tr>\n<td>Cambios transversales</td>\n<td>Implementador</td>\n<td>Codex</td>\n<td>Mejor consistencia en tests y contratos</td>\n</tr>\n<tr>\n<td>Revisar un diff</td>\n<td>Revisor</td>\n<td>Cualquiera elegible, con lectura únicamente</td>\n<td>Menos defectos omitidos y menor costo de revisión</td>\n</tr>\n<tr>\n<td>Recuperar trabajo fallido</td>\n<td>Diagnóstico y fallback</td>\n<td>Harness alternativo permitido</td>\n<td>Evidencia de que el cambio de herramientas corrige la falla</td>\n</tr>\n</tbody>\n</table>\n<p>Son <strong>hipótesis de asignación</strong>, no propiedades exclusivas de los productos. Si las pruebas contradicen la tabla, cambia la tabla, no la evidencia.</p>\n<h2 id=\"un-contrato-portable-entre-harnesses\">Un contrato portable entre harnesses</h2>\n<p>Para delegar sin quedar atrapados en una CLI, el coordinador puede construir un sobre de tarea independiente del proveedor:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"line\"><span style=\"color:#FFE8A1\">task_id</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> BUG-142</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">role</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> implementer</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">goal</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Corregir duplicación de eventos sin alterar el contrato HTTP\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">repository_ref</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"commit-inmutable\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">scope</span><span style=\"color:#8E899D\">:</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">  writable</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"src/events/**\"</span><span style=\"color:#8E899D\">,</span><span style=\"color:#EDC35E\"> \"tests/events/**\"</span><span style=\"color:#8E899D\">]</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">constraints</span><span style=\"color:#8E899D\">:</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">  network</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EC5FBD\"> false</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">  secrets</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> none</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">  production_write</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EC5FBD\"> false</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">acceptance</span><span style=\"color:#8E899D\">:</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  -</span><span style=\"color:#EDC35E\"> \"tests de regresión aprobados\"</span></span>\n<span class=\"line\"><span style=\"color:#8E899D\">  -</span><span style=\"color:#EDC35E\"> \"diff acotado al scope\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">outputs</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> [</span><span style=\"color:#EDC35E\">\"resumen\"</span><span style=\"color:#8E899D\">,</span><span style=\"color:#EDC35E\"> \"diff\"</span><span style=\"color:#8E899D\">,</span><span style=\"color:#EDC35E\"> \"tests\"</span><span style=\"color:#8E899D\">,</span><span style=\"color:#EDC35E\"> \"uso\"</span><span style=\"color:#8E899D\">,</span><span style=\"color:#EDC35E\"> \"bloqueos\"</span><span style=\"color:#8E899D\">]</span></span></code></pre>\n<p>Ese contrato debe traducirse a mecanismos <strong>reales</strong> del harness y del sistema operativo. Escribir <code>network: false</code> en un YAML no desconecta la red por arte de magia. Si el harness no puede respetar una restricción crítica, se descarta como candidato, aunque su benchmark sea excelente.</p>\n<h2 id=\"del-diseno-propuesto-a-una-asignacion-contextual\">Del diseño propuesto a una asignación contextual</h2>\n<p>Actualización del 12 de octubre de 2026: el <a href=\"/entrada/caso-orca-cockpit-multiagente\">caso operativo V4</a> ya documenta dirección general con Opus, integración con Sol low y coordinación de paquetes con Sol medium. Implementación LIVE y auditoría se reparten entre familias distintas. Es evidencia de una política adoptada en un proyecto, <strong>no de un router automático validado ni de una ventaja medida de rendimiento</strong>. La propuesta A/B de este artículo sigue pendiente de esa validación.</p>\n<p>La comprobación del harness también sigue siendo una condición de elegibilidad. En la revisión de una instalación OMP 18.10.0 había reglas de rol escritas, pero su carga efectiva y enforcement en sesión no estaban demostrados; además, permitir LSP dejaba por revisar operaciones de renombre. Una etiqueta “lectura” no prueba ausencia de escritura. Antes de asignar un auditor read-only, hay que comprobar el runtime efectivo y las acciones negativas, no sólo el archivo de configuración.</p>\n<p>Por la misma razón, un aviso de cuota no cambia automáticamente modelo, esfuerzo ni proveedor. La recuperación por fallo técnico y la gestión humana de cuota son decisiones distintas; ninguna autoriza buscar una ruta con menos controles.</p>\n<h2 id=\"benchmark-a-b-aislar-el-efecto-del-harness\">Benchmark A/B: aislar el efecto del harness</h2>\n<p>La comparación útil no enfrenta modelos distintos por accidente. Para tareas pareadas, mantener iguales: commit inicial, fixtures, modelo e identificador de versión cuando sea posible, esfuerzo efectivo, instrucciones funcionales, alcance, presupuesto y pruebas de aceptación. Documentar diferencias inevitables en prompts de sistema, herramientas y compactación: <strong>son precisamente parte del tratamiento experimental</strong>.</p>\n<p>Usar varias tareas representativas y al menos tres repeticiones por configuración, sin reutilizar soluciones previas y con worktrees limpios. Medir:</p>\n<ul>\n<li><strong>Calidad:</strong> porcentaje de tareas aceptadas, tests, regresiones, defectos omitidos y calidad de diff.</li>\n<li><strong>Eficiencia:</strong> tokens y costo atribuibles, número de llamadas, reintentos de edición y tiempo hasta aceptación.</li>\n<li><strong>Operación:</strong> intervenciones humanas, compactaciones, relecturas, errores de permisos y recuperaciones.</li>\n<li><strong>Seguridad:</strong> intentos de acciones fuera del alcance y cumplimiento efectivo de restricciones.</li>\n</ul>\n<p>El indicador central no es la velocidad de generar un patch, sino el <strong>costo total por tarea aceptada</strong>, incluyendo revisión, retrabajo y fallas. Si las métricas de consumo no son comparables entre proveedores, informarlas por separado y privilegiar calidad y costo monetario observado.</p>\n<h2 id=\"fallback-aprendizaje-y-limites\">Fallback, aprendizaje y límites</h2>\n<p>Un router avanzado necesita evitar dos trampas. La primera es cambiar automáticamente de harness ante cualquier error: si falla un test por lógica, otro CLI no garantiza resolverlo. La segunda es premiar al agente que reporta éxito más rápido, cuando la verificación independiente dice otra cosa.</p>\n<p>Conviene registrar <code>(tipo de tarea, modelo, esfuerzo, harness, versión, herramientas, permisos, resultado)</code> y actualizar preferencias solo con un tamaño de muestra razonable. Ante fallos de infraestructura o herramientas, permitir fallback compatible. Ante una restricción de seguridad, <strong>detener y escalar</strong>, no buscar un harness más permisivo.</p>\n<p>También importa el costo de cambiar de superficie: instalación, contexto que hay que reconstruir, complejidad de los logs y nuevas clases de errores. Un único harness consistente puede superar a un router sofisticado si la operación es pequeña.</p>\n<h2 id=\"de-elegir-el-mejor-modelo-a-elegir-el-mejor-entorno-de-trabajo\">De elegir el mejor modelo a elegir el mejor entorno de trabajo</h2>\n<p>La evolución no consiste en acumular CLIs. Consiste en dejar de considerar al harness una constante invisible.</p>\n<p>Un coordinador maduro debería poder responder: <strong>¿qué combinación de modelo, esfuerzo, rol y harness produce una entrega verificable para esta función, dentro de las restricciones y el presupuesto disponible?</strong></p>\n<p>La respuesta no sale de preferencias de marca. Sale de contratos portables, experimentos reproducibles y métricas de tareas aceptadas. El harness se convierte así en una variable de planificación, no en una religión del terminal.</p>\n<p>Para una panorámica de los productos y sus compensaciones, ver <a href=\"/entrada/comparar-harness-cli-codex-claude-opencode-cline\">Comparar harness CLI</a>.</p>\n<p>Para administrar una ronda ante escasez o vencimiento de cuota, ver <a href=\"/entrada/protocolos-humanos-cuota-rct-overdrive\">RCT y Overdrive: protocolos humanos de gestión de proveedores</a>. La activación corresponde al operador; es una capa distinta del enrutamiento delegado.</p>\n",
      "headings": [
        {
          "label": "El cuarto parámetro",
          "depth": 2,
          "id": "el-cuarto-parametro"
        },
        {
          "label": "Caso de contraste: OpenAI en Codex y en OMP",
          "depth": 2,
          "id": "caso-de-contraste-openai-en-codex-y-en-omp"
        },
        {
          "label": "El selector como planificador de trabajo",
          "depth": 2,
          "id": "el-selector-como-planificador-de-trabajo"
        },
        {
          "label": "Una matriz de enrutamiento inicial",
          "depth": 2,
          "id": "una-matriz-de-enrutamiento-inicial"
        },
        {
          "label": "Un contrato portable entre harnesses",
          "depth": 2,
          "id": "un-contrato-portable-entre-harnesses"
        },
        {
          "label": "Del diseño propuesto a una asignación contextual",
          "depth": 2,
          "id": "del-diseno-propuesto-a-una-asignacion-contextual"
        },
        {
          "label": "Benchmark A/B: aislar el efecto del harness",
          "depth": 2,
          "id": "benchmark-a-b-aislar-el-efecto-del-harness"
        },
        {
          "label": "Fallback, aprendizaje y límites",
          "depth": 2,
          "id": "fallback-aprendizaje-y-limites"
        },
        {
          "label": "De elegir el mejor modelo a elegir el mejor entorno de trabajo",
          "depth": 2,
          "id": "de-elegir-el-mejor-modelo-a-elegir-el-mejor-entorno-de-trabajo"
        }
      ],
      "raw": "---\nslug: enrutamiento-modelo-esfuerzo-rol-harness\ntitle: \"Enrutamiento avanzado de agentes: modelo, esfuerzo, rol y harness\"\ntype: editorial\norder: 19\nsummary: \"Por qué elegir un agente exige evaluar no solo el modelo y su razonamiento, sino la función y el harness: Codex frente a OMP como caso de contraste.\"\ntags: [orquestacion, harness, cli, codex, omp, routing, agentes, benchmarks, gobierno]\nrelated: [comparar-harness-cli-codex-claude-opencode-cline, guia-escalado-modelos, orquestacion, protocolos-humanos-cuota-rct-overdrive]\narea: Gobierno de agentes\nglyph: ⌘\nhue: rgba(87,217,232,.24)\n---\n\n# Enrutamiento avanzado de agentes: modelo, esfuerzo, rol y harness\n\n> Propuesta arquitectónica, 8 de octubre de 2026. No describe una implementación ya validada. Diferenciamos capacidades documentadas, hipótesis y resultados que todavía hay que medir.\n\n## El cuarto parámetro\n\nLas primeras estrategias de orquestación respondían dos preguntas: **qué modelo** utilizar y **cuánto esfuerzo de razonamiento** asignarle. Incorporar roles agrega otra: **para qué función** se lo necesita. Pero todavía falta una decisión: **en qué harness ejecutar ese trabajo**.\n\nLa configuración operativa deja de ser solo `modelo + esfuerzo` y pasa a ser **`modelo + esfuerzo + rol + harness`**. No es una fórmula de puntuación ni una afirmación de que cuatro variables bastan: permisos, repositorio, presupuesto, contexto y disponibilidad siguen siendo restricciones de elegibilidad.\n\nUn modelo puede mostrar comportamientos diferentes según cómo el harness le entregue instrucciones, resultados de lectura, herramientas de edición y mecanismos de compactación. Por eso, comparar modelos ignorando su entorno de ejecución puede confundir causas.\n\n## Caso de contraste: OpenAI en Codex y en OMP\n\nCodex CLI y Oh My Pi pueden operar con modelos de la familia OpenAI, según la autenticación y las versiones compatibles. Eso permite diseñar un contraste útil: **mismo modelo, mismo esfuerzo y misma tarea; distinto harness**.\n\nCodex ofrece un ciclo integrado de lectura, edición, comandos, aprobaciones y sandbox. Es una opción inicial razonable para cambios completos que exigen pruebas y una entrega verificable. [Codex](https://github.com/openai/codex).\n\nOMP, derivado de Pi, ofrece herramientas especializadas, incluida integración LSP, depuración y edición con anclajes hash, además de extensibilidad y acceso multiproveedor. Es un candidato interesante para explorar referencias, localizar símbolos y hacer modificaciones focalizadas. [OMP](https://github.com/can1357/oh-my-pi).\n\nLa diferencia **no demuestra que uno programe mejor que el otro**. LSP puede ahorrar exploración cuando el lenguaje y el servidor están disponibles; también puede aportar poco en un proyecto pequeño o mal indexado. Un flujo integrado puede mejorar la coherencia de tareas largas, pero eso también requiere medición. Los benchmarks publicados por un proveedor no sustituyen las pruebas sobre un proyecto propio.\n\n| Dimensión | Codex CLI | OMP | Hipótesis que vale probar |\n| --- | --- | --- | --- |\n| Ciclo de ejecución | Herramientas, comandos y controles integrados | Superficie de herramientas especializada y extensible | ¿Cuál termina la tarea con menos intervenciones? |\n| Exploración | Lectura y búsqueda del repositorio | Búsqueda y operaciones LSP cuando están disponibles | ¿Cuál localiza cambios correctos con menos lecturas? |\n| Edición | Edición según herramientas del agente | Edición hash-anchored y operaciones estructuradas | ¿Cuál produce menos intentos fallidos? |\n| Contexto | Gestión integrada de sesión y compactación | Configuración y estrategias propias de sesión | ¿Cuál conserva mejor las restricciones? |\n| Seguridad | Sandbox y aprobaciones explícitos | Controles dependientes de configuración y herramientas | ¿Cuál respeta el mismo contrato de permisos? |\n| Costo | Cuota de suscripción o API, según acceso | Suscripción compatible u otras API, según proveedor | ¿Cuál reduce costo total por tarea aceptada? |\n\nNo hay que confundir **harness** con **proveedor de inferencia**. En OMP, la ruta de autenticación puede afectar facturación, límites y modelos disponibles; una suscripción de Codex y una clave de OpenAI API no son intercambiables por definición. Antes del A/B, fijar el identificador efectivo de modelo y las condiciones de acceso. Un alias del harness tampoco basta: OpenCode V2, por ejemplo, separa el ID del catálogo de `modelID`, enviado al proveedor. Registrá ambos antes de afirmar que dos ejecuciones usaron el mismo modelo. [Aliases y proveedores](https://opencode.ai/v2/docs/providers/).\n\n## El selector como planificador de trabajo\n\nUn coordinador que solo escoge el modelo más fuerte puede terminar pagando por capacidad ociosa y usando herramientas inadecuadas. Un planificador más fino resuelve la tarea por etapas:\n\n1. **Clasificar el trabajo:** exploración, implementación, refactor, depuración, test, revisión o documentación.\n2. **Aplicar restricciones duras:** permisos, secretos, lenguaje, herramientas disponibles, límites de cuota, latencia aceptable y aislamiento requerido.\n3. **Seleccionar un rol:** responsable, explorador, implementador, revisor o verificador; cada rol con alcance y salida esperada.\n4. **Evaluar parejas modelo–harness:** compatibilidad real, esfuerzo configurable, herramientas y evidencia empírica para ese tipo de tarea.\n5. **Ejecutar y verificar:** en worktree aislado, con tests, diff, registro de consumo y aceptación humana cuando corresponda.\n6. **Aprender sin automatizar a ciegas:** registrar resultados, ajustar reglas y conservar una ruta de fallback segura.\n\nEl rol no es una etiqueta estética: define el contrato. Un revisor no debería adquirir permisos de escritura por elegir otro CLI. El harness se elige **después** de establecer qué acciones están autorizadas.\n\n## Una matriz de enrutamiento inicial\n\n| Tipo de encargo | Rol | Harness candidato inicial | Condición para preferirlo |\n| --- | --- | --- | --- |\n| Localizar impacto entre módulos | Explorador | OMP | LSP operativo y ahorro medido de lecturas |\n| Corregir bug con tests | Implementador | Codex | Mayor tasa de resolución aceptada |\n| Refactor de símbolos | Implementador especializado | OMP | Edición y renombres estructurados verificables |\n| Cambios transversales | Implementador | Codex | Mejor consistencia en tests y contratos |\n| Revisar un diff | Revisor | Cualquiera elegible, con lectura únicamente | Menos defectos omitidos y menor costo de revisión |\n| Recuperar trabajo fallido | Diagnóstico y fallback | Harness alternativo permitido | Evidencia de que el cambio de herramientas corrige la falla |\n\nSon **hipótesis de asignación**, no propiedades exclusivas de los productos. Si las pruebas contradicen la tabla, cambia la tabla, no la evidencia.\n\n## Un contrato portable entre harnesses\n\nPara delegar sin quedar atrapados en una CLI, el coordinador puede construir un sobre de tarea independiente del proveedor:\n\n```yaml\ntask_id: BUG-142\nrole: implementer\ngoal: \"Corregir duplicación de eventos sin alterar el contrato HTTP\"\nrepository_ref: \"commit-inmutable\"\nscope:\n  writable: [\"src/events/**\", \"tests/events/**\"]\nconstraints:\n  network: false\n  secrets: none\n  production_write: false\nacceptance:\n  - \"tests de regresión aprobados\"\n  - \"diff acotado al scope\"\noutputs: [\"resumen\", \"diff\", \"tests\", \"uso\", \"bloqueos\"]\n```\n\nEse contrato debe traducirse a mecanismos **reales** del harness y del sistema operativo. Escribir `network: false` en un YAML no desconecta la red por arte de magia. Si el harness no puede respetar una restricción crítica, se descarta como candidato, aunque su benchmark sea excelente.\n\n## Del diseño propuesto a una asignación contextual\n\nActualización del 12 de octubre de 2026: el [caso operativo V4](/entrada/caso-orca-cockpit-multiagente) ya documenta dirección general con Opus, integración con Sol low y coordinación de paquetes con Sol medium. Implementación LIVE y auditoría se reparten entre familias distintas. Es evidencia de una política adoptada en un proyecto, **no de un router automático validado ni de una ventaja medida de rendimiento**. La propuesta A/B de este artículo sigue pendiente de esa validación.\n\nLa comprobación del harness también sigue siendo una condición de elegibilidad. En la revisión de una instalación OMP 18.10.0 había reglas de rol escritas, pero su carga efectiva y enforcement en sesión no estaban demostrados; además, permitir LSP dejaba por revisar operaciones de renombre. Una etiqueta “lectura” no prueba ausencia de escritura. Antes de asignar un auditor read-only, hay que comprobar el runtime efectivo y las acciones negativas, no sólo el archivo de configuración.\n\nPor la misma razón, un aviso de cuota no cambia automáticamente modelo, esfuerzo ni proveedor. La recuperación por fallo técnico y la gestión humana de cuota son decisiones distintas; ninguna autoriza buscar una ruta con menos controles.\n\n## Benchmark A/B: aislar el efecto del harness\n\nLa comparación útil no enfrenta modelos distintos por accidente. Para tareas pareadas, mantener iguales: commit inicial, fixtures, modelo e identificador de versión cuando sea posible, esfuerzo efectivo, instrucciones funcionales, alcance, presupuesto y pruebas de aceptación. Documentar diferencias inevitables en prompts de sistema, herramientas y compactación: **son precisamente parte del tratamiento experimental**.\n\nUsar varias tareas representativas y al menos tres repeticiones por configuración, sin reutilizar soluciones previas y con worktrees limpios. Medir:\n\n- **Calidad:** porcentaje de tareas aceptadas, tests, regresiones, defectos omitidos y calidad de diff.\n- **Eficiencia:** tokens y costo atribuibles, número de llamadas, reintentos de edición y tiempo hasta aceptación.\n- **Operación:** intervenciones humanas, compactaciones, relecturas, errores de permisos y recuperaciones.\n- **Seguridad:** intentos de acciones fuera del alcance y cumplimiento efectivo de restricciones.\n\nEl indicador central no es la velocidad de generar un patch, sino el **costo total por tarea aceptada**, incluyendo revisión, retrabajo y fallas. Si las métricas de consumo no son comparables entre proveedores, informarlas por separado y privilegiar calidad y costo monetario observado.\n\n## Fallback, aprendizaje y límites\n\nUn router avanzado necesita evitar dos trampas. La primera es cambiar automáticamente de harness ante cualquier error: si falla un test por lógica, otro CLI no garantiza resolverlo. La segunda es premiar al agente que reporta éxito más rápido, cuando la verificación independiente dice otra cosa.\n\nConviene registrar `(tipo de tarea, modelo, esfuerzo, harness, versión, herramientas, permisos, resultado)` y actualizar preferencias solo con un tamaño de muestra razonable. Ante fallos de infraestructura o herramientas, permitir fallback compatible. Ante una restricción de seguridad, **detener y escalar**, no buscar un harness más permisivo.\n\nTambién importa el costo de cambiar de superficie: instalación, contexto que hay que reconstruir, complejidad de los logs y nuevas clases de errores. Un único harness consistente puede superar a un router sofisticado si la operación es pequeña.\n\n## De elegir el mejor modelo a elegir el mejor entorno de trabajo\n\nLa evolución no consiste en acumular CLIs. Consiste en dejar de considerar al harness una constante invisible.\n\nUn coordinador maduro debería poder responder: **¿qué combinación de modelo, esfuerzo, rol y harness produce una entrega verificable para esta función, dentro de las restricciones y el presupuesto disponible?**\n\nLa respuesta no sale de preferencias de marca. Sale de contratos portables, experimentos reproducibles y métricas de tareas aceptadas. El harness se convierte así en una variable de planificación, no en una religión del terminal.\n\nPara una panorámica de los productos y sus compensaciones, ver [Comparar harness CLI](/entrada/comparar-harness-cli-codex-claude-opencode-cline).\n\n\nPara administrar una ronda ante escasez o vencimiento de cuota, ver [RCT y Overdrive: protocolos humanos de gestión de proveedores](/entrada/protocolos-humanos-cuota-rct-overdrive). La activación corresponde al operador; es una capa distinta del enrutamiento delegado.\n"
    },
    {
      "slug": "protocolos-humanos-cuota-rct-overdrive",
      "title": "RCT y Overdrive: protocolos humanos para gestionar la cuota de proveedores",
      "summary": "Dos respuestas preparadas para la escasez y el vencimiento de cuota: proteger pasos LIVE, aprovechar trabajo BUILD y mantener la decisión en manos del operador.",
      "type": "editorial",
      "order": 20,
      "tags": [
        "proveedores",
        "cuota",
        "protocolos",
        "rct",
        "overdrive",
        "continuidad",
        "operaciones",
        "gobierno"
      ],
      "related": [
        "enrutamiento-modelo-esfuerzo-rol-harness",
        "guia-escalado-modelos",
        "comparar-harness-cli-codex-claude-opencode-cline",
        "orquestacion"
      ],
      "area": "Gobierno de agentes",
      "glyph": "◈",
      "hue": "rgba(237,195,94,.25)",
      "file": "protocolos-humanos-cuota-rct-overdrive.md",
      "html": "<blockquote>\n<p>Marco operativo definido en octubre de 2026. Describe decisiones del operador humano, todavía no una política autónoma del coordinador ni una optimización validada por benchmarks. Los nombres de modelos y comandos del ejemplo pertenecen a una configuración concreta.</p>\n</blockquote>\n<h2 id=\"la-cuota-tambien-condiciona-la-operacion\">La cuota también condiciona la operación</h2>\n<p>Una ronda de trabajo puede estar bien diseñada y encontrarse con dos situaciones opuestas: queda poca cuota para terminarla, o queda capacidad disponible que podría perderse al llegar un reset. Resolver ambas sobre la marcha introduce decisiones apuradas justo cuando menos conviene improvisar.</p>\n<p>La idea de RCT y Overdrive es dejar preparada esa respuesta. El operador cambia cuánto trabajo abre, qué frentes prioriza y dónde decide detenerse. La complejidad de cada tarea sigue determinando el modelo y el esfuerzo de razonamiento que necesita.</p>\n<p>Se puede pensar como un <em>min-maxing</em> de la gestión de proveedores: aprovechar mejor una capacidad limitada sin debilitar los controles que hacen confiable el resultado. La unidad de valor es una tarea aceptada, una incertidumbre resuelta o un riesgo reducido. Agotar un contador, por sí solo, no demuestra eficiencia.</p>\n<p>Este enfoque complementa el <a href=\"/entrada/enrutamiento-modelo-esfuerzo-rol-harness\">enrutamiento por modelo, esfuerzo, rol y harness</a>. Allí se decide qué combinación sirve para una tarea; aquí se decide cómo administrar una ronda cuando cambia la disponibilidad del proveedor.</p>\n<h2 id=\"primero-quien-decide\">Primero, quién decide</h2>\n<p><strong>La activación y la salida de estos protocolos son decisiones humanas.</strong> El operador observa el consumo, interpreta la ventana de disponibilidad y elige las prioridades. También decide si canjea un reset y cuándo hacerlo.</p>\n<p>El coordinador puede recibir una instrucción explícita: reducir frentes, preparar pruebas, registrar un punto de reanudación o presentar evidencia. Esa colaboración no le concede autoridad para cambiar de régimen, gastar capacidad extra, elevar permisos o iniciar un paso LIVE por su cuenta.</p>\n<p>En esta versión, el aviso al cruzar un umbral de cuota forma parte de la operación humana. Si más adelante se instrumenta una alerta automática, habrá que definir qué fuente lee, con qué demora y a quién avisa. Una alerta no equivale a una autorización.</p>\n<h2 id=\"build-y-live-separar-el-trabajo-por-sus-consecuencias\">BUILD y LIVE: separar el trabajo por sus consecuencias</h2>\n<p>Usamos <strong>BUILD</strong> para preparación aislada: implementación en ramas, tests con datos de prueba, documentación, auditorías y pre-revisiones. Usamos <strong>LIVE</strong> para pasos con efecto real: desplegar, migrar datos, cambiar configuración de producción o ejecutar una operación sobre un servicio activo.</p>\n<p>La clasificación depende del efecto y los permisos. Una prueba que escribe en producción es LIVE aunque su nombre diga “test”. Una auditoría que solamente lee puede seguir siendo BUILD, pero necesita cuidar los datos a los que accede.</p>\n<p>Esta separación permite aumentar la preparación sin acelerar automáticamente la publicación. El gate LIVE conserva su autorización, evidencia y mecanismo de recuperación.</p>\n<table>\n<thead>\n<tr>\n<th>Decisión</th>\n<th>RCT: cuota baja</th>\n<th>Overdrive: cuota por vencer</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Objetivo</td>\n<td>Llegar a cierres seguros y conservar continuidad</td>\n<td>Convertir capacidad disponible en entregables útiles</td>\n</tr>\n<tr>\n<td>Frentes</td>\n<td>Menos abiertos, priorizar los que cierran algo</td>\n<td>Más BUILD independiente, dentro de la capacidad de revisión</td>\n</tr>\n<tr>\n<td>Modelo y razonamiento</td>\n<td>Conservar el nivel que requiere la tarea</td>\n<td>Conservar el nivel que requiere la tarea</td>\n</tr>\n<tr>\n<td>Pasos LIVE</td>\n<td>Admitir solo los que tienen margen para terminar y recuperar</td>\n<td>Mantener los mismos gates; no multiplicarlos por tener cuota</td>\n</tr>\n<tr>\n<td>Evidencia</td>\n<td>Punto seguro, recibo y sesión registrada</td>\n<td>Resultados verificables y salidas revisables por cada frente</td>\n</tr>\n<tr>\n<td>Decisión de régimen</td>\n<td>Operador humano</td>\n<td>Operador humano</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"rct-proteger-el-cierre-cuando-queda-poca-cuota\">RCT: proteger el cierre cuando queda poca cuota</h2>\n<p>El protocolo original establece siete reglas:</p>\n<ol>\n<li><strong>No bajar modelos ni razonamiento por falta de cuota.</strong> Si una tarea requiere una configuración, se conserva. Se reduce alcance o concurrencia antes que degradar esa asignación.</li>\n<li><strong>Antes de cada paso LIVE, dejar un punto seguro y un recibo en disco.</strong> El estado previo y el plan de recuperación deben ser localizables fuera del chat.</li>\n<li><strong>No empezar un paso LIVE si no entra en la cuota restante, contando su rollback.</strong> También hay que contemplar verificación y diagnóstico, no solamente la ejecución feliz.</li>\n<li><strong>Abrir menos frentes y priorizar los que cierran algo.</strong> Un cambio pequeño aceptado puede valer más que cinco tareas a medio hacer.</li>\n<li><strong>Registrar las sesiones para retomar desde un estado identificable.</strong> Guardar referencias, resultados y el próximo paso evita reconstruir todo de memoria.</li>\n<li><strong>Canjear el reset entre pasos, nunca en medio de uno.</strong> Primero se termina o se lleva la operación a un punto seguro; después se cambia la condición de capacidad.</li>\n<li><strong>Avisar al cruzar un umbral, alrededor del 5 %.</strong> Es una señal de atención del operador, no un margen universalmente suficiente.</li>\n</ol>\n<p>La tercera regla exige prudencia: un porcentaje de uso rara vez permite predecir exactamente cuántas acciones quedan. Una estimación conservadora puede apoyarse en pasos comparables y agregar margen de incertidumbre. Si no se puede justificar capacidad para ejecutar, verificar y recuperar, la decisión es posponer el LIVE.</p>\n<p>Además, la recuperación no debería depender exclusivamente de que el mismo modelo siga respondiendo. Un rollback documentado, accesible y ejecutable por una persona reduce esa dependencia. Hay operaciones que no admiten reversión simple; en esos casos hace falta un plan de recuperación adecuado antes de tratarlas como elegibles.</p>\n<h3 id=\"que-contiene-un-recibo-util\">Qué contiene un recibo útil</h3>\n<p>Un recibo es un registro breve de la operación, no una transcripción interminable:</p>\n<ul>\n<li>Identificador de tarea, responsable y momento del registro.</li>\n<li>Repositorio, rama o worktree y commit de partida; cambios todavía sin commit, si existen.</li>\n<li>Estado observado y ubicación del punto seguro o respaldo, cuando corresponda.</li>\n<li>Paso autorizado, alcance y verificación prevista.</li>\n<li>Procedimiento de rollback o recuperación y cómo acceder a él.</li>\n<li>Sesión o terminal asociada, resultados de las pruebas y próximo paso exacto.</li>\n</ul>\n<p>El recibo previo documenta la preparación. Después del paso se actualiza con lo que realmente ocurrió y la evidencia obtenida. No debe contener credenciales ni confundir un plan con una ejecución completada.</p>\n<p>Registrar una sesión ayuda a recuperar contexto, pero no congela el mundo: al retomar hay que comprobar si cambiaron la rama, los servicios o el estado remoto. “Retomar exactamente” significa reconstruir el punto de trabajo con evidencia, no repetir comandos a ciegas.</p>\n<h2 id=\"overdrive-aprovechar-capacidad-sin-fabricar-trabajo\">Overdrive: aprovechar capacidad sin fabricar trabajo</h2>\n<p>Overdrive parte de otra condición: el operador tiene motivos para creer que cierta cuota disponible vencerá antes de usarla. Antes de activarlo, verifica la ventana aplicable a su cuenta. Una publicación ambigua sobre horarios o un reset supuesto no alcanza para tratar esa capacidad como disponible.</p>\n<p>En el entorno que dio origen a este protocolo, la pauta es activar <strong><code>/fast</code> en todas las terminales de Codex que participan en la ronda</strong>. Se registra como una elección de ese entorno, no como una promesa de disponibilidad, velocidad, precio o consumo para cualquier cuenta. El operador debe comprobar que el comando exista en su versión, que el modo quede activo y qué condiciones aplica el proveedor. Cambiar velocidad no autoriza cambiar razonamiento.</p>\n<p>Como referencia externa al 12 de octubre de 2026, Fast consume los límites incluidos a 2,5 veces la tasa Standard; los créditos comprados y Enterprise pay-as-you-go se facturan a 2 veces. Confirmá qué bolsa usa la cuenta antes de activar la ronda. <a href=\"https://learn.chatgpt.com/docs/agent-configuration/speed\" target=\"_blank\" rel=\"noopener noreferrer\">Velocidad y consumo de Codex</a>.</p>\n<p>La capacidad se orienta a <strong>más frentes BUILD en paralelo, más auditorías y pre-revisiones, más tests y documentación</strong>. Para que eso produzca valor, cada frente necesita una salida y una condición de cierre: una prueba de regresión, un informe de impacto, un diff acotado o una guía contrastada con el código.</p>\n<p>El ejemplo conserva <strong>coordinadores en Sol medium y Luna en high</strong>, según el reparto habitual del operador. Son asignaciones concretas, no una tabla universal de equivalencias entre familias. La excepción “subir a high para auditores de gate LIVE o diseños difíciles” se refiere a elevar las asignaciones que parten de medium; Luna ya está en high. La cuota sobrante no justifica una escalada general.</p>\n<p>Más concurrencia también aumenta el costo de integración. Conviene aislar ramas o worktrees, asignar archivos y responsabilidades, y evitar que varios agentes resuelvan el mismo problema sin una comparación planificada. Las auditorías aportan poco si repiten observaciones sin criterio de aceptación ni alguien que las revise.</p>\n<h3 id=\"preset-del-protocolo-y-reparto-del-proyecto\">Preset del protocolo y reparto del proyecto</h3>\n<p>Actualización contextual del 12 de octubre de 2026: el preset Sol medium/Luna high anterior se conserva como parte del protocolo humano original. El <a href=\"/entrada/caso-orca-cockpit-multiagente\">caso operativo V4</a> separa ahora dirección general con Opus, integración con Sol low y coordinación de paquetes con Sol medium. Esa distribución corresponde a funciones diferentes dentro de ese proyecto; no modifica automáticamente el protocolo ni establece una rebaja por falta de cuota.</p>\n<p>La regla común sigue siendo elegir esfuerzo por complejidad y responsabilidad, manteniendo los permisos del encargo. Los avisos de cuota son informativos: no activan solos RCT, Overdrive ni un cambio de proveedor. Del mismo modo, una autonomía LIVE pequeña previamente autorizada no nace de tener cuota disponible.</p>\n<h3 id=\"la-capacidad-humana-pone-el-limite\">La capacidad humana pone el límite</h3>\n<p>Antes de abrir otro frente, el operador debería poder responder:</p>\n<ul>\n<li>¿Qué entrega útil va a producir y qué decisión habilita?</li>\n<li>¿Puede cerrarse o quedar en un punto seguro dentro de la ventana?</li>\n<li>¿Tiene independencia suficiente para no bloquear a los demás?</li>\n<li>¿Quién va a revisar el resultado y cuándo?</li>\n</ul>\n<p>Si la revisión humana ya está saturada, aumentar agentes puede convertir cuota que vence en deuda de revisión. En ese caso conviene terminar tests, consolidar documentación o cerrar frentes existentes. También es válido dejar capacidad sin usar.</p>\n<h2 id=\"dos-escenas-para-aplicar-el-criterio\">Dos escenas para aplicar el criterio</h2>\n<p><strong>Cuota baja antes de una migración.</strong> Hay una corrección casi cerrada, dos investigaciones abiertas y una migración pendiente. El operador activa RCT, termina la corrección verificable y registra las investigaciones. La migración espera si no hay margen defendible para validación y recuperación. El reset, si corresponde y está disponible, se canjea desde ese punto seguro.</p>\n<p><strong>Ventana confirmada con cuota disponible.</strong> Hay una feature en BUILD que todavía necesita tests y revisión. El operador activa Overdrive y reparte tareas independientes: regresión, compatibilidad, revisión del diff y documentación operativa. Los resultados llegan al mismo gate de publicación. Ninguna de esas salidas convierte el despliegue en automático.</p>\n<p>Son ejemplos de aplicación del protocolo, no resultados medidos. Para validar su utilidad conviene comparar rondas por cierres aceptados, defectos encontrados antes de LIVE, tiempo de reanudación, retrabajo y carga de revisión. El porcentaje consumido es contexto, no el indicador principal de éxito.</p>\n<h2 id=\"una-ficha-antes-de-empezar-la-ronda\">Una ficha antes de empezar la ronda</h2>\n<p>La formalización mínima puede ser un registro del operador:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-yaml\"><span class=\"line\"><span style=\"color:#FFE8A1\">protocolo</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> RCT</span><span style=\"color:#6B6580;font-style:italic\"> # u Overdrive</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">activado_por</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> operador_humano</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">motivo</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Condición de cuota verificada para esta ronda\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">fuente_y_hora_de_cuota</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Completar con la consulta real\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">ventana_de_reset</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Confirmada o desconocida; no estimar como hecho\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">frentes_prioritarios</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> []</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">configuraciones_que_se_conservan</span><span style=\"color:#8E899D\">:</span><span style=\"color:#8E899D\"> []</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">limite_de_concurrencia</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Según aislamiento y capacidad de revisión\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">proximo_punto_seguro</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Referencia verificable\"</span></span>\n<span class=\"line\"><span style=\"color:#FFE8A1\">condicion_de_salida</span><span style=\"color:#8E899D\">:</span><span style=\"color:#EDC35E\"> \"Definida por el operador\"</span></span></code></pre>\n<p>Es una propuesta de registro, no un archivo que active comportamientos por sí mismo. La condición de salida puede ser llegar al cierre previsto, cambiar la disponibilidad o agotar la capacidad de revisión. El operador la evalúa entre pasos seguros.</p>\n<h2 id=\"que-aporta-tenerlo-decidido-de-antemano\">Qué aporta tenerlo decidido de antemano</h2>\n<p>RCT sirve cuando la prioridad es continuidad y cierre con capacidad escasa. Overdrive sirve cuando hay una ventana confirmada y un backlog de preparación útil que se puede absorber. Ambos conservan el nivel técnico de las tareas y hacen explícita la responsabilidad humana.</p>\n<p>La mejora buscada es concreta: que un evento del proveedor cambie la organización de la ronda sin obligar a inventar criterios de riesgo, permisos y calidad en ese momento. Más adelante se podrá automatizar la observación o parte del registro. Delegar la decisión de régimen requiere un diseño y una autorización adicionales.</p>\n<h3 id=\"lecturas-relacionadas\">Lecturas relacionadas</h3>\n<ul>\n<li><a href=\"/entrada/guia-escalado-modelos\">Elegir modelos y esfuerzo de razonamiento</a>: el nivel se elige por la tarea.</li>\n<li><a href=\"/entrada/enrutamiento-modelo-esfuerzo-rol-harness\">Modelo, esfuerzo, rol y harness</a>: cómo repartir funciones entre configuraciones.</li>\n<li><a href=\"/entrada/comparar-harness-cli-codex-claude-opencode-cline\">Comparar harness CLI</a>: herramientas, permisos y continuidad del trabajo.</li>\n</ul>\n<p>Las reglas RCT y Overdrive provienen del protocolo humano que motivó esta editorial. Los recibos, la ficha y las métricas propuestas desarrollan su aplicación; no representan funciones nativas garantizadas por un proveedor.</p>\n",
      "headings": [
        {
          "label": "La cuota también condiciona la operación",
          "depth": 2,
          "id": "la-cuota-tambien-condiciona-la-operacion"
        },
        {
          "label": "Primero, quién decide",
          "depth": 2,
          "id": "primero-quien-decide"
        },
        {
          "label": "BUILD y LIVE: separar el trabajo por sus consecuencias",
          "depth": 2,
          "id": "build-y-live-separar-el-trabajo-por-sus-consecuencias"
        },
        {
          "label": "RCT: proteger el cierre cuando queda poca cuota",
          "depth": 2,
          "id": "rct-proteger-el-cierre-cuando-queda-poca-cuota"
        },
        {
          "label": "Qué contiene un recibo útil",
          "depth": 3,
          "id": "que-contiene-un-recibo-util"
        },
        {
          "label": "Overdrive: aprovechar capacidad sin fabricar trabajo",
          "depth": 2,
          "id": "overdrive-aprovechar-capacidad-sin-fabricar-trabajo"
        },
        {
          "label": "Preset del protocolo y reparto del proyecto",
          "depth": 3,
          "id": "preset-del-protocolo-y-reparto-del-proyecto"
        },
        {
          "label": "La capacidad humana pone el límite",
          "depth": 3,
          "id": "la-capacidad-humana-pone-el-limite"
        },
        {
          "label": "Dos escenas para aplicar el criterio",
          "depth": 2,
          "id": "dos-escenas-para-aplicar-el-criterio"
        },
        {
          "label": "Una ficha antes de empezar la ronda",
          "depth": 2,
          "id": "una-ficha-antes-de-empezar-la-ronda"
        },
        {
          "label": "Qué aporta tenerlo decidido de antemano",
          "depth": 2,
          "id": "que-aporta-tenerlo-decidido-de-antemano"
        },
        {
          "label": "Lecturas relacionadas",
          "depth": 3,
          "id": "lecturas-relacionadas"
        }
      ],
      "raw": "---\nslug: protocolos-humanos-cuota-rct-overdrive\ntitle: \"RCT y Overdrive: protocolos humanos para gestionar la cuota de proveedores\"\ntype: editorial\norder: 20\nsummary: \"Dos respuestas preparadas para la escasez y el vencimiento de cuota: proteger pasos LIVE, aprovechar trabajo BUILD y mantener la decisión en manos del operador.\"\ntags: [proveedores, cuota, protocolos, rct, overdrive, continuidad, operaciones, gobierno]\nrelated: [enrutamiento-modelo-esfuerzo-rol-harness, guia-escalado-modelos, comparar-harness-cli-codex-claude-opencode-cline, orquestacion]\narea: Gobierno de agentes\nglyph: ◈\nhue: rgba(237,195,94,.25)\n---\n\n# RCT y Overdrive: protocolos humanos para gestionar la cuota de proveedores\n\n> Marco operativo definido en octubre de 2026. Describe decisiones del operador humano, todavía no una política autónoma del coordinador ni una optimización validada por benchmarks. Los nombres de modelos y comandos del ejemplo pertenecen a una configuración concreta.\n\n## La cuota también condiciona la operación\n\nUna ronda de trabajo puede estar bien diseñada y encontrarse con dos situaciones opuestas: queda poca cuota para terminarla, o queda capacidad disponible que podría perderse al llegar un reset. Resolver ambas sobre la marcha introduce decisiones apuradas justo cuando menos conviene improvisar.\n\nLa idea de RCT y Overdrive es dejar preparada esa respuesta. El operador cambia cuánto trabajo abre, qué frentes prioriza y dónde decide detenerse. La complejidad de cada tarea sigue determinando el modelo y el esfuerzo de razonamiento que necesita.\n\nSe puede pensar como un *min-maxing* de la gestión de proveedores: aprovechar mejor una capacidad limitada sin debilitar los controles que hacen confiable el resultado. La unidad de valor es una tarea aceptada, una incertidumbre resuelta o un riesgo reducido. Agotar un contador, por sí solo, no demuestra eficiencia.\n\nEste enfoque complementa el [enrutamiento por modelo, esfuerzo, rol y harness](/entrada/enrutamiento-modelo-esfuerzo-rol-harness). Allí se decide qué combinación sirve para una tarea; aquí se decide cómo administrar una ronda cuando cambia la disponibilidad del proveedor.\n\n## Primero, quién decide\n\n**La activación y la salida de estos protocolos son decisiones humanas.** El operador observa el consumo, interpreta la ventana de disponibilidad y elige las prioridades. También decide si canjea un reset y cuándo hacerlo.\n\nEl coordinador puede recibir una instrucción explícita: reducir frentes, preparar pruebas, registrar un punto de reanudación o presentar evidencia. Esa colaboración no le concede autoridad para cambiar de régimen, gastar capacidad extra, elevar permisos o iniciar un paso LIVE por su cuenta.\n\nEn esta versión, el aviso al cruzar un umbral de cuota forma parte de la operación humana. Si más adelante se instrumenta una alerta automática, habrá que definir qué fuente lee, con qué demora y a quién avisa. Una alerta no equivale a una autorización.\n\n## BUILD y LIVE: separar el trabajo por sus consecuencias\n\nUsamos **BUILD** para preparación aislada: implementación en ramas, tests con datos de prueba, documentación, auditorías y pre-revisiones. Usamos **LIVE** para pasos con efecto real: desplegar, migrar datos, cambiar configuración de producción o ejecutar una operación sobre un servicio activo.\n\nLa clasificación depende del efecto y los permisos. Una prueba que escribe en producción es LIVE aunque su nombre diga “test”. Una auditoría que solamente lee puede seguir siendo BUILD, pero necesita cuidar los datos a los que accede.\n\nEsta separación permite aumentar la preparación sin acelerar automáticamente la publicación. El gate LIVE conserva su autorización, evidencia y mecanismo de recuperación.\n\n| Decisión | RCT: cuota baja | Overdrive: cuota por vencer |\n| --- | --- | --- |\n| Objetivo | Llegar a cierres seguros y conservar continuidad | Convertir capacidad disponible en entregables útiles |\n| Frentes | Menos abiertos, priorizar los que cierran algo | Más BUILD independiente, dentro de la capacidad de revisión |\n| Modelo y razonamiento | Conservar el nivel que requiere la tarea | Conservar el nivel que requiere la tarea |\n| Pasos LIVE | Admitir solo los que tienen margen para terminar y recuperar | Mantener los mismos gates; no multiplicarlos por tener cuota |\n| Evidencia | Punto seguro, recibo y sesión registrada | Resultados verificables y salidas revisables por cada frente |\n| Decisión de régimen | Operador humano | Operador humano |\n\n## RCT: proteger el cierre cuando queda poca cuota\n\nEl protocolo original establece siete reglas:\n\n1. **No bajar modelos ni razonamiento por falta de cuota.** Si una tarea requiere una configuración, se conserva. Se reduce alcance o concurrencia antes que degradar esa asignación.\n2. **Antes de cada paso LIVE, dejar un punto seguro y un recibo en disco.** El estado previo y el plan de recuperación deben ser localizables fuera del chat.\n3. **No empezar un paso LIVE si no entra en la cuota restante, contando su rollback.** También hay que contemplar verificación y diagnóstico, no solamente la ejecución feliz.\n4. **Abrir menos frentes y priorizar los que cierran algo.** Un cambio pequeño aceptado puede valer más que cinco tareas a medio hacer.\n5. **Registrar las sesiones para retomar desde un estado identificable.** Guardar referencias, resultados y el próximo paso evita reconstruir todo de memoria.\n6. **Canjear el reset entre pasos, nunca en medio de uno.** Primero se termina o se lleva la operación a un punto seguro; después se cambia la condición de capacidad.\n7. **Avisar al cruzar un umbral, alrededor del 5 %.** Es una señal de atención del operador, no un margen universalmente suficiente.\n\nLa tercera regla exige prudencia: un porcentaje de uso rara vez permite predecir exactamente cuántas acciones quedan. Una estimación conservadora puede apoyarse en pasos comparables y agregar margen de incertidumbre. Si no se puede justificar capacidad para ejecutar, verificar y recuperar, la decisión es posponer el LIVE.\n\nAdemás, la recuperación no debería depender exclusivamente de que el mismo modelo siga respondiendo. Un rollback documentado, accesible y ejecutable por una persona reduce esa dependencia. Hay operaciones que no admiten reversión simple; en esos casos hace falta un plan de recuperación adecuado antes de tratarlas como elegibles.\n\n### Qué contiene un recibo útil\n\nUn recibo es un registro breve de la operación, no una transcripción interminable:\n\n- Identificador de tarea, responsable y momento del registro.\n- Repositorio, rama o worktree y commit de partida; cambios todavía sin commit, si existen.\n- Estado observado y ubicación del punto seguro o respaldo, cuando corresponda.\n- Paso autorizado, alcance y verificación prevista.\n- Procedimiento de rollback o recuperación y cómo acceder a él.\n- Sesión o terminal asociada, resultados de las pruebas y próximo paso exacto.\n\nEl recibo previo documenta la preparación. Después del paso se actualiza con lo que realmente ocurrió y la evidencia obtenida. No debe contener credenciales ni confundir un plan con una ejecución completada.\n\nRegistrar una sesión ayuda a recuperar contexto, pero no congela el mundo: al retomar hay que comprobar si cambiaron la rama, los servicios o el estado remoto. “Retomar exactamente” significa reconstruir el punto de trabajo con evidencia, no repetir comandos a ciegas.\n\n## Overdrive: aprovechar capacidad sin fabricar trabajo\n\nOverdrive parte de otra condición: el operador tiene motivos para creer que cierta cuota disponible vencerá antes de usarla. Antes de activarlo, verifica la ventana aplicable a su cuenta. Una publicación ambigua sobre horarios o un reset supuesto no alcanza para tratar esa capacidad como disponible.\n\nEn el entorno que dio origen a este protocolo, la pauta es activar **`/fast` en todas las terminales de Codex que participan en la ronda**. Se registra como una elección de ese entorno, no como una promesa de disponibilidad, velocidad, precio o consumo para cualquier cuenta. El operador debe comprobar que el comando exista en su versión, que el modo quede activo y qué condiciones aplica el proveedor. Cambiar velocidad no autoriza cambiar razonamiento.\n\nComo referencia externa al 12 de octubre de 2026, Fast consume los límites incluidos a 2,5 veces la tasa Standard; los créditos comprados y Enterprise pay-as-you-go se facturan a 2 veces. Confirmá qué bolsa usa la cuenta antes de activar la ronda. [Velocidad y consumo de Codex](https://learn.chatgpt.com/docs/agent-configuration/speed).\n\nLa capacidad se orienta a **más frentes BUILD en paralelo, más auditorías y pre-revisiones, más tests y documentación**. Para que eso produzca valor, cada frente necesita una salida y una condición de cierre: una prueba de regresión, un informe de impacto, un diff acotado o una guía contrastada con el código.\n\nEl ejemplo conserva **coordinadores en Sol medium y Luna en high**, según el reparto habitual del operador. Son asignaciones concretas, no una tabla universal de equivalencias entre familias. La excepción “subir a high para auditores de gate LIVE o diseños difíciles” se refiere a elevar las asignaciones que parten de medium; Luna ya está en high. La cuota sobrante no justifica una escalada general.\n\nMás concurrencia también aumenta el costo de integración. Conviene aislar ramas o worktrees, asignar archivos y responsabilidades, y evitar que varios agentes resuelvan el mismo problema sin una comparación planificada. Las auditorías aportan poco si repiten observaciones sin criterio de aceptación ni alguien que las revise.\n\n### Preset del protocolo y reparto del proyecto\n\nActualización contextual del 12 de octubre de 2026: el preset Sol medium/Luna high anterior se conserva como parte del protocolo humano original. El [caso operativo V4](/entrada/caso-orca-cockpit-multiagente) separa ahora dirección general con Opus, integración con Sol low y coordinación de paquetes con Sol medium. Esa distribución corresponde a funciones diferentes dentro de ese proyecto; no modifica automáticamente el protocolo ni establece una rebaja por falta de cuota.\n\nLa regla común sigue siendo elegir esfuerzo por complejidad y responsabilidad, manteniendo los permisos del encargo. Los avisos de cuota son informativos: no activan solos RCT, Overdrive ni un cambio de proveedor. Del mismo modo, una autonomía LIVE pequeña previamente autorizada no nace de tener cuota disponible.\n\n### La capacidad humana pone el límite\n\nAntes de abrir otro frente, el operador debería poder responder:\n\n- ¿Qué entrega útil va a producir y qué decisión habilita?\n- ¿Puede cerrarse o quedar en un punto seguro dentro de la ventana?\n- ¿Tiene independencia suficiente para no bloquear a los demás?\n- ¿Quién va a revisar el resultado y cuándo?\n\nSi la revisión humana ya está saturada, aumentar agentes puede convertir cuota que vence en deuda de revisión. En ese caso conviene terminar tests, consolidar documentación o cerrar frentes existentes. También es válido dejar capacidad sin usar.\n\n## Dos escenas para aplicar el criterio\n\n**Cuota baja antes de una migración.** Hay una corrección casi cerrada, dos investigaciones abiertas y una migración pendiente. El operador activa RCT, termina la corrección verificable y registra las investigaciones. La migración espera si no hay margen defendible para validación y recuperación. El reset, si corresponde y está disponible, se canjea desde ese punto seguro.\n\n**Ventana confirmada con cuota disponible.** Hay una feature en BUILD que todavía necesita tests y revisión. El operador activa Overdrive y reparte tareas independientes: regresión, compatibilidad, revisión del diff y documentación operativa. Los resultados llegan al mismo gate de publicación. Ninguna de esas salidas convierte el despliegue en automático.\n\nSon ejemplos de aplicación del protocolo, no resultados medidos. Para validar su utilidad conviene comparar rondas por cierres aceptados, defectos encontrados antes de LIVE, tiempo de reanudación, retrabajo y carga de revisión. El porcentaje consumido es contexto, no el indicador principal de éxito.\n\n## Una ficha antes de empezar la ronda\n\nLa formalización mínima puede ser un registro del operador:\n\n```yaml\nprotocolo: RCT # u Overdrive\nactivado_por: operador_humano\nmotivo: \"Condición de cuota verificada para esta ronda\"\nfuente_y_hora_de_cuota: \"Completar con la consulta real\"\nventana_de_reset: \"Confirmada o desconocida; no estimar como hecho\"\nfrentes_prioritarios: []\nconfiguraciones_que_se_conservan: []\nlimite_de_concurrencia: \"Según aislamiento y capacidad de revisión\"\nproximo_punto_seguro: \"Referencia verificable\"\ncondicion_de_salida: \"Definida por el operador\"\n```\n\nEs una propuesta de registro, no un archivo que active comportamientos por sí mismo. La condición de salida puede ser llegar al cierre previsto, cambiar la disponibilidad o agotar la capacidad de revisión. El operador la evalúa entre pasos seguros.\n\n## Qué aporta tenerlo decidido de antemano\n\nRCT sirve cuando la prioridad es continuidad y cierre con capacidad escasa. Overdrive sirve cuando hay una ventana confirmada y un backlog de preparación útil que se puede absorber. Ambos conservan el nivel técnico de las tareas y hacen explícita la responsabilidad humana.\n\nLa mejora buscada es concreta: que un evento del proveedor cambie la organización de la ronda sin obligar a inventar criterios de riesgo, permisos y calidad en ese momento. Más adelante se podrá automatizar la observación o parte del registro. Delegar la decisión de régimen requiere un diseño y una autorización adicionales.\n\n### Lecturas relacionadas\n\n- [Elegir modelos y esfuerzo de razonamiento](/entrada/guia-escalado-modelos): el nivel se elige por la tarea.\n- [Modelo, esfuerzo, rol y harness](/entrada/enrutamiento-modelo-esfuerzo-rol-harness): cómo repartir funciones entre configuraciones.\n- [Comparar harness CLI](/entrada/comparar-harness-cli-codex-claude-opencode-cline): herramientas, permisos y continuidad del trabajo.\n\nLas reglas RCT y Overdrive provienen del protocolo humano que motivó esta editorial. Los recibos, la ficha y las métricas propuestas desarrollan su aplicación; no representan funciones nativas garantizadas por un proveedor.\n"
    },
    {
      "slug": "orca-como-ade",
      "title": "Orca como ADE y plano de control",
      "summary": "Orca organiza agentes, repositorios y entornos de ejecución; no sustituye al modelo ni decide por sí solo cómo debe trabajar el equipo.",
      "type": "concept",
      "order": 1,
      "tags": [
        "orca",
        "ade",
        "agentes",
        "control-plane"
      ],
      "related": [
        "workspaces-y-worktrees",
        "orquestacion",
        "agent-terminals"
      ],
      "area": "Orca",
      "glyph": "◉",
      "hue": "rgba(237,195,94,.25)",
      "file": "01-orca-como-ade.md",
      "html": "<blockquote>\n<p>Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.</p>\n</blockquote>\n<h2 id=\"la-idea-en-una-frase\">La idea en una frase</h2>\n<p>Orca es un <strong>Agent Development Environment</strong>: una interfaz para ejecutar y supervisar distintos agentes de código sobre proyectos reales, con sesiones y espacios de trabajo identificables. La terminal sigue siendo una superficie central, pero ya no es la única: Orca documenta una <a href=\"https://www.onorca.dev/docs/agents/native-chat\" target=\"_blank\" rel=\"noopener noreferrer\">Chat UI experimental</a> para agentes compatibles. Las sesiones WSL y SSH usan una variante respaldada por terminal; no hay que asumir paridad con el chat estructurado local.</p>\n<p>No aporta un “cerebro” nuevo. Los cerebros siguen siendo Codex, Claude Code, OpenCode, Pi u otros agentes CLI. Orca aporta el lugar donde se ve quién está trabajando, sobre qué rama, en qué host y con qué estado.</p>\n<h2 id=\"que-problema-resuelve\">Qué problema resuelve</h2>\n<p>Cuando los agentes viven en terminales sueltas, la coordinación queda en la memoria del operador:</p>\n<ul>\n<li>qué agente estaba en cada repositorio;</li>\n<li>cuál tenía permiso para editar;</li>\n<li>qué rama correspondía a cada tarea;</li>\n<li>cuál terminó y cuál espera una decisión;</li>\n<li>dónde quedó una sesión después de cerrar una ventana o cambiar de equipo.</li>\n</ul>\n<p>Orca vuelve visible ese estado y lo ata a entidades concretas: proyecto, workspace, worktree, terminal, sesión y host.</p>\n<h2 id=\"tres-planos-distintos\">Tres planos distintos</h2>\n<h3 id=\"agente\">Agente</h3>\n<p>Es el ejecutor: Codex, Claude Code, OpenCode u otro CLI. Razona, usa herramientas y modifica archivos según sus permisos.</p>\n<h3 id=\"entorno-de-ejecucion\">Entorno de ejecución</h3>\n<p>Es la máquina donde realmente viven el repositorio, Git, las dependencias y las credenciales. Puede ser la PC local, WSL, una máquina por SSH o un Orca Server remoto.</p>\n<h3 id=\"plano-de-control\">Plano de control</h3>\n<p>Es Orca Desktop. Permite abrir, ordenar, observar y retomar el trabajo sin trasladar necesariamente el código a la máquina desde la que se mira.</p>\n<p>Separar estos planos es la primera gran ganancia conceptual: <strong>la interfaz puede cerrarse o cambiar de dispositivo sin que el entorno de desarrollo tenga que mudarse</strong>.</p>\n<h2 id=\"que-no-hace-por-si-solo\">Qué no hace por sí solo</h2>\n<p>Orca habilita trabajo paralelo, pero no garantiza una buena orquestación. Cinco agentes abiertos en cinco paneles pueden producir cinco veces más conflicto si comparten alcance, rama o archivos sensibles.</p>\n<p>El valor aparece cuando se suma una metodología:</p>\n<ul>\n<li>un responsable de contexto y planificación;</li>\n<li>tareas acotadas;</li>\n<li>un worktree por implementación;</li>\n<li>límites explícitos sobre archivos compartidos;</li>\n<li>revisión, pruebas y decisión humana antes de integrar.</li>\n</ul>\n<h2 id=\"cuando-conviene\">Cuándo conviene</h2>\n<p>Orca gana sentido cuando hay varios proyectos, agentes o tareas simultáneas; cuando el entorno corre en Linux pero la interfaz se usa desde Windows; o cuando hace falta recuperar contexto después de interrupciones frecuentes.</p>\n<p>Para una única consulta rápida en un repositorio pequeño, una terminal común puede alcanzar. Orca empieza a pagar su complejidad cuando el problema deja de ser “hablar con un agente” y pasa a ser <strong>administrar un sistema de trabajo con agentes</strong>.</p>\n<h2 id=\"resultado-buscado\">Resultado buscado</h2>\n<p>El objetivo no es tener más agentes encendidos. Es aumentar el trabajo útil en paralelo sin perder trazabilidad, aislamiento ni capacidad de frenar.</p>\n<h2 id=\"referencias\">Referencias</h2>\n<ul>\n<li><a href=\"https://github.com/stablyai/orca\" target=\"_blank\" rel=\"noopener noreferrer\">Orca — repositorio oficial</a></li>\n<li><a href=\"https://www.onorca.dev/docs/model/agents-sessions\" target=\"_blank\" rel=\"noopener noreferrer\">Agents &amp; sessions</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "La idea en una frase",
          "depth": 2,
          "id": "la-idea-en-una-frase"
        },
        {
          "label": "Qué problema resuelve",
          "depth": 2,
          "id": "que-problema-resuelve"
        },
        {
          "label": "Tres planos distintos",
          "depth": 2,
          "id": "tres-planos-distintos"
        },
        {
          "label": "Agente",
          "depth": 3,
          "id": "agente"
        },
        {
          "label": "Entorno de ejecución",
          "depth": 3,
          "id": "entorno-de-ejecucion"
        },
        {
          "label": "Plano de control",
          "depth": 3,
          "id": "plano-de-control"
        },
        {
          "label": "Qué no hace por sí solo",
          "depth": 2,
          "id": "que-no-hace-por-si-solo"
        },
        {
          "label": "Cuándo conviene",
          "depth": 2,
          "id": "cuando-conviene"
        },
        {
          "label": "Resultado buscado",
          "depth": 2,
          "id": "resultado-buscado"
        },
        {
          "label": "Referencias",
          "depth": 2,
          "id": "referencias"
        }
      ],
      "raw": "---\nslug: orca-como-ade\ntitle: Orca como ADE y plano de control\ntype: concept\norder: 1\nsummary: Orca organiza agentes, repositorios y entornos de ejecución; no sustituye al modelo ni decide por sí solo cómo debe trabajar el equipo.\ntags: [orca, ade, agentes, control-plane]\nrelated: [workspaces-y-worktrees, orquestacion, agent-terminals]\narea: Orca\nglyph: ◉\nhue: rgba(237,195,94,.25)\n---\n\n# Orca como ADE y plano de control\n\n> Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.\n\n## La idea en una frase\n\nOrca es un **Agent Development Environment**: una interfaz para ejecutar y supervisar distintos agentes de código sobre proyectos reales, con sesiones y espacios de trabajo identificables. La terminal sigue siendo una superficie central, pero ya no es la única: Orca documenta una [Chat UI experimental](https://www.onorca.dev/docs/agents/native-chat) para agentes compatibles. Las sesiones WSL y SSH usan una variante respaldada por terminal; no hay que asumir paridad con el chat estructurado local.\n\nNo aporta un “cerebro” nuevo. Los cerebros siguen siendo Codex, Claude Code, OpenCode, Pi u otros agentes CLI. Orca aporta el lugar donde se ve quién está trabajando, sobre qué rama, en qué host y con qué estado.\n\n## Qué problema resuelve\n\nCuando los agentes viven en terminales sueltas, la coordinación queda en la memoria del operador:\n\n- qué agente estaba en cada repositorio;\n- cuál tenía permiso para editar;\n- qué rama correspondía a cada tarea;\n- cuál terminó y cuál espera una decisión;\n- dónde quedó una sesión después de cerrar una ventana o cambiar de equipo.\n\nOrca vuelve visible ese estado y lo ata a entidades concretas: proyecto, workspace, worktree, terminal, sesión y host.\n\n## Tres planos distintos\n\n### Agente\n\nEs el ejecutor: Codex, Claude Code, OpenCode u otro CLI. Razona, usa herramientas y modifica archivos según sus permisos.\n\n### Entorno de ejecución\n\nEs la máquina donde realmente viven el repositorio, Git, las dependencias y las credenciales. Puede ser la PC local, WSL, una máquina por SSH o un Orca Server remoto.\n\n### Plano de control\n\nEs Orca Desktop. Permite abrir, ordenar, observar y retomar el trabajo sin trasladar necesariamente el código a la máquina desde la que se mira.\n\nSeparar estos planos es la primera gran ganancia conceptual: **la interfaz puede cerrarse o cambiar de dispositivo sin que el entorno de desarrollo tenga que mudarse**.\n\n## Qué no hace por sí solo\n\nOrca habilita trabajo paralelo, pero no garantiza una buena orquestación. Cinco agentes abiertos en cinco paneles pueden producir cinco veces más conflicto si comparten alcance, rama o archivos sensibles.\n\nEl valor aparece cuando se suma una metodología:\n\n- un responsable de contexto y planificación;\n- tareas acotadas;\n- un worktree por implementación;\n- límites explícitos sobre archivos compartidos;\n- revisión, pruebas y decisión humana antes de integrar.\n\n## Cuándo conviene\n\nOrca gana sentido cuando hay varios proyectos, agentes o tareas simultáneas; cuando el entorno corre en Linux pero la interfaz se usa desde Windows; o cuando hace falta recuperar contexto después de interrupciones frecuentes.\n\nPara una única consulta rápida en un repositorio pequeño, una terminal común puede alcanzar. Orca empieza a pagar su complejidad cuando el problema deja de ser “hablar con un agente” y pasa a ser **administrar un sistema de trabajo con agentes**.\n\n## Resultado buscado\n\nEl objetivo no es tener más agentes encendidos. Es aumentar el trabajo útil en paralelo sin perder trazabilidad, aislamiento ni capacidad de frenar.\n\n## Referencias\n\n- [Orca — repositorio oficial](https://github.com/stablyai/orca)\n- [Agents & sessions](https://www.onorca.dev/docs/model/agents-sessions)\n"
    },
    {
      "slug": "workspaces-y-worktrees",
      "title": "Workspaces, proyectos y worktrees",
      "summary": "El proyecto organiza el repositorio, el workspace representa un frente de trabajo y el worktree aporta aislamiento real de archivos y rama.",
      "type": "concept",
      "order": 2,
      "tags": [
        "orca",
        "git",
        "workspaces",
        "worktrees",
        "paralelismo"
      ],
      "related": [
        "orca-como-ade",
        "orquestacion",
        "agent-terminals"
      ],
      "area": "Orca",
      "glyph": "⑂",
      "hue": "rgba(87,217,232,.22)",
      "file": "02-workspaces-y-worktrees.md",
      "html": "<h2 id=\"la-confusion-habitual\">La confusión habitual</h2>\n<p>Proyecto, workspace y worktree se parecen visualmente, pero cumplen funciones distintas. Entender esa separación evita el clásico desastre de varios agentes editando el mismo checkout.</p>\n<h2 id=\"proyecto\">Proyecto</h2>\n<p>Es la referencia estable al repositorio o conjunto relacionado de repositorios. Agrupa los distintos frentes de trabajo y permite aplicar configuración común.</p>\n<p>Un proyecto no debería representar una tarea temporal. Es el contenedor duradero desde el que nacen los workspaces.</p>\n<h2 id=\"workspace\">Workspace</h2>\n<p>Es la unidad operativa visible en Orca: un lugar con tabs, paneles, terminales, editores y, normalmente, una tarea o frente asociado.</p>\n<p>La jerarquía visual entre workspaces sirve para ordenar la operación, pero no cambia por sí sola la historia de Git. Un workspace hijo puede expresar dependencia o coordinación sin que eso implique una rama apilada.</p>\n<h2 id=\"worktree\">Worktree</h2>\n<p>Es el aislamiento real provisto por Git. Cada worktree tiene:</p>\n<ul>\n<li>su propio directorio;</li>\n<li>su propia rama o referencia;</li>\n<li>sus propios archivos de trabajo;</li>\n<li>sus terminales y agentes asociados.</li>\n</ul>\n<p>Por eso Orca es <em>worktree-native</em>: cada feature, corrección o auditoría puede vivir en una copia de trabajo separada sin exigir <code>stash</code>, cambios constantes de rama ni competencia por los mismos archivos. El ciclo esperado es crear, trabajar, revisar, integrar y archivar.</p>\n<h2 id=\"patron-recomendado\">Patrón recomendado</h2>\n<h3 id=\"workspace-principal\">Workspace principal</h3>\n<p>Mantiene el contexto integral del proyecto, revisa estado y prepara el plan. No se usa como depósito indiscriminado de implementaciones paralelas.</p>\n<h3 id=\"workspaces-de-implementacion\">Workspaces de implementación</h3>\n<p>Cada uno recibe una tarea concreta, una rama y un alcance de archivos. El agente puede trabajar con autonomía dentro de ese borde.</p>\n<h3 id=\"workspace-de-revision\">Workspace de revisión</h3>\n<p>Comprueba diffs, pruebas y compatibilidad antes de integrar. Puede ser el principal o uno dedicado según el riesgo.</p>\n<h2 id=\"el-contrato-minimo-de-una-tarea\">El contrato mínimo de una tarea</h2>\n<p>Antes de lanzar un agente, dejar explícitos:</p>\n<ol>\n<li>objetivo verificable;</li>\n<li>rama y worktree asignados;</li>\n<li>rutas permitidas;</li>\n<li>archivos o recursos compartidos que no debe tocar;</li>\n<li>pruebas requeridas;</li>\n<li>condición de detención y formato del handoff.</li>\n</ol>\n<h2 id=\"archivos-compartidos-el-punto-delicado\">Archivos compartidos: el punto delicado</h2>\n<p>Un worktree nuevo no hereda automáticamente todo lo ignorado por Git. Dependencias, cachés y secretos locales pueden necesitar configuración específica. Orca permite compartir directorios grandes o copiar archivos ignorados hacia cada worktree, pero conviene distinguir:</p>\n<ul>\n<li><strong>compartir</strong> para recursos reconstruibles y pesados;</li>\n<li><strong>copiar</strong> para configuración que cada worktree debe poder modificar sin afectar a los demás;</li>\n<li><strong>no propagar</strong> secretos innecesarios.</li>\n</ul>\n<p>Lockfiles, migraciones, infraestructura y configuración transversal deberían tener un único dueño por ventana de trabajo.</p>\n<h2 id=\"beneficio-real\">Beneficio real</h2>\n<p>El aislamiento no sólo previene conflictos técnicos. También vuelve más fácil comparar alternativas, abandonar una implementación y conservar otra, o auditar un cambio sin ensuciar el checkout principal.</p>\n<h2 id=\"referencia\">Referencia</h2>\n<ul>\n<li><a href=\"https://www.onorca.dev/docs/model/worktrees\" target=\"_blank\" rel=\"noopener noreferrer\">Worktrees — Orca Docs</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "La confusión habitual",
          "depth": 2,
          "id": "la-confusion-habitual"
        },
        {
          "label": "Proyecto",
          "depth": 2,
          "id": "proyecto"
        },
        {
          "label": "Workspace",
          "depth": 2,
          "id": "workspace"
        },
        {
          "label": "Worktree",
          "depth": 2,
          "id": "worktree"
        },
        {
          "label": "Patrón recomendado",
          "depth": 2,
          "id": "patron-recomendado"
        },
        {
          "label": "Workspace principal",
          "depth": 3,
          "id": "workspace-principal"
        },
        {
          "label": "Workspaces de implementación",
          "depth": 3,
          "id": "workspaces-de-implementacion"
        },
        {
          "label": "Workspace de revisión",
          "depth": 3,
          "id": "workspace-de-revision"
        },
        {
          "label": "El contrato mínimo de una tarea",
          "depth": 2,
          "id": "el-contrato-minimo-de-una-tarea"
        },
        {
          "label": "Archivos compartidos: el punto delicado",
          "depth": 2,
          "id": "archivos-compartidos-el-punto-delicado"
        },
        {
          "label": "Beneficio real",
          "depth": 2,
          "id": "beneficio-real"
        },
        {
          "label": "Referencia",
          "depth": 2,
          "id": "referencia"
        }
      ],
      "raw": "---\nslug: workspaces-y-worktrees\ntitle: Workspaces, proyectos y worktrees\ntype: concept\norder: 2\nsummary: El proyecto organiza el repositorio, el workspace representa un frente de trabajo y el worktree aporta aislamiento real de archivos y rama.\ntags: [orca, git, workspaces, worktrees, paralelismo]\nrelated: [orca-como-ade, orquestacion, agent-terminals]\narea: Orca\nglyph: ⑂\nhue: rgba(87,217,232,.22)\n---\n\n# Workspaces, proyectos y worktrees\n\n## La confusión habitual\n\nProyecto, workspace y worktree se parecen visualmente, pero cumplen funciones distintas. Entender esa separación evita el clásico desastre de varios agentes editando el mismo checkout.\n\n## Proyecto\n\nEs la referencia estable al repositorio o conjunto relacionado de repositorios. Agrupa los distintos frentes de trabajo y permite aplicar configuración común.\n\nUn proyecto no debería representar una tarea temporal. Es el contenedor duradero desde el que nacen los workspaces.\n\n## Workspace\n\nEs la unidad operativa visible en Orca: un lugar con tabs, paneles, terminales, editores y, normalmente, una tarea o frente asociado.\n\nLa jerarquía visual entre workspaces sirve para ordenar la operación, pero no cambia por sí sola la historia de Git. Un workspace hijo puede expresar dependencia o coordinación sin que eso implique una rama apilada.\n\n## Worktree\n\nEs el aislamiento real provisto por Git. Cada worktree tiene:\n\n- su propio directorio;\n- su propia rama o referencia;\n- sus propios archivos de trabajo;\n- sus terminales y agentes asociados.\n\nPor eso Orca es *worktree-native*: cada feature, corrección o auditoría puede vivir en una copia de trabajo separada sin exigir `stash`, cambios constantes de rama ni competencia por los mismos archivos. El ciclo esperado es crear, trabajar, revisar, integrar y archivar.\n\n## Patrón recomendado\n\n### Workspace principal\n\nMantiene el contexto integral del proyecto, revisa estado y prepara el plan. No se usa como depósito indiscriminado de implementaciones paralelas.\n\n### Workspaces de implementación\n\nCada uno recibe una tarea concreta, una rama y un alcance de archivos. El agente puede trabajar con autonomía dentro de ese borde.\n\n### Workspace de revisión\n\nComprueba diffs, pruebas y compatibilidad antes de integrar. Puede ser el principal o uno dedicado según el riesgo.\n\n## El contrato mínimo de una tarea\n\nAntes de lanzar un agente, dejar explícitos:\n\n1. objetivo verificable;\n2. rama y worktree asignados;\n3. rutas permitidas;\n4. archivos o recursos compartidos que no debe tocar;\n5. pruebas requeridas;\n6. condición de detención y formato del handoff.\n\n## Archivos compartidos: el punto delicado\n\nUn worktree nuevo no hereda automáticamente todo lo ignorado por Git. Dependencias, cachés y secretos locales pueden necesitar configuración específica. Orca permite compartir directorios grandes o copiar archivos ignorados hacia cada worktree, pero conviene distinguir:\n\n- **compartir** para recursos reconstruibles y pesados;\n- **copiar** para configuración que cada worktree debe poder modificar sin afectar a los demás;\n- **no propagar** secretos innecesarios.\n\nLockfiles, migraciones, infraestructura y configuración transversal deberían tener un único dueño por ventana de trabajo.\n\n## Beneficio real\n\nEl aislamiento no sólo previene conflictos técnicos. También vuelve más fácil comparar alternativas, abandonar una implementación y conservar otra, o auditar un cambio sin ensuciar el checkout principal.\n\n## Referencia\n\n- [Worktrees — Orca Docs](https://www.onorca.dev/docs/model/worktrees)\n"
    },
    {
      "slug": "orquestacion",
      "title": "Orquestación en Orca",
      "summary": "Orquestar no es abrir agentes en paralelo: es repartir autoridad, dependencias, contexto, decisiones y evidencia de finalización.",
      "type": "concept",
      "order": 3,
      "tags": [
        "orca",
        "orquestacion",
        "multiagente",
        "coordinacion",
        "delegacion"
      ],
      "related": [
        "workspaces-y-worktrees",
        "agent-terminals",
        "caso-orca-cockpit-multiagente"
      ],
      "area": "Orca",
      "glyph": "✣",
      "hue": "rgba(236,95,189,.24)",
      "file": "03-orquestacion.md",
      "html": "<blockquote>\n<p>Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.</p>\n</blockquote>\n<h2 id=\"paralelismo-no-es-orquestacion\">Paralelismo no es orquestación</h2>\n<p>Abrir varios agentes al mismo tiempo aumenta capacidad, pero no define quién decide, qué depende de qué ni cuándo una tarea está realmente terminada.</p>\n<p>Hay orquestación cuando existen, como mínimo:</p>\n<ul>\n<li>un objetivo común;</li>\n<li>división explícita del trabajo;</li>\n<li>propiedad clara de cada resultado;</li>\n<li>dependencias conocidas;</li>\n<li>canales para preguntas y bloqueos;</li>\n<li>una autoridad de cierre;</li>\n<li>evidencia revisable.</li>\n</ul>\n<h2 id=\"dos-capas-posibles\">Dos capas posibles</h2>\n<h3 id=\"orquestacion-metodologica\">Orquestación metodológica</h3>\n<p>Es el patrón que puede aplicarse hoy usando workspaces y terminales normales:</p>\n<ol>\n<li>un agente gerente conserva el contexto integral;</li>\n<li>prepara tareas acotadas;</li>\n<li>cada implementador trabaja en un worktree aislado;</li>\n<li>los agentes entregan diff, pruebas, riesgos y pendientes;</li>\n<li>el gerente revisa e integra;</li>\n<li>las acciones productivas respetan el alcance autorizado y el gate aplicable.</li>\n</ol>\n<p>El caso inicial exigía intervención humana para cada paso productivo. En su evolución V4, revisada el 12 de octubre de 2026, ciertas operaciones LIVE pequeñas tienen autonomía previamente delimitada; otras, como borrados, siguen necesitando permiso explícito. La política del proyecto decide ese borde: Orca no lo concede por abrir una terminal. El <a href=\"/entrada/caso-orca-cockpit-multiagente#evolucion-del-caso-v4-octubre-de-2026\">caso del cockpit</a> detalla la separación actual entre dirección general, integración y coordinación de paquetes.</p>\n<p>Esta capa no depende de una función experimental. Su autoridad está en el contrato de trabajo, Git y el proceso de revisión.</p>\n<h3 id=\"orquestacion-nativa-de-orca\">Orquestación nativa de Orca</h3>\n<p>Orca incorpora una capa estructurada, actualmente experimental, basada en:</p>\n<ul>\n<li><strong>Run:</strong> contexto durable de coordinación;</li>\n<li><strong>Task:</strong> unidad de trabajo con estado y dependencias;</li>\n<li><strong>Dispatch:</strong> intento concreto de ejecutar una tarea en una terminal;</li>\n<li><strong>Worker:</strong> agente supervisado que realiza ese intento;</li>\n<li><strong>Message:</strong> comunicación de estado, preguntas, heartbeats y cierres;</li>\n<li><strong>Decision gate:</strong> decisión pendiente que bloquea el avance.</li>\n</ul>\n<p>Esta opción sirve cuando importa seguir un grafo de tareas, registrar ownership o exigir que cada worker cierre formalmente su dispatch. Para un prompt puntual observado por una persona, una terminal común sigue siendo suficiente.</p>\n<p>La documentación vigente exige habilitar la función experimental y usa <code>run-create</code>, tareas y <code>worker-start</code>. Los antiguos <code>orchestration run</code> y <code>run-stop</code> están retirados. Un Run conserva contexto de coordinación; no coloca ni agenda workers por sí solo. Consultá <code>orca skills get orchestration --full</code> en la instalación que vas a usar antes de copiar comandos de otra versión. <a href=\"https://www.onorca.dev/docs/cli/orchestration\" target=\"_blank\" rel=\"noopener noreferrer\">Flujo oficial</a>.</p>\n<h2 id=\"el-rol-del-gerente\">El rol del gerente</h2>\n<p>El gerente no debería convertirse en el implementador universal. Su valor está en:</p>\n<ul>\n<li>sostener la visión integral;</li>\n<li>detectar dependencias entre frentes;</li>\n<li>preparar instrucciones que otro agente pueda ejecutar;</li>\n<li>revisar evidencia y compatibilidad;</li>\n<li>decidir qué se integra y qué vuelve a trabajo.</li>\n</ul>\n<p>Cuanto más escribe directamente en todos los frentes, más pierde la separación que hace útil al sistema.</p>\n<h2 id=\"que-delegar\">Qué delegar</h2>\n<p>Delegar funciona bien para tareas que pueden describirse con un borde claro: implementar un endpoint, auditar un módulo, escribir pruebas, comparar alternativas o verificar una migración.</p>\n<p>Conviene mantener centralizadas las decisiones que cruzan varias ramas: lockfiles, esquemas compartidos, secretos, migraciones, despliegues y cambios de arquitectura.</p>\n<h2 id=\"handoff-minimo-de-un-worker\">Handoff mínimo de un worker</h2>\n<p>Una entrega debería contestar:</p>\n<ul>\n<li>qué hizo;</li>\n<li>qué archivos modificó;</li>\n<li>qué pruebas ejecutó;</li>\n<li>qué no pudo comprobar;</li>\n<li>qué riesgos o decisiones quedan;</li>\n<li>qué commit o rama contiene el resultado.</li>\n</ul>\n<p>“Terminé” sin evidencia no es una finalización; es apenas una notificación.</p>\n<h2 id=\"referencia\">Referencia</h2>\n<ul>\n<li><a href=\"https://www.onorca.dev/docs/cli/orchestration\" target=\"_blank\" rel=\"noopener noreferrer\">Orchestration — Orca Docs</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Paralelismo no es orquestación",
          "depth": 2,
          "id": "paralelismo-no-es-orquestacion"
        },
        {
          "label": "Dos capas posibles",
          "depth": 2,
          "id": "dos-capas-posibles"
        },
        {
          "label": "Orquestación metodológica",
          "depth": 3,
          "id": "orquestacion-metodologica"
        },
        {
          "label": "Orquestación nativa de Orca",
          "depth": 3,
          "id": "orquestacion-nativa-de-orca"
        },
        {
          "label": "El rol del gerente",
          "depth": 2,
          "id": "el-rol-del-gerente"
        },
        {
          "label": "Qué delegar",
          "depth": 2,
          "id": "que-delegar"
        },
        {
          "label": "Handoff mínimo de un worker",
          "depth": 2,
          "id": "handoff-minimo-de-un-worker"
        },
        {
          "label": "Referencia",
          "depth": 2,
          "id": "referencia"
        }
      ],
      "raw": "---\nslug: orquestacion\ntitle: Orquestación en Orca\ntype: concept\norder: 3\nsummary: \"Orquestar no es abrir agentes en paralelo: es repartir autoridad, dependencias, contexto, decisiones y evidencia de finalización.\"\ntags: [orca, orquestacion, multiagente, coordinacion, delegacion]\nrelated: [workspaces-y-worktrees, agent-terminals, caso-orca-cockpit-multiagente]\narea: Orca\nglyph: ✣\nhue: rgba(236,95,189,.24)\n---\n\n# Orquestación en Orca\n\n> Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.\n\n## Paralelismo no es orquestación\n\nAbrir varios agentes al mismo tiempo aumenta capacidad, pero no define quién decide, qué depende de qué ni cuándo una tarea está realmente terminada.\n\nHay orquestación cuando existen, como mínimo:\n\n- un objetivo común;\n- división explícita del trabajo;\n- propiedad clara de cada resultado;\n- dependencias conocidas;\n- canales para preguntas y bloqueos;\n- una autoridad de cierre;\n- evidencia revisable.\n\n## Dos capas posibles\n\n### Orquestación metodológica\n\nEs el patrón que puede aplicarse hoy usando workspaces y terminales normales:\n\n1. un agente gerente conserva el contexto integral;\n2. prepara tareas acotadas;\n3. cada implementador trabaja en un worktree aislado;\n4. los agentes entregan diff, pruebas, riesgos y pendientes;\n5. el gerente revisa e integra;\n6. las acciones productivas respetan el alcance autorizado y el gate aplicable.\n\nEl caso inicial exigía intervención humana para cada paso productivo. En su evolución V4, revisada el 12 de octubre de 2026, ciertas operaciones LIVE pequeñas tienen autonomía previamente delimitada; otras, como borrados, siguen necesitando permiso explícito. La política del proyecto decide ese borde: Orca no lo concede por abrir una terminal. El [caso del cockpit](/entrada/caso-orca-cockpit-multiagente#evolucion-del-caso-v4-octubre-de-2026) detalla la separación actual entre dirección general, integración y coordinación de paquetes.\n\nEsta capa no depende de una función experimental. Su autoridad está en el contrato de trabajo, Git y el proceso de revisión.\n\n### Orquestación nativa de Orca\n\nOrca incorpora una capa estructurada, actualmente experimental, basada en:\n\n- **Run:** contexto durable de coordinación;\n- **Task:** unidad de trabajo con estado y dependencias;\n- **Dispatch:** intento concreto de ejecutar una tarea en una terminal;\n- **Worker:** agente supervisado que realiza ese intento;\n- **Message:** comunicación de estado, preguntas, heartbeats y cierres;\n- **Decision gate:** decisión pendiente que bloquea el avance.\n\nEsta opción sirve cuando importa seguir un grafo de tareas, registrar ownership o exigir que cada worker cierre formalmente su dispatch. Para un prompt puntual observado por una persona, una terminal común sigue siendo suficiente.\n\nLa documentación vigente exige habilitar la función experimental y usa `run-create`, tareas y `worker-start`. Los antiguos `orchestration run` y `run-stop` están retirados. Un Run conserva contexto de coordinación; no coloca ni agenda workers por sí solo. Consultá `orca skills get orchestration --full` en la instalación que vas a usar antes de copiar comandos de otra versión. [Flujo oficial](https://www.onorca.dev/docs/cli/orchestration).\n\n## El rol del gerente\n\nEl gerente no debería convertirse en el implementador universal. Su valor está en:\n\n- sostener la visión integral;\n- detectar dependencias entre frentes;\n- preparar instrucciones que otro agente pueda ejecutar;\n- revisar evidencia y compatibilidad;\n- decidir qué se integra y qué vuelve a trabajo.\n\nCuanto más escribe directamente en todos los frentes, más pierde la separación que hace útil al sistema.\n\n## Qué delegar\n\nDelegar funciona bien para tareas que pueden describirse con un borde claro: implementar un endpoint, auditar un módulo, escribir pruebas, comparar alternativas o verificar una migración.\n\nConviene mantener centralizadas las decisiones que cruzan varias ramas: lockfiles, esquemas compartidos, secretos, migraciones, despliegues y cambios de arquitectura.\n\n## Handoff mínimo de un worker\n\nUna entrega debería contestar:\n\n- qué hizo;\n- qué archivos modificó;\n- qué pruebas ejecutó;\n- qué no pudo comprobar;\n- qué riesgos o decisiones quedan;\n- qué commit o rama contiene el resultado.\n\n“Terminé” sin evidencia no es una finalización; es apenas una notificación.\n\n## Referencia\n\n- [Orchestration — Orca Docs](https://www.onorca.dev/docs/cli/orchestration)\n"
    },
    {
      "slug": "hosts-ssh",
      "title": "Hosts SSH y topología de ejecución",
      "summary": "Orca puede operar como interfaz local mientras agentes, repositorios y runtimes viven en WSL o en una máquina remota.",
      "type": "concept",
      "order": 4,
      "tags": [
        "orca",
        "ssh",
        "wsl",
        "remoto",
        "tailscale"
      ],
      "related": [
        "orca-como-ade",
        "setup-windows-wsl",
        "acceso-portatil-orca"
      ],
      "area": "Orca",
      "glyph": "⌁",
      "hue": "rgba(168,106,255,.24)",
      "file": "04-hosts-ssh.md",
      "html": "<h2 id=\"la-idea-central\">La idea central</h2>\n<p>Con un host SSH, Orca separa el lugar desde el que se controla del lugar donde se ejecuta el trabajo.</p>\n<p>La interfaz puede estar en Windows o en una notebook, mientras que el repositorio, Git, Node, Python, Docker y los agentes CLI viven en Linux/WSL o en una máquina remota más potente.</p>\n<h2 id=\"que-queda-en-cada-lado\">Qué queda en cada lado</h2>\n<h3 id=\"cliente-orca\">Cliente Orca</h3>\n<ul>\n<li>interfaz;</li>\n<li>navegación entre proyectos y workspaces;</li>\n<li>visualización de terminales, diffs y estados;</li>\n<li>acciones de supervisión.</li>\n</ul>\n<h3 id=\"host-de-ejecucion\">Host de ejecución</h3>\n<ul>\n<li>archivos reales del repositorio;</li>\n<li>ramas y worktrees;</li>\n<li>procesos de los agentes;</li>\n<li>dependencias y runtimes;</li>\n<li>credenciales necesarias para el proyecto.</li>\n</ul>\n<p>Esta separación evita duplicar entornos y reduce el “en mi máquina funciona”: todos los clientes pueden entrar al mismo host de desarrollo.</p>\n<h2 id=\"ssh-host-y-orca-server-no-son-lo-mismo\">SSH host y Orca Server no son lo mismo</h2>\n<p>Un <strong>SSH host</strong> permite que Orca abra y administre workspaces directamente sobre otra máquina mediante SSH.</p>\n<p>Un <strong>Remote Orca Server</strong> es otra instancia de runtime de Orca preparada para clientes emparejados y escenarios más federados. Para usar WSL local desde Orca Desktop, el patrón simple es una conexión SSH sobre la interfaz de loopback.</p>\n<p>La documentación vigente, consultada el 12 de octubre de 2026, también describe un <strong>servidor administrado por Orca dentro del host SSH</strong>, instalado en la primera conexión cuando el host lo permite, con rutas de compatibilidad y migración para sesiones existentes. La distinción anterior es entre modos de conexión, no entre «tener servidor» y «no tenerlo». Esto describe el producto actual; no confirma que una instalación existente ya haya migrado. <a href=\"https://www.onorca.dev/docs/ssh\" target=\"_blank\" rel=\"noopener noreferrer\">SSH worktrees</a></p>\n<h2 id=\"nuestro-patron\">Nuestro patrón</h2>\n<p>En el escritorio principal:</p>\n<ul>\n<li>Orca Desktop corre en Windows;</li>\n<li>el trabajo vive dentro de WSL;</li>\n<li>SSH conecta la interfaz con el entorno Linux;</li>\n<li>cada dispositivo cliente usa una clave dedicada.</li>\n</ul>\n<p>Para acceso portátil:</p>\n<ul>\n<li>Tailscale crea una red privada;</li>\n<li>la notebook conecta al nodo WSL por MagicDNS o IP privada;</li>\n<li>las ACL permiten desde la notebook únicamente SSH hacia el host de desarrollo;</li>\n<li>no se publica el puerto 22 en Internet.</li>\n</ul>\n<h2 id=\"por-que-una-clave-por-dispositivo\">Por qué una clave por dispositivo</h2>\n<p>Una clave dedicada permite revocar una notebook sin romper GitHub, VPS u otros accesos. También facilita auditar qué dispositivo conserva autorización.</p>\n<p>La clave privada permanece en el cliente; el host sólo recibe la pública en <code>authorized_keys</code>.</p>\n<h2 id=\"limite-operativo\">Límite operativo</h2>\n<p>El cliente remoto no crea disponibilidad. Si el host está apagado, suspendido, sin red o WSL nunca arrancó después de un reinicio, no hay entorno al cual conectarse.</p>\n<p>La disponibilidad debe verificarse por capas:</p>\n<ol>\n<li>host encendido;</li>\n<li>WSL iniciado;</li>\n<li>servicio SSH escuchando;</li>\n<li>red privada disponible;</li>\n<li>autenticación válida;</li>\n<li>runtime de Orca conectado.</li>\n</ol>\n<h2 id=\"beneficio-real\">Beneficio real</h2>\n<p>La notebook deja de ser una segunda estación de desarrollo que hay que mantener sincronizada. Se convierte en otra ventana hacia el mismo entorno, con los mismos repositorios, sesiones y credenciales.</p>\n<h2 id=\"referencias\">Referencias</h2>\n<ul>\n<li><a href=\"https://www.onorca.dev/docs/ssh\" target=\"_blank\" rel=\"noopener noreferrer\">SSH worktrees — Orca Docs</a></li>\n<li><a href=\"https://tailscale.com/docs/install/windows/wsl2\" target=\"_blank\" rel=\"noopener noreferrer\">Tailscale en WSL2</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "La idea central",
          "depth": 2,
          "id": "la-idea-central"
        },
        {
          "label": "Qué queda en cada lado",
          "depth": 2,
          "id": "que-queda-en-cada-lado"
        },
        {
          "label": "Cliente Orca",
          "depth": 3,
          "id": "cliente-orca"
        },
        {
          "label": "Host de ejecución",
          "depth": 3,
          "id": "host-de-ejecucion"
        },
        {
          "label": "SSH host y Orca Server no son lo mismo",
          "depth": 2,
          "id": "ssh-host-y-orca-server-no-son-lo-mismo"
        },
        {
          "label": "Nuestro patrón",
          "depth": 2,
          "id": "nuestro-patron"
        },
        {
          "label": "Por qué una clave por dispositivo",
          "depth": 2,
          "id": "por-que-una-clave-por-dispositivo"
        },
        {
          "label": "Límite operativo",
          "depth": 2,
          "id": "limite-operativo"
        },
        {
          "label": "Beneficio real",
          "depth": 2,
          "id": "beneficio-real"
        },
        {
          "label": "Referencias",
          "depth": 2,
          "id": "referencias"
        }
      ],
      "raw": "---\nslug: hosts-ssh\ntitle: Hosts SSH y topología de ejecución\ntype: concept\norder: 4\nsummary: Orca puede operar como interfaz local mientras agentes, repositorios y runtimes viven en WSL o en una máquina remota.\ntags: [orca, ssh, wsl, remoto, tailscale]\nrelated: [orca-como-ade, setup-windows-wsl, acceso-portatil-orca]\narea: Orca\nglyph: ⌁\nhue: rgba(168,106,255,.24)\n---\n\n# Hosts SSH y topología de ejecución\n\n## La idea central\n\nCon un host SSH, Orca separa el lugar desde el que se controla del lugar donde se ejecuta el trabajo.\n\nLa interfaz puede estar en Windows o en una notebook, mientras que el repositorio, Git, Node, Python, Docker y los agentes CLI viven en Linux/WSL o en una máquina remota más potente.\n\n## Qué queda en cada lado\n\n### Cliente Orca\n\n- interfaz;\n- navegación entre proyectos y workspaces;\n- visualización de terminales, diffs y estados;\n- acciones de supervisión.\n\n### Host de ejecución\n\n- archivos reales del repositorio;\n- ramas y worktrees;\n- procesos de los agentes;\n- dependencias y runtimes;\n- credenciales necesarias para el proyecto.\n\nEsta separación evita duplicar entornos y reduce el “en mi máquina funciona”: todos los clientes pueden entrar al mismo host de desarrollo.\n\n## SSH host y Orca Server no son lo mismo\n\nUn **SSH host** permite que Orca abra y administre workspaces directamente sobre otra máquina mediante SSH.\n\nUn **Remote Orca Server** es otra instancia de runtime de Orca preparada para clientes emparejados y escenarios más federados. Para usar WSL local desde Orca Desktop, el patrón simple es una conexión SSH sobre la interfaz de loopback.\n\nLa documentación vigente, consultada el 12 de octubre de 2026, también describe un **servidor administrado por Orca dentro del host SSH**, instalado en la primera conexión cuando el host lo permite, con rutas de compatibilidad y migración para sesiones existentes. La distinción anterior es entre modos de conexión, no entre «tener servidor» y «no tenerlo». Esto describe el producto actual; no confirma que una instalación existente ya haya migrado. [SSH worktrees](https://www.onorca.dev/docs/ssh)\n\n## Nuestro patrón\n\nEn el escritorio principal:\n\n- Orca Desktop corre en Windows;\n- el trabajo vive dentro de WSL;\n- SSH conecta la interfaz con el entorno Linux;\n- cada dispositivo cliente usa una clave dedicada.\n\nPara acceso portátil:\n\n- Tailscale crea una red privada;\n- la notebook conecta al nodo WSL por MagicDNS o IP privada;\n- las ACL permiten desde la notebook únicamente SSH hacia el host de desarrollo;\n- no se publica el puerto 22 en Internet.\n\n## Por qué una clave por dispositivo\n\nUna clave dedicada permite revocar una notebook sin romper GitHub, VPS u otros accesos. También facilita auditar qué dispositivo conserva autorización.\n\nLa clave privada permanece en el cliente; el host sólo recibe la pública en `authorized_keys`.\n\n## Límite operativo\n\nEl cliente remoto no crea disponibilidad. Si el host está apagado, suspendido, sin red o WSL nunca arrancó después de un reinicio, no hay entorno al cual conectarse.\n\nLa disponibilidad debe verificarse por capas:\n\n1. host encendido;\n2. WSL iniciado;\n3. servicio SSH escuchando;\n4. red privada disponible;\n5. autenticación válida;\n6. runtime de Orca conectado.\n\n## Beneficio real\n\nLa notebook deja de ser una segunda estación de desarrollo que hay que mantener sincronizada. Se convierte en otra ventana hacia el mismo entorno, con los mismos repositorios, sesiones y credenciales.\n\n## Referencias\n\n- [SSH worktrees — Orca Docs](https://www.onorca.dev/docs/ssh)\n- [Tailscale en WSL2](https://tailscale.com/docs/install/windows/wsl2)\n"
    },
    {
      "slug": "agent-terminals",
      "title": "Agent terminals y ciclo de sesión",
      "summary": "Una agent terminal vincula un CLI, una sesión, un worktree y un estado observable; no es solamente una consola con otro nombre.",
      "type": "concept",
      "order": 5,
      "tags": [
        "orca",
        "terminales",
        "sesiones",
        "agentes",
        "panes"
      ],
      "related": [
        "workspaces-y-worktrees",
        "orquestacion",
        "continuidad-y-observabilidad"
      ],
      "area": "Orca",
      "glyph": "▤",
      "hue": "rgba(87,217,232,.22)",
      "file": "05-agent-terminals.md",
      "html": "<blockquote>\n<p>Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.</p>\n</blockquote>\n<h2 id=\"que-es-una-agent-terminal\">Qué es una agent terminal</h2>\n<p>En Orca, una sesión de agente es un CLI ejecutándose dentro de una terminal y un worktree concretos. Ese vínculo le permite al sistema mostrar identidad y estado sin obligar al operador a abrir cada panel.</p>\n<p>Una terminal común sólo expone entrada y salida. Una agent terminal agrega contexto operativo:</p>\n<ul>\n<li>qué agente está corriendo;</li>\n<li>en qué workspace y host;</li>\n<li>si está trabajando, esperando, terminado o bloqueado;</li>\n<li>qué conversación o sesión corresponde;</li>\n<li>cómo volver a enfocarla.</li>\n</ul>\n<h2 id=\"tabs-panes-y-splits\">Tabs, panes y splits</h2>\n<p>Los tabs organizan distintas superficies dentro de un workspace. Los panes permiten ver varias en simultáneo. Un split puede servir para:</p>\n<ul>\n<li>agente y servidor de desarrollo;</li>\n<li>agente y ejecución de pruebas;</li>\n<li>implementación y monitoreo de logs;</li>\n<li>dos agentes sobre tareas deliberadamente separadas.</li>\n</ul>\n<p>El layout ayuda a observar; no reemplaza el aislamiento. Dos agentes en panes diferentes siguen siendo peligrosos si escriben sobre el mismo checkout y el mismo alcance.</p>\n<h2 id=\"estados-del-agente\">Estados del agente</h2>\n<p>Orca reconoce cambios de ciclo mediante señales de terminal y hooks del agente. En términos operativos, los estados importantes son:</p>\n<ul>\n<li><strong>working:</strong> está procesando o usando herramientas;</li>\n<li><strong>needs you:</strong> espera permiso, respuesta o decisión;</li>\n<li><strong>done:</strong> terminó y requiere revisión;</li>\n<li><strong>blocked/failed:</strong> no pudo continuar;</li>\n<li><strong>idle:</strong> permanece abierto pero sin actividad relevante;</li>\n<li><strong>plain shell:</strong> terminal sin un agente reconocido.</li>\n</ul>\n<p>El Agent Dashboard requiere habilitarse en Settings → Experimental. Los indicadores de las filas de worktrees siguen disponibles sin ese tablero. El dashboard permite supervisar varios agentes por excepción: atender primero los que necesitan intervención y revisar los que terminaron, sin recorrer panel por panel.</p>\n<h2 id=\"identidad-estable-de-los-panes\">Identidad estable de los panes</h2>\n<p>En nuestro entorno confirmamos que varias shells pueden compartir workspace y worktree, pero cada pane conserva identificadores propios como <code>ORCA_PANE_KEY</code>, <code>ORCA_TAB_ID</code> y <code>ORCA_TERMINAL_HANDLE</code>.</p>\n<p>Eso habilita una capa de observabilidad externa: relacionar procesos descendientes con un pane concreto, detectar si allí corre Codex u OpenCode y representar el estado sin escribir sobre el proyecto.</p>\n<h2 id=\"copy-context-y-handoffs\">Copy Context y handoffs</h2>\n<p>Copiar un tramo acotado del scrollback sirve para transferir evidencia reciente a otra herramienta. No debería ser la estrategia principal de continuidad: las transcripciones crecen, se truncan y mezclan razonamiento con ruido operativo.</p>\n<p>El handoff durable debe resumir decisiones, archivos, pruebas, riesgos y próximo paso. La terminal conserva el detalle; la documentación conserva el estado útil.</p>\n<h2 id=\"permisos-y-autonomia\">Permisos y autonomía</h2>\n<p>Los defaults de lanzamiento pueden cambiar y, actualmente, Orca favorece agentes con alta autonomía dentro del worktree. Si el equipo necesita confirmación manual, debe configurar y verificar explícitamente los argumentos reales de cada agente.</p>\n<p>El worktree reduce el radio de daño sobre archivos, pero no limita por sí solo acceso a red, secretos, comandos del sistema o servicios externos.</p>\n<h2 id=\"referencias\">Referencias</h2>\n<ul>\n<li><a href=\"https://www.onorca.dev/docs/terminal\" target=\"_blank\" rel=\"noopener noreferrer\">Terminal — Orca Docs</a></li>\n<li><a href=\"https://www.onorca.dev/docs/model/agents-sessions\" target=\"_blank\" rel=\"noopener noreferrer\">Agents &amp; sessions — Orca Docs</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Qué es una agent terminal",
          "depth": 2,
          "id": "que-es-una-agent-terminal"
        },
        {
          "label": "Tabs, panes y splits",
          "depth": 2,
          "id": "tabs-panes-y-splits"
        },
        {
          "label": "Estados del agente",
          "depth": 2,
          "id": "estados-del-agente"
        },
        {
          "label": "Identidad estable de los panes",
          "depth": 2,
          "id": "identidad-estable-de-los-panes"
        },
        {
          "label": "Copy Context y handoffs",
          "depth": 2,
          "id": "copy-context-y-handoffs"
        },
        {
          "label": "Permisos y autonomía",
          "depth": 2,
          "id": "permisos-y-autonomia"
        },
        {
          "label": "Referencias",
          "depth": 2,
          "id": "referencias"
        }
      ],
      "raw": "---\nslug: agent-terminals\ntitle: Agent terminals y ciclo de sesión\ntype: concept\norder: 5\nsummary: Una agent terminal vincula un CLI, una sesión, un worktree y un estado observable; no es solamente una consola con otro nombre.\ntags: [orca, terminales, sesiones, agentes, panes]\nrelated: [workspaces-y-worktrees, orquestacion, continuidad-y-observabilidad]\narea: Orca\nglyph: ▤\nhue: rgba(87,217,232,.22)\n---\n\n# Agent terminals y ciclo de sesión\n\n> Documentación externa revisada el 12 de octubre de 2026. Se conservan los casos históricos y las decisiones operativas del entorno.\n\n## Qué es una agent terminal\n\nEn Orca, una sesión de agente es un CLI ejecutándose dentro de una terminal y un worktree concretos. Ese vínculo le permite al sistema mostrar identidad y estado sin obligar al operador a abrir cada panel.\n\nUna terminal común sólo expone entrada y salida. Una agent terminal agrega contexto operativo:\n\n- qué agente está corriendo;\n- en qué workspace y host;\n- si está trabajando, esperando, terminado o bloqueado;\n- qué conversación o sesión corresponde;\n- cómo volver a enfocarla.\n\n## Tabs, panes y splits\n\nLos tabs organizan distintas superficies dentro de un workspace. Los panes permiten ver varias en simultáneo. Un split puede servir para:\n\n- agente y servidor de desarrollo;\n- agente y ejecución de pruebas;\n- implementación y monitoreo de logs;\n- dos agentes sobre tareas deliberadamente separadas.\n\nEl layout ayuda a observar; no reemplaza el aislamiento. Dos agentes en panes diferentes siguen siendo peligrosos si escriben sobre el mismo checkout y el mismo alcance.\n\n## Estados del agente\n\nOrca reconoce cambios de ciclo mediante señales de terminal y hooks del agente. En términos operativos, los estados importantes son:\n\n- **working:** está procesando o usando herramientas;\n- **needs you:** espera permiso, respuesta o decisión;\n- **done:** terminó y requiere revisión;\n- **blocked/failed:** no pudo continuar;\n- **idle:** permanece abierto pero sin actividad relevante;\n- **plain shell:** terminal sin un agente reconocido.\n\nEl Agent Dashboard requiere habilitarse en Settings → Experimental. Los indicadores de las filas de worktrees siguen disponibles sin ese tablero. El dashboard permite supervisar varios agentes por excepción: atender primero los que necesitan intervención y revisar los que terminaron, sin recorrer panel por panel.\n\n## Identidad estable de los panes\n\nEn nuestro entorno confirmamos que varias shells pueden compartir workspace y worktree, pero cada pane conserva identificadores propios como `ORCA_PANE_KEY`, `ORCA_TAB_ID` y `ORCA_TERMINAL_HANDLE`.\n\nEso habilita una capa de observabilidad externa: relacionar procesos descendientes con un pane concreto, detectar si allí corre Codex u OpenCode y representar el estado sin escribir sobre el proyecto.\n\n## Copy Context y handoffs\n\nCopiar un tramo acotado del scrollback sirve para transferir evidencia reciente a otra herramienta. No debería ser la estrategia principal de continuidad: las transcripciones crecen, se truncan y mezclan razonamiento con ruido operativo.\n\nEl handoff durable debe resumir decisiones, archivos, pruebas, riesgos y próximo paso. La terminal conserva el detalle; la documentación conserva el estado útil.\n\n## Permisos y autonomía\n\nLos defaults de lanzamiento pueden cambiar y, actualmente, Orca favorece agentes con alta autonomía dentro del worktree. Si el equipo necesita confirmación manual, debe configurar y verificar explícitamente los argumentos reales de cada agente.\n\nEl worktree reduce el radio de daño sobre archivos, pero no limita por sí solo acceso a red, secretos, comandos del sistema o servicios externos.\n\n## Referencias\n\n- [Terminal — Orca Docs](https://www.onorca.dev/docs/terminal)\n- [Agents & sessions — Orca Docs](https://www.onorca.dev/docs/model/agents-sessions)\n"
    },
    {
      "slug": "continuidad-y-observabilidad",
      "title": "Continuidad, recuperación y observabilidad",
      "summary": "Orca preserva layout y scrollback, y puede mantener agentes vivos mientras sobreviva el daemon; el estado crítico debe seguir existiendo fuera de la interfaz.",
      "type": "concept",
      "order": 6,
      "tags": [
        "orca",
        "sesiones",
        "recuperacion",
        "observabilidad",
        "daemon"
      ],
      "related": [
        "agent-terminals",
        "hosts-ssh",
        "caso-orca-cockpit-multiagente"
      ],
      "area": "Orca",
      "glyph": "◌",
      "hue": "rgba(237,195,94,.25)",
      "file": "06-continuidad-y-observabilidad.md",
      "html": "<h2 id=\"que-significa-continuidad\">Qué significa continuidad</h2>\n<p>Continuidad no es que un chat permanezca abierto. Es poder responder, después de una interrupción:</p>\n<ul>\n<li>qué se estaba haciendo;</li>\n<li>en qué rama y worktree;</li>\n<li>qué procesos siguen vivos;</li>\n<li>qué evidencia se produjo;</li>\n<li>desde dónde conviene retomar.</li>\n</ul>\n<p>Orca restaura workspaces, tabs, splits, foco y scrollback. Mientras el daemon del host sobreviva, también puede mantener vivos los procesos de los agentes aunque la ventana de Desktop se cierre o reinicie.</p>\n<h2 id=\"el-limite-fisico\">El límite físico</h2>\n<p>Si cae el host completo —reinicio, corte eléctrico, kernel panic— los procesos terminan. Al volver, puede restaurarse la disposición y el último scrollback, pero no la ejecución que estaba en memoria.</p>\n<p>Por eso hay tres niveles distintos:</p>\n<ol>\n<li><strong>Estado visual:</strong> layout, tabs y scrollback.</li>\n<li><strong>Estado de proceso:</strong> agente CLI y PTY mantenidos por el daemon.</li>\n<li><strong>Estado de trabajo:</strong> Git, archivos, commits, documentación y handoff.</li>\n</ol>\n<p>Sólo el tercero sobrevive de forma independiente a una caída total y permite reconstruir con confianza.</p>\n<h2 id=\"lo-que-aprendimos-recuperando-sesiones\">Lo que aprendimos recuperando sesiones</h2>\n<p>En recuperaciones reales fue necesario distinguir entre una interfaz caída, un servicio de Orca detenido, un agente todavía vivo y un worktree sano aunque la conversación ya no pudiera retomarse.</p>\n<p>Antes de detener procesos o limpiar workspaces, conviene observar el estado del runtime, la sesión, la rama, el worktree y Git. El objetivo no es reconstruir toda la infraestructura desde memoria: es identificar qué capa falló y preservar las que siguen sanas.</p>\n<p>La regla es sencilla: <strong>primero identificar, después intervenir</strong>.</p>\n<h2 id=\"retomar-con-el-estado-real-revision-v4\">Retomar con el estado real: revisión V4</h2>\n<p>La revisión del caso operativo del 12 de octubre de 2026 refuerza un paso anterior al relanzamiento: reconstruir PRs abiertos o integrados, ramas y worktrees, workers todavía activos y despliegues efectivos. El resumen de la última conversación sirve como pista; no reemplaza esa lectura. Si el trabajo ya existe o sigue ejecutándose, abrir otro worker puede duplicarlo o competir por el mismo recurso.</p>\n<p>El handoff también debe separar <strong>listo local, aplicado y aceptado</strong>. Un cambio integrado puede seguir esperando publicación; uno publicado puede necesitar el siguiente ciclo real para confirmar el objetivo. Cuando queda un remanente, registrá responsable, evidencia faltante y próximo paso. Un proceso finalizado o una entrega al operador no prueban que la necesidad original esté resuelta.</p>\n<p>Es una evolución del <a href=\"/entrada/caso-orca-cockpit-multiagente\">caso multiagente</a>, no una garantía de recuperación de Orca: el estado operativo debe verificarse fuera de la interfaz.</p>\n<h2 id=\"observabilidad-por-pane\">Observabilidad por pane</h2>\n<p>Los identificadores estables de Orca permiten relacionar workspace, worktree, tab y terminal con el proceso que está ejecutándose. Esa relación alcanza para construir observabilidad de solo lectura sin controlar la sesión del agente.</p>\n<p>Esto fue la base para visualizar agentes fuera de Orca sin controlar ni modificar sus sesiones. La observabilidad se mantiene separada de la autoridad operativa.</p>\n<h2 id=\"documentacion-de-continuidad\">Documentación de continuidad</h2>\n<p>Cada etapa de trabajo importante debería dejar un resumen corto fuera del scrollback:</p>\n<ul>\n<li>objetivo vigente;</li>\n<li>decisiones tomadas;</li>\n<li>rama y worktree;</li>\n<li>archivos modificados;</li>\n<li>validaciones realizadas;</li>\n<li>riesgos y pendientes;</li>\n<li>instrucción exacta para retomar.</li>\n</ul>\n<p>La transcripción explica cómo se llegó. El handoff dice dónde estamos.</p>\n<h2 id=\"beneficio-real\">Beneficio real</h2>\n<p>La recuperación deja de ser “abrir ventanas hasta encontrar algo familiar”. Se vuelve un diagnóstico por capas que permite preservar agentes vivos, rescatar trabajo y evitar limpiezas destructivas por ansiedad. Qué horror cerrar al gerente equivocado por apuro.</p>\n<h2 id=\"referencia\">Referencia</h2>\n<ul>\n<li><a href=\"https://www.onorca.dev/docs/model/session-restore\" target=\"_blank\" rel=\"noopener noreferrer\">Session restore — Orca Docs</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Qué significa continuidad",
          "depth": 2,
          "id": "que-significa-continuidad"
        },
        {
          "label": "El límite físico",
          "depth": 2,
          "id": "el-limite-fisico"
        },
        {
          "label": "Lo que aprendimos recuperando sesiones",
          "depth": 2,
          "id": "lo-que-aprendimos-recuperando-sesiones"
        },
        {
          "label": "Retomar con el estado real: revisión V4",
          "depth": 2,
          "id": "retomar-con-el-estado-real-revision-v4"
        },
        {
          "label": "Observabilidad por pane",
          "depth": 2,
          "id": "observabilidad-por-pane"
        },
        {
          "label": "Documentación de continuidad",
          "depth": 2,
          "id": "documentacion-de-continuidad"
        },
        {
          "label": "Beneficio real",
          "depth": 2,
          "id": "beneficio-real"
        },
        {
          "label": "Referencia",
          "depth": 2,
          "id": "referencia"
        }
      ],
      "raw": "---\nslug: continuidad-y-observabilidad\ntitle: Continuidad, recuperación y observabilidad\ntype: concept\norder: 6\nsummary: Orca preserva layout y scrollback, y puede mantener agentes vivos mientras sobreviva el daemon; el estado crítico debe seguir existiendo fuera de la interfaz.\ntags: [orca, sesiones, recuperacion, observabilidad, daemon]\nrelated: [agent-terminals, hosts-ssh, caso-orca-cockpit-multiagente]\narea: Orca\nglyph: ◌\nhue: rgba(237,195,94,.25)\n---\n\n# Continuidad, recuperación y observabilidad\n\n## Qué significa continuidad\n\nContinuidad no es que un chat permanezca abierto. Es poder responder, después de una interrupción:\n\n- qué se estaba haciendo;\n- en qué rama y worktree;\n- qué procesos siguen vivos;\n- qué evidencia se produjo;\n- desde dónde conviene retomar.\n\nOrca restaura workspaces, tabs, splits, foco y scrollback. Mientras el daemon del host sobreviva, también puede mantener vivos los procesos de los agentes aunque la ventana de Desktop se cierre o reinicie.\n\n## El límite físico\n\nSi cae el host completo —reinicio, corte eléctrico, kernel panic— los procesos terminan. Al volver, puede restaurarse la disposición y el último scrollback, pero no la ejecución que estaba en memoria.\n\nPor eso hay tres niveles distintos:\n\n1. **Estado visual:** layout, tabs y scrollback.\n2. **Estado de proceso:** agente CLI y PTY mantenidos por el daemon.\n3. **Estado de trabajo:** Git, archivos, commits, documentación y handoff.\n\nSólo el tercero sobrevive de forma independiente a una caída total y permite reconstruir con confianza.\n\n## Lo que aprendimos recuperando sesiones\n\nEn recuperaciones reales fue necesario distinguir entre una interfaz caída, un servicio de Orca detenido, un agente todavía vivo y un worktree sano aunque la conversación ya no pudiera retomarse.\n\nAntes de detener procesos o limpiar workspaces, conviene observar el estado del runtime, la sesión, la rama, el worktree y Git. El objetivo no es reconstruir toda la infraestructura desde memoria: es identificar qué capa falló y preservar las que siguen sanas.\n\nLa regla es sencilla: **primero identificar, después intervenir**.\n\n## Retomar con el estado real: revisión V4\n\nLa revisión del caso operativo del 12 de octubre de 2026 refuerza un paso anterior al relanzamiento: reconstruir PRs abiertos o integrados, ramas y worktrees, workers todavía activos y despliegues efectivos. El resumen de la última conversación sirve como pista; no reemplaza esa lectura. Si el trabajo ya existe o sigue ejecutándose, abrir otro worker puede duplicarlo o competir por el mismo recurso.\n\nEl handoff también debe separar **listo local, aplicado y aceptado**. Un cambio integrado puede seguir esperando publicación; uno publicado puede necesitar el siguiente ciclo real para confirmar el objetivo. Cuando queda un remanente, registrá responsable, evidencia faltante y próximo paso. Un proceso finalizado o una entrega al operador no prueban que la necesidad original esté resuelta.\n\nEs una evolución del [caso multiagente](/entrada/caso-orca-cockpit-multiagente), no una garantía de recuperación de Orca: el estado operativo debe verificarse fuera de la interfaz.\n\n## Observabilidad por pane\n\nLos identificadores estables de Orca permiten relacionar workspace, worktree, tab y terminal con el proceso que está ejecutándose. Esa relación alcanza para construir observabilidad de solo lectura sin controlar la sesión del agente.\n\nEsto fue la base para visualizar agentes fuera de Orca sin controlar ni modificar sus sesiones. La observabilidad se mantiene separada de la autoridad operativa.\n\n## Documentación de continuidad\n\nCada etapa de trabajo importante debería dejar un resumen corto fuera del scrollback:\n\n- objetivo vigente;\n- decisiones tomadas;\n- rama y worktree;\n- archivos modificados;\n- validaciones realizadas;\n- riesgos y pendientes;\n- instrucción exacta para retomar.\n\nLa transcripción explica cómo se llegó. El handoff dice dónde estamos.\n\n## Beneficio real\n\nLa recuperación deja de ser “abrir ventanas hasta encontrar algo familiar”. Se vuelve un diagnóstico por capas que permite preservar agentes vivos, rescatar trabajo y evitar limpiezas destructivas por ansiedad. Qué horror cerrar al gerente equivocado por apuro.\n\n## Referencia\n\n- [Session restore — Orca Docs](https://www.onorca.dev/docs/model/session-restore)\n"
    },
    {
      "slug": "setup-windows-wsl",
      "title": "Orca Desktop con Windows y WSL",
      "summary": "Patrón de referencia para separar la interfaz de escritorio del entorno Linux donde viven repositorios, runtimes y agentes.",
      "type": "guide",
      "order": 7,
      "tags": [
        "orca",
        "setup",
        "windows",
        "wsl",
        "ssh"
      ],
      "related": [
        "hosts-ssh",
        "agent-terminals",
        "acceso-portatil-orca"
      ],
      "area": "Orca",
      "glyph": "⊞",
      "hue": "rgba(168,106,255,.24)",
      "file": "07-setup-windows-wsl.md",
      "html": "<h2 id=\"el-patron\">El patrón</h2>\n<p>Orca Desktop puede vivir en Windows mientras el trabajo real se ejecuta dentro de WSL. La separación permite conservar una interfaz nativa sin trasladar repositorios, dependencias y CLIs al filesystem de Windows.</p>\n<table>\n<thead>\n<tr>\n<th>Capa</th>\n<th>Responsabilidad</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Windows</td>\n<td>Interfaz de Orca y selección del host</td>\n</tr>\n<tr>\n<td>WSL/Linux</td>\n<td>Git, repositorios, runtimes y agentes CLI</td>\n</tr>\n<tr>\n<td>SSH local</td>\n<td>Puente controlado entre la interfaz y el entorno</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"decisiones-importantes\">Decisiones importantes</h2>\n<h3 id=\"repositorios-en-linux\">Repositorios en Linux</h3>\n<p>Los proyectos se mantienen dentro del filesystem de WSL. Esto reduce fricción con permisos, watchers, rendimiento y herramientas diseñadas para Linux.</p>\n<h3 id=\"identidad-ssh-exclusiva\">Identidad SSH exclusiva</h3>\n<p>Orca usa una clave dedicada. No hace falta reutilizar una identidad personal con mayor alcance: una credencial específica simplifica revocación y auditoría.</p>\n<h3 id=\"agentes-instalados-en-el-host-real\">Agentes instalados en el host real</h3>\n<p>Cada CLI debe estar instalado y autenticado dentro de WSL. Que una herramienta funcione en Windows no implica que exista ni comparta sesión dentro de Linux.</p>\n<h3 id=\"primera-prueba-en-modo-lectura\">Primera prueba en modo lectura</h3>\n<p>Antes de habilitar edición, se pide al agente que identifique el framework y cite el archivo donde lo verificó. La prueba prueba simultáneamente conexión, ruta, CLI y acceso al repositorio sin modificar nada.</p>\n<h2 id=\"preparar-trabajo-paralelo\">Preparar trabajo paralelo</h2>\n<ul>\n<li>un worktree y una rama por tarea;</li>\n<li>un único responsable para recursos compartidos;</li>\n<li>alcance y validaciones escritos antes de ejecutar;</li>\n<li>revisión humana antes de merge o deploy;</li>\n<li>credenciales limitadas al host y al proyecto necesarios.</li>\n</ul>\n<h2 id=\"checklist-portable\">Checklist portable</h2>\n<ul>\n<li>[ ] El servicio SSH del entorno Linux está activo.</li>\n<li>[ ] Orca usa una clave exclusiva.</li>\n<li>[ ] El host local conecta sin depender de una terminal abierta.</li>\n<li>[ ] Los repositorios se abren desde el filesystem Linux.</li>\n<li>[ ] Los agentes están disponibles y autenticados en ese host.</li>\n<li>[ ] La prueba de solo lectura terminó con Git limpio.</li>\n<li>[ ] La estrategia de worktrees está definida.</li>\n</ul>\n<p>Los comandos exactos dependen de la distribución, la versión de WSL y la política de seguridad. La guía conserva el diseño; la implementación se valida contra la documentación vigente de cada herramienta.</p>\n",
      "headings": [
        {
          "label": "El patrón",
          "depth": 2,
          "id": "el-patron"
        },
        {
          "label": "Decisiones importantes",
          "depth": 2,
          "id": "decisiones-importantes"
        },
        {
          "label": "Repositorios en Linux",
          "depth": 3,
          "id": "repositorios-en-linux"
        },
        {
          "label": "Identidad SSH exclusiva",
          "depth": 3,
          "id": "identidad-ssh-exclusiva"
        },
        {
          "label": "Agentes instalados en el host real",
          "depth": 3,
          "id": "agentes-instalados-en-el-host-real"
        },
        {
          "label": "Primera prueba en modo lectura",
          "depth": 3,
          "id": "primera-prueba-en-modo-lectura"
        },
        {
          "label": "Preparar trabajo paralelo",
          "depth": 2,
          "id": "preparar-trabajo-paralelo"
        },
        {
          "label": "Checklist portable",
          "depth": 2,
          "id": "checklist-portable"
        }
      ],
      "raw": "---\nslug: setup-windows-wsl\ntitle: Orca Desktop con Windows y WSL\ntype: guide\norder: 7\nsummary: Patrón de referencia para separar la interfaz de escritorio del entorno Linux donde viven repositorios, runtimes y agentes.\ntags: [orca, setup, windows, wsl, ssh]\nrelated: [hosts-ssh, agent-terminals, acceso-portatil-orca]\narea: Orca\nglyph: ⊞\nhue: rgba(168,106,255,.24)\n---\n\n# Orca Desktop con Windows y WSL\n\n## El patrón\n\nOrca Desktop puede vivir en Windows mientras el trabajo real se ejecuta dentro de WSL. La separación permite conservar una interfaz nativa sin trasladar repositorios, dependencias y CLIs al filesystem de Windows.\n\n| Capa | Responsabilidad |\n| --- | --- |\n| Windows | Interfaz de Orca y selección del host |\n| WSL/Linux | Git, repositorios, runtimes y agentes CLI |\n| SSH local | Puente controlado entre la interfaz y el entorno |\n\n## Decisiones importantes\n\n### Repositorios en Linux\n\nLos proyectos se mantienen dentro del filesystem de WSL. Esto reduce fricción con permisos, watchers, rendimiento y herramientas diseñadas para Linux.\n\n### Identidad SSH exclusiva\n\nOrca usa una clave dedicada. No hace falta reutilizar una identidad personal con mayor alcance: una credencial específica simplifica revocación y auditoría.\n\n### Agentes instalados en el host real\n\nCada CLI debe estar instalado y autenticado dentro de WSL. Que una herramienta funcione en Windows no implica que exista ni comparta sesión dentro de Linux.\n\n### Primera prueba en modo lectura\n\nAntes de habilitar edición, se pide al agente que identifique el framework y cite el archivo donde lo verificó. La prueba prueba simultáneamente conexión, ruta, CLI y acceso al repositorio sin modificar nada.\n\n## Preparar trabajo paralelo\n\n- un worktree y una rama por tarea;\n- un único responsable para recursos compartidos;\n- alcance y validaciones escritos antes de ejecutar;\n- revisión humana antes de merge o deploy;\n- credenciales limitadas al host y al proyecto necesarios.\n\n## Checklist portable\n\n- [ ] El servicio SSH del entorno Linux está activo.\n- [ ] Orca usa una clave exclusiva.\n- [ ] El host local conecta sin depender de una terminal abierta.\n- [ ] Los repositorios se abren desde el filesystem Linux.\n- [ ] Los agentes están disponibles y autenticados en ese host.\n- [ ] La prueba de solo lectura terminó con Git limpio.\n- [ ] La estrategia de worktrees está definida.\n\nLos comandos exactos dependen de la distribución, la versión de WSL y la política de seguridad. La guía conserva el diseño; la implementación se valida contra la documentación vigente de cada herramienta.\n"
    },
    {
      "slug": "acceso-portatil-orca",
      "title": "Acceso portátil a Orca mediante red privada",
      "summary": "Usar otro dispositivo como cliente del mismo entorno de desarrollo, sin duplicar repositorios ni publicar SSH en Internet.",
      "type": "guide",
      "order": 8,
      "tags": [
        "orca",
        "tailscale",
        "ssh",
        "wsl",
        "remoto",
        "seguridad"
      ],
      "related": [
        "hosts-ssh",
        "setup-windows-wsl",
        "tailscale-red-privada-identidad",
        "tailscale-entorno-agentes"
      ],
      "area": "Orca",
      "glyph": "↗",
      "hue": "rgba(87,217,232,.22)",
      "file": "08-acceso-portatil.md",
      "html": "<h2 id=\"objetivo\">Objetivo</h2>\n<p>Trabajar desde una notebook sobre el mismo entorno, repositorios y agentes que viven en la estación principal.</p>\n<p>El dispositivo portátil no recrea el stack ni mantiene clones paralelos. Funciona como cliente de Orca y conecta por SSH a través de una red privada.</p>\n<h2 id=\"topologia\">Topología</h2>\n<ul>\n<li><strong>Host de trabajo:</strong> contiene Git, repositorios, runtimes y agentes.</li>\n<li><strong>Cliente portátil:</strong> ejecuta Orca Desktop.</li>\n<li><strong>Red privada:</strong> conecta ambos dispositivos sin abrir SSH a Internet.</li>\n<li><strong>Identidad:</strong> cada cliente posee su propia clave revocable.</li>\n</ul>\n<h2 id=\"controles-recomendados\">Controles recomendados</h2>\n<h3 id=\"destino-estable\">Destino estable</h3>\n<p>El cliente apunta a una identidad privada estable del host y no a una dirección interna efímera. Esto evita reconfigurar la conexión después de reinicios o cambios de red.</p>\n<h3 id=\"minimo-privilegio-de-red\">Mínimo privilegio de red</h3>\n<p>La notebook sólo debería iniciar conexiones al host de desarrollo y al puerto necesario. Otros servidores y destinos quedan fuera de alcance.</p>\n<h3 id=\"separacion-entre-uso-y-administracion\">Separación entre uso y administración</h3>\n<p>El usuario cotidiano del dispositivo no necesita capacidad para modificar las reglas de la red privada. La conectividad autorizada y la administración de esa conectividad son permisos distintos.</p>\n<h3 id=\"prueba-positiva-y-negativa\">Prueba positiva y negativa</h3>\n<p>Se valida que el host permitido responda y que un destino explícitamente bloqueado no sea alcanzable. Probar contra una máquina apagada no demuestra que la política funcione.</p>\n<h2 id=\"disponibilidad\">Disponibilidad</h2>\n<p>El acceso remoto depende de que el host esté encendido, conectado y con el entorno de ejecución iniciado. La red privada no reemplaza una estrategia de encendido remoto ni de recuperación del sistema.</p>\n<h2 id=\"beneficio-real\">Beneficio real</h2>\n<p>La movilidad deja de crear una segunda estación de desarrollo. Hay un único estado de Git, una única política de credenciales y los mismos agentes vistos desde otro cliente.</p>\n<h2 id=\"referencias\">Referencias</h2>\n<ul>\n<li><a href=\"https://tailscale.com/docs/install/windows/wsl2\" target=\"_blank\" rel=\"noopener noreferrer\">Tailscale en WSL2</a></li>\n<li><a href=\"https://tailscale.com/docs/install/windows\" target=\"_blank\" rel=\"noopener noreferrer\">Tailscale para Windows</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Objetivo",
          "depth": 2,
          "id": "objetivo"
        },
        {
          "label": "Topología",
          "depth": 2,
          "id": "topologia"
        },
        {
          "label": "Controles recomendados",
          "depth": 2,
          "id": "controles-recomendados"
        },
        {
          "label": "Destino estable",
          "depth": 3,
          "id": "destino-estable"
        },
        {
          "label": "Mínimo privilegio de red",
          "depth": 3,
          "id": "minimo-privilegio-de-red"
        },
        {
          "label": "Separación entre uso y administración",
          "depth": 3,
          "id": "separacion-entre-uso-y-administracion"
        },
        {
          "label": "Prueba positiva y negativa",
          "depth": 3,
          "id": "prueba-positiva-y-negativa"
        },
        {
          "label": "Disponibilidad",
          "depth": 2,
          "id": "disponibilidad"
        },
        {
          "label": "Beneficio real",
          "depth": 2,
          "id": "beneficio-real"
        },
        {
          "label": "Referencias",
          "depth": 2,
          "id": "referencias"
        }
      ],
      "raw": "---\nslug: acceso-portatil-orca\ntitle: Acceso portátil a Orca mediante red privada\ntype: guide\norder: 8\nsummary: Usar otro dispositivo como cliente del mismo entorno de desarrollo, sin duplicar repositorios ni publicar SSH en Internet.\ntags: [orca, tailscale, ssh, wsl, remoto, seguridad]\nrelated: [hosts-ssh, setup-windows-wsl, tailscale-red-privada-identidad, tailscale-entorno-agentes]\narea: Orca\nglyph: ↗\nhue: rgba(87,217,232,.22)\n---\n\n# Acceso portátil a Orca mediante red privada\n\n## Objetivo\n\nTrabajar desde una notebook sobre el mismo entorno, repositorios y agentes que viven en la estación principal.\n\nEl dispositivo portátil no recrea el stack ni mantiene clones paralelos. Funciona como cliente de Orca y conecta por SSH a través de una red privada.\n\n## Topología\n\n- **Host de trabajo:** contiene Git, repositorios, runtimes y agentes.\n- **Cliente portátil:** ejecuta Orca Desktop.\n- **Red privada:** conecta ambos dispositivos sin abrir SSH a Internet.\n- **Identidad:** cada cliente posee su propia clave revocable.\n\n## Controles recomendados\n\n### Destino estable\n\nEl cliente apunta a una identidad privada estable del host y no a una dirección interna efímera. Esto evita reconfigurar la conexión después de reinicios o cambios de red.\n\n### Mínimo privilegio de red\n\nLa notebook sólo debería iniciar conexiones al host de desarrollo y al puerto necesario. Otros servidores y destinos quedan fuera de alcance.\n\n### Separación entre uso y administración\n\nEl usuario cotidiano del dispositivo no necesita capacidad para modificar las reglas de la red privada. La conectividad autorizada y la administración de esa conectividad son permisos distintos.\n\n### Prueba positiva y negativa\n\nSe valida que el host permitido responda y que un destino explícitamente bloqueado no sea alcanzable. Probar contra una máquina apagada no demuestra que la política funcione.\n\n## Disponibilidad\n\nEl acceso remoto depende de que el host esté encendido, conectado y con el entorno de ejecución iniciado. La red privada no reemplaza una estrategia de encendido remoto ni de recuperación del sistema.\n\n## Beneficio real\n\nLa movilidad deja de crear una segunda estación de desarrollo. Hay un único estado de Git, una única política de credenciales y los mismos agentes vistos desde otro cliente.\n\n## Referencias\n\n- [Tailscale en WSL2](https://tailscale.com/docs/install/windows/wsl2)\n- [Tailscale para Windows](https://tailscale.com/docs/install/windows)\n"
    },
    {
      "slug": "caso-orca-cockpit-multiagente",
      "title": "Caso real — Orca como cockpit multiagente",
      "summary": "La evolución de un coordinador único a dirección, integración y paquetes separados, con auditoría cruzada y aceptación verificable.",
      "type": "case-study",
      "order": 9,
      "tags": [
        "orca",
        "caso-real",
        "multiagente",
        "worktrees",
        "orquestacion"
      ],
      "related": [
        "orquestacion",
        "workspaces-y-worktrees",
        "continuidad-y-observabilidad"
      ],
      "area": "Orca",
      "glyph": "◈",
      "hue": "rgba(236,95,189,.24)",
      "file": "09-caso-cockpit-multiagente.md",
      "html": "<h2 id=\"situacion-inicial\">Situación inicial</h2>\n<p>Un proyecto de transformación digital combinaba integraciones, datos, APIs, seguridad y operación productiva. Una sola conversación podía conservar el contexto, pero se convertía en cuello de botella al abrir varios frentes en paralelo.</p>\n<p>La alternativa de lanzar agentes sin estructura tampoco servía: aumentaba el riesgo de cambios superpuestos, decisiones contradictorias y pérdida de contexto al cambiar de sesión.</p>\n<h2 id=\"modelo-inicial-adoptado\">Modelo inicial adoptado</h2>\n<h3 id=\"agente-coordinador\">Agente coordinador</h3>\n<p>Un agente de mayor capacidad opera sobre el workspace principal. Su función es:</p>\n<ul>\n<li>revisar el estado general;</li>\n<li>mantener decisiones y restricciones vigentes;</li>\n<li>preparar el plan;</li>\n<li>dividir el trabajo en unidades verificables;</li>\n<li>revisar implementaciones y auditorías;</li>\n<li>decidir el siguiente frente.</li>\n</ul>\n<p>El coordinador no existe para implementar todo. Existe para que cada tarea nazca con contexto suficiente y vuelva con evidencia comparable.</p>\n<h3 id=\"implementadores-y-revisores\">Implementadores y revisores</h3>\n<p>Las tareas acotadas se asignan según costo, disponibilidad y fortaleza del agente. Pueden convivir modelos y CLIs distintos sin cambiar la metodología.</p>\n<p>Cada worker recibe:</p>\n<ul>\n<li>su propio worktree y rama;</li>\n<li>un alcance explícito;</li>\n<li>restricciones operativas;</li>\n<li>condiciones de finalización;</li>\n<li>una forma esperada de entregar evidencia.</li>\n</ul>\n<p>Los agentes de revisión se separan, cuando corresponde, de quienes realizaron la implementación.</p>\n<h2 id=\"flujo-operativo-inicial\">Flujo operativo inicial</h2>\n<ol>\n<li>El coordinador inspecciona el proyecto y prepara una tarea.</li>\n<li>Se crea un worktree desde una base conocida.</li>\n<li>El implementador trabaja dentro de su alcance.</li>\n<li>Entrega cambios, pruebas, riesgos y pendientes.</li>\n<li>Otro agente o el coordinador revisa el resultado.</li>\n<li>La integración y cualquier acción productiva permanecen detrás de un gate humano.</li>\n</ol>\n<h2 id=\"evolucion-del-caso-v4-octubre-de-2026\">Evolución del caso: V4, octubre de 2026</h2>\n<p>La documentación V4, revisada el 12 de octubre de 2026, separa responsabilidades que antes se concentraban en un solo coordinador. El diseño anterior queda como historia del caso; la distribución vigente distingue tres niveles:</p>\n<table>\n<thead>\n<tr>\n<th>Nivel</th>\n<th>Asignación del entorno</th>\n<th>Responsabilidad</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Dirección general</td>\n<td>Opus</td>\n<td>Conversación con la persona, prioridades y decisiones transversales</td>\n</tr>\n<tr>\n<td>Integración</td>\n<td>Sol con esfuerzo low</td>\n<td>Reconstruir estado, ordenar dependencias e integrar evidencia de los paquetes</td>\n</tr>\n<tr>\n<td>Coordinación de paquete</td>\n<td>Sol con esfuerzo medium</td>\n<td>Conducir una capacidad acotada hasta su aceptación</td>\n</tr>\n</tbody>\n</table>\n<p>Son asignaciones de este proyecto, no una recomendación universal ni una equivalencia entre modelos. Para implementación LIVE se usa Luna con esfuerzo high o Sonnet; la auditoría cambia a la familia opuesta al implementador. Separar familias agrega diversidad de revisión, pero no garantiza detectar errores ni reemplaza las pruebas.</p>\n<p>La unidad sigue siendo una capacidad, una tarea, una rama y un worktree. <strong>BUILD/LIVE y el gate de tres partes ya existían en V3</strong>: paridad con el comportamiento del CRM, recuperación preparada y auditoría. V4 modifica el reparto de autoridad y permite operaciones LIVE pequeñas dentro de un alcance previamente autorizado, con verificación y reversión automática acotada. Borrados y tombstones, las marcas de eliminación, requieren permiso humano explícito. Tener una regla en el repositorio no concede permisos en otra sesión o herramienta.</p>\n<p>La dirección general recibe una bandeja de decisiones agrupadas por urgencia: incidentes, destrabes y asuntos sin apuro. El integrador reúne evidencia; no interrumpe a la persona por cada avance ni convierte una decisión pendiente en permiso implícito.</p>\n<h3 id=\"del-merge-al-resultado-aceptado\">Del merge al resultado aceptado</h3>\n<p>El circuito vigente distingue <strong>listo local, aplicado y aceptado</strong>. Un PR integrado demuestra integración; un postflight inmediato demuestra el comportamiento que efectivamente midió. La aceptación natural requiere observar el ciclo real acordado. Si queda trabajo, el handoff conserva el remanente, su responsable y la evidencia que falta: entregar el problema a otra persona no equivale a resolverlo.</p>\n<p>Al retomar, primero se reconstruyen PRs, ramas, workers y despliegues reales. Sólo después se abre trabajo nuevo. Esa comprobación evita duplicar una implementación que siguió avanzando mientras la conversación estaba cerrada.</p>\n<p>Esta actualización resume documentación y registros del proyecto revisados el 12 de octubre, anonimizados. No constituye una nueva ejecución de sus pruebas ni una validación universal de sus controles. Los contratos de rol deben contrastarse con los permisos efectivos del runtime, como explica <a href=\"/entrada/modelos-guiados-el-entorno-es-la-politica\">el entorno es la política</a>.</p>\n<h2 id=\"que-aporto-orca\">Qué aportó Orca</h2>\n<h3 id=\"paralelismo-comprensible\">Paralelismo comprensible</h3>\n<p>Los frentes dejaron de ser terminales anónimas. Cada uno quedó ligado a un proyecto, worktree, agente y estado visible.</p>\n<h3 id=\"libertad-de-proveedor\">Libertad de proveedor</h3>\n<p>Distintos CLIs convivieron en una misma superficie. El modelo pudo elegirse por tarea sin perder el mapa general del proyecto.</p>\n<h3 id=\"aislamiento-real\">Aislamiento real</h3>\n<p>Las implementaciones no compitieron por el mismo checkout. Cada rama podía revisarse, compararse o descartarse sin contaminar el trabajo principal.</p>\n<h3 id=\"continuidad\">Continuidad</h3>\n<p>Separar interfaz, proceso, sesión, worktree y estado persistente permitió recuperar trabajo después de interrupciones sin asumir que todo seguía vivo ni tomar acciones destructivas por reflejo.</p>\n<h3 id=\"operacion-remota\">Operación remota</h3>\n<p>La interfaz funcionó como cockpit mientras repositorios y agentes permanecían en un entorno de ejecución central. Otros dispositivos podían actuar como ventanas hacia el mismo estado, sin crear copias divergentes.</p>\n<h2 id=\"beneficios-obtenidos\">Beneficios obtenidos</h2>\n<ul>\n<li>más frentes simultáneos sin compartir archivos de trabajo;</li>\n<li>continuidad del contexto aunque cambiara el implementador;</li>\n<li>selección de modelo por costo y tipo de tarea;</li>\n<li>handoffs más claros y revisables;</li>\n<li>menor dependencia de una sesión o interfaz concreta;</li>\n<li>separación explícita entre planificación, implementación, auditoría y producción.</li>\n</ul>\n<h2 id=\"la-leccion-transferible\">La lección transferible</h2>\n<p>La mejora no vino de “usar muchos modelos”. Vino de diseñar un sistema donde los modelos pueden reemplazarse, las tareas quedan aisladas y el contexto importante no depende de ninguno de ellos.</p>\n<p>Orca volvió visible y operable esa arquitectura. La calidad del resultado siguió dependiendo de los contratos de trabajo, Git, las validaciones y la supervisión humana.</p>\n<blockquote>\n<p>Caso basado en un entorno real. Se removieron nombres de empresa, repositorios, infraestructura, incidentes identificables y datos operativos.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "Situación inicial",
          "depth": 2,
          "id": "situacion-inicial"
        },
        {
          "label": "Modelo inicial adoptado",
          "depth": 2,
          "id": "modelo-inicial-adoptado"
        },
        {
          "label": "Agente coordinador",
          "depth": 3,
          "id": "agente-coordinador"
        },
        {
          "label": "Implementadores y revisores",
          "depth": 3,
          "id": "implementadores-y-revisores"
        },
        {
          "label": "Flujo operativo inicial",
          "depth": 2,
          "id": "flujo-operativo-inicial"
        },
        {
          "label": "Evolución del caso: V4, octubre de 2026",
          "depth": 2,
          "id": "evolucion-del-caso-v4-octubre-de-2026"
        },
        {
          "label": "Del merge al resultado aceptado",
          "depth": 3,
          "id": "del-merge-al-resultado-aceptado"
        },
        {
          "label": "Qué aportó Orca",
          "depth": 2,
          "id": "que-aporto-orca"
        },
        {
          "label": "Paralelismo comprensible",
          "depth": 3,
          "id": "paralelismo-comprensible"
        },
        {
          "label": "Libertad de proveedor",
          "depth": 3,
          "id": "libertad-de-proveedor"
        },
        {
          "label": "Aislamiento real",
          "depth": 3,
          "id": "aislamiento-real"
        },
        {
          "label": "Continuidad",
          "depth": 3,
          "id": "continuidad"
        },
        {
          "label": "Operación remota",
          "depth": 3,
          "id": "operacion-remota"
        },
        {
          "label": "Beneficios obtenidos",
          "depth": 2,
          "id": "beneficios-obtenidos"
        },
        {
          "label": "La lección transferible",
          "depth": 2,
          "id": "la-leccion-transferible"
        }
      ],
      "raw": "---\nslug: caso-orca-cockpit-multiagente\ntitle: Caso real — Orca como cockpit multiagente\ntype: case-study\norder: 9\nsummary: La evolución de un coordinador único a dirección, integración y paquetes separados, con auditoría cruzada y aceptación verificable.\ntags: [orca, caso-real, multiagente, worktrees, orquestacion]\nrelated: [orquestacion, workspaces-y-worktrees, continuidad-y-observabilidad]\narea: Orca\nglyph: ◈\nhue: rgba(236,95,189,.24)\n---\n\n# Caso real — Orca como cockpit multiagente\n\n## Situación inicial\n\nUn proyecto de transformación digital combinaba integraciones, datos, APIs, seguridad y operación productiva. Una sola conversación podía conservar el contexto, pero se convertía en cuello de botella al abrir varios frentes en paralelo.\n\nLa alternativa de lanzar agentes sin estructura tampoco servía: aumentaba el riesgo de cambios superpuestos, decisiones contradictorias y pérdida de contexto al cambiar de sesión.\n\n## Modelo inicial adoptado\n\n### Agente coordinador\n\nUn agente de mayor capacidad opera sobre el workspace principal. Su función es:\n\n- revisar el estado general;\n- mantener decisiones y restricciones vigentes;\n- preparar el plan;\n- dividir el trabajo en unidades verificables;\n- revisar implementaciones y auditorías;\n- decidir el siguiente frente.\n\nEl coordinador no existe para implementar todo. Existe para que cada tarea nazca con contexto suficiente y vuelva con evidencia comparable.\n\n### Implementadores y revisores\n\nLas tareas acotadas se asignan según costo, disponibilidad y fortaleza del agente. Pueden convivir modelos y CLIs distintos sin cambiar la metodología.\n\nCada worker recibe:\n\n- su propio worktree y rama;\n- un alcance explícito;\n- restricciones operativas;\n- condiciones de finalización;\n- una forma esperada de entregar evidencia.\n\nLos agentes de revisión se separan, cuando corresponde, de quienes realizaron la implementación.\n\n## Flujo operativo inicial\n\n1. El coordinador inspecciona el proyecto y prepara una tarea.\n2. Se crea un worktree desde una base conocida.\n3. El implementador trabaja dentro de su alcance.\n4. Entrega cambios, pruebas, riesgos y pendientes.\n5. Otro agente o el coordinador revisa el resultado.\n6. La integración y cualquier acción productiva permanecen detrás de un gate humano.\n\n## Evolución del caso: V4, octubre de 2026\n\nLa documentación V4, revisada el 12 de octubre de 2026, separa responsabilidades que antes se concentraban en un solo coordinador. El diseño anterior queda como historia del caso; la distribución vigente distingue tres niveles:\n\n| Nivel | Asignación del entorno | Responsabilidad |\n| --- | --- | --- |\n| Dirección general | Opus | Conversación con la persona, prioridades y decisiones transversales |\n| Integración | Sol con esfuerzo low | Reconstruir estado, ordenar dependencias e integrar evidencia de los paquetes |\n| Coordinación de paquete | Sol con esfuerzo medium | Conducir una capacidad acotada hasta su aceptación |\n\nSon asignaciones de este proyecto, no una recomendación universal ni una equivalencia entre modelos. Para implementación LIVE se usa Luna con esfuerzo high o Sonnet; la auditoría cambia a la familia opuesta al implementador. Separar familias agrega diversidad de revisión, pero no garantiza detectar errores ni reemplaza las pruebas.\n\nLa unidad sigue siendo una capacidad, una tarea, una rama y un worktree. **BUILD/LIVE y el gate de tres partes ya existían en V3**: paridad con el comportamiento del CRM, recuperación preparada y auditoría. V4 modifica el reparto de autoridad y permite operaciones LIVE pequeñas dentro de un alcance previamente autorizado, con verificación y reversión automática acotada. Borrados y tombstones, las marcas de eliminación, requieren permiso humano explícito. Tener una regla en el repositorio no concede permisos en otra sesión o herramienta.\n\nLa dirección general recibe una bandeja de decisiones agrupadas por urgencia: incidentes, destrabes y asuntos sin apuro. El integrador reúne evidencia; no interrumpe a la persona por cada avance ni convierte una decisión pendiente en permiso implícito.\n\n### Del merge al resultado aceptado\n\nEl circuito vigente distingue **listo local, aplicado y aceptado**. Un PR integrado demuestra integración; un postflight inmediato demuestra el comportamiento que efectivamente midió. La aceptación natural requiere observar el ciclo real acordado. Si queda trabajo, el handoff conserva el remanente, su responsable y la evidencia que falta: entregar el problema a otra persona no equivale a resolverlo.\n\nAl retomar, primero se reconstruyen PRs, ramas, workers y despliegues reales. Sólo después se abre trabajo nuevo. Esa comprobación evita duplicar una implementación que siguió avanzando mientras la conversación estaba cerrada.\n\nEsta actualización resume documentación y registros del proyecto revisados el 12 de octubre, anonimizados. No constituye una nueva ejecución de sus pruebas ni una validación universal de sus controles. Los contratos de rol deben contrastarse con los permisos efectivos del runtime, como explica [el entorno es la política](/entrada/modelos-guiados-el-entorno-es-la-politica).\n\n\n## Qué aportó Orca\n\n### Paralelismo comprensible\n\nLos frentes dejaron de ser terminales anónimas. Cada uno quedó ligado a un proyecto, worktree, agente y estado visible.\n\n### Libertad de proveedor\n\nDistintos CLIs convivieron en una misma superficie. El modelo pudo elegirse por tarea sin perder el mapa general del proyecto.\n\n### Aislamiento real\n\nLas implementaciones no compitieron por el mismo checkout. Cada rama podía revisarse, compararse o descartarse sin contaminar el trabajo principal.\n\n### Continuidad\n\nSeparar interfaz, proceso, sesión, worktree y estado persistente permitió recuperar trabajo después de interrupciones sin asumir que todo seguía vivo ni tomar acciones destructivas por reflejo.\n\n### Operación remota\n\nLa interfaz funcionó como cockpit mientras repositorios y agentes permanecían en un entorno de ejecución central. Otros dispositivos podían actuar como ventanas hacia el mismo estado, sin crear copias divergentes.\n\n## Beneficios obtenidos\n\n- más frentes simultáneos sin compartir archivos de trabajo;\n- continuidad del contexto aunque cambiara el implementador;\n- selección de modelo por costo y tipo de tarea;\n- handoffs más claros y revisables;\n- menor dependencia de una sesión o interfaz concreta;\n- separación explícita entre planificación, implementación, auditoría y producción.\n\n## La lección transferible\n\nLa mejora no vino de “usar muchos modelos”. Vino de diseñar un sistema donde los modelos pueden reemplazarse, las tareas quedan aisladas y el contexto importante no depende de ninguno de ellos.\n\nOrca volvió visible y operable esa arquitectura. La calidad del resultado siguió dependiendo de los contratos de trabajo, Git, las validaciones y la supervisión humana.\n\n> Caso basado en un entorno real. Se removieron nombres de empresa, repositorios, infraestructura, incidentes identificables y datos operativos.\n"
    },
    {
      "slug": "planificar-workstation-am5-escalable",
      "title": "Planificar una workstation AM5 escalable",
      "summary": "Cómo auditar una PC existente y migrar a AM5 en tres escalones — económico, medio y high-end — sin recomprar media máquina en cada etapa.",
      "type": "guide",
      "order": 9,
      "tags": [
        "hardware",
        "am5",
        "workstation",
        "ryzen",
        "wsl",
        "agentes",
        "upgrade"
      ],
      "related": [
        "setup-windows-wsl",
        "orquestacion",
        "agent-terminals"
      ],
      "area": "Orca",
      "glyph": "◈",
      "hue": "rgba(168,106,255,.24)",
      "file": "planificar-workstation-am5-escalable.md",
      "html": "<blockquote>\n<p>Referencias externas revisadas el 12 de octubre de 2026. Los modelos concretos sirven como referencia de arquitectura, no como una lista eterna de compra. Antes de comprar, validar precios, BIOS, QVL de memoria, dimensiones y requisitos eléctricos contra las fichas vigentes.</p>\n</blockquote>\n<h2 id=\"disenar-el-destino-antes-de-comprar-la-entrada\">Diseñar el destino antes de comprar la entrada</h2>\n<p>Una migración escalable no consiste en armar tres PCs. Consiste en definir <strong>una máquina final</strong> y construirla por etapas.</p>\n<p>El error clásico es comprar una configuración económica completa, reemplazar media PC para llegar a gama media y volver a reemplazarla para alcanzar high-end. Esta guía invierte la lógica:</p>\n<blockquote>\n<p><strong>No comprar en una etapa ninguna pieza que sepamos que habrá que reemplazar en la siguiente, salvo una pieza transitoria elegida deliberadamente.</strong></p>\n</blockquote>\n<p>En AM5 esa pieza puede ser el procesador de entrada. Motherboard, memoria, almacenamiento, gabinete, refrigeración y fuente deberían comprarse pensando desde el primer día en el destino final.</p>\n<p>Este patrón nació al evaluar una workstation AM4 todavía competente: Ryzen 7 de ocho núcleos, X570, 32 GB DDR4, una RTX serie 30, NVMe rápido y fuente de 850 W de buena calidad. La conclusión no fue “cambiar todo”, sino separar lo que había envejecido de lo que todavía tenía valor.</p>\n<h2 id=\"paso-cero-auditar-el-setup-actual\">Paso cero: auditar el setup actual</h2>\n<p>Antes de elegir un Ryzen, inventariar la máquina. La pregunta no es solamente <strong>qué tengo</strong>, sino <strong>qué puede cruzar de plataforma sin convertirse en cuello de botella o riesgo</strong>.</p>\n<table>\n<thead>\n<tr>\n<th>Componente</th>\n<th>Qué registrar</th>\n<th>Pregunta de validación</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CPU</td>\n<td>modelo, núcleos, consumo y carga habitual</td>\n<td>¿El límite real hoy es CPU?</td>\n</tr>\n<tr>\n<td>Motherboard</td>\n<td>socket, chipset, BIOS, slots y conectividad</td>\n<td>¿Obliga a cambiar de plataforma?</td>\n</tr>\n<tr>\n<td>RAM</td>\n<td>capacidad, módulos, velocidad y uso pico</td>\n<td>¿La capacidad actual ya llega al límite?</td>\n</tr>\n<tr>\n<td>GPU</td>\n<td>modelo, consumo y resolución objetivo</td>\n<td>¿Necesita cambiar ahora o puede migrar?</td>\n</tr>\n<tr>\n<td>Fuente</td>\n<td>modelo exacto, potencia, edad y conectores</td>\n<td>¿Tiene calidad y margen para el destino final?</td>\n</tr>\n<tr>\n<td>Cooler</td>\n<td>modelo, socket soportado y capacidad térmica</td>\n<td>¿Tiene kit AM5 y margen para el CPU final?</td>\n</tr>\n<tr>\n<td>NVMe/SATA</td>\n<td>modelo, salud, capacidad y uso</td>\n<td>¿Puede reutilizarse como disco principal o secundario?</td>\n</tr>\n<tr>\n<td>Gabinete</td>\n<td>formato, airflow y clearances</td>\n<td>¿Entran motherboard, GPU y refrigeración futuras?</td>\n</tr>\n<tr>\n<td>Periféricos PCIe/USB</td>\n<td>placas, DAC, capturadoras, red, docks</td>\n<td>¿La nueva placa ofrece lanes y puertos suficientes?</td>\n</tr>\n<tr>\n<td>Sistema</td>\n<td>Windows/Linux, WSL, VMs, Docker, agentes</td>\n<td>¿Qué recurso se satura durante el trabajo real?</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"medir-antes-de-diagnosticar\">Medir antes de diagnosticar</h3>\n<p>Para una workstation de desarrollo y agentes conviene observar al menos:</p>\n<ul>\n<li>pico de RAM con el entorno habitual abierto;</li>\n<li>CPU sostenida durante builds, contenedores y tareas paralelas;</li>\n<li>VRAM durante las cargas GPU reales;</li>\n<li>uso y temperatura de discos;</li>\n<li>potencia y temperatura bajo carga;</li>\n<li>cantidad de NVMe, USB y PCIe que realmente se necesitan.</li>\n</ul>\n<p>Si 32 GB de RAM llegan al límite pero la GPU permanece holgada, comprar una GPU primero sería una mejora espectacularmente cara del componente equivocado.</p>\n<h2 id=\"que-suele-sobrevivir-de-am4-a-am5\">Qué suele sobrevivir de AM4 a AM5</h2>\n<p>Una migración de socket obliga a reemplazar <strong>CPU + motherboard + RAM</strong>. No necesariamente obliga a reemplazar todo lo demás.</p>\n<p>Una GPU PCIe moderna, un buen NVMe, gabinete adecuado y una fuente ATX de calidad pueden migrar. Un cooler puede hacerlo si el fabricante ofrece compatibilidad o mounting AM5.</p>\n<p>La fuente merece una revisión particular: no alcanza con leer “850 W”. Importan modelo, calidad, antigüedad, protecciones, conectores y la GPU final prevista.</p>\n<p>La RAM DDR4, en cambio, no migra: AM5 utiliza DDR5.</p>\n<h1>Tres escalones, una sola máquina</h1>\n<p>La siguiente matriz no propone tres builds independientes. Propone <strong>tres estados de la misma workstation</strong>.</p>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Econ</th>\n<th>Media</th>\n<th>High-end</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CPU</td>\n<td>Ryzen 5 9600X</td>\n<td>mantener el 9600X o subir sólo si existe una necesidad concreta</td>\n<td>Ryzen 9 9950X3D / 9950X3D2 según carga y precio</td>\n</tr>\n<tr>\n<td>Motherboard</td>\n<td>B850 sólida</td>\n<td>la misma</td>\n<td>la misma, o X870E sólo si el I/O lo justificaba desde el inicio</td>\n</tr>\n<tr>\n<td>RAM</td>\n<td>64 GB DDR5, 2×32</td>\n<td>la misma</td>\n<td>64 GB o 128 GB si las mediciones lo justifican</td>\n</tr>\n<tr>\n<td>GPU</td>\n<td>reutilizar una GPU vigente</td>\n<td>mantener</td>\n<td>actualizar al final según workload</td>\n</tr>\n<tr>\n<td>NVMe</td>\n<td>reutilizar uno sano</td>\n<td>sumar capacidad</td>\n<td>Gen5 sólo si la carga aprovecha su rendimiento</td>\n</tr>\n<tr>\n<td>Fuente</td>\n<td>reutilizar si pasa la auditoría</td>\n<td>la misma</td>\n<td>cambiar sólo si la GPU/CPU final lo exige</td>\n</tr>\n<tr>\n<td>Cooler</td>\n<td>comprar con margen para el destino</td>\n<td>el mismo</td>\n<td>el mismo si fue dimensionado correctamente</td>\n</tr>\n<tr>\n<td>Gabinete</td>\n<td>reutilizar si cumple</td>\n<td>el mismo</td>\n<td>el mismo</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"econ-entrar-a-am5-sin-comprar-barato-dos-veces\">🟢 Econ: entrar a AM5 sin comprar barato dos veces</h2>\n<p>El objetivo de la gama económica no es construir una PC barata. Es <strong>pagar el mínimo razonable para entrar a la plataforma correcta</strong>.</p>\n<h3 id=\"procesador-de-entrada\">Procesador de entrada</h3>\n<p>Un Ryzen 5 9600X funciona bien como pieza transitoria: 6 núcleos / 12 hilos, arquitectura Zen 5, AM5, DDR5 y PCIe 5.0.</p>\n<p>No tiene que ser el procesador definitivo. Tiene que permitir migrar la plataforma sin degradar la experiencia mientras se financia el resto.</p>\n<h3 id=\"motherboard-definitiva-desde-el-inicio\">Motherboard definitiva desde el inicio</h3>\n<p>Una B850 bien elegida puede acompañar toda la ruta. Conviene revisar:</p>\n<ul>\n<li>VRM y refrigeración adecuados para el CPU final;</li>\n<li>cantidad y distribución de M.2;</li>\n<li>red cableada y Wi-Fi si se necesitan;</li>\n<li>USB y USB-C;</li>\n<li>slots PCIe realmente utilizables al poblar M.2;</li>\n<li>BIOS Flashback;</li>\n<li>QVL de memoria;</li>\n<li>headers de ventiladores y bombas.</li>\n</ul>\n<p>Comprar una motherboard mínima para reemplazarla después destruye buena parte del beneficio de una migración progresiva.</p>\n<h3 id=\"64-gb-en-dos-modulos\">64 GB en dos módulos</h3>\n<p>Para desarrollo con WSL, Docker, navegadores, IDEs, agentes y servicios locales, <strong>2×32 GB</strong> es un punto de partida mucho más durable que 2×16 GB.</p>\n<p>En una motherboard de cuatro DIMM, además deja dos slots libres. Llenar cuatro DIMM puede reducir la frecuencia de memoria soportada y complicar la estabilidad, por lo que “compro dos módulos ahora y agrego otros dos iguales después” no siempre es la estrategia más limpia.</p>\n<p>DDR5-6000 con perfil EXPO y latencias razonables es una referencia habitual para Ryzen, pero EXPO es overclocking de memoria, no una velocidad garantizada del procesador. El kit concreto debe validarse contra CPU, placa y QVL, y probarse con la capacidad y cantidad de módulos elegidas. <a href=\"https://www.amd.com/en/products/processors/technologies/expo.html\" target=\"_blank\" rel=\"noopener noreferrer\">AMD EXPO</a></p>\n<h2 id=\"media-mejorar-capacidad-no-reemplazar-por-deporte\">🔵 Media: mejorar capacidad, no reemplazar por deporte</h2>\n<p>Esta etapa es deliberadamente rara: <strong>puede no requerir otro CPU</strong>.</p>\n<p>Si el procesador de entrada sigue resolviendo el workload, la plata puede producir más valor en almacenamiento adicional, refrigeración, backup, red, UPS o quedar reservada para el salto final.</p>\n<p>Un Ryzen 7 de ocho núcleos puede ser una excelente compra cuando la máquina vaya a quedarse en gama media durante años. Si el destino ya está definido como Ryzen 9 high-end, comprar un Ryzen 7 solamente para usarlo unos meses crea un escalón innecesario.</p>\n<blockquote>\n<p>La gama media es un <strong>estado de madurez del sistema</strong>, no la obligación de comprar un CPU intermedio.</p>\n</blockquote>\n<h2 id=\"high-end-elegir-el-cpu-por-la-carga-final\">🟣 High-end: elegir el CPU por la carga final</h2>\n<p>Para una workstation híbrida que mezcla desarrollo, multitarea pesada y gaming, la familia Ryzen 9 X3D ofrece un destino interesante.</p>\n<p>El Ryzen 9 9950X3D combina 16 núcleos / 32 hilos con 3D V-Cache. El Ryzen 9 9950X3D2 Dual Edition mantiene 16/32 y extiende el enfoque de 3D V-Cache a ambos CCD.</p>\n<p>AMD especifica un TDP de 200 W para el X3D2, frente a 170 W para el 9950X3D, y recomienda refrigeración líquida para un rendimiento óptimo. Si ése es el destino, hay que dimensionar VRM, cooler y fuente para ese modelo desde el inicio; compartir socket no garantiza el mismo margen térmico. <a href=\"https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d2-dual-edition.html\" target=\"_blank\" rel=\"noopener noreferrer\">9950X3D2 Dual Edition</a> · <a href=\"https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d.html\" target=\"_blank\" rel=\"noopener noreferrer\">9950X3D</a></p>\n<p>Eso no vuelve automáticamente al X3D2 la compra correcta. Su sentido aparece cuando la carga y el presupuesto pueden aprovecharlo.</p>\n<p>Para gaming prioritario, un Ryzen 7 X3D puede ser una alternativa más racional. Para compilación, virtualización, creación, multitarea y muchos procesos concurrentes, los 16 núcleos pueden aportar valor real.</p>\n<h3 id=\"b850-vs-x870e\">B850 vs X870E</h3>\n<p>No elegir chipset por prestigio.</p>\n<p><strong>B850</strong> puede ser suficiente cuando se necesita una GPU, varios NVMe, buen USB y una plataforma robusta.</p>\n<p><strong>X870E</strong> empieza a justificar su precio cuando el diseño necesita más conectividad y lanes PCIe, varios dispositivos de alta velocidad, USB4 u opciones de expansión que efectivamente se van a usar.</p>\n<p>USB4 es estándar en X870E y opcional en B850: no alcanza con el nombre del chipset para saber qué puertos trae una placa concreta. Compará su manual y el reparto de lanes al poblar los slots. <a href=\"https://www.amd.com/en/products/processors/chipsets/am5.html\" target=\"_blank\" rel=\"noopener noreferrer\">Chipsets AM5</a></p>\n<p>La pregunta correcta no es “¿cuál es más high-end?”, sino:</p>\n<blockquote>\n<p><strong>¿qué recurso de X870E utilizará esta workstation que B850 no puede entregar?</strong></p>\n</blockquote>\n<p>Si la respuesta es “ninguno”, el presupuesto probablemente tenga un destino mejor.</p>\n<h1>Caso de referencia</h1>\n<p>Supongamos una máquina AM4 con Ryzen 7 de ocho núcleos, X570, 32 GB DDR4, RTX serie 30, NVMe PCIe 4.0 rápido y fuente 850 W de buena calidad.</p>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Decisión</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>CPU AM4</td>\n<td>no migra</td>\n</tr>\n<tr>\n<td>X570</td>\n<td>no migra</td>\n</tr>\n<tr>\n<td>DDR4</td>\n<td>no migra</td>\n</tr>\n<tr>\n<td>RTX serie 30</td>\n<td><strong>migrar</strong></td>\n</tr>\n<tr>\n<td>NVMe PCIe 4.0</td>\n<td><strong>migrar</strong></td>\n</tr>\n<tr>\n<td>fuente 850 W</td>\n<td><strong>migrar si pasa revisión</strong></td>\n</tr>\n<tr>\n<td>gabinete</td>\n<td><strong>migrar si cumple clearances</strong></td>\n</tr>\n<tr>\n<td>cooler</td>\n<td>validar mounting y capacidad</td>\n</tr>\n</tbody>\n</table>\n<p>El primer desembolso AM5 se concentra así en <strong>CPU + motherboard + DDR5 + refrigeración si hace falta</strong>, en lugar de financiar una PC completamente nueva.</p>\n<h2 id=\"orden-de-compra-sugerido\">Orden de compra sugerido</h2>\n<ol>\n<li><strong>Definir el destino:</strong> CPU máximo probable, GPU futura, RAM objetivo, cantidad de NVMe y expansión.</li>\n<li><strong>Auditar lo reutilizable:</strong> fuente, GPU, discos, gabinete y cooler.</li>\n<li><strong>Cotizar por tres canales:</strong> mercado argentino, Amazon y eBay. Comparar costo final puesto en Argentina, no sólo precio publicado.</li>\n<li><strong>Comprar la plataforma:</strong> motherboard definitiva + 64 GB DDR5 + CPU de entrada.</li>\n<li><strong>Estabilizar:</strong> BIOS, EXPO, drivers, temperaturas y pruebas de memoria/CPU.</li>\n<li><strong>Medir nuevamente el workload real.</strong></li>\n<li><strong>Completar la gama media:</strong> capacidad, refrigeración, almacenamiento y resiliencia.</li>\n<li><strong>Saltar al CPU final:</strong> evitar un procesador intermedio si no resuelve una necesidad concreta.</li>\n<li><strong>Actualizar GPU al final:</strong> sólo cuando sea el cuello de botella o cambie el objetivo gráfico/compute.</li>\n</ol>\n<h2 id=\"hoja-de-ruta-de-compras-argentina-amazon-y-ebay\">Hoja de ruta de compras: Argentina, Amazon y eBay</h2>\n<p>No conviene atar la planificación a una sola tienda o país. Para cada etapa, cotizar las piezas en tres mercados y comparar el <strong>costo total de adquisición</strong>.</p>\n<table>\n<thead>\n<tr>\n<th>Canal</th>\n<th>Dónde puede destacar</th>\n<th>Qué validar antes de comprar</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Argentina</td>\n<td>disponibilidad inmediata, cuotas, devolución y garantía local</td>\n<td>precio contado vs financiado, reputación del vendedor y garantía</td>\n</tr>\n<tr>\n<td>Amazon</td>\n<td>componentes nuevos, catálogo amplio y ofertas puntuales</td>\n<td>envío a Argentina, cargos estimados, vendedor, garantía y devolución internacional</td>\n</tr>\n<tr>\n<td>eBay</td>\n<td>oportunidades, generaciones anteriores, open-box y usado</td>\n<td>condición real, reputación, fotos, devolución, envío, cargos y riesgo de garantía</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"no-comparar-solamente-el-precio-de-portada\">No comparar solamente el precio de portada</h3>\n<p>Para una compra internacional, usar como referencia:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>costo puesto =</span></span>\n<span class=\"line\"><span>  precio del componente</span></span>\n<span class=\"line\"><span>+ envío</span></span>\n<span class=\"line\"><span>+ impuestos / cargos de importación aplicables</span></span>\n<span class=\"line\"><span>+ conversión y costos del medio de pago</span></span>\n<span class=\"line\"><span>+ eventual gestión logística</span></span></code></pre>\n<p>Las reglas aduaneras, franquicias, impuestos y esquemas de courier pueden cambiar. Antes de cerrar una compra internacional hay que recalcularlos con las condiciones vigentes.</p>\n<h3 id=\"que-piezas-tienen-mejor-perfil-para-importar\">Qué piezas tienen mejor perfil para importar</h3>\n<p>Como regla de evaluación, no como mandato:</p>\n<ul>\n<li><strong>CPU:</strong> compacto y fácil de transportar; comparar especialmente Amazon y mercado local.</li>\n<li><strong>RAM:</strong> pequeña y normalmente simple de importar; revisar garantía y QVL.</li>\n<li><strong>NVMe:</strong> excelente relación valor/volumen; verificar vendedor y autenticidad.</li>\n<li><strong>Motherboard:</strong> puede ofrecer ahorro, pero pesa más el riesgo de transporte, RMA y compatibilidad BIOS.</li>\n<li><strong>GPU:</strong> el diferencial puede ser grande, pero también el valor expuesto a transporte, garantía y devoluciones.</li>\n<li><strong>Fuente y gabinete:</strong> volumen y peso pueden destruir un buen precio internacional.</li>\n<li><strong>Cooler:</strong> comparar costo final; radiadores y torres grandes pueden perder sentido por logística.</li>\n</ul>\n<p>En <strong>eBay</strong>, CPU, RAM y hardware open-box o usado pueden ser tentadores, pero una workstation de producción no debería ahorrar una cantidad pequeña a cambio de una procedencia dudosa. Para motherboard, GPU y almacenamiento usado, la vara de evidencia del vendedor debe ser especialmente alta.</p>\n<h3 id=\"matriz-para-cada-compra\">Matriz para cada compra</h3>\n<table>\n<thead>\n<tr>\n<th>Criterio</th>\n<th style=\"text-align:right\">Argentina</th>\n<th style=\"text-align:right\">Amazon</th>\n<th style=\"text-align:right\">eBay</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Precio final puesto</td>\n<td style=\"text-align:right\">calcular</td>\n<td style=\"text-align:right\">calcular</td>\n<td style=\"text-align:right\">calcular</td>\n</tr>\n<tr>\n<td>Tiempo de entrega</td>\n<td style=\"text-align:right\">comparar</td>\n<td style=\"text-align:right\">comparar</td>\n<td style=\"text-align:right\">comparar</td>\n</tr>\n<tr>\n<td>Garantía utilizable</td>\n<td style=\"text-align:right\">validar</td>\n<td style=\"text-align:right\">validar</td>\n<td style=\"text-align:right\">validar</td>\n</tr>\n<tr>\n<td>Devolución práctica</td>\n<td style=\"text-align:right\">validar</td>\n<td style=\"text-align:right\">validar</td>\n<td style=\"text-align:right\">validar</td>\n</tr>\n<tr>\n<td>Nuevo / open-box / usado</td>\n<td style=\"text-align:right\">confirmar</td>\n<td style=\"text-align:right\">confirmar</td>\n<td style=\"text-align:right\">confirmar</td>\n</tr>\n<tr>\n<td>Riesgo logístico</td>\n<td style=\"text-align:right\">estimar</td>\n<td style=\"text-align:right\">estimar</td>\n<td style=\"text-align:right\">estimar</td>\n</tr>\n<tr>\n<td>Ahorro vs alternativa</td>\n<td style=\"text-align:right\">calcular</td>\n<td style=\"text-align:right\">calcular</td>\n<td style=\"text-align:right\">calcular</td>\n</tr>\n</tbody>\n</table>\n<p>La opción ganadora no es necesariamente la más barata: es la que ofrece suficiente ahorro para compensar <strong>tiempo, garantía y riesgo</strong>.</p>\n<h2 id=\"gates-antes-de-cada-compra\">Gates antes de cada compra</h2>\n<h3 id=\"gate-1-compatibilidad-fisica\">Gate 1 — Compatibilidad física</h3>\n<ul>\n<li>[ ] formato de motherboard compatible con gabinete;</li>\n<li>[ ] altura del cooler o espacio para radiador;</li>\n<li>[ ] longitud y espesor de GPU;</li>\n<li>[ ] ubicación de M.2 y slots PCIe;</li>\n<li>[ ] conectores de alimentación disponibles.</li>\n</ul>\n<h3 id=\"gate-2-compatibilidad-logica\">Gate 2 — Compatibilidad lógica</h3>\n<ul>\n<li>[ ] CPU soportado por la versión de BIOS;</li>\n<li>[ ] kit DDR5 validado o con historial sólido en la placa;</li>\n<li>[ ] perfil EXPO compatible;</li>\n<li>[ ] lanes compartidos entre M.2, SATA y PCIe entendidos;</li>\n<li>[ ] requisitos de SO y drivers revisados.</li>\n</ul>\n<h3 id=\"gate-3-energia-y-temperatura\">Gate 3 — Energía y temperatura</h3>\n<ul>\n<li>[ ] potencia de fuente calculada para CPU + GPU final;</li>\n<li>[ ] conectores correctos sin adaptadores dudosos;</li>\n<li>[ ] airflow suficiente;</li>\n<li>[ ] solución térmica dimensionada para el CPU final.</li>\n</ul>\n<h3 id=\"gate-4-justificacion\">Gate 4 — Justificación</h3>\n<p>Antes de pagar:</p>\n<blockquote>\n<p><strong>¿Esta pieza forma parte de la máquina final o resuelve un cuello de botella medido durante suficiente tiempo como para justificar ser transitoria?</strong></p>\n</blockquote>\n<p>Si ninguna de las dos es cierta, probablemente no haya que comprarla.</p>\n<h1>Plantilla portable</h1>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>SETUP ACTUAL</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>CPU:</span></span>\n<span class=\"line\"><span>Motherboard:</span></span>\n<span class=\"line\"><span>RAM:</span></span>\n<span class=\"line\"><span>GPU:</span></span>\n<span class=\"line\"><span>Fuente (modelo exacto + antigüedad):</span></span>\n<span class=\"line\"><span>Cooler:</span></span>\n<span class=\"line\"><span>Gabinete:</span></span>\n<span class=\"line\"><span>NVMe/SATA:</span></span>\n<span class=\"line\"><span>Placas PCIe:</span></span>\n<span class=\"line\"><span>Periféricos USB críticos:</span></span>\n<span class=\"line\"><span>Sistema operativo:</span></span>\n<span class=\"line\"><span>WSL / VMs / Docker:</span></span>\n<span class=\"line\"><span>Carga habitual:</span></span>\n<span class=\"line\"><span>Gaming (resolución / Hz):</span></span>\n<span class=\"line\"><span>RAM pico:</span></span>\n<span class=\"line\"><span>CPU pico:</span></span>\n<span class=\"line\"><span>VRAM pico:</span></span>\n<span class=\"line\"><span>Temperaturas:</span></span>\n<span class=\"line\"><span>Problema que quiero resolver:</span></span>\n<span class=\"line\"><span>Presupuesto por etapa:</span></span>\n<span class=\"line\"><span>Destino final deseado:</span></span></code></pre>\n<p>Con esos datos se puede clasificar cada componente como <strong>MIGRAR / REEMPLAZAR / VALIDAR / COMPRAR DESPUÉS</strong> y recién entonces construir las tres etapas.</p>\n<h2 id=\"regla-final\">Regla final</h2>\n<p>Una buena ruta de upgrade no maximiza la potencia del próximo ticket. Maximiza <strong>cuántas compras siguen teniendo sentido cuando la máquina llega a su forma final</strong>.</p>\n<p>AM5 es especialmente útil para esta estrategia porque permite separar el cambio de plataforma del salto al procesador definitivo. El setup económico deja de ser un destino mediocre y se convierte en la primera versión funcional de una workstation que todavía está creciendo.</p>\n<h2 id=\"referencias-tecnicas\">Referencias técnicas</h2>\n<ul>\n<li>AMD, plataforma AM5 y chipsets: <a href=\"https://www.amd.com/en/products/processors/chipsets/am5.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.amd.com/en/products/processors/chipsets/am5.html</a></li>\n<li>AMD Ryzen 5 9600X: <a href=\"https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-5-9600x.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-5-9600x.html</a></li>\n<li>AMD Ryzen 9 9950X3D: <a href=\"https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d.html</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Diseñar el destino antes de comprar la entrada",
          "depth": 2,
          "id": "disenar-el-destino-antes-de-comprar-la-entrada"
        },
        {
          "label": "Paso cero: auditar el setup actual",
          "depth": 2,
          "id": "paso-cero-auditar-el-setup-actual"
        },
        {
          "label": "Medir antes de diagnosticar",
          "depth": 3,
          "id": "medir-antes-de-diagnosticar"
        },
        {
          "label": "Qué suele sobrevivir de AM4 a AM5",
          "depth": 2,
          "id": "que-suele-sobrevivir-de-am4-a-am5"
        },
        {
          "label": "🟢 Econ: entrar a AM5 sin comprar barato dos veces",
          "depth": 2,
          "id": "econ-entrar-a-am5-sin-comprar-barato-dos-veces"
        },
        {
          "label": "Procesador de entrada",
          "depth": 3,
          "id": "procesador-de-entrada"
        },
        {
          "label": "Motherboard definitiva desde el inicio",
          "depth": 3,
          "id": "motherboard-definitiva-desde-el-inicio"
        },
        {
          "label": "64 GB en dos módulos",
          "depth": 3,
          "id": "64-gb-en-dos-modulos"
        },
        {
          "label": "🔵 Media: mejorar capacidad, no reemplazar por deporte",
          "depth": 2,
          "id": "media-mejorar-capacidad-no-reemplazar-por-deporte"
        },
        {
          "label": "🟣 High-end: elegir el CPU por la carga final",
          "depth": 2,
          "id": "high-end-elegir-el-cpu-por-la-carga-final"
        },
        {
          "label": "B850 vs X870E",
          "depth": 3,
          "id": "b850-vs-x870e"
        },
        {
          "label": "Orden de compra sugerido",
          "depth": 2,
          "id": "orden-de-compra-sugerido"
        },
        {
          "label": "Hoja de ruta de compras: Argentina, Amazon y eBay",
          "depth": 2,
          "id": "hoja-de-ruta-de-compras-argentina-amazon-y-ebay"
        },
        {
          "label": "No comparar solamente el precio de portada",
          "depth": 3,
          "id": "no-comparar-solamente-el-precio-de-portada"
        },
        {
          "label": "Qué piezas tienen mejor perfil para importar",
          "depth": 3,
          "id": "que-piezas-tienen-mejor-perfil-para-importar"
        },
        {
          "label": "Matriz para cada compra",
          "depth": 3,
          "id": "matriz-para-cada-compra"
        },
        {
          "label": "Gates antes de cada compra",
          "depth": 2,
          "id": "gates-antes-de-cada-compra"
        },
        {
          "label": "Gate 1 — Compatibilidad física",
          "depth": 3,
          "id": "gate-1-compatibilidad-fisica"
        },
        {
          "label": "Gate 2 — Compatibilidad lógica",
          "depth": 3,
          "id": "gate-2-compatibilidad-logica"
        },
        {
          "label": "Gate 3 — Energía y temperatura",
          "depth": 3,
          "id": "gate-3-energia-y-temperatura"
        },
        {
          "label": "Gate 4 — Justificación",
          "depth": 3,
          "id": "gate-4-justificacion"
        },
        {
          "label": "Regla final",
          "depth": 2,
          "id": "regla-final"
        },
        {
          "label": "Referencias técnicas",
          "depth": 2,
          "id": "referencias-tecnicas"
        }
      ],
      "raw": "---\nslug: planificar-workstation-am5-escalable\ntitle: Planificar una workstation AM5 escalable\ntype: guide\norder: 9\nsummary: Cómo auditar una PC existente y migrar a AM5 en tres escalones — económico, medio y high-end — sin recomprar media máquina en cada etapa.\ntags: [hardware, am5, workstation, ryzen, wsl, agentes, upgrade]\nrelated: [setup-windows-wsl, orquestacion, agent-terminals]\narea: Orca\nglyph: ◈\nhue: rgba(168,106,255,.24)\n---\n\n# Planificar una workstation AM5 escalable\n\n> Referencias externas revisadas el 12 de octubre de 2026. Los modelos concretos sirven como referencia de arquitectura, no como una lista eterna de compra. Antes de comprar, validar precios, BIOS, QVL de memoria, dimensiones y requisitos eléctricos contra las fichas vigentes.\n\n## Diseñar el destino antes de comprar la entrada\n\nUna migración escalable no consiste en armar tres PCs. Consiste en definir **una máquina final** y construirla por etapas.\n\nEl error clásico es comprar una configuración económica completa, reemplazar media PC para llegar a gama media y volver a reemplazarla para alcanzar high-end. Esta guía invierte la lógica:\n\n> **No comprar en una etapa ninguna pieza que sepamos que habrá que reemplazar en la siguiente, salvo una pieza transitoria elegida deliberadamente.**\n\nEn AM5 esa pieza puede ser el procesador de entrada. Motherboard, memoria, almacenamiento, gabinete, refrigeración y fuente deberían comprarse pensando desde el primer día en el destino final.\n\nEste patrón nació al evaluar una workstation AM4 todavía competente: Ryzen 7 de ocho núcleos, X570, 32 GB DDR4, una RTX serie 30, NVMe rápido y fuente de 850 W de buena calidad. La conclusión no fue “cambiar todo”, sino separar lo que había envejecido de lo que todavía tenía valor.\n\n## Paso cero: auditar el setup actual\n\nAntes de elegir un Ryzen, inventariar la máquina. La pregunta no es solamente **qué tengo**, sino **qué puede cruzar de plataforma sin convertirse en cuello de botella o riesgo**.\n\n| Componente | Qué registrar | Pregunta de validación |\n| --- | --- | --- |\n| CPU | modelo, núcleos, consumo y carga habitual | ¿El límite real hoy es CPU? |\n| Motherboard | socket, chipset, BIOS, slots y conectividad | ¿Obliga a cambiar de plataforma? |\n| RAM | capacidad, módulos, velocidad y uso pico | ¿La capacidad actual ya llega al límite? |\n| GPU | modelo, consumo y resolución objetivo | ¿Necesita cambiar ahora o puede migrar? |\n| Fuente | modelo exacto, potencia, edad y conectores | ¿Tiene calidad y margen para el destino final? |\n| Cooler | modelo, socket soportado y capacidad térmica | ¿Tiene kit AM5 y margen para el CPU final? |\n| NVMe/SATA | modelo, salud, capacidad y uso | ¿Puede reutilizarse como disco principal o secundario? |\n| Gabinete | formato, airflow y clearances | ¿Entran motherboard, GPU y refrigeración futuras? |\n| Periféricos PCIe/USB | placas, DAC, capturadoras, red, docks | ¿La nueva placa ofrece lanes y puertos suficientes? |\n| Sistema | Windows/Linux, WSL, VMs, Docker, agentes | ¿Qué recurso se satura durante el trabajo real? |\n\n### Medir antes de diagnosticar\n\nPara una workstation de desarrollo y agentes conviene observar al menos:\n\n- pico de RAM con el entorno habitual abierto;\n- CPU sostenida durante builds, contenedores y tareas paralelas;\n- VRAM durante las cargas GPU reales;\n- uso y temperatura de discos;\n- potencia y temperatura bajo carga;\n- cantidad de NVMe, USB y PCIe que realmente se necesitan.\n\nSi 32 GB de RAM llegan al límite pero la GPU permanece holgada, comprar una GPU primero sería una mejora espectacularmente cara del componente equivocado.\n\n## Qué suele sobrevivir de AM4 a AM5\n\nUna migración de socket obliga a reemplazar **CPU + motherboard + RAM**. No necesariamente obliga a reemplazar todo lo demás.\n\nUna GPU PCIe moderna, un buen NVMe, gabinete adecuado y una fuente ATX de calidad pueden migrar. Un cooler puede hacerlo si el fabricante ofrece compatibilidad o mounting AM5.\n\nLa fuente merece una revisión particular: no alcanza con leer “850 W”. Importan modelo, calidad, antigüedad, protecciones, conectores y la GPU final prevista.\n\nLa RAM DDR4, en cambio, no migra: AM5 utiliza DDR5.\n\n# Tres escalones, una sola máquina\n\nLa siguiente matriz no propone tres builds independientes. Propone **tres estados de la misma workstation**.\n\n| Pieza | Econ | Media | High-end |\n| --- | --- | --- | --- |\n| CPU | Ryzen 5 9600X | mantener el 9600X o subir sólo si existe una necesidad concreta | Ryzen 9 9950X3D / 9950X3D2 según carga y precio |\n| Motherboard | B850 sólida | la misma | la misma, o X870E sólo si el I/O lo justificaba desde el inicio |\n| RAM | 64 GB DDR5, 2×32 | la misma | 64 GB o 128 GB si las mediciones lo justifican |\n| GPU | reutilizar una GPU vigente | mantener | actualizar al final según workload |\n| NVMe | reutilizar uno sano | sumar capacidad | Gen5 sólo si la carga aprovecha su rendimiento |\n| Fuente | reutilizar si pasa la auditoría | la misma | cambiar sólo si la GPU/CPU final lo exige |\n| Cooler | comprar con margen para el destino | el mismo | el mismo si fue dimensionado correctamente |\n| Gabinete | reutilizar si cumple | el mismo | el mismo |\n\n## 🟢 Econ: entrar a AM5 sin comprar barato dos veces\n\nEl objetivo de la gama económica no es construir una PC barata. Es **pagar el mínimo razonable para entrar a la plataforma correcta**.\n\n### Procesador de entrada\n\nUn Ryzen 5 9600X funciona bien como pieza transitoria: 6 núcleos / 12 hilos, arquitectura Zen 5, AM5, DDR5 y PCIe 5.0.\n\nNo tiene que ser el procesador definitivo. Tiene que permitir migrar la plataforma sin degradar la experiencia mientras se financia el resto.\n\n### Motherboard definitiva desde el inicio\n\nUna B850 bien elegida puede acompañar toda la ruta. Conviene revisar:\n\n- VRM y refrigeración adecuados para el CPU final;\n- cantidad y distribución de M.2;\n- red cableada y Wi-Fi si se necesitan;\n- USB y USB-C;\n- slots PCIe realmente utilizables al poblar M.2;\n- BIOS Flashback;\n- QVL de memoria;\n- headers de ventiladores y bombas.\n\nComprar una motherboard mínima para reemplazarla después destruye buena parte del beneficio de una migración progresiva.\n\n### 64 GB en dos módulos\n\nPara desarrollo con WSL, Docker, navegadores, IDEs, agentes y servicios locales, **2×32 GB** es un punto de partida mucho más durable que 2×16 GB.\n\nEn una motherboard de cuatro DIMM, además deja dos slots libres. Llenar cuatro DIMM puede reducir la frecuencia de memoria soportada y complicar la estabilidad, por lo que “compro dos módulos ahora y agrego otros dos iguales después” no siempre es la estrategia más limpia.\n\nDDR5-6000 con perfil EXPO y latencias razonables es una referencia habitual para Ryzen, pero EXPO es overclocking de memoria, no una velocidad garantizada del procesador. El kit concreto debe validarse contra CPU, placa y QVL, y probarse con la capacidad y cantidad de módulos elegidas. [AMD EXPO](https://www.amd.com/en/products/processors/technologies/expo.html)\n\n## 🔵 Media: mejorar capacidad, no reemplazar por deporte\n\nEsta etapa es deliberadamente rara: **puede no requerir otro CPU**.\n\nSi el procesador de entrada sigue resolviendo el workload, la plata puede producir más valor en almacenamiento adicional, refrigeración, backup, red, UPS o quedar reservada para el salto final.\n\nUn Ryzen 7 de ocho núcleos puede ser una excelente compra cuando la máquina vaya a quedarse en gama media durante años. Si el destino ya está definido como Ryzen 9 high-end, comprar un Ryzen 7 solamente para usarlo unos meses crea un escalón innecesario.\n\n> La gama media es un **estado de madurez del sistema**, no la obligación de comprar un CPU intermedio.\n\n## 🟣 High-end: elegir el CPU por la carga final\n\nPara una workstation híbrida que mezcla desarrollo, multitarea pesada y gaming, la familia Ryzen 9 X3D ofrece un destino interesante.\n\nEl Ryzen 9 9950X3D combina 16 núcleos / 32 hilos con 3D V-Cache. El Ryzen 9 9950X3D2 Dual Edition mantiene 16/32 y extiende el enfoque de 3D V-Cache a ambos CCD.\n\nAMD especifica un TDP de 200 W para el X3D2, frente a 170 W para el 9950X3D, y recomienda refrigeración líquida para un rendimiento óptimo. Si ése es el destino, hay que dimensionar VRM, cooler y fuente para ese modelo desde el inicio; compartir socket no garantiza el mismo margen térmico. [9950X3D2 Dual Edition](https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d2-dual-edition.html) · [9950X3D](https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d.html)\n\nEso no vuelve automáticamente al X3D2 la compra correcta. Su sentido aparece cuando la carga y el presupuesto pueden aprovecharlo.\n\nPara gaming prioritario, un Ryzen 7 X3D puede ser una alternativa más racional. Para compilación, virtualización, creación, multitarea y muchos procesos concurrentes, los 16 núcleos pueden aportar valor real.\n\n### B850 vs X870E\n\nNo elegir chipset por prestigio.\n\n**B850** puede ser suficiente cuando se necesita una GPU, varios NVMe, buen USB y una plataforma robusta.\n\n**X870E** empieza a justificar su precio cuando el diseño necesita más conectividad y lanes PCIe, varios dispositivos de alta velocidad, USB4 u opciones de expansión que efectivamente se van a usar.\n\nUSB4 es estándar en X870E y opcional en B850: no alcanza con el nombre del chipset para saber qué puertos trae una placa concreta. Compará su manual y el reparto de lanes al poblar los slots. [Chipsets AM5](https://www.amd.com/en/products/processors/chipsets/am5.html)\n\nLa pregunta correcta no es “¿cuál es más high-end?”, sino:\n\n> **¿qué recurso de X870E utilizará esta workstation que B850 no puede entregar?**\n\nSi la respuesta es “ninguno”, el presupuesto probablemente tenga un destino mejor.\n\n# Caso de referencia\n\nSupongamos una máquina AM4 con Ryzen 7 de ocho núcleos, X570, 32 GB DDR4, RTX serie 30, NVMe PCIe 4.0 rápido y fuente 850 W de buena calidad.\n\n| Pieza | Decisión |\n| --- | --- |\n| CPU AM4 | no migra |\n| X570 | no migra |\n| DDR4 | no migra |\n| RTX serie 30 | **migrar** |\n| NVMe PCIe 4.0 | **migrar** |\n| fuente 850 W | **migrar si pasa revisión** |\n| gabinete | **migrar si cumple clearances** |\n| cooler | validar mounting y capacidad |\n\nEl primer desembolso AM5 se concentra así en **CPU + motherboard + DDR5 + refrigeración si hace falta**, en lugar de financiar una PC completamente nueva.\n\n## Orden de compra sugerido\n\n1. **Definir el destino:** CPU máximo probable, GPU futura, RAM objetivo, cantidad de NVMe y expansión.\n2. **Auditar lo reutilizable:** fuente, GPU, discos, gabinete y cooler.\n3. **Cotizar por tres canales:** mercado argentino, Amazon y eBay. Comparar costo final puesto en Argentina, no sólo precio publicado.\n4. **Comprar la plataforma:** motherboard definitiva + 64 GB DDR5 + CPU de entrada.\n5. **Estabilizar:** BIOS, EXPO, drivers, temperaturas y pruebas de memoria/CPU.\n6. **Medir nuevamente el workload real.**\n7. **Completar la gama media:** capacidad, refrigeración, almacenamiento y resiliencia.\n8. **Saltar al CPU final:** evitar un procesador intermedio si no resuelve una necesidad concreta.\n9. **Actualizar GPU al final:** sólo cuando sea el cuello de botella o cambie el objetivo gráfico/compute.\n\n## Hoja de ruta de compras: Argentina, Amazon y eBay\n\nNo conviene atar la planificación a una sola tienda o país. Para cada etapa, cotizar las piezas en tres mercados y comparar el **costo total de adquisición**.\n\n| Canal | Dónde puede destacar | Qué validar antes de comprar |\n| --- | --- | --- |\n| Argentina | disponibilidad inmediata, cuotas, devolución y garantía local | precio contado vs financiado, reputación del vendedor y garantía |\n| Amazon | componentes nuevos, catálogo amplio y ofertas puntuales | envío a Argentina, cargos estimados, vendedor, garantía y devolución internacional |\n| eBay | oportunidades, generaciones anteriores, open-box y usado | condición real, reputación, fotos, devolución, envío, cargos y riesgo de garantía |\n\n### No comparar solamente el precio de portada\n\nPara una compra internacional, usar como referencia:\n\n```text\ncosto puesto =\n  precio del componente\n+ envío\n+ impuestos / cargos de importación aplicables\n+ conversión y costos del medio de pago\n+ eventual gestión logística\n```\n\nLas reglas aduaneras, franquicias, impuestos y esquemas de courier pueden cambiar. Antes de cerrar una compra internacional hay que recalcularlos con las condiciones vigentes.\n\n### Qué piezas tienen mejor perfil para importar\n\nComo regla de evaluación, no como mandato:\n\n- **CPU:** compacto y fácil de transportar; comparar especialmente Amazon y mercado local.\n- **RAM:** pequeña y normalmente simple de importar; revisar garantía y QVL.\n- **NVMe:** excelente relación valor/volumen; verificar vendedor y autenticidad.\n- **Motherboard:** puede ofrecer ahorro, pero pesa más el riesgo de transporte, RMA y compatibilidad BIOS.\n- **GPU:** el diferencial puede ser grande, pero también el valor expuesto a transporte, garantía y devoluciones.\n- **Fuente y gabinete:** volumen y peso pueden destruir un buen precio internacional.\n- **Cooler:** comparar costo final; radiadores y torres grandes pueden perder sentido por logística.\n\nEn **eBay**, CPU, RAM y hardware open-box o usado pueden ser tentadores, pero una workstation de producción no debería ahorrar una cantidad pequeña a cambio de una procedencia dudosa. Para motherboard, GPU y almacenamiento usado, la vara de evidencia del vendedor debe ser especialmente alta.\n\n### Matriz para cada compra\n\n| Criterio | Argentina | Amazon | eBay |\n| --- | ---: | ---: | ---: |\n| Precio final puesto | calcular | calcular | calcular |\n| Tiempo de entrega | comparar | comparar | comparar |\n| Garantía utilizable | validar | validar | validar |\n| Devolución práctica | validar | validar | validar |\n| Nuevo / open-box / usado | confirmar | confirmar | confirmar |\n| Riesgo logístico | estimar | estimar | estimar |\n| Ahorro vs alternativa | calcular | calcular | calcular |\n\nLa opción ganadora no es necesariamente la más barata: es la que ofrece suficiente ahorro para compensar **tiempo, garantía y riesgo**.\n\n## Gates antes de cada compra\n\n### Gate 1 — Compatibilidad física\n\n- [ ] formato de motherboard compatible con gabinete;\n- [ ] altura del cooler o espacio para radiador;\n- [ ] longitud y espesor de GPU;\n- [ ] ubicación de M.2 y slots PCIe;\n- [ ] conectores de alimentación disponibles.\n\n### Gate 2 — Compatibilidad lógica\n\n- [ ] CPU soportado por la versión de BIOS;\n- [ ] kit DDR5 validado o con historial sólido en la placa;\n- [ ] perfil EXPO compatible;\n- [ ] lanes compartidos entre M.2, SATA y PCIe entendidos;\n- [ ] requisitos de SO y drivers revisados.\n\n### Gate 3 — Energía y temperatura\n\n- [ ] potencia de fuente calculada para CPU + GPU final;\n- [ ] conectores correctos sin adaptadores dudosos;\n- [ ] airflow suficiente;\n- [ ] solución térmica dimensionada para el CPU final.\n\n### Gate 4 — Justificación\n\nAntes de pagar:\n\n> **¿Esta pieza forma parte de la máquina final o resuelve un cuello de botella medido durante suficiente tiempo como para justificar ser transitoria?**\n\nSi ninguna de las dos es cierta, probablemente no haya que comprarla.\n\n# Plantilla portable\n\n```text\nSETUP ACTUAL\n\nCPU:\nMotherboard:\nRAM:\nGPU:\nFuente (modelo exacto + antigüedad):\nCooler:\nGabinete:\nNVMe/SATA:\nPlacas PCIe:\nPeriféricos USB críticos:\nSistema operativo:\nWSL / VMs / Docker:\nCarga habitual:\nGaming (resolución / Hz):\nRAM pico:\nCPU pico:\nVRAM pico:\nTemperaturas:\nProblema que quiero resolver:\nPresupuesto por etapa:\nDestino final deseado:\n```\n\nCon esos datos se puede clasificar cada componente como **MIGRAR / REEMPLAZAR / VALIDAR / COMPRAR DESPUÉS** y recién entonces construir las tres etapas.\n\n## Regla final\n\nUna buena ruta de upgrade no maximiza la potencia del próximo ticket. Maximiza **cuántas compras siguen teniendo sentido cuando la máquina llega a su forma final**.\n\nAM5 es especialmente útil para esta estrategia porque permite separar el cambio de plataforma del salto al procesador definitivo. El setup económico deja de ser un destino mediocre y se convierte en la primera versión funcional de una workstation que todavía está creciendo.\n\n## Referencias técnicas\n\n- AMD, plataforma AM5 y chipsets: https://www.amd.com/en/products/processors/chipsets/am5.html\n- AMD Ryzen 5 9600X: https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-5-9600x.html\n- AMD Ryzen 9 9950X3D: https://www.amd.com/en/products/processors/desktops/ryzen/9000-series/amd-ryzen-9-9950x3d.html\n"
    },
    {
      "slug": "opendesign-direccion-visual-agentes",
      "title": "OpenDesign y la dirección visual de los agentes",
      "summary": "Los modelos ya pueden construir interfaces. El problema es lograr que dejen de improvisar la identidad visual en cada ejecución. OpenDesign propone convertir esa dirección en archivos portables.",
      "type": "editorial",
      "order": 1,
      "tags": [
        "opendesign",
        "design-md",
        "diseño",
        "agentes",
        "skills",
        "templates",
        "dirección-visual"
      ],
      "related": [
        "opendesign-integracion-local-cli-proxy",
        "modelos-guiados-el-entorno-es-la-politica",
        "orquestacion",
        "terminal-vs-web-superficies-trabajo"
      ],
      "area": "Diseño agéntico",
      "glyph": "✦",
      "hue": "rgba(236,95,189,.24)",
      "file": "opendesign-direccion-visual-agentes.md",
      "html": "<blockquote>\n<p>Vigencia editorial: 12 de octubre de 2026. OpenDesign evoluciona rápido; verificar adaptadores, catálogo y requisitos en la documentación oficial antes de fijarlos como política.</p>\n</blockquote>\n<p>Los agentes de código aprendieron a construir interfaces antes de aprender a sostener una identidad visual. Pueden transformar una consigna en HTML, CSS y componentes funcionales, pero todavía tienden a diseñar cada ejecución como si fuera la primera: inventan una paleta, cambian la escala tipográfica, alteran el espaciado y terminan regresando al mismo dashboard genérico con cards flotantes.</p>\n<p>OpenDesign parte de una tesis más interesante que “la IA ahora diseña”: <strong>la capacidad ya existe, pero le falta una dirección visual persistente y un método de producción</strong>.</p>\n<p>No presenta un nuevo modelo. Se instala como una capa alrededor de los agentes que ya usamos —Codex, Claude Code, OpenCode, Cursor, Gemini CLI, Hermes y otros— y los convierte en motores de un workspace de diseño local.</p>\n<h2 id=\"separar-que-construir-de-como-debe-verse\">Separar qué construir de cómo debe verse</h2>\n<p>En un prompt tradicional, producto y estética suelen quedar mezclados:</p>\n<blockquote>\n<p>Hacé un dashboard moderno, elegante, oscuro, con métricas, filtros y un estilo premium.</p>\n</blockquote>\n<p>La descripción parece suficiente hasta que hay que producir una segunda pantalla, una presentación o un email con la misma marca. Entonces aparece la deriva: cada agente interpreta “moderno” de una manera distinta.</p>\n<p>OpenDesign separa el proceso en piezas:</p>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Responsabilidad</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Brief</td>\n<td>Objetivo, audiencia y contenido</td>\n</tr>\n<tr>\n<td>Skill</td>\n<td>Método de trabajo y reglas de producción</td>\n</tr>\n<tr>\n<td>Template</td>\n<td>Tipo y estructura del artefacto</td>\n</tr>\n<tr>\n<td><code>DESIGN.md</code></td>\n<td>Identidad visual que debe conservarse</td>\n</tr>\n<tr>\n<td>Agente</td>\n<td>Razonamiento y ejecución</td>\n</tr>\n</tbody>\n</table>\n<p>La combinación permite mantener constante el lenguaje visual mientras cambia el artefacto. Un mismo sistema puede orientar una landing, un dashboard, un prototipo móvil o un deck sin volver a describir la marca desde cero.</p>\n<h2 id=\"design-md-como-contrato-visual\"><code>DESIGN.md</code> como contrato visual</h2>\n<p>La pieza más valiosa del enfoque es <code>DESIGN.md</code>: un archivo que codifica decisiones sobre color, tipografía, jerarquía, composición, espaciado, superficies, componentes y restricciones.</p>\n<p>No es sólo una colección de tokens. Puede expresar criterio:</p>\n<ul>\n<li>qué debe sentirse denso o liviano;</li>\n<li>cuándo usar una tipografía editorial;</li>\n<li>qué tratamientos están prohibidos;</li>\n<li>cómo se construye la jerarquía;</li>\n<li>qué rasgos vuelven reconocible a la marca;</li>\n<li>cuánto movimiento es aceptable;</li>\n<li>cómo evitar los clichés visuales del contenido generado.</li>\n</ul>\n<p>OpenDesign puede extraer ese sistema desde capturas, Figma, una URL o un repositorio y guardarlo junto al proyecto. Desde ese momento, la dirección deja de vivir únicamente en la memoria de una conversación o en el ojo de una persona.</p>\n<p>Ese archivo puede versionarse, revisarse y utilizarse con distintos agentes. Cambiar Codex por Claude Code no debería exigir reconstruir la identidad; cambiar una landing por una presentación tampoco.</p>\n<h2 id=\"de-una-conversacion-a-una-linea-de-produccion\">De una conversación a una línea de producción</h2>\n<p>El flujo propuesto es:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>brief → template → dirección → DESIGN.md → artefacto → handoff → memoria</span></span></code></pre>\n<p>El agente recibe el sistema visual y las instrucciones correspondientes. Con un CLI y herramientas de filesystem escribe los archivos del proyecto; una ejecución BYOK/API sin esas herramientas devuelve un bloque de artefacto para la preview. No son recorridos equivalentes de edición. <a href=\"https://github.com/nexu-io/open-design#quick-start\" target=\"_blank\" rel=\"noopener noreferrer\">Contrato de ejecución</a>. El resultado puede continuar como código o exportarse, según el formato, a HTML, ZIP, PDF, PPTX o video.</p>\n<p>Esto cambia la unidad de valor. Ya no se trata sólo de generar una pantalla atractiva, sino de construir un proceso capaz de producir una familia coherente de artefactos.</p>\n<h2 id=\"un-director-creativo-no-un-nuevo-empleado\">Un director creativo, no un nuevo empleado</h2>\n<p>OpenDesign no reemplaza al agente que implementa. Tampoco reemplaza automáticamente a Figma o a una persona diseñadora.</p>\n<p>Su papel se parece más al de un director creativo compartido:</p>\n<ul>\n<li>aporta una dirección visual persistente;</li>\n<li>selecciona métodos y templates;</li>\n<li>le entrega al agente contexto especializado;</li>\n<li>muestra el resultado dentro de un workspace visual;</li>\n<li>acumula preferencias y artefactos confirmados.</li>\n</ul>\n<p>El modelo sigue resolviendo y escribiendo. OpenDesign condiciona el terreno donde toma esas decisiones.</p>\n<p>Esta distinción importa porque el diseño agéntico no mejora solamente comprando un modelo más grande. También mejora reduciendo la cantidad de decisiones visuales que el modelo debe improvisar.</p>\n<h2 id=\"donde-encaja-frente-a-figma\">Dónde encaja frente a Figma</h2>\n<p>OpenDesign se acerca más a un IDE visual dirigido por agentes que a un canvas colaborativo tradicional.</p>\n<table>\n<thead>\n<tr>\n<th>OpenDesign favorece</th>\n<th>Figma favorece</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Generación desde intención</td>\n<td>Manipulación visual directa</td>\n</tr>\n<tr>\n<td>Artefactos que nacen como código</td>\n<td>Diseño libre sobre canvas</td>\n</tr>\n<tr>\n<td>Sistemas portables entre agentes</td>\n<td>Bibliotecas maduras de componentes</td>\n</tr>\n<tr>\n<td>Automatización y repetición</td>\n<td>Comentarios y redlines precisos</td>\n</tr>\n<tr>\n<td>Handoff directo a ingeniería</td>\n<td>Colaboración visual multipersona</td>\n</tr>\n</tbody>\n</table>\n<p>La comparación describe énfasis de trabajo, no exclusividades: OpenDesign también documenta comentarios y espacios de equipo. Su FAQ aclara que no hay exportación a Figma, por lo que no conviene asumir un round-trip nativo. <a href=\"https://open-design.ai/\" target=\"_blank\" rel=\"noopener noreferrer\">Alcance actual</a>.</p>\n<p>No hace falta elegir uno como reemplazo absoluto del otro. Un equipo puede explorar y producir en OpenDesign, revisar o refinar en Figma cuando el tipo de trabajo lo requiera y devolver las decisiones confirmadas al sistema portable.</p>\n<h2 id=\"el-valor-para-una-fabrica-multiagente\">El valor para una fábrica multiagente</h2>\n<p>En un entorno donde distintos agentes cumplen roles diferentes, <code>DESIGN.md</code> funciona como una política compartida. El coordinador puede definir la dirección; un worker producir el primer artefacto; otro revisar accesibilidad; otro integrarlo al producto. Todos leen el mismo contrato visual.</p>\n<p>Esto permite separar responsabilidades:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>Orca o cockpit       → coordina sesiones y proyectos</span></span>\n<span class=\"line\"><span>Codex / Claude       → razonan e implementan</span></span>\n<span class=\"line\"><span>OpenDesign           → conserva dirección visual y métodos</span></span>\n<span class=\"line\"><span>GitHub               → versiona el resultado</span></span>\n<span class=\"line\"><span>Figma                → habilita revisión manual cuando hace falta</span></span>\n<span class=\"line\"><span>Hosting              → publica el artefacto</span></span></code></pre>\n<p>OpenDesign no necesita apropiarse de toda la fábrica para resultar útil. Puede entrar como una especialidad, igual que un agente de seguridad, un navegador o una herramienta de pruebas.</p>\n<h2 id=\"el-limite-del-entusiasmo\">El límite del entusiasmo</h2>\n<p>El proyecto es ambicioso: combina aplicación de escritorio, daemon local, adaptadores para numerosos CLIs, skills, plugins, MCP, generación multimedia y previews. Cada integración suma valor, pero también superficie de falla.</p>\n<p>Además, un catálogo enorme no garantiza calidad uniforme. Skills y plugins comunitarios deben tratarse como código e instrucciones de terceros, especialmente cuando el agente tiene acceso al filesystem y a la terminal.</p>\n<p>Open source tampoco significa costo cero. La aplicación puede ser gratuita, pero cada generación consume la cuota o los créditos del agente y proveedor seleccionado.</p>\n<h2 id=\"veredicto\">Veredicto</h2>\n<p>OpenDesign merece atención porque ataca el punto exacto donde el desarrollo asistido suele perder calidad: <strong>la inconsistencia entre ejecuciones</strong>.</p>\n<p>Los modelos ya saben producir interfaces. Lo difícil es enseñarles qué decisiones no deben volver a tomar, qué identidad deben preservar y cómo transferir ese criterio a otro agente y otro formato.</p>\n<p>Al transformar la dirección visual en archivos versionables, OpenDesign mueve el diseño desde el prompt efímero hacia la infraestructura del proyecto. Esa idea es más importante que cualquier template de su catálogo.</p>\n<hr>\n<h2 id=\"fuentes-oficiales\">Fuentes oficiales</h2>\n<ul>\n<li><a href=\"https://open-design.ai/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenDesign</a></li>\n<li><a href=\"https://github.com/nexu-io/open-design\" target=\"_blank\" rel=\"noopener noreferrer\">Repositorio oficial</a></li>\n<li><a href=\"https://github.com/nexu-io/open-design/blob/main/QUICKSTART.md\" target=\"_blank\" rel=\"noopener noreferrer\">Quickstart</a></li>\n<li><a href=\"https://open-design.ai/agents/\" target=\"_blank\" rel=\"noopener noreferrer\">Adaptadores de agentes</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Separar qué construir de cómo debe verse",
          "depth": 2,
          "id": "separar-que-construir-de-como-debe-verse"
        },
        {
          "label": "DESIGN.md como contrato visual",
          "depth": 2,
          "id": "design-md-como-contrato-visual"
        },
        {
          "label": "De una conversación a una línea de producción",
          "depth": 2,
          "id": "de-una-conversacion-a-una-linea-de-produccion"
        },
        {
          "label": "Un director creativo, no un nuevo empleado",
          "depth": 2,
          "id": "un-director-creativo-no-un-nuevo-empleado"
        },
        {
          "label": "Dónde encaja frente a Figma",
          "depth": 2,
          "id": "donde-encaja-frente-a-figma"
        },
        {
          "label": "El valor para una fábrica multiagente",
          "depth": 2,
          "id": "el-valor-para-una-fabrica-multiagente"
        },
        {
          "label": "El límite del entusiasmo",
          "depth": 2,
          "id": "el-limite-del-entusiasmo"
        },
        {
          "label": "Veredicto",
          "depth": 2,
          "id": "veredicto"
        },
        {
          "label": "Fuentes oficiales",
          "depth": 2,
          "id": "fuentes-oficiales"
        }
      ],
      "raw": "---\nslug: opendesign-direccion-visual-agentes\ntitle: OpenDesign y la dirección visual de los agentes\ntype: editorial\norder: 1\nsummary: Los modelos ya pueden construir interfaces. El problema es lograr que dejen de improvisar la identidad visual en cada ejecución. OpenDesign propone convertir esa dirección en archivos portables.\ntags: [opendesign, design-md, diseño, agentes, skills, templates, dirección-visual]\nrelated: [opendesign-integracion-local-cli-proxy, modelos-guiados-el-entorno-es-la-politica, orquestacion, terminal-vs-web-superficies-trabajo]\narea: Diseño agéntico\nglyph: ✦\nhue: rgba(236,95,189,.24)\n---\n\n# OpenDesign y la dirección visual de los agentes\n\n> Vigencia editorial: 12 de octubre de 2026. OpenDesign evoluciona rápido; verificar adaptadores, catálogo y requisitos en la documentación oficial antes de fijarlos como política.\n\nLos agentes de código aprendieron a construir interfaces antes de aprender a sostener una identidad visual. Pueden transformar una consigna en HTML, CSS y componentes funcionales, pero todavía tienden a diseñar cada ejecución como si fuera la primera: inventan una paleta, cambian la escala tipográfica, alteran el espaciado y terminan regresando al mismo dashboard genérico con cards flotantes.\n\nOpenDesign parte de una tesis más interesante que “la IA ahora diseña”: **la capacidad ya existe, pero le falta una dirección visual persistente y un método de producción**.\n\nNo presenta un nuevo modelo. Se instala como una capa alrededor de los agentes que ya usamos —Codex, Claude Code, OpenCode, Cursor, Gemini CLI, Hermes y otros— y los convierte en motores de un workspace de diseño local.\n\n## Separar qué construir de cómo debe verse\n\nEn un prompt tradicional, producto y estética suelen quedar mezclados:\n\n> Hacé un dashboard moderno, elegante, oscuro, con métricas, filtros y un estilo premium.\n\nLa descripción parece suficiente hasta que hay que producir una segunda pantalla, una presentación o un email con la misma marca. Entonces aparece la deriva: cada agente interpreta “moderno” de una manera distinta.\n\nOpenDesign separa el proceso en piezas:\n\n| Pieza | Responsabilidad |\n|---|---|\n| Brief | Objetivo, audiencia y contenido |\n| Skill | Método de trabajo y reglas de producción |\n| Template | Tipo y estructura del artefacto |\n| `DESIGN.md` | Identidad visual que debe conservarse |\n| Agente | Razonamiento y ejecución |\n\nLa combinación permite mantener constante el lenguaje visual mientras cambia el artefacto. Un mismo sistema puede orientar una landing, un dashboard, un prototipo móvil o un deck sin volver a describir la marca desde cero.\n\n## `DESIGN.md` como contrato visual\n\nLa pieza más valiosa del enfoque es `DESIGN.md`: un archivo que codifica decisiones sobre color, tipografía, jerarquía, composición, espaciado, superficies, componentes y restricciones.\n\nNo es sólo una colección de tokens. Puede expresar criterio:\n\n- qué debe sentirse denso o liviano;\n- cuándo usar una tipografía editorial;\n- qué tratamientos están prohibidos;\n- cómo se construye la jerarquía;\n- qué rasgos vuelven reconocible a la marca;\n- cuánto movimiento es aceptable;\n- cómo evitar los clichés visuales del contenido generado.\n\nOpenDesign puede extraer ese sistema desde capturas, Figma, una URL o un repositorio y guardarlo junto al proyecto. Desde ese momento, la dirección deja de vivir únicamente en la memoria de una conversación o en el ojo de una persona.\n\nEse archivo puede versionarse, revisarse y utilizarse con distintos agentes. Cambiar Codex por Claude Code no debería exigir reconstruir la identidad; cambiar una landing por una presentación tampoco.\n\n## De una conversación a una línea de producción\n\nEl flujo propuesto es:\n\n```text\nbrief → template → dirección → DESIGN.md → artefacto → handoff → memoria\n```\n\nEl agente recibe el sistema visual y las instrucciones correspondientes. Con un CLI y herramientas de filesystem escribe los archivos del proyecto; una ejecución BYOK/API sin esas herramientas devuelve un bloque de artefacto para la preview. No son recorridos equivalentes de edición. [Contrato de ejecución](https://github.com/nexu-io/open-design#quick-start). El resultado puede continuar como código o exportarse, según el formato, a HTML, ZIP, PDF, PPTX o video.\n\nEsto cambia la unidad de valor. Ya no se trata sólo de generar una pantalla atractiva, sino de construir un proceso capaz de producir una familia coherente de artefactos.\n\n## Un director creativo, no un nuevo empleado\n\nOpenDesign no reemplaza al agente que implementa. Tampoco reemplaza automáticamente a Figma o a una persona diseñadora.\n\nSu papel se parece más al de un director creativo compartido:\n\n- aporta una dirección visual persistente;\n- selecciona métodos y templates;\n- le entrega al agente contexto especializado;\n- muestra el resultado dentro de un workspace visual;\n- acumula preferencias y artefactos confirmados.\n\nEl modelo sigue resolviendo y escribiendo. OpenDesign condiciona el terreno donde toma esas decisiones.\n\nEsta distinción importa porque el diseño agéntico no mejora solamente comprando un modelo más grande. También mejora reduciendo la cantidad de decisiones visuales que el modelo debe improvisar.\n\n## Dónde encaja frente a Figma\n\nOpenDesign se acerca más a un IDE visual dirigido por agentes que a un canvas colaborativo tradicional.\n\n| OpenDesign favorece | Figma favorece |\n|---|---|\n| Generación desde intención | Manipulación visual directa |\n| Artefactos que nacen como código | Diseño libre sobre canvas |\n| Sistemas portables entre agentes | Bibliotecas maduras de componentes |\n| Automatización y repetición | Comentarios y redlines precisos |\n| Handoff directo a ingeniería | Colaboración visual multipersona |\n\nLa comparación describe énfasis de trabajo, no exclusividades: OpenDesign también documenta comentarios y espacios de equipo. Su FAQ aclara que no hay exportación a Figma, por lo que no conviene asumir un round-trip nativo. [Alcance actual](https://open-design.ai/).\n\nNo hace falta elegir uno como reemplazo absoluto del otro. Un equipo puede explorar y producir en OpenDesign, revisar o refinar en Figma cuando el tipo de trabajo lo requiera y devolver las decisiones confirmadas al sistema portable.\n\n## El valor para una fábrica multiagente\n\nEn un entorno donde distintos agentes cumplen roles diferentes, `DESIGN.md` funciona como una política compartida. El coordinador puede definir la dirección; un worker producir el primer artefacto; otro revisar accesibilidad; otro integrarlo al producto. Todos leen el mismo contrato visual.\n\nEsto permite separar responsabilidades:\n\n```text\nOrca o cockpit       → coordina sesiones y proyectos\nCodex / Claude       → razonan e implementan\nOpenDesign           → conserva dirección visual y métodos\nGitHub               → versiona el resultado\nFigma                → habilita revisión manual cuando hace falta\nHosting              → publica el artefacto\n```\n\nOpenDesign no necesita apropiarse de toda la fábrica para resultar útil. Puede entrar como una especialidad, igual que un agente de seguridad, un navegador o una herramienta de pruebas.\n\n## El límite del entusiasmo\n\nEl proyecto es ambicioso: combina aplicación de escritorio, daemon local, adaptadores para numerosos CLIs, skills, plugins, MCP, generación multimedia y previews. Cada integración suma valor, pero también superficie de falla.\n\nAdemás, un catálogo enorme no garantiza calidad uniforme. Skills y plugins comunitarios deben tratarse como código e instrucciones de terceros, especialmente cuando el agente tiene acceso al filesystem y a la terminal.\n\nOpen source tampoco significa costo cero. La aplicación puede ser gratuita, pero cada generación consume la cuota o los créditos del agente y proveedor seleccionado.\n\n## Veredicto\n\nOpenDesign merece atención porque ataca el punto exacto donde el desarrollo asistido suele perder calidad: **la inconsistencia entre ejecuciones**.\n\nLos modelos ya saben producir interfaces. Lo difícil es enseñarles qué decisiones no deben volver a tomar, qué identidad deben preservar y cómo transferir ese criterio a otro agente y otro formato.\n\nAl transformar la dirección visual en archivos versionables, OpenDesign mueve el diseño desde el prompt efímero hacia la infraestructura del proyecto. Esa idea es más importante que cualquier template de su catálogo.\n\n---\n\n## Fuentes oficiales\n\n- [OpenDesign](https://open-design.ai/)\n- [Repositorio oficial](https://github.com/nexu-io/open-design)\n- [Quickstart](https://github.com/nexu-io/open-design/blob/main/QUICKSTART.md)\n- [Adaptadores de agentes](https://open-design.ai/agents/)\n"
    },
    {
      "slug": "opendesign-integracion-local-cli-proxy",
      "title": "OpenDesign entre Windows, WSL, planes y proxies",
      "summary": "Local-first no siempre significa un único entorno. Cuando la interfaz vive en Windows y los agentes en WSL, elegir entre CLI, BYOK y proxy define consumo, sesiones y superficie de riesgo.",
      "type": "editorial",
      "order": 2,
      "tags": [
        "opendesign",
        "windows",
        "wsl",
        "local-cli",
        "byok",
        "proxy",
        "codex",
        "claude-code",
        "opencode-go"
      ],
      "related": [
        "opendesign-direccion-visual-agentes",
        "setup-windows-wsl",
        "hosts-ssh",
        "continuidad-y-observabilidad"
      ],
      "area": "Diseño agéntico",
      "glyph": "⌁",
      "hue": "rgba(87,217,232,.22)",
      "file": "opendesign-integracion-local-cli-proxy.md",
      "html": "<blockquote>\n<p>Vigencia editorial: 12 de octubre de 2026. Los mecanismos de autenticación, modelos y límites dependen de cada proveedor y pueden cambiar.</p>\n</blockquote>\n<p>“Local-first” suena a una sola computadora. En Windows con WSL, sin embargo, una computadora contiene dos entornos que comparten recursos pero no necesariamente ejecutables, credenciales ni sesiones.</p>\n<p>La aplicación de OpenDesign puede vivir en Windows mientras Codex, Claude Code, OpenCode y los repositorios viven dentro de Ubuntu. En la pantalla todo parece local; desde el daemon son mundos distintos.</p>\n<p>Esta frontera define mucho más que la instalación. Define quién ejecuta el modelo, dónde se guardan las credenciales y contra qué cuota se contabiliza cada generación.</p>\n<h2 id=\"tres-caminos-hacia-un-modelo\">Tres caminos hacia un modelo</h2>\n<p>OpenDesign puede llegar a un modelo por tres rutas conceptuales:</p>\n<table>\n<thead>\n<tr>\n<th>Ruta</th>\n<th>Autenticación</th>\n<th>Consumo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Local CLI</td>\n<td>Autenticación del agente instalado</td>\n<td>Plan o facturación API, según esa autenticación</td>\n</tr>\n<tr>\n<td>BYOK / proveedor custom</td>\n<td>Clave API</td>\n<td>Cuenta o saldo API del proveedor</td>\n</tr>\n<tr>\n<td>OpenDesign Cloud</td>\n<td>Cuenta de OpenDesign</td>\n<td>Créditos incluidos o comprados allí</td>\n</tr>\n</tbody>\n</table>\n<p>Si OpenDesign lanza un Codex CLI autenticado con ChatGPT, el trabajo se descuenta de la cuota de Codex. Si lanza Claude Code autenticado con Pro o Max, consume ese plan. Si recibe una clave en el panel de proveedores, ya no está usando la sesión del CLI: realiza llamadas API.</p>\n<p>La interfaz no cambia esta regla. La decide el camino efectivo que toma la request.</p>\n<h2 id=\"por-que-un-cli-instalado-en-wsl-puede-no-aparecer\">Por qué un CLI instalado en WSL puede no aparecer</h2>\n<p>Un daemon iniciado por una aplicación de Windows inspecciona el entorno de Windows. No necesariamente ve:</p>\n<ul>\n<li>binarios instalados dentro de Linux;</li>\n<li>el <code>PATH</code> de la shell de WSL;</li>\n<li>configuraciones bajo el home de Ubuntu;</li>\n<li>sesiones OAuth guardadas por los CLIs Linux;</li>\n<li>variables exportadas en <code>.bashrc</code> o servicios de <code>systemd</code>.</li>\n</ul>\n<p>Por eso tener <code>codex</code>, <code>claude</code> u <code>opencode</code> funcionando desde Ubuntu no garantiza que OpenDesign Desktop los muestre como Local CLI.</p>\n<p>La solución más directa para conservar la aplicación nativa es duplicar los CLIs en Windows y autenticarlos allí. Las instalaciones quedan separadas, aunque consuman la misma cuota del plan.</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>OpenDesign Desktop en Windows</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>Codex / Claude Code nativos</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>Cuotas de ChatGPT y Claude</span></span></code></pre>\n<p>Si los agentes ya viven en WSL, la <a href=\"https://github.com/nexu-io/open-design/blob/main/docs/wsl-setup.md\" target=\"_blank\" rel=\"noopener noreferrer\">guía oficial de WSL2</a> recomienda ejecutar OpenDesign en ese mismo entorno. Así CLI, daemon, módulos y credenciales coinciden. La interfaz puede abrirse desde el navegador de Windows. Revisá también qué ejecutable resuelve <code>od</code>: Linux incluye una utilidad del sistema con ese nombre, ajena a OpenDesign.</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>Navegador Windows</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>OpenDesign daemon en WSL</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>CLIs y repositorios de WSL</span></span></code></pre>\n<h2 id=\"el-proxy-como-puente-deliberado\">El proxy como puente deliberado</h2>\n<p>Existe una tercera opción: exponer en WSL un proxy compatible con OpenAI y configurarlo como proveedor custom.</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>OpenDesign en Windows</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>Proxy local en 127.0.0.1</span></span>\n<span class=\"line\"><span>        ↓</span></span>\n<span class=\"line\"><span>Proveedor externo</span></span></code></pre>\n<p>La conectividad Windows–WSL y las defensas SSRF del daemon también importan: OpenDesign bloquea por defecto endpoints privados/internos; si esa protección rechaza el destino, revisá la allowlist exacta documentada, sin abrir rangos amplios. Es una condición de despliegue que hay que probar. <a href=\"https://github.com/nexu-io/open-design#use-opendesign-from-your-coding-agent\" target=\"_blank\" rel=\"noopener noreferrer\">Seguridad del proxy</a>.</p>\n<p>Este camino no reutiliza automáticamente la cuota de Codex o Claude. OpenDesign cree que está hablando con una API; el proxy decide qué proveedor y credencial utiliza detrás.</p>\n<p>El patrón permite adaptar protocolos y sesiones, pero publicar una API no habilita cualquier uso. <a href=\"https://opencode.ai/v2/docs/console/go\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode Go</a> está pensado para tráfico de agentes de programación: exige un cliente identificable y una sesión estable. Un proxy no vuelve compatible un workload arbitrario; hay que verificar el cliente y el endpoint de cada modelo, que puede usar Responses, Chat Completions o Messages.</p>\n<p>Un proxy no es necesariamente un parche. Puede convertirse en una frontera de control:</p>\n<ul>\n<li>oculta la credencial real al cliente;</li>\n<li>aplica allowlists de modelos;</li>\n<li>agrega encabezados de sesión;</li>\n<li>sanitiza logs;</li>\n<li>impone límites y timeouts;</li>\n<li>evita que cada aplicación conozca el proveedor final.</li>\n</ul>\n<p>Pero cada responsabilidad agregada también convierte al proxy en infraestructura que alguien debe mantener.</p>\n<h2 id=\"sesiones-el-detalle-que-cambia-el-resultado\">Sesiones: el detalle que cambia el resultado</h2>\n<p>Un endpoint compatible no garantiza una conversación correctamente identificada. OpenCode Go solicita una sesión estable por conversación mediante información nativa del cliente o el encabezado <code>x-opencode-session</code>.</p>\n<p>El proxy debe evitar dos extremos:</p>\n<ul>\n<li>generar un ID nuevo en cada request, perdiendo continuidad y caching;</li>\n<li>reutilizar un único ID global, mezclando proyectos y conversaciones.</li>\n</ul>\n<p>La unidad correcta suele ser un thread o proyecto de OpenDesign:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>x-opencode-session = hash(project_id + conversation_id)</span></span></code></pre>\n<p>La derivación no debe incluir prompts, secretos ni la API key.</p>\n<h2 id=\"credencial-real-frente-a-credencial-local\">Credencial real frente a credencial local</h2>\n<p>Cuando OpenDesign obliga a completar un campo API key para un proveedor custom, hay dos diseños posibles.</p>\n<h3 id=\"reenviar-la-key-real\">Reenviar la key real</h3>\n<p>OpenDesign guarda la key del proveedor y la transmite al proxy, que la reenvía.</p>\n<p>Es simple, pero la credencial queda almacenada y circula por más componentes.</p>\n<h3 id=\"separar-las-credenciales\">Separar las credenciales</h3>\n<p>OpenDesign utiliza un token local aleatorio. El proxy lo valida y obtiene la key real desde su propio entorno protegido.</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>OpenDesign        → token local</span></span>\n<span class=\"line\"><span>Proxy             → valida token local</span></span>\n<span class=\"line\"><span>Proveedor externo → recibe la key real</span></span></code></pre>\n<p>Esta separación limita el impacto de una exportación, un log accidental o una falla en el cliente. Para una instalación estable es la opción preferible.</p>\n<h2 id=\"reglas-minimas-para-un-proxy-local\">Reglas mínimas para un proxy local</h2>\n<p>Un puente de este tipo debería cumplir al menos con estas condiciones:</p>\n<ol>\n<li>escuchar únicamente en loopback salvo necesidad explícita;</li>\n<li>no registrar <code>Authorization</code>, bodies completos ni variables sensibles;</li>\n<li>mantener una sesión estable por conversación;</li>\n<li>declarar un <code>User-Agent</code> identificable;</li>\n<li>permitir sólo los modelos necesarios;</li>\n<li>usar timeouts y límites de tamaño;</li>\n<li>fallar de forma visible, sin cambiar silenciosamente de proveedor;</li>\n<li>conservar una prueba mínima de health y descubrimiento de modelos.</li>\n</ol>\n<p>Abrirlo en <code>0.0.0.0</code> transforma un puente local en un servicio accesible desde la red. Esa decisión exige autenticación, firewall y una revisión distinta.</p>\n<h2 id=\"las-cuotas-siguen-al-proveedor-efectivo\">Las cuotas siguen al proveedor efectivo</h2>\n<p>La regla para entender el gasto es seguir la request completa:</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>¿Quién recibió finalmente la llamada autenticada?</span></span></code></pre>\n<ul>\n<li>Codex CLI con sesión ChatGPT: cuota Codex.</li>\n<li>Claude Code con sesión Pro/Max: cuota Claude.</li>\n<li>API de OpenAI o Anthropic: facturación API.</li>\n<li>Proxy hacia OpenCode Go: límites incluidos de Go.</li>\n<li>Go con fallback a saldo habilitado: saldo Zen después del límite.</li>\n<li>OpenDesign Cloud: créditos de OpenDesign.</li>\n</ul>\n<p>La etiqueta del modelo en la interfaz puede confundir. Un modelo de OpenAI servido por OpenCode Go no consume el plan de ChatGPT; consume la asignación del proveedor que atendió la request.</p>\n<h2 id=\"una-arquitectura-razonable-para-un-entorno-hibrido\">Una arquitectura razonable para un entorno híbrido</h2>\n<p>Para preservar sesiones existentes y separar consumos, una distribución posible es:</p>\n<table>\n<thead>\n<tr>\n<th>Camino</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>OpenDesign → Codex Windows</td>\n<td>Trabajo descontado del plan de Codex</td>\n</tr>\n<tr>\n<td>OpenDesign → Claude Code Windows</td>\n<td>Trabajo descontado del plan de Claude</td>\n</tr>\n<tr>\n<td>OpenDesign → proxy WSL → OpenCode Go</td>\n<td>Modelos económicos bajo los límites de Go</td>\n</tr>\n<tr>\n<td>Orca → CLIs WSL</td>\n<td>Desarrollo y coordinación existentes</td>\n</tr>\n</tbody>\n</table>\n<p>La duplicación de CLIs no es elegante, pero mantiene claras las fronteras. Mover todo el daemon a WSL reduce duplicación, aunque renuncia a parte de la comodidad de la aplicación nativa.</p>\n<h2 id=\"veredicto\">Veredicto</h2>\n<p>La integración local no depende sólo de que dos procesos vivan en la misma computadora. Depende de que compartan el entorno correcto.</p>\n<p>Instalar los CLIs en Windows es la ruta más simple para que OpenDesign Desktop consuma cuotas de los planes. Ejecutar el daemon en WSL es la ruta más coherente para reutilizar instalaciones existentes. Un proxy es la ruta más flexible cuando el proveedor ofrece una API y necesitamos controlar sesiones, credenciales o compatibilidad.</p>\n<p>Ninguna opción gana siempre. La decisión correcta surge de elegir qué queremos preservar: comodidad de escritorio, sesiones existentes, control del tráfico o aislamiento de credenciales.</p>\n<hr>\n<h2 id=\"fuentes-oficiales\">Fuentes oficiales</h2>\n<ul>\n<li><a href=\"https://open-design.ai/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenDesign</a></li>\n<li><a href=\"https://github.com/nexu-io/open-design/blob/main/QUICKSTART.md\" target=\"_blank\" rel=\"noopener noreferrer\">Quickstart de OpenDesign</a></li>\n<li><a href=\"https://open-design.ai/agents/\" target=\"_blank\" rel=\"noopener noreferrer\">Adaptadores de agentes</a></li>\n<li><a href=\"https://opencode.ai/v2/docs/console/go\" target=\"_blank\" rel=\"noopener noreferrer\">OpenCode Go</a></li>\n<li><a href=\"https://github.com/nexu-io/open-design/blob/main/docs/wsl-setup.md\" target=\"_blank\" rel=\"noopener noreferrer\">WSL2 setup</a></li>\n<li><a href=\"https://github.com/nexu-io/open-design/blob/main/docs/windows-troubleshooting.md\" target=\"_blank\" rel=\"noopener noreferrer\">Windows troubleshooting</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Tres caminos hacia un modelo",
          "depth": 2,
          "id": "tres-caminos-hacia-un-modelo"
        },
        {
          "label": "Por qué un CLI instalado en WSL puede no aparecer",
          "depth": 2,
          "id": "por-que-un-cli-instalado-en-wsl-puede-no-aparecer"
        },
        {
          "label": "El proxy como puente deliberado",
          "depth": 2,
          "id": "el-proxy-como-puente-deliberado"
        },
        {
          "label": "Sesiones: el detalle que cambia el resultado",
          "depth": 2,
          "id": "sesiones-el-detalle-que-cambia-el-resultado"
        },
        {
          "label": "Credencial real frente a credencial local",
          "depth": 2,
          "id": "credencial-real-frente-a-credencial-local"
        },
        {
          "label": "Reenviar la key real",
          "depth": 3,
          "id": "reenviar-la-key-real"
        },
        {
          "label": "Separar las credenciales",
          "depth": 3,
          "id": "separar-las-credenciales"
        },
        {
          "label": "Reglas mínimas para un proxy local",
          "depth": 2,
          "id": "reglas-minimas-para-un-proxy-local"
        },
        {
          "label": "Las cuotas siguen al proveedor efectivo",
          "depth": 2,
          "id": "las-cuotas-siguen-al-proveedor-efectivo"
        },
        {
          "label": "Una arquitectura razonable para un entorno híbrido",
          "depth": 2,
          "id": "una-arquitectura-razonable-para-un-entorno-hibrido"
        },
        {
          "label": "Veredicto",
          "depth": 2,
          "id": "veredicto"
        },
        {
          "label": "Fuentes oficiales",
          "depth": 2,
          "id": "fuentes-oficiales"
        }
      ],
      "raw": "---\nslug: opendesign-integracion-local-cli-proxy\ntitle: OpenDesign entre Windows, WSL, planes y proxies\ntype: editorial\norder: 2\nsummary: Local-first no siempre significa un único entorno. Cuando la interfaz vive en Windows y los agentes en WSL, elegir entre CLI, BYOK y proxy define consumo, sesiones y superficie de riesgo.\ntags: [opendesign, windows, wsl, local-cli, byok, proxy, codex, claude-code, opencode-go]\nrelated: [opendesign-direccion-visual-agentes, setup-windows-wsl, hosts-ssh, continuidad-y-observabilidad]\narea: Diseño agéntico\nglyph: ⌁\nhue: rgba(87,217,232,.22)\n---\n\n# OpenDesign entre Windows, WSL, planes y proxies\n\n> Vigencia editorial: 12 de octubre de 2026. Los mecanismos de autenticación, modelos y límites dependen de cada proveedor y pueden cambiar.\n\n“Local-first” suena a una sola computadora. En Windows con WSL, sin embargo, una computadora contiene dos entornos que comparten recursos pero no necesariamente ejecutables, credenciales ni sesiones.\n\nLa aplicación de OpenDesign puede vivir en Windows mientras Codex, Claude Code, OpenCode y los repositorios viven dentro de Ubuntu. En la pantalla todo parece local; desde el daemon son mundos distintos.\n\nEsta frontera define mucho más que la instalación. Define quién ejecuta el modelo, dónde se guardan las credenciales y contra qué cuota se contabiliza cada generación.\n\n## Tres caminos hacia un modelo\n\nOpenDesign puede llegar a un modelo por tres rutas conceptuales:\n\n| Ruta | Autenticación | Consumo |\n|---|---|---|\n| Local CLI | Autenticación del agente instalado | Plan o facturación API, según esa autenticación |\n| BYOK / proveedor custom | Clave API | Cuenta o saldo API del proveedor |\n| OpenDesign Cloud | Cuenta de OpenDesign | Créditos incluidos o comprados allí |\n\nSi OpenDesign lanza un Codex CLI autenticado con ChatGPT, el trabajo se descuenta de la cuota de Codex. Si lanza Claude Code autenticado con Pro o Max, consume ese plan. Si recibe una clave en el panel de proveedores, ya no está usando la sesión del CLI: realiza llamadas API.\n\nLa interfaz no cambia esta regla. La decide el camino efectivo que toma la request.\n\n## Por qué un CLI instalado en WSL puede no aparecer\n\nUn daemon iniciado por una aplicación de Windows inspecciona el entorno de Windows. No necesariamente ve:\n\n- binarios instalados dentro de Linux;\n- el `PATH` de la shell de WSL;\n- configuraciones bajo el home de Ubuntu;\n- sesiones OAuth guardadas por los CLIs Linux;\n- variables exportadas en `.bashrc` o servicios de `systemd`.\n\nPor eso tener `codex`, `claude` u `opencode` funcionando desde Ubuntu no garantiza que OpenDesign Desktop los muestre como Local CLI.\n\nLa solución más directa para conservar la aplicación nativa es duplicar los CLIs en Windows y autenticarlos allí. Las instalaciones quedan separadas, aunque consuman la misma cuota del plan.\n\n```text\nOpenDesign Desktop en Windows\n        ↓\nCodex / Claude Code nativos\n        ↓\nCuotas de ChatGPT y Claude\n```\n\nSi los agentes ya viven en WSL, la [guía oficial de WSL2](https://github.com/nexu-io/open-design/blob/main/docs/wsl-setup.md) recomienda ejecutar OpenDesign en ese mismo entorno. Así CLI, daemon, módulos y credenciales coinciden. La interfaz puede abrirse desde el navegador de Windows. Revisá también qué ejecutable resuelve `od`: Linux incluye una utilidad del sistema con ese nombre, ajena a OpenDesign.\n\n```text\nNavegador Windows\n        ↓\nOpenDesign daemon en WSL\n        ↓\nCLIs y repositorios de WSL\n```\n\n## El proxy como puente deliberado\n\nExiste una tercera opción: exponer en WSL un proxy compatible con OpenAI y configurarlo como proveedor custom.\n\n```text\nOpenDesign en Windows\n        ↓\nProxy local en 127.0.0.1\n        ↓\nProveedor externo\n```\n\nLa conectividad Windows–WSL y las defensas SSRF del daemon también importan: OpenDesign bloquea por defecto endpoints privados/internos; si esa protección rechaza el destino, revisá la allowlist exacta documentada, sin abrir rangos amplios. Es una condición de despliegue que hay que probar. [Seguridad del proxy](https://github.com/nexu-io/open-design#use-opendesign-from-your-coding-agent).\n\nEste camino no reutiliza automáticamente la cuota de Codex o Claude. OpenDesign cree que está hablando con una API; el proxy decide qué proveedor y credencial utiliza detrás.\n\nEl patrón permite adaptar protocolos y sesiones, pero publicar una API no habilita cualquier uso. [OpenCode Go](https://opencode.ai/v2/docs/console/go) está pensado para tráfico de agentes de programación: exige un cliente identificable y una sesión estable. Un proxy no vuelve compatible un workload arbitrario; hay que verificar el cliente y el endpoint de cada modelo, que puede usar Responses, Chat Completions o Messages.\n\nUn proxy no es necesariamente un parche. Puede convertirse en una frontera de control:\n\n- oculta la credencial real al cliente;\n- aplica allowlists de modelos;\n- agrega encabezados de sesión;\n- sanitiza logs;\n- impone límites y timeouts;\n- evita que cada aplicación conozca el proveedor final.\n\nPero cada responsabilidad agregada también convierte al proxy en infraestructura que alguien debe mantener.\n\n## Sesiones: el detalle que cambia el resultado\n\nUn endpoint compatible no garantiza una conversación correctamente identificada. OpenCode Go solicita una sesión estable por conversación mediante información nativa del cliente o el encabezado `x-opencode-session`.\n\nEl proxy debe evitar dos extremos:\n\n- generar un ID nuevo en cada request, perdiendo continuidad y caching;\n- reutilizar un único ID global, mezclando proyectos y conversaciones.\n\nLa unidad correcta suele ser un thread o proyecto de OpenDesign:\n\n```text\nx-opencode-session = hash(project_id + conversation_id)\n```\n\nLa derivación no debe incluir prompts, secretos ni la API key.\n\n## Credencial real frente a credencial local\n\nCuando OpenDesign obliga a completar un campo API key para un proveedor custom, hay dos diseños posibles.\n\n### Reenviar la key real\n\nOpenDesign guarda la key del proveedor y la transmite al proxy, que la reenvía.\n\nEs simple, pero la credencial queda almacenada y circula por más componentes.\n\n### Separar las credenciales\n\nOpenDesign utiliza un token local aleatorio. El proxy lo valida y obtiene la key real desde su propio entorno protegido.\n\n```text\nOpenDesign        → token local\nProxy             → valida token local\nProveedor externo → recibe la key real\n```\n\nEsta separación limita el impacto de una exportación, un log accidental o una falla en el cliente. Para una instalación estable es la opción preferible.\n\n## Reglas mínimas para un proxy local\n\nUn puente de este tipo debería cumplir al menos con estas condiciones:\n\n1. escuchar únicamente en loopback salvo necesidad explícita;\n2. no registrar `Authorization`, bodies completos ni variables sensibles;\n3. mantener una sesión estable por conversación;\n4. declarar un `User-Agent` identificable;\n5. permitir sólo los modelos necesarios;\n6. usar timeouts y límites de tamaño;\n7. fallar de forma visible, sin cambiar silenciosamente de proveedor;\n8. conservar una prueba mínima de health y descubrimiento de modelos.\n\nAbrirlo en `0.0.0.0` transforma un puente local en un servicio accesible desde la red. Esa decisión exige autenticación, firewall y una revisión distinta.\n\n## Las cuotas siguen al proveedor efectivo\n\nLa regla para entender el gasto es seguir la request completa:\n\n```text\n¿Quién recibió finalmente la llamada autenticada?\n```\n\n- Codex CLI con sesión ChatGPT: cuota Codex.\n- Claude Code con sesión Pro/Max: cuota Claude.\n- API de OpenAI o Anthropic: facturación API.\n- Proxy hacia OpenCode Go: límites incluidos de Go.\n- Go con fallback a saldo habilitado: saldo Zen después del límite.\n- OpenDesign Cloud: créditos de OpenDesign.\n\nLa etiqueta del modelo en la interfaz puede confundir. Un modelo de OpenAI servido por OpenCode Go no consume el plan de ChatGPT; consume la asignación del proveedor que atendió la request.\n\n## Una arquitectura razonable para un entorno híbrido\n\nPara preservar sesiones existentes y separar consumos, una distribución posible es:\n\n| Camino | Uso |\n|---|---|\n| OpenDesign → Codex Windows | Trabajo descontado del plan de Codex |\n| OpenDesign → Claude Code Windows | Trabajo descontado del plan de Claude |\n| OpenDesign → proxy WSL → OpenCode Go | Modelos económicos bajo los límites de Go |\n| Orca → CLIs WSL | Desarrollo y coordinación existentes |\n\nLa duplicación de CLIs no es elegante, pero mantiene claras las fronteras. Mover todo el daemon a WSL reduce duplicación, aunque renuncia a parte de la comodidad de la aplicación nativa.\n\n## Veredicto\n\nLa integración local no depende sólo de que dos procesos vivan en la misma computadora. Depende de que compartan el entorno correcto.\n\nInstalar los CLIs en Windows es la ruta más simple para que OpenDesign Desktop consuma cuotas de los planes. Ejecutar el daemon en WSL es la ruta más coherente para reutilizar instalaciones existentes. Un proxy es la ruta más flexible cuando el proveedor ofrece una API y necesitamos controlar sesiones, credenciales o compatibilidad.\n\nNinguna opción gana siempre. La decisión correcta surge de elegir qué queremos preservar: comodidad de escritorio, sesiones existentes, control del tráfico o aislamiento de credenciales.\n\n---\n\n## Fuentes oficiales\n\n- [OpenDesign](https://open-design.ai/)\n- [Quickstart de OpenDesign](https://github.com/nexu-io/open-design/blob/main/QUICKSTART.md)\n- [Adaptadores de agentes](https://open-design.ai/agents/)\n- [OpenCode Go](https://opencode.ai/v2/docs/console/go)\n- [WSL2 setup](https://github.com/nexu-io/open-design/blob/main/docs/wsl-setup.md)\n- [Windows troubleshooting](https://github.com/nexu-io/open-design/blob/main/docs/windows-troubleshooting.md)\n"
    },
    {
      "slug": "hermes-agente-operativo",
      "title": "Hermes como agente operativo",
      "summary": "Un agente autoalojado que lleva consultas y alertas a los canales donde trabaja el equipo, sin convertir cada interacción en una sesión técnica.",
      "type": "concept",
      "order": 1,
      "tags": [
        "hermes",
        "agentes",
        "canales",
        "mcp",
        "automatizacion"
      ],
      "related": [
        "hermes-preset-instalacion",
        "caso-hermes-operaciones",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "Hermes",
      "glyph": "✦",
      "hue": "rgba(236,95,189,.24)",
      "file": "hermes-como-agente-operativo.md",
      "html": "<blockquote>\n<p>Referencia de producto revisada el 12 de octubre de 2026: <a href=\"https://hermes-agent.nousresearch.com/docs\" target=\"_blank\" rel=\"noopener noreferrer\">Hermes Agent de Nous Research</a>. Los circuitos y permisos de esta guía son decisiones de diseño, no garantías automáticas del producto.</p>\n</blockquote>\n<h2 id=\"la-idea-central\">La idea central</h2>\n<p>Hermes sirve cuando el valor del agente no está solamente en conversar con una persona técnica, sino en <strong>estar disponible dentro de un circuito operativo</strong>: recibir consultas desde un canal compartido, consultar sistemas conectados y emitir alertas antes de que alguien recuerde mirar un tablero.</p>\n<p>En este circuito complementa a Codex, Claude Code u OpenCode. Hermes también ofrece CLI y herramientas de desarrollo; acá interesa su gateway de mensajería, que acerca esas capacidades al equipo y a sus canales.</p>\n<h2 id=\"que-problema-resuelve\">Qué problema resuelve</h2>\n<p>Muchas capacidades internas terminan concentradas en quien tiene acceso al CRM, conoce una consulta o paga un asiento de una herramienta. Hermes permite envolver esas capacidades en una interfaz conversacional más accesible:</p>\n<ul>\n<li>consultas sobre datos operativos desde WhatsApp, Slack o Discord;</li>\n<li>avisos proactivos disparados por cron o eventos;</li>\n<li>separación entre canales del equipo y notificaciones administrativas;</li>\n<li>acceso a sistemas mediante integraciones MCP con alcance controlado;</li>\n<li>operación continua en infraestructura propia o gestionada.</li>\n</ul>\n<p>El salto importante es pasar de <strong>un asistente que responde cuando lo llaman</strong> a <strong>un agente que forma parte del sistema de trabajo</strong>.</p>\n<h2 id=\"donde-aporta-valor\">Dónde aporta valor</h2>\n<h3 id=\"acceso-distribuido\">Acceso distribuido</h3>\n<p>El equipo consulta desde un canal que ya usa, sin aprender una interfaz nueva ni abrir una sesión técnica. Esto no elimina el control de acceso: exige allowlists, identidades claras y capacidades diferentes según usuario o canal.</p>\n<h3 id=\"proactividad\">Proactividad</h3>\n<p>Un evento pasivo en una cola o un sistema de Signals se transforma en una alerta accionable. La automatización tiene que distinguir información operativa de avisos sensibles y elegir el canal correcto para cada una.</p>\n<h3 id=\"integracion\">Integración</h3>\n<p>Hermes puede usar herramientas conectadas para consultar CRM, bases, documentación o servicios. El valor no está en sumar todos los MCP posibles, sino en elegir el mínimo que permita resolver el caso y otorgar el menor privilegio necesario.</p>\n<h2 id=\"lo-que-no-resuelve-solo\">Lo que no resuelve solo</h2>\n<p>Instalar Hermes no define:</p>\n<ul>\n<li>dónde alojarlo;</li>\n<li>qué modelo usar;</li>\n<li>quién puede hablarle;</li>\n<li>qué herramientas puede ejecutar;</li>\n<li>cuántos subagentes lanzar;</li>\n<li>cómo manejar fallos y secretos.</li>\n</ul>\n<p>Esas decisiones forman parte del producto. Un agente accesible por más personas amplifica utilidad, pero también superficie de riesgo y consumo.</p>\n<h2 id=\"principio-de-diseno\">Principio de diseño</h2>\n<p><strong>El agente debe acercar capacidades al equipo sin acercar autoridad innecesaria.</strong></p>\n<p>Una consulta comercial puede necesitar lectura de CRM. No necesita editar registros, acceder a producción por SSH ni conocer credenciales. La experiencia se diseña desde ese límite y no desde todo lo que técnicamente podría conectarse.</p>\n",
      "headings": [
        {
          "label": "La idea central",
          "depth": 2,
          "id": "la-idea-central"
        },
        {
          "label": "Qué problema resuelve",
          "depth": 2,
          "id": "que-problema-resuelve"
        },
        {
          "label": "Dónde aporta valor",
          "depth": 2,
          "id": "donde-aporta-valor"
        },
        {
          "label": "Acceso distribuido",
          "depth": 3,
          "id": "acceso-distribuido"
        },
        {
          "label": "Proactividad",
          "depth": 3,
          "id": "proactividad"
        },
        {
          "label": "Integración",
          "depth": 3,
          "id": "integracion"
        },
        {
          "label": "Lo que no resuelve solo",
          "depth": 2,
          "id": "lo-que-no-resuelve-solo"
        },
        {
          "label": "Principio de diseño",
          "depth": 2,
          "id": "principio-de-diseno"
        }
      ],
      "raw": "---\nslug: hermes-agente-operativo\ntitle: Hermes como agente operativo\ntype: concept\norder: 1\nsummary: Un agente autoalojado que lleva consultas y alertas a los canales donde trabaja el equipo, sin convertir cada interacción en una sesión técnica.\ntags: [hermes, agentes, canales, mcp, automatizacion]\nrelated: [hermes-preset-instalacion, caso-hermes-operaciones, modelos-guiados-el-entorno-es-la-politica]\narea: Hermes\nglyph: ✦\nhue: rgba(236,95,189,.24)\n---\n\n# Hermes como agente operativo\n\n> Referencia de producto revisada el 12 de octubre de 2026: [Hermes Agent de Nous Research](https://hermes-agent.nousresearch.com/docs). Los circuitos y permisos de esta guía son decisiones de diseño, no garantías automáticas del producto.\n\n## La idea central\n\nHermes sirve cuando el valor del agente no está solamente en conversar con una persona técnica, sino en **estar disponible dentro de un circuito operativo**: recibir consultas desde un canal compartido, consultar sistemas conectados y emitir alertas antes de que alguien recuerde mirar un tablero.\n\nEn este circuito complementa a Codex, Claude Code u OpenCode. Hermes también ofrece CLI y herramientas de desarrollo; acá interesa su gateway de mensajería, que acerca esas capacidades al equipo y a sus canales.\n\n## Qué problema resuelve\n\nMuchas capacidades internas terminan concentradas en quien tiene acceso al CRM, conoce una consulta o paga un asiento de una herramienta. Hermes permite envolver esas capacidades en una interfaz conversacional más accesible:\n\n- consultas sobre datos operativos desde WhatsApp, Slack o Discord;\n- avisos proactivos disparados por cron o eventos;\n- separación entre canales del equipo y notificaciones administrativas;\n- acceso a sistemas mediante integraciones MCP con alcance controlado;\n- operación continua en infraestructura propia o gestionada.\n\nEl salto importante es pasar de **un asistente que responde cuando lo llaman** a **un agente que forma parte del sistema de trabajo**.\n\n## Dónde aporta valor\n\n### Acceso distribuido\n\nEl equipo consulta desde un canal que ya usa, sin aprender una interfaz nueva ni abrir una sesión técnica. Esto no elimina el control de acceso: exige allowlists, identidades claras y capacidades diferentes según usuario o canal.\n\n### Proactividad\n\nUn evento pasivo en una cola o un sistema de Signals se transforma en una alerta accionable. La automatización tiene que distinguir información operativa de avisos sensibles y elegir el canal correcto para cada una.\n\n### Integración\n\nHermes puede usar herramientas conectadas para consultar CRM, bases, documentación o servicios. El valor no está en sumar todos los MCP posibles, sino en elegir el mínimo que permita resolver el caso y otorgar el menor privilegio necesario.\n\n## Lo que no resuelve solo\n\nInstalar Hermes no define:\n\n- dónde alojarlo;\n- qué modelo usar;\n- quién puede hablarle;\n- qué herramientas puede ejecutar;\n- cuántos subagentes lanzar;\n- cómo manejar fallos y secretos.\n\nEsas decisiones forman parte del producto. Un agente accesible por más personas amplifica utilidad, pero también superficie de riesgo y consumo.\n\n## Principio de diseño\n\n**El agente debe acercar capacidades al equipo sin acercar autoridad innecesaria.**\n\nUna consulta comercial puede necesitar lectura de CRM. No necesita editar registros, acceder a producción por SSH ni conocer credenciales. La experiencia se diseña desde ese límite y no desde todo lo que técnicamente podría conectarse.\n"
    },
    {
      "slug": "hermes-preset-instalacion",
      "title": "Preset de instalación de Hermes",
      "summary": "Cinco decisiones previas para montar Hermes sin copiar una infraestructura ajena: hosting, modelo, canales, concurrencia e integraciones.",
      "type": "guide",
      "order": 2,
      "tags": [
        "hermes",
        "setup",
        "hosting",
        "modelos",
        "mcp"
      ],
      "related": [
        "hermes-agente-operativo",
        "caso-hermes-operaciones"
      ],
      "area": "Hermes",
      "glyph": "◇",
      "hue": "rgba(168,106,255,.24)",
      "file": "hermes-preset-instalacion.md",
      "html": "<blockquote>\n<p>Referencia de producto revisada el 12 de octubre de 2026: <a href=\"https://hermes-agent.nousresearch.com/docs\" target=\"_blank\" rel=\"noopener noreferrer\">Hermes Agent de Nous Research</a>. Los circuitos y permisos de esta guía son decisiones de diseño, no garantías automáticas del producto.</p>\n</blockquote>\n<h2 id=\"antes-del-instalador\">Antes del instalador</h2>\n<p>Levantar Hermes no empieza con un comando. Empieza con cinco decisiones que determinan costo, seguridad y utilidad. El preset no prescribe un proveedor: funciona como guía para diseñar la instancia según el contexto.</p>\n<h2 id=\"1-hosting\">1. Hosting</h2>\n<p>Opciones habituales:</p>\n<ul>\n<li>VPS propio nuevo o existente;</li>\n<li>servicio gestionado;</li>\n<li>infraestructura propia o un host compatible con el gateway.</li>\n</ul>\n<p>Separá el host del gateway del backend donde ejecuta herramientas: Hermes documenta backends como Docker, SSH, Daytona y Modal. Elegir un sandbox serverless no resuelve por sí solo la disponibilidad del gateway ni exige una GPU local para usar un modelo remoto.</p>\n<p>Preguntas útiles:</p>\n<ul>\n<li>¿Ya existe infraestructura con margen medido?</li>\n<li>¿Qué disponibilidad necesita el agente?</li>\n<li>¿Quién se hace cargo del uptime, backups y actualizaciones?</li>\n<li>¿La red debe alcanzar sistemas privados?</li>\n</ul>\n<p>Reutilizar un VPS reduce costo, pero comparte fallas y recursos con lo que ya vive allí. La capacidad se mide después del despliegue; no se adivina desde la ficha comercial.</p>\n<h2 id=\"2-proveedor-y-modelo\">2. Proveedor y modelo</h2>\n<p>Se puede usar una API directa, un agregador como OpenRouter o el proveedor ofrecido por el ecosistema de Hermes.</p>\n<p>Si no está claro qué modelo conviene, el método más sano es un benchmark pequeño con consultas reales. Puntuar precisión y costo sobre el mismo set evita elegir por reputación o por una demo amable.</p>\n<p>La key debería ser exclusiva para el proyecto. Aísla gasto, telemetría, revocación y radio de impacto.</p>\n<h2 id=\"3-canales\">3. Canales</h2>\n<p>Hermes puede conectarse a WhatsApp, Telegram, Discord, Slack, Teams, Signal, email y otros canales. La pregunta no es cuántos soporta, sino quién necesita acceso y qué información puede recibir.</p>\n<p>Separar canales por rol evita que una alerta administrativa termine en un espacio comercial. Un mismo agente puede conversar con el equipo y notificar al administrador, pero cada recorrido necesita su propia política.</p>\n<h2 id=\"4-concurrencia-y-recursos\">4. Concurrencia y recursos</h2>\n<p>Arrancar con un límite conservador de subagentes es una decisión operativa, no una pérdida de potencia. Se sube el paralelismo cuando existen métricas reales de CPU, RAM, latencia y costo.</p>\n<p>Si la infraestructura aloja otros servicios, el agente no puede tratar todos los recursos como propios.</p>\n<h2 id=\"5-integraciones\">5. Integraciones</h2>\n<p>Para cada MCP o herramienta conectada, declarar:</p>\n<ul>\n<li>qué caso resuelve;</li>\n<li>si necesita lectura o escritura;</li>\n<li>qué usuarios pueden activarlo;</li>\n<li>qué límites o colas absorben rate limits;</li>\n<li>qué evidencia deja cada operación.</li>\n</ul>\n<h2 id=\"checklist-minimo\">Checklist mínimo</h2>\n<ul>\n<li>[ ] Hosting y responsable operativo definidos.</li>\n<li>[ ] Proveedor y key exclusiva elegidos.</li>\n<li>[ ] Canales y roles separados.</li>\n<li>[ ] Concurrencia inicial acotada.</li>\n<li>[ ] Integraciones mínimas y permisos revisados.</li>\n<li>[ ] Secretos fuera de documentación y repositorio.</li>\n<li>[ ] Pruebas de consulta, alerta y separación de canales.</li>\n<li>[ ] Métricas para decidir el siguiente ajuste.</li>\n</ul>\n<h2 id=\"fuentes-oficiales\">Fuentes oficiales</h2>\n<ul>\n<li><a href=\"https://hermes-agent.nousresearch.com/docs/user-guide/messaging\" target=\"_blank\" rel=\"noopener noreferrer\">Messaging Gateway</a></li>\n<li><a href=\"https://hermes-agent.nousresearch.com/docs/user-guide/security\" target=\"_blank\" rel=\"noopener noreferrer\">Security</a></li>\n</ul>\n",
      "headings": [
        {
          "label": "Antes del instalador",
          "depth": 2,
          "id": "antes-del-instalador"
        },
        {
          "label": "1. Hosting",
          "depth": 2,
          "id": "1-hosting"
        },
        {
          "label": "2. Proveedor y modelo",
          "depth": 2,
          "id": "2-proveedor-y-modelo"
        },
        {
          "label": "3. Canales",
          "depth": 2,
          "id": "3-canales"
        },
        {
          "label": "4. Concurrencia y recursos",
          "depth": 2,
          "id": "4-concurrencia-y-recursos"
        },
        {
          "label": "5. Integraciones",
          "depth": 2,
          "id": "5-integraciones"
        },
        {
          "label": "Checklist mínimo",
          "depth": 2,
          "id": "checklist-minimo"
        },
        {
          "label": "Fuentes oficiales",
          "depth": 2,
          "id": "fuentes-oficiales"
        }
      ],
      "raw": "---\nslug: hermes-preset-instalacion\ntitle: Preset de instalación de Hermes\ntype: guide\norder: 2\nsummary: \"Cinco decisiones previas para montar Hermes sin copiar una infraestructura ajena: hosting, modelo, canales, concurrencia e integraciones.\"\ntags: [hermes, setup, hosting, modelos, mcp]\nrelated: [hermes-agente-operativo, caso-hermes-operaciones]\narea: Hermes\nglyph: ◇\nhue: rgba(168,106,255,.24)\n---\n\n# Preset de instalación de Hermes\n\n> Referencia de producto revisada el 12 de octubre de 2026: [Hermes Agent de Nous Research](https://hermes-agent.nousresearch.com/docs). Los circuitos y permisos de esta guía son decisiones de diseño, no garantías automáticas del producto.\n\n## Antes del instalador\n\nLevantar Hermes no empieza con un comando. Empieza con cinco decisiones que determinan costo, seguridad y utilidad. El preset no prescribe un proveedor: funciona como guía para diseñar la instancia según el contexto.\n\n## 1. Hosting\n\nOpciones habituales:\n\n- VPS propio nuevo o existente;\n- servicio gestionado;\n- infraestructura propia o un host compatible con el gateway.\n\nSepará el host del gateway del backend donde ejecuta herramientas: Hermes documenta backends como Docker, SSH, Daytona y Modal. Elegir un sandbox serverless no resuelve por sí solo la disponibilidad del gateway ni exige una GPU local para usar un modelo remoto.\n\nPreguntas útiles:\n\n- ¿Ya existe infraestructura con margen medido?\n- ¿Qué disponibilidad necesita el agente?\n- ¿Quién se hace cargo del uptime, backups y actualizaciones?\n- ¿La red debe alcanzar sistemas privados?\n\nReutilizar un VPS reduce costo, pero comparte fallas y recursos con lo que ya vive allí. La capacidad se mide después del despliegue; no se adivina desde la ficha comercial.\n\n## 2. Proveedor y modelo\n\nSe puede usar una API directa, un agregador como OpenRouter o el proveedor ofrecido por el ecosistema de Hermes.\n\nSi no está claro qué modelo conviene, el método más sano es un benchmark pequeño con consultas reales. Puntuar precisión y costo sobre el mismo set evita elegir por reputación o por una demo amable.\n\nLa key debería ser exclusiva para el proyecto. Aísla gasto, telemetría, revocación y radio de impacto.\n\n## 3. Canales\n\nHermes puede conectarse a WhatsApp, Telegram, Discord, Slack, Teams, Signal, email y otros canales. La pregunta no es cuántos soporta, sino quién necesita acceso y qué información puede recibir.\n\nSeparar canales por rol evita que una alerta administrativa termine en un espacio comercial. Un mismo agente puede conversar con el equipo y notificar al administrador, pero cada recorrido necesita su propia política.\n\n## 4. Concurrencia y recursos\n\nArrancar con un límite conservador de subagentes es una decisión operativa, no una pérdida de potencia. Se sube el paralelismo cuando existen métricas reales de CPU, RAM, latencia y costo.\n\nSi la infraestructura aloja otros servicios, el agente no puede tratar todos los recursos como propios.\n\n## 5. Integraciones\n\nPara cada MCP o herramienta conectada, declarar:\n\n- qué caso resuelve;\n- si necesita lectura o escritura;\n- qué usuarios pueden activarlo;\n- qué límites o colas absorben rate limits;\n- qué evidencia deja cada operación.\n\n## Checklist mínimo\n\n- [ ] Hosting y responsable operativo definidos.\n- [ ] Proveedor y key exclusiva elegidos.\n- [ ] Canales y roles separados.\n- [ ] Concurrencia inicial acotada.\n- [ ] Integraciones mínimas y permisos revisados.\n- [ ] Secretos fuera de documentación y repositorio.\n- [ ] Pruebas de consulta, alerta y separación de canales.\n- [ ] Métricas para decidir el siguiente ajuste.\n\n## Fuentes oficiales\n\n- [Messaging Gateway](https://hermes-agent.nousresearch.com/docs/user-guide/messaging)\n- [Security](https://hermes-agent.nousresearch.com/docs/user-guide/security)\n"
    },
    {
      "slug": "caso-hermes-operaciones",
      "title": "Caso real — Hermes como interfaz operativa",
      "summary": "Un agente autoalojado acercó consultas y alertas a canales cotidianos, con permisos acotados y pruebas de negocio observables.",
      "type": "case-study",
      "order": 3,
      "tags": [
        "hermes",
        "agentes",
        "canales",
        "operaciones",
        "caso-real"
      ],
      "related": [
        "hermes-agente-operativo",
        "hermes-preset-instalacion"
      ],
      "area": "Hermes",
      "glyph": "◈",
      "hue": "rgba(87,217,232,.22)",
      "file": "caso-hermes-operaciones.md",
      "html": "<h2 id=\"contexto-anonimizado\">Contexto anonimizado</h2>\n<p>Una empresa de servicios necesitaba acercar información operativa a un equipo no técnico y transformar eventos pasivos en avisos accionables. El objetivo no era sumar otro chat con IA, sino reducir la dependencia de una persona que supiera consultar cada sistema.</p>\n<p>Hermes se planteó como una capa conversacional conectada a herramientas internas, disponible desde canales que el equipo ya utilizaba.</p>\n<h2 id=\"decisiones-tomadas\">Decisiones tomadas</h2>\n<h3 id=\"reutilizar-infraestructura-con-un-limite-inicial\">Reutilizar infraestructura con un límite inicial</h3>\n<p>La primera versión se instaló en infraestructura existente. Para evitar que el nuevo servicio compitiera sin control con otras cargas, se definió una concurrencia conservadora y se postergó cualquier ampliación hasta contar con métricas reales.</p>\n<h3 id=\"aislar-proveedor-y-consumo\">Aislar proveedor y consumo</h3>\n<p>El acceso al proveedor de modelos se creó exclusivamente para el proyecto. Esto permitió comparar alternativas, observar gasto y revocar la integración sin afectar otros agentes.</p>\n<p>La elección del modelo se hizo con un conjunto fijo de consultas representativas, puntuando precisión y costo. La comparación se apoyó en tareas reales y no en una impresión general.</p>\n<h3 id=\"separar-audiencias\">Separar audiencias</h3>\n<p>Las consultas del equipo y las alertas administrativas se trataron como recorridos diferentes. Cada canal recibió sólo la información correspondiente a su rol.</p>\n<h3 id=\"mantener-secretos-fuera-del-contexto\">Mantener secretos fuera del contexto</h3>\n<p>Las credenciales permanecieron en el entorno de ejecución. No se copiaron a documentación, prompts ni archivos de contexto compartidos con el agente.</p>\n<h2 id=\"mvp-verificable\">MVP verificable</h2>\n<p>La primera versión se consideró válida cuando pudo demostrar tres comportamientos:</p>\n<ol>\n<li>Un usuario autorizado formulaba una consulta operativa y recibía una respuesta consistente con el sistema fuente.</li>\n<li>Un evento controlado producía una alerta dentro del intervalo esperado.</li>\n<li>Una notificación restringida llegaba al canal administrativo, pero no al canal general.</li>\n</ol>\n<p>Cada hito describe una evidencia observable. “El agente está instalado” no cuenta como resultado.</p>\n<h2 id=\"que-aprendimos\">Qué aprendimos</h2>\n<ul>\n<li>Reutilizar infraestructura funciona cuando la capacidad empieza acotada y se mide.</li>\n<li>Una credencial por proyecto simplifica costo, auditoría y revocación.</li>\n<li>El valor aparece en el recorrido completo: canal → agente → herramienta → respuesta.</li>\n<li>Separar audiencias es tan importante como conectar canales.</li>\n<li>Un MVP operativo necesita pruebas de negocio, no solamente checks técnicos.</li>\n</ul>\n<h2 id=\"beneficio-obtenido\">Beneficio obtenido</h2>\n<p>El equipo ganó una vía directa para consultar información y recibir avisos sin depender de una interfaz especializada. La organización, a la vez, conservó el control mediante permisos mínimos, identidades autorizadas y separación de canales.</p>\n<blockquote>\n<p>Caso basado en una implementación real. Se removieron nombres, infraestructura, métricas y circuitos internos.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "Contexto anonimizado",
          "depth": 2,
          "id": "contexto-anonimizado"
        },
        {
          "label": "Decisiones tomadas",
          "depth": 2,
          "id": "decisiones-tomadas"
        },
        {
          "label": "Reutilizar infraestructura con un límite inicial",
          "depth": 3,
          "id": "reutilizar-infraestructura-con-un-limite-inicial"
        },
        {
          "label": "Aislar proveedor y consumo",
          "depth": 3,
          "id": "aislar-proveedor-y-consumo"
        },
        {
          "label": "Separar audiencias",
          "depth": 3,
          "id": "separar-audiencias"
        },
        {
          "label": "Mantener secretos fuera del contexto",
          "depth": 3,
          "id": "mantener-secretos-fuera-del-contexto"
        },
        {
          "label": "MVP verificable",
          "depth": 2,
          "id": "mvp-verificable"
        },
        {
          "label": "Qué aprendimos",
          "depth": 2,
          "id": "que-aprendimos"
        },
        {
          "label": "Beneficio obtenido",
          "depth": 2,
          "id": "beneficio-obtenido"
        }
      ],
      "raw": "---\nslug: caso-hermes-operaciones\ntitle: Caso real — Hermes como interfaz operativa\ntype: case-study\norder: 3\nsummary: Un agente autoalojado acercó consultas y alertas a canales cotidianos, con permisos acotados y pruebas de negocio observables.\ntags: [hermes, agentes, canales, operaciones, caso-real]\nrelated: [hermes-agente-operativo, hermes-preset-instalacion]\narea: Hermes\nglyph: ◈\nhue: rgba(87,217,232,.22)\n---\n\n# Caso real — Hermes como interfaz operativa\n\n## Contexto anonimizado\n\nUna empresa de servicios necesitaba acercar información operativa a un equipo no técnico y transformar eventos pasivos en avisos accionables. El objetivo no era sumar otro chat con IA, sino reducir la dependencia de una persona que supiera consultar cada sistema.\n\nHermes se planteó como una capa conversacional conectada a herramientas internas, disponible desde canales que el equipo ya utilizaba.\n\n## Decisiones tomadas\n\n### Reutilizar infraestructura con un límite inicial\n\nLa primera versión se instaló en infraestructura existente. Para evitar que el nuevo servicio compitiera sin control con otras cargas, se definió una concurrencia conservadora y se postergó cualquier ampliación hasta contar con métricas reales.\n\n### Aislar proveedor y consumo\n\nEl acceso al proveedor de modelos se creó exclusivamente para el proyecto. Esto permitió comparar alternativas, observar gasto y revocar la integración sin afectar otros agentes.\n\nLa elección del modelo se hizo con un conjunto fijo de consultas representativas, puntuando precisión y costo. La comparación se apoyó en tareas reales y no en una impresión general.\n\n### Separar audiencias\n\nLas consultas del equipo y las alertas administrativas se trataron como recorridos diferentes. Cada canal recibió sólo la información correspondiente a su rol.\n\n### Mantener secretos fuera del contexto\n\nLas credenciales permanecieron en el entorno de ejecución. No se copiaron a documentación, prompts ni archivos de contexto compartidos con el agente.\n\n## MVP verificable\n\nLa primera versión se consideró válida cuando pudo demostrar tres comportamientos:\n\n1. Un usuario autorizado formulaba una consulta operativa y recibía una respuesta consistente con el sistema fuente.\n2. Un evento controlado producía una alerta dentro del intervalo esperado.\n3. Una notificación restringida llegaba al canal administrativo, pero no al canal general.\n\nCada hito describe una evidencia observable. “El agente está instalado” no cuenta como resultado.\n\n## Qué aprendimos\n\n- Reutilizar infraestructura funciona cuando la capacidad empieza acotada y se mide.\n- Una credencial por proyecto simplifica costo, auditoría y revocación.\n- El valor aparece en el recorrido completo: canal → agente → herramienta → respuesta.\n- Separar audiencias es tan importante como conectar canales.\n- Un MVP operativo necesita pruebas de negocio, no solamente checks técnicos.\n\n## Beneficio obtenido\n\nEl equipo ganó una vía directa para consultar información y recibir avisos sin depender de una interfaz especializada. La organización, a la vez, conservó el control mediante permisos mínimos, identidades autorizadas y separación de canales.\n\n> Caso basado en una implementación real. Se removieron nombres, infraestructura, métricas y circuitos internos.\n"
    },
    {
      "slug": "backup-versionado-crm",
      "title": "Del backup a una plataforma de funciones CRM",
      "summary": "El backup read-only se convirtió en la base de una plataforma interna para analizar, revisar y desplegar funciones CRM con autoridades separadas.",
      "type": "concept",
      "order": 1,
      "tags": [
        "zoho-crm",
        "backup",
        "git",
        "deluge",
        "auditoria",
        "despliegue"
      ],
      "related": [
        "arquitectura-read-only",
        "mapa-procesos-verificacion",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "CRM versionado",
      "glyph": "▣",
      "hue": "rgba(237,195,94,.25)",
      "file": "backup-versionado-crm.md",
      "html": "<blockquote>\n<p>Actualizado el 12 de octubre de 2026 con la evolución interna conocida como V2, documentada en el proyecto como etapa de despliegue multiusuario. Las capacidades implementadas y las pruebas pendientes se distinguen abajo.</p>\n</blockquote>\n<h2 id=\"el-problema\">El problema</h2>\n<p>El código Deluge de las automatizaciones vive dentro de Zoho CRM. La interfaz actual ya ofrece una pestaña Revisions con las últimas 30 versiones; para Deluge, cada guardado crea una revisión. Ese historial acotado no reemplaza un repositorio externo con diffs, análisis y una política propia de conservación. <a href=\"https://www.zoho.com/crm/developer/docs/functions/management.html\" target=\"_blank\" rel=\"noopener noreferrer\">Gestión de funciones</a>.</p>\n<p>El punto de partida fue descargar código y metadata de todas las funciones, generar un árbol determinista y crear un commit sólo cuando algo cambiaba realmente. Esa capa sigue siendo de lectura.</p>\n<p>La evolución agregó un recorrido para preparar cambios, revisarlos y publicarlos con una autoridad distinta. El repositorio pasó a funcionar como una pequeña plataforma interna de gestión de funciones: CLI, contratos, controles de Git y una vía explícita de despliegue. La CLI y la revisión en GitHub organizan quién puede proponer, quién puede publicar y qué evidencia exige cada transición.</p>\n<h2 id=\"cuatro-resultados-en-una-sola-corrida\">Cuatro resultados en una sola corrida</h2>\n<ol>\n<li><strong>Backup:</strong> código fuente completo fuera del CRM.</li>\n<li><strong>Historial:</strong> <code>git log</code>, diffs y blame sobre funciones antes opacas.</li>\n<li><strong>Auditoría:</strong> reportes regenerados que muestran superficie REST, funciones de prueba, higiene y secretos literales.</li>\n<li><strong>Mapa:</strong> agrupación por circuitos de negocio para poder analizar una rama sin recorrer manualmente todo el árbol.</li>\n</ol>\n<h2 id=\"la-capa-de-observacion\">La capa de observación</h2>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>Scheduler diario</span></span>\n<span class=\"line\"><span>  → sync Node.js</span></span>\n<span class=\"line\"><span>  → API de Zoho CRM en modo lectura</span></span>\n<span class=\"line\"><span>  → árbol generado y normalizado</span></span>\n<span class=\"line\"><span>  → commit sólo ante cambio</span></span>\n<span class=\"line\"><span>  → repositorio Git privado</span></span>\n<span class=\"line\"><span>  → webhook de resultado</span></span>\n<span class=\"line\"><span>  → alerta únicamente ante problema</span></span></code></pre>\n<p>La credencial de sincronización sólo posee <code>ZohoCRM.settings.functions.READ</code>. La restricción vive debajo del código: aunque el proceso intentara actualizar una función, no tendría autoridad para hacerlo.</p>\n<h2 id=\"que-volvio-visible\">Qué volvió visible</h2>\n<p>El snapshot convirtió intuiciones en inventario. La primera auditoría encontró una superficie relevante de funciones expuestas por REST, automatizaciones de prueba todavía activas, funciones sin documentación y credenciales literales dentro del código.</p>\n<p>Las cifras concretas no son necesarias para reutilizar el método. El aprendizaje importante es que esos riesgos no eran observables desde una revisión casual de la interfaz: aparecieron al descargar, normalizar y clasificar el árbol completo.</p>\n<p>El snapshot del caso no verificaba todas las asociaciones, por lo que el reporte sólo podía marcar candidatas, no afirmar que una función estuviera en desuso. La interfaz actual de Zoho sí documenta asociaciones, referencias y dependencias en Glance. Consultarlas agrega evidencia; no demuestra que el cliente de backup las descargue ni descarta invocaciones externas. <a href=\"https://www.zoho.com/crm/developer/docs/functions/management.html\" target=\"_blank\" rel=\"noopener noreferrer\">Gestión de funciones</a>.</p>\n<h2 id=\"la-regla-de-valor\">La regla de valor</h2>\n<p>Un backup que cambia todos los días sin cambios reales es ruido. Para que Git cuente una historia útil:</p>\n<ul>\n<li>el JSON ordena sus claves;</li>\n<li>los archivos normalizan saltos de línea;</li>\n<li>los reportes no incluyen timestamps de generación;</li>\n<li>el prune sólo corre si todas las descargas finalizaron;</li>\n<li>la categoría forma parte de la ruta porque <code>api_name</code> no es único.</li>\n</ul>\n<h2 id=\"del-inventario-al-cambio-revisable\">Del inventario al cambio revisable</h2>\n<p>La CLI implementa creación o actualización de una función Deluge por vez. Para modificar una existente, el recorrido multiusuario parte de una base obtenida de producción. El cambio se prepara fuera del árbol generado, se versiona como propuesta y pasa por revisión antes de que un responsable habilitado lo despliegue.</p>\n<pre class=\"shiki golden-path\" style=\"background-color:#0b0a18;color:#c9f5f4\" tabindex=\"0\"><code class=\"language-text\"><span class=\"line\"><span>Producción → base del cambio → propuesta en cambios/</span></span>\n<span class=\"line\"><span>  → pull request → revisión del responsable → merge</span></span>\n<span class=\"line\"><span>  → controles previos → despliegue explícito</span></span>\n<span class=\"line\"><span>  → nueva descarga y comparación</span></span></code></pre>\n<p>La separación evita dos errores distintos: editar un backup como si fuera código listo para publicar y entregar permisos productivos a toda persona que necesita analizarlo. Un colaborador puede preparar una propuesta con acceso de lectura; la publicación pertenece a otro rol.</p>\n<p>El recorrido normal documentado exige comprobar la identidad de la función, la procedencia del archivo y que producción no haya cambiado desde la base de la propuesta. La descarga posterior permite comparar lo recibido por el CRM con lo enviado, con una comparación exacta o normalizada. No es una prueba de equivalencia semántica. Existen opciones heredadas para trabajar fuera del recorrido normal, por lo que esas garantías dependen de usarlo con su base y controles completos. Cada barrera tiene un costo: mantener metadata, resolver conflictos y rechazar cambios que antes se habrían pegado directamente en la interfaz. Ese costo compra una revisión reproducible.</p>\n<h2 id=\"que-esta-demostrado-y-que-queda-abierto\">Qué está demostrado y qué queda abierto</h2>\n<p>La documentación interna revisada describe la implementación de esta vía y registra pruebas de sus controles con la escritura deshabilitada. También deja pendiente el primer despliegue real desde el directorio de cambios y la incorporación de colaboradores. Por eso corresponde hablar de una capacidad implementada con validación operativa todavía incompleta, no de un circuito productivo ya probado de punta a punta.</p>\n<p>La escritura no es una transacción atómica con rollback automático: si la comparación posterior falla, la herramienta informa el problema y exige inspección. La lectura posterior comprueba contenido; no prueba por sí sola el comportamiento del circuito de negocio, sus asociaciones ni los efectos externos de una función. Esos resultados requieren pruebas específicas y observación después del cambio.</p>\n<h2 id=\"cuando-conviene-este-diseno\">Cuándo conviene este diseño</h2>\n<p>Tiene sentido cuando varias personas o agentes necesitan analizar y proponer cambios sobre automatizaciones sensibles, mientras la autoridad productiva debe quedar acotada. Un equipo pequeño con cambios excepcionales puede empezar por el backup y la revisión manual: sumar un camino de despliegue antes de definir responsables y verificaciones sólo agrega otra forma de equivocarse.</p>\n<p>La condición para avanzar es poder sostener ambas mitades: una fotografía confiable de producción y una publicación explícita que no herede los permisos del análisis. La <a href=\"/entrada/arquitectura-read-only\">arquitectura read-only</a> explica esa separación; el <a href=\"/entrada/mapa-procesos-verificacion\">mapa de procesos</a> muestra cómo convertir un hallazgo en trabajo verificable.</p>\n<h2 id=\"beneficio-obtenido\">Beneficio obtenido</h2>\n<p>El backup ya había permitido revisar cambios, auditar riesgos y analizar el estado sin repartir credenciales productivas. La nueva etapa usa esa base para ordenar el trayecto entre un hallazgo y su publicación. El beneficio observado de la lectura se conserva; el cierre completo del despliegue queda sujeto a las pruebas pendientes.</p>\n",
      "headings": [
        {
          "label": "El problema",
          "depth": 2,
          "id": "el-problema"
        },
        {
          "label": "Cuatro resultados en una sola corrida",
          "depth": 2,
          "id": "cuatro-resultados-en-una-sola-corrida"
        },
        {
          "label": "La capa de observación",
          "depth": 2,
          "id": "la-capa-de-observacion"
        },
        {
          "label": "Qué volvió visible",
          "depth": 2,
          "id": "que-volvio-visible"
        },
        {
          "label": "La regla de valor",
          "depth": 2,
          "id": "la-regla-de-valor"
        },
        {
          "label": "Del inventario al cambio revisable",
          "depth": 2,
          "id": "del-inventario-al-cambio-revisable"
        },
        {
          "label": "Qué está demostrado y qué queda abierto",
          "depth": 2,
          "id": "que-esta-demostrado-y-que-queda-abierto"
        },
        {
          "label": "Cuándo conviene este diseño",
          "depth": 2,
          "id": "cuando-conviene-este-diseno"
        },
        {
          "label": "Beneficio obtenido",
          "depth": 2,
          "id": "beneficio-obtenido"
        }
      ],
      "raw": "---\nslug: backup-versionado-crm\ntitle: Del backup a una plataforma de funciones CRM\ntype: concept\norder: 1\nsummary: El backup read-only se convirtió en la base de una plataforma interna para analizar, revisar y desplegar funciones CRM con autoridades separadas.\ntags: [zoho-crm, backup, git, deluge, auditoria, despliegue]\nrelated: [arquitectura-read-only, mapa-procesos-verificacion, modelos-guiados-el-entorno-es-la-politica]\narea: CRM versionado\nglyph: ▣\nhue: rgba(237,195,94,.25)\n---\n\n# Del backup a una plataforma de funciones CRM\n\n> Actualizado el 12 de octubre de 2026 con la evolución interna conocida como V2, documentada en el proyecto como etapa de despliegue multiusuario. Las capacidades implementadas y las pruebas pendientes se distinguen abajo.\n\n## El problema\n\nEl código Deluge de las automatizaciones vive dentro de Zoho CRM. La interfaz actual ya ofrece una pestaña Revisions con las últimas 30 versiones; para Deluge, cada guardado crea una revisión. Ese historial acotado no reemplaza un repositorio externo con diffs, análisis y una política propia de conservación. [Gestión de funciones](https://www.zoho.com/crm/developer/docs/functions/management.html).\n\nEl punto de partida fue descargar código y metadata de todas las funciones, generar un árbol determinista y crear un commit sólo cuando algo cambiaba realmente. Esa capa sigue siendo de lectura.\n\nLa evolución agregó un recorrido para preparar cambios, revisarlos y publicarlos con una autoridad distinta. El repositorio pasó a funcionar como una pequeña plataforma interna de gestión de funciones: CLI, contratos, controles de Git y una vía explícita de despliegue. La CLI y la revisión en GitHub organizan quién puede proponer, quién puede publicar y qué evidencia exige cada transición.\n\n## Cuatro resultados en una sola corrida\n\n1. **Backup:** código fuente completo fuera del CRM.\n2. **Historial:** `git log`, diffs y blame sobre funciones antes opacas.\n3. **Auditoría:** reportes regenerados que muestran superficie REST, funciones de prueba, higiene y secretos literales.\n4. **Mapa:** agrupación por circuitos de negocio para poder analizar una rama sin recorrer manualmente todo el árbol.\n\n## La capa de observación\n\n```text\nScheduler diario\n  → sync Node.js\n  → API de Zoho CRM en modo lectura\n  → árbol generado y normalizado\n  → commit sólo ante cambio\n  → repositorio Git privado\n  → webhook de resultado\n  → alerta únicamente ante problema\n```\n\nLa credencial de sincronización sólo posee `ZohoCRM.settings.functions.READ`. La restricción vive debajo del código: aunque el proceso intentara actualizar una función, no tendría autoridad para hacerlo.\n\n## Qué volvió visible\n\nEl snapshot convirtió intuiciones en inventario. La primera auditoría encontró una superficie relevante de funciones expuestas por REST, automatizaciones de prueba todavía activas, funciones sin documentación y credenciales literales dentro del código.\n\nLas cifras concretas no son necesarias para reutilizar el método. El aprendizaje importante es que esos riesgos no eran observables desde una revisión casual de la interfaz: aparecieron al descargar, normalizar y clasificar el árbol completo.\n\nEl snapshot del caso no verificaba todas las asociaciones, por lo que el reporte sólo podía marcar candidatas, no afirmar que una función estuviera en desuso. La interfaz actual de Zoho sí documenta asociaciones, referencias y dependencias en Glance. Consultarlas agrega evidencia; no demuestra que el cliente de backup las descargue ni descarta invocaciones externas. [Gestión de funciones](https://www.zoho.com/crm/developer/docs/functions/management.html).\n\n## La regla de valor\n\nUn backup que cambia todos los días sin cambios reales es ruido. Para que Git cuente una historia útil:\n\n- el JSON ordena sus claves;\n- los archivos normalizan saltos de línea;\n- los reportes no incluyen timestamps de generación;\n- el prune sólo corre si todas las descargas finalizaron;\n- la categoría forma parte de la ruta porque `api_name` no es único.\n\n## Del inventario al cambio revisable\n\nLa CLI implementa creación o actualización de una función Deluge por vez. Para modificar una existente, el recorrido multiusuario parte de una base obtenida de producción. El cambio se prepara fuera del árbol generado, se versiona como propuesta y pasa por revisión antes de que un responsable habilitado lo despliegue.\n\n```text\nProducción → base del cambio → propuesta en cambios/\n  → pull request → revisión del responsable → merge\n  → controles previos → despliegue explícito\n  → nueva descarga y comparación\n```\n\nLa separación evita dos errores distintos: editar un backup como si fuera código listo para publicar y entregar permisos productivos a toda persona que necesita analizarlo. Un colaborador puede preparar una propuesta con acceso de lectura; la publicación pertenece a otro rol.\n\nEl recorrido normal documentado exige comprobar la identidad de la función, la procedencia del archivo y que producción no haya cambiado desde la base de la propuesta. La descarga posterior permite comparar lo recibido por el CRM con lo enviado, con una comparación exacta o normalizada. No es una prueba de equivalencia semántica. Existen opciones heredadas para trabajar fuera del recorrido normal, por lo que esas garantías dependen de usarlo con su base y controles completos. Cada barrera tiene un costo: mantener metadata, resolver conflictos y rechazar cambios que antes se habrían pegado directamente en la interfaz. Ese costo compra una revisión reproducible.\n\n## Qué está demostrado y qué queda abierto\n\nLa documentación interna revisada describe la implementación de esta vía y registra pruebas de sus controles con la escritura deshabilitada. También deja pendiente el primer despliegue real desde el directorio de cambios y la incorporación de colaboradores. Por eso corresponde hablar de una capacidad implementada con validación operativa todavía incompleta, no de un circuito productivo ya probado de punta a punta.\n\nLa escritura no es una transacción atómica con rollback automático: si la comparación posterior falla, la herramienta informa el problema y exige inspección. La lectura posterior comprueba contenido; no prueba por sí sola el comportamiento del circuito de negocio, sus asociaciones ni los efectos externos de una función. Esos resultados requieren pruebas específicas y observación después del cambio.\n\n## Cuándo conviene este diseño\n\nTiene sentido cuando varias personas o agentes necesitan analizar y proponer cambios sobre automatizaciones sensibles, mientras la autoridad productiva debe quedar acotada. Un equipo pequeño con cambios excepcionales puede empezar por el backup y la revisión manual: sumar un camino de despliegue antes de definir responsables y verificaciones sólo agrega otra forma de equivocarse.\n\nLa condición para avanzar es poder sostener ambas mitades: una fotografía confiable de producción y una publicación explícita que no herede los permisos del análisis. La [arquitectura read-only](/entrada/arquitectura-read-only) explica esa separación; el [mapa de procesos](/entrada/mapa-procesos-verificacion) muestra cómo convertir un hallazgo en trabajo verificable.\n\n## Beneficio obtenido\n\nEl backup ya había permitido revisar cambios, auditar riesgos y analizar el estado sin repartir credenciales productivas. La nueva etapa usa esa base para ordenar el trayecto entre un hallazgo y su publicación. El beneficio observado de la lectura se conserva; el cierre completo del despliegue queda sujeto a las pruebas pendientes.\n"
    },
    {
      "slug": "arquitectura-read-only",
      "title": "Read-only como decisión arquitectónica",
      "summary": "Mantener el backup y el análisis sin autoridad productiva mientras una vía separada permite desplegar cambios revisados y verificables.",
      "type": "guide",
      "order": 2,
      "tags": [
        "read-only",
        "permisos",
        "zoho",
        "seguridad",
        "snapshots"
      ],
      "related": [
        "backup-versionado-crm",
        "mapa-procesos-verificacion",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "CRM versionado",
      "glyph": "⌁",
      "hue": "rgba(87,217,232,.22)",
      "file": "arquitectura-read-only.md",
      "html": "<blockquote>\n<p>Actualizado el 12 de octubre de 2026. La etapa inicial era enteramente read-only; la evolución multiusuario conserva esa frontera para observación y agrega una vía de escritura controlada.</p>\n</blockquote>\n<h2 id=\"por-que-no-alcanza-con-prometer-que-no-vamos-a-escribir\">Por qué no alcanza con prometer que no vamos a escribir</h2>\n<p>En las funciones Deluge de Zoho CRM, crear o actualizar mediante la API publica el cambio inmediatamente. La API V8 distingue este comportamiento de Java, Node.js y Python, que sí admiten borradores y publicación separada. Un <code>PUT</code> sobre Deluge en producción puede afectar código activo: no hay que generalizar la protección de borradores de otros runtimes. <a href=\"https://www.zoho.com/crm/developer/docs/api/v8/whats-new.html\" target=\"_blank\" rel=\"noopener noreferrer\">Funciones en V8</a>.</p>\n<p>Por eso la lectura no se planteó como una convención del script, sino como una propiedad del sistema. La evolución del proyecto cambia el alcance de esa frase: describe la sincronización y el análisis, mientras el despliegue tiene credenciales, comandos y condiciones propios.</p>\n<h2 id=\"las-barreras\">Las barreras</h2>\n<h3 id=\"scope-minimo\">Scope mínimo</h3>\n<p>El token de lectura usa solamente <code>ZohoCRM.settings.functions.READ</code>. No posee Create, Update, Publish ni Delete. La credencial rechaza una mutación aunque el código la intente.</p>\n<h3 id=\"lectura-y-escritura-separadas\">Lectura y escritura separadas</h3>\n<p>El cliente original sólo implementaba lectura. La etapa de despliegue incorpora operaciones mutativas en una vía explícita y deshabilitada por defecto. Ya no sería correcto describir todo el proyecto como exclusivamente <code>GET</code>: lo que debe conservarse es que la tarea de observación carezca de autoridad para publicar.</p>\n<h3 id=\"arbol-generado\">Árbol generado</h3>\n<p><code>functions/</code> representa una fotografía del CRM y no se edita a mano. Las propuestas viven en <code>cambios/</code>, con su base y metadata para revisión. La separación hace visible qué fue observado y qué se quiere cambiar; una sincronización posterior vuelve a reflejar el estado productivo.</p>\n<h3 id=\"git-como-revision-y-procedencia\">Git como revisión y procedencia</h3>\n<p>El repositorio conserva snapshots y ahora también organiza propuestas mediante pull requests y responsables de revisión. Merge y despliegue son pasos distintos: tener un cambio en Git no equivale a haberlo publicado ni a haber verificado su resultado.</p>\n<h2 id=\"la-autoridad-para-desplegar-no-se-hereda\">La autoridad para desplegar no se hereda</h2>\n<p>El colaborador trabaja con permisos de lectura. El responsable del despliegue necesita una credencial autorizada por los scopes y el perfil de CRM, además de habilitar expresamente la escritura y pasar controles adicionales. El flag de la CLI evita accidentes; no es por sí solo una frontera de permisos. Una persona autorizada a editar desde la interfaz de CRM todavía puede hacerlo por fuera de esta convención. En el recorrido normal documentado para cambios revisados:</p>\n<ul>\n<li>la función debe resolverse sin ambigüedad; un <code>api_name</code> que colisiona no autoriza elegir cualquier destino;</li>\n<li>el archivo a publicar debe estar versionado, sin cambios locales y en <code>main</code> alineado con <code>origin/main</code>;</li>\n<li>una comparación por hash del código normalizado detecta cambios productivos respecto de la base usada para preparar la propuesta;</li>\n<li>después de publicar se descarga el código y se compara con el enviado, de forma exacta o normalizada.</li>\n</ul>\n<p>La CLI también conserva una opción explícita para archivos fuera de <code>main</code>; si falta la cabecera de base, esa ruta puede continuar con una advertencia y sin protección contra deriva. Por eso no alcanza con que el repositorio contenga los controles: el equipo debe exigir el recorrido revisado y tratar las excepciones como decisiones de mayor riesgo.</p>\n<p>Si producción cambió en el medio dentro del recorrido protegido, la propuesta debe volver a revisarse sobre una base vigente. La comparación permite detectar parte de la deriva de código antes de escribir; no constituye un bloqueo atómico frente a cambios concurrentes ni garantiza que datos, conexiones o asociaciones sigan iguales.</p>\n<p>La comparación normalizada elimina espacios y paréntesis: puede considerar iguales textos distintos y no es una prueba semántica. Si la verificación posterior falla, se informa el error; no hay rollback automático. La operación puede haber publicado ya, y un fallo de notificación tampoco la deshace.</p>\n<p>Estos controles complementan la revisión humana. Tampoco convierten Deluge en un runtime con borradores: el riesgo de publicación inmediata sigue siendo relevante. La documentación registra pruebas sin escritura y deja pendiente el primer despliegue real de esta vía; no hay que presentar el guardrail probado como una prueba completa del despliegue.</p>\n<h2 id=\"decisiones-que-evitan-backups-falsos\">Decisiones que evitan backups falsos</h2>\n<ul>\n<li>La ruta incluye categoría y <code>api_name</code>; el nombre solo puede colisionar.</li>\n<li>La corrida aborta ante una colisión en vez de sobrescribir en silencio.</li>\n<li>El prune se desactiva si hubo una descarga fallida.</li>\n<li>Sin snapshot previo legible, el fallback es una descarga completa.</li>\n<li>Si el conteo esperado no coincide con la paginación, no se guarda una foto parcial.</li>\n</ul>\n<h2 id=\"el-caso-incomodo-de-los-secretos\">El caso incómodo de los secretos</h2>\n<p>El código fuente puede contener credenciales literales. Antes del primer push hay que escanear el árbol y decidir cada hallazgo:</p>\n<ol>\n<li>rotar y retirar la credencial;</li>\n<li>versionar en repositorio privado si el riesgo fue aceptado;</li>\n<li>excluir temporalmente el archivo y documentar que queda sin backup.</li>\n</ol>\n<p>Una credencial de proveedor cloud puede ser detectada y revocada automáticamente al subirla. Excluir evita esa rotura, pero crea una deuda explícita: la función deja de tener historia.</p>\n<h2 id=\"operacion-silenciosa-vigilancia-activa\">Operación silenciosa, vigilancia activa</h2>\n<p>Una corrida normal sin cambios no crea commit ni manda una notificación. El silencio es saludable sólo si existe un control separado que detecta cuando la señal deja de llegar.</p>\n<p>El dead-man's switch vive fuera del scheduler y distingue la última ejecución del último éxito. Debe alertar si cualquiera de esas señales envejece: una sucesión de errores no puede mantener fresca la señal de salud. Si compartiera proceso con el sync, morirían juntos y el silencio sería ambiguo.</p>\n<h2 id=\"principio-reusable\">Principio reusable</h2>\n<p><strong>La autoridad debe seguir a la tarea: observar con permisos de lectura, proponer en un espacio separado y publicar sólo desde una vía explícita, revisada y verificable.</strong></p>\n",
      "headings": [
        {
          "label": "Por qué no alcanza con prometer que no vamos a escribir",
          "depth": 2,
          "id": "por-que-no-alcanza-con-prometer-que-no-vamos-a-escribir"
        },
        {
          "label": "Las barreras",
          "depth": 2,
          "id": "las-barreras"
        },
        {
          "label": "Scope mínimo",
          "depth": 3,
          "id": "scope-minimo"
        },
        {
          "label": "Lectura y escritura separadas",
          "depth": 3,
          "id": "lectura-y-escritura-separadas"
        },
        {
          "label": "Árbol generado",
          "depth": 3,
          "id": "arbol-generado"
        },
        {
          "label": "Git como revisión y procedencia",
          "depth": 3,
          "id": "git-como-revision-y-procedencia"
        },
        {
          "label": "La autoridad para desplegar no se hereda",
          "depth": 2,
          "id": "la-autoridad-para-desplegar-no-se-hereda"
        },
        {
          "label": "Decisiones que evitan backups falsos",
          "depth": 2,
          "id": "decisiones-que-evitan-backups-falsos"
        },
        {
          "label": "El caso incómodo de los secretos",
          "depth": 2,
          "id": "el-caso-incomodo-de-los-secretos"
        },
        {
          "label": "Operación silenciosa, vigilancia activa",
          "depth": 2,
          "id": "operacion-silenciosa-vigilancia-activa"
        },
        {
          "label": "Principio reusable",
          "depth": 2,
          "id": "principio-reusable"
        }
      ],
      "raw": "---\nslug: arquitectura-read-only\ntitle: Read-only como decisión arquitectónica\ntype: guide\norder: 2\nsummary: Mantener el backup y el análisis sin autoridad productiva mientras una vía separada permite desplegar cambios revisados y verificables.\ntags: [read-only, permisos, zoho, seguridad, snapshots]\nrelated: [backup-versionado-crm, mapa-procesos-verificacion, modelos-guiados-el-entorno-es-la-politica]\narea: CRM versionado\nglyph: ⌁\nhue: rgba(87,217,232,.22)\n---\n\n# Read-only como decisión arquitectónica\n\n> Actualizado el 12 de octubre de 2026. La etapa inicial era enteramente read-only; la evolución multiusuario conserva esa frontera para observación y agrega una vía de escritura controlada.\n\n## Por qué no alcanza con prometer que no vamos a escribir\n\nEn las funciones Deluge de Zoho CRM, crear o actualizar mediante la API publica el cambio inmediatamente. La API V8 distingue este comportamiento de Java, Node.js y Python, que sí admiten borradores y publicación separada. Un `PUT` sobre Deluge en producción puede afectar código activo: no hay que generalizar la protección de borradores de otros runtimes. [Funciones en V8](https://www.zoho.com/crm/developer/docs/api/v8/whats-new.html).\n\nPor eso la lectura no se planteó como una convención del script, sino como una propiedad del sistema. La evolución del proyecto cambia el alcance de esa frase: describe la sincronización y el análisis, mientras el despliegue tiene credenciales, comandos y condiciones propios.\n\n## Las barreras\n\n### Scope mínimo\n\nEl token de lectura usa solamente `ZohoCRM.settings.functions.READ`. No posee Create, Update, Publish ni Delete. La credencial rechaza una mutación aunque el código la intente.\n\n### Lectura y escritura separadas\n\nEl cliente original sólo implementaba lectura. La etapa de despliegue incorpora operaciones mutativas en una vía explícita y deshabilitada por defecto. Ya no sería correcto describir todo el proyecto como exclusivamente `GET`: lo que debe conservarse es que la tarea de observación carezca de autoridad para publicar.\n\n### Árbol generado\n\n`functions/` representa una fotografía del CRM y no se edita a mano. Las propuestas viven en `cambios/`, con su base y metadata para revisión. La separación hace visible qué fue observado y qué se quiere cambiar; una sincronización posterior vuelve a reflejar el estado productivo.\n\n### Git como revisión y procedencia\n\nEl repositorio conserva snapshots y ahora también organiza propuestas mediante pull requests y responsables de revisión. Merge y despliegue son pasos distintos: tener un cambio en Git no equivale a haberlo publicado ni a haber verificado su resultado.\n\n## La autoridad para desplegar no se hereda\n\nEl colaborador trabaja con permisos de lectura. El responsable del despliegue necesita una credencial autorizada por los scopes y el perfil de CRM, además de habilitar expresamente la escritura y pasar controles adicionales. El flag de la CLI evita accidentes; no es por sí solo una frontera de permisos. Una persona autorizada a editar desde la interfaz de CRM todavía puede hacerlo por fuera de esta convención. En el recorrido normal documentado para cambios revisados:\n\n- la función debe resolverse sin ambigüedad; un `api_name` que colisiona no autoriza elegir cualquier destino;\n- el archivo a publicar debe estar versionado, sin cambios locales y en `main` alineado con `origin/main`;\n- una comparación por hash del código normalizado detecta cambios productivos respecto de la base usada para preparar la propuesta;\n- después de publicar se descarga el código y se compara con el enviado, de forma exacta o normalizada.\n\nLa CLI también conserva una opción explícita para archivos fuera de `main`; si falta la cabecera de base, esa ruta puede continuar con una advertencia y sin protección contra deriva. Por eso no alcanza con que el repositorio contenga los controles: el equipo debe exigir el recorrido revisado y tratar las excepciones como decisiones de mayor riesgo.\n\nSi producción cambió en el medio dentro del recorrido protegido, la propuesta debe volver a revisarse sobre una base vigente. La comparación permite detectar parte de la deriva de código antes de escribir; no constituye un bloqueo atómico frente a cambios concurrentes ni garantiza que datos, conexiones o asociaciones sigan iguales.\n\nLa comparación normalizada elimina espacios y paréntesis: puede considerar iguales textos distintos y no es una prueba semántica. Si la verificación posterior falla, se informa el error; no hay rollback automático. La operación puede haber publicado ya, y un fallo de notificación tampoco la deshace.\n\nEstos controles complementan la revisión humana. Tampoco convierten Deluge en un runtime con borradores: el riesgo de publicación inmediata sigue siendo relevante. La documentación registra pruebas sin escritura y deja pendiente el primer despliegue real de esta vía; no hay que presentar el guardrail probado como una prueba completa del despliegue.\n\n## Decisiones que evitan backups falsos\n\n- La ruta incluye categoría y `api_name`; el nombre solo puede colisionar.\n- La corrida aborta ante una colisión en vez de sobrescribir en silencio.\n- El prune se desactiva si hubo una descarga fallida.\n- Sin snapshot previo legible, el fallback es una descarga completa.\n- Si el conteo esperado no coincide con la paginación, no se guarda una foto parcial.\n\n## El caso incómodo de los secretos\n\nEl código fuente puede contener credenciales literales. Antes del primer push hay que escanear el árbol y decidir cada hallazgo:\n\n1. rotar y retirar la credencial;\n2. versionar en repositorio privado si el riesgo fue aceptado;\n3. excluir temporalmente el archivo y documentar que queda sin backup.\n\nUna credencial de proveedor cloud puede ser detectada y revocada automáticamente al subirla. Excluir evita esa rotura, pero crea una deuda explícita: la función deja de tener historia.\n\n## Operación silenciosa, vigilancia activa\n\nUna corrida normal sin cambios no crea commit ni manda una notificación. El silencio es saludable sólo si existe un control separado que detecta cuando la señal deja de llegar.\n\nEl dead-man's switch vive fuera del scheduler y distingue la última ejecución del último éxito. Debe alertar si cualquiera de esas señales envejece: una sucesión de errores no puede mantener fresca la señal de salud. Si compartiera proceso con el sync, morirían juntos y el silencio sería ambiguo.\n\n## Principio reusable\n\n**La autoridad debe seguir a la tarea: observar con permisos de lectura, proponer en un espacio separado y publicar sólo desde una vía explícita, revisada y verificable.**\n"
    },
    {
      "slug": "mapa-procesos-verificacion",
      "title": "Del backup al mapa de procesos",
      "summary": "El mapa de procesos permite analizar sin acceso productivo; la nueva vía de cambios conecta los hallazgos verificables con revisión y despliegue controlado.",
      "type": "case-study",
      "order": 3,
      "tags": [
        "procesos",
        "auditoria",
        "agentes",
        "verificacion",
        "zoho-crm"
      ],
      "related": [
        "backup-versionado-crm",
        "arquitectura-read-only",
        "orquestacion"
      ],
      "area": "CRM versionado",
      "glyph": "⌘",
      "hue": "rgba(168,106,255,.24)",
      "file": "mapa-procesos-verificacion.md",
      "html": "<blockquote>\n<p>Actualizado el 12 de octubre de 2026. Se preserva la prueba piloto de análisis y se distingue de la posterior etapa de despliegue multiusuario.</p>\n</blockquote>\n<h2 id=\"el-salto-de-la-segunda-etapa\">El salto de la segunda etapa</h2>\n<p>El backup respondía qué código existía. No explicaba cómo se organizaba el negocio, qué funciones componían un circuito ni cómo comprobar que una corrección había sido aplicada.</p>\n<p>La segunda etapa agregó tres piezas:</p>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Qué responde</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Diccionario de recursos</td>\n<td>Qué funciones usan cada recurso compartido y cuál es el radio de impacto</td>\n</tr>\n<tr>\n<td>Árbol de procesos</td>\n<td>Qué circuitos existen y qué funciones forman cada rama</td>\n</tr>\n<tr>\n<td>Contrato de análisis</td>\n<td>Cómo debe analizarse una rama y qué evidencia entregar</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"generado-y-curado\">Generado y curado</h2>\n<p>Los datos que cambian se regeneran con cada sincronización. La organización conceptual se expresa mediante reglas mantenidas por personas.</p>\n<p>No se escriben listas manuales de funciones dentro de la documentación: envejecen al día siguiente. Una regla absorbe nuevas funciones y el reporte marca las que no encajan en ninguna rama.</p>\n<h2 id=\"unidad-de-trabajo-una-rama\">Unidad de trabajo: una rama</h2>\n<p>El proceso para una persona o agente es deliberadamente acotado:</p>\n<ol>\n<li>Abrir una copia de trabajo del repositorio.</li>\n<li>Elegir una rama del árbol de procesos.</li>\n<li>Seguir el contrato de análisis.</li>\n<li>Entregar tres artefactos.</li>\n</ol>\n<table>\n<thead>\n<tr>\n<th>Entregable</th>\n<th>Propósito</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>manual-operativo.md</code></td>\n<td>Explicar el circuito en términos de negocio</td>\n</tr>\n<tr>\n<td><code>mejoras-propuestas.md</code></td>\n<td>Ordenar hallazgos por consecuencia, anclados a archivo y línea</td>\n</tr>\n<tr>\n<td><code>validar.sh</code></td>\n<td>Convertir cada hallazgo en un chequeo ejecutable</td>\n</tr>\n</tbody>\n</table>\n<p>En la prueba original, el agente partía de reportes calculados y no de una búsqueda ciega entre más de mil trescientas funciones. Ese tamaño describe el inventario de entonces, no un conteo actualizado. La ventaja del método es acotar el contexto y hacer repetible el análisis.</p>\n<h2 id=\"el-limite-que-sostiene-la-calidad\">El límite que sostiene la calidad</h2>\n<p>El análisis corrige defectos visibles; no rediseña procesos ni propone migraciones amplias. En una plataforma donde publicar es inmediato, un rediseño grande sobre un circuito que mueve dinero requiere otro nivel de gobierno.</p>\n<p>La restricción no queda sólo en el prompt: <strong>todo hallazgo desarrollado debe poder expresarse como un chequeo automático</strong>. Si no se puede verificar, se anota como idea separada y no se presenta como corrección lista.</p>\n<h2 id=\"verificacion-sin-ia\">Verificación sin IA</h2>\n<p>Cuando alguien informa que corrigió un hallazgo, no hace falta volver a contratar razonamiento para leer el código. Se ejecuta <code>validar.sh</code> contra el snapshot actual.</p>\n<p>La prosa envejece; el chequeo se reevalúa. Esta separación reduce supervisión y evita que el informe se convierta en una verdad congelada.</p>\n<h2 id=\"del-hallazgo-a-una-propuesta-desplegable\">Del hallazgo a una propuesta desplegable</h2>\n<p>La nueva etapa agrega continuidad al trabajo: un hallazgo verificable puede convertirse en una propuesta de cambio separada del snapshot, pasar por un pull request y llegar a un responsable con autoridad para desplegar. El mapa ayuda a elegir dónde mirar; el contrato determina qué evidencia entregar; la vía de despliegue gobierna cuándo se permite escribir.</p>\n<p>Son verificaciones diferentes:</p>\n<table>\n<thead>\n<tr>\n<th>Verificación</th>\n<th>Qué establece</th>\n<th>Qué no establece</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Chequeo del hallazgo</td>\n<td>Si el código satisface una condición concreta</td>\n<td>Que todo el proceso funcione correctamente</td>\n</tr>\n<tr>\n<td>Comparación con la base productiva</td>\n<td>Si se detecta deriva bajo la comparación normalizada desde que se preparó la propuesta</td>\n<td>Cambios borrados por la normalización, equivalencia semántica ni estabilidad de dependencias</td>\n</tr>\n<tr>\n<td>Descarga posterior al despliegue</td>\n<td>Si el código descargado coincide con el enviado bajo la comparación implementada</td>\n<td>Que sus efectos de negocio sean los esperados</td>\n</tr>\n</tbody>\n</table>\n<p>Una corrección de idempotencia, por ejemplo, puede tener un chequeo estático que detecte la condición de protección y aun necesitar una prueba de ejecuciones repetidas para demostrar que no duplica efectos. La presencia de <code>validar.sh</code> mejora la revisión; no autoriza a confundir inspección de código con validación integral.</p>\n<p>La documentación de la etapa multiusuario registra controles probados con escritura deshabilitada y mantiene pendiente el primer despliegue real desde <code>cambios/</code>. El circuito completo es la dirección implementada por el proyecto, con esa validación operativa aún abierta. La prueba piloto que sigue demuestra el análisis y sus entregables, no un despliegue posterior.</p>\n<h2 id=\"prueba-piloto\">Prueba piloto</h2>\n<p>Una rama sin manual previo fue analizada siguiendo únicamente el contrato. El agente entregó los tres archivos y los hallazgos prioritarios se verificaron contra el código.</p>\n<p>La prueba encontró errores de idempotencia, validaciones incompletas y superficie de ejecución externa que requería revisión. Las reglas de anonimización preservan las categorías del problema, pero no publican el circuito, los nombres ni las condiciones exactas del cliente.</p>\n<p>El análisis también marcó como no confirmados los puntos que la API no permitía comprobar. Esa disciplina fue parte del éxito, no una limitación a esconder.</p>\n<h2 id=\"elegir-el-siguiente-paso\">Elegir el siguiente paso</h2>\n<p>Para un circuito desconocido, conviene empezar por mapa, contrato y chequeos antes de preparar cambios. Cuando el hallazgo ya tiene evidencia, se puede usar la <a href=\"/entrada/backup-versionado-crm\">plataforma de funciones</a> para organizar la propuesta y la <a href=\"/entrada/arquitectura-read-only\">separación de autoridades</a> para limitar su publicación. Un rediseño amplio o una condición que el snapshot no permite comprobar necesitan otra investigación; no deben disfrazarse de corrección lista para desplegar.</p>\n<h2 id=\"beneficio-obtenido\">Beneficio obtenido</h2>\n<p>La capacidad de diagnóstico dejó de depender de quien conoce de memoria la organización. El costo central queda en generar el snapshot y los reportes; cada miembro del equipo puede analizar una rama con su propia herramienta y verificar correcciones sin acceso productivo.</p>\n",
      "headings": [
        {
          "label": "El salto de la segunda etapa",
          "depth": 2,
          "id": "el-salto-de-la-segunda-etapa"
        },
        {
          "label": "Generado y curado",
          "depth": 2,
          "id": "generado-y-curado"
        },
        {
          "label": "Unidad de trabajo: una rama",
          "depth": 2,
          "id": "unidad-de-trabajo-una-rama"
        },
        {
          "label": "El límite que sostiene la calidad",
          "depth": 2,
          "id": "el-limite-que-sostiene-la-calidad"
        },
        {
          "label": "Verificación sin IA",
          "depth": 2,
          "id": "verificacion-sin-ia"
        },
        {
          "label": "Del hallazgo a una propuesta desplegable",
          "depth": 2,
          "id": "del-hallazgo-a-una-propuesta-desplegable"
        },
        {
          "label": "Prueba piloto",
          "depth": 2,
          "id": "prueba-piloto"
        },
        {
          "label": "Elegir el siguiente paso",
          "depth": 2,
          "id": "elegir-el-siguiente-paso"
        },
        {
          "label": "Beneficio obtenido",
          "depth": 2,
          "id": "beneficio-obtenido"
        }
      ],
      "raw": "---\nslug: mapa-procesos-verificacion\ntitle: Del backup al mapa de procesos\ntype: case-study\norder: 3\nsummary: El mapa de procesos permite analizar sin acceso productivo; la nueva vía de cambios conecta los hallazgos verificables con revisión y despliegue controlado.\ntags: [procesos, auditoria, agentes, verificacion, zoho-crm]\nrelated: [backup-versionado-crm, arquitectura-read-only, orquestacion]\narea: CRM versionado\nglyph: ⌘\nhue: rgba(168,106,255,.24)\n---\n\n# Del backup al mapa de procesos\n\n> Actualizado el 12 de octubre de 2026. Se preserva la prueba piloto de análisis y se distingue de la posterior etapa de despliegue multiusuario.\n\n## El salto de la segunda etapa\n\nEl backup respondía qué código existía. No explicaba cómo se organizaba el negocio, qué funciones componían un circuito ni cómo comprobar que una corrección había sido aplicada.\n\nLa segunda etapa agregó tres piezas:\n\n| Pieza | Qué responde |\n| --- | --- |\n| Diccionario de recursos | Qué funciones usan cada recurso compartido y cuál es el radio de impacto |\n| Árbol de procesos | Qué circuitos existen y qué funciones forman cada rama |\n| Contrato de análisis | Cómo debe analizarse una rama y qué evidencia entregar |\n\n## Generado y curado\n\nLos datos que cambian se regeneran con cada sincronización. La organización conceptual se expresa mediante reglas mantenidas por personas.\n\nNo se escriben listas manuales de funciones dentro de la documentación: envejecen al día siguiente. Una regla absorbe nuevas funciones y el reporte marca las que no encajan en ninguna rama.\n\n## Unidad de trabajo: una rama\n\nEl proceso para una persona o agente es deliberadamente acotado:\n\n1. Abrir una copia de trabajo del repositorio.\n2. Elegir una rama del árbol de procesos.\n3. Seguir el contrato de análisis.\n4. Entregar tres artefactos.\n\n| Entregable | Propósito |\n| --- | --- |\n| `manual-operativo.md` | Explicar el circuito en términos de negocio |\n| `mejoras-propuestas.md` | Ordenar hallazgos por consecuencia, anclados a archivo y línea |\n| `validar.sh` | Convertir cada hallazgo en un chequeo ejecutable |\n\nEn la prueba original, el agente partía de reportes calculados y no de una búsqueda ciega entre más de mil trescientas funciones. Ese tamaño describe el inventario de entonces, no un conteo actualizado. La ventaja del método es acotar el contexto y hacer repetible el análisis.\n\n## El límite que sostiene la calidad\n\nEl análisis corrige defectos visibles; no rediseña procesos ni propone migraciones amplias. En una plataforma donde publicar es inmediato, un rediseño grande sobre un circuito que mueve dinero requiere otro nivel de gobierno.\n\nLa restricción no queda sólo en el prompt: **todo hallazgo desarrollado debe poder expresarse como un chequeo automático**. Si no se puede verificar, se anota como idea separada y no se presenta como corrección lista.\n\n## Verificación sin IA\n\nCuando alguien informa que corrigió un hallazgo, no hace falta volver a contratar razonamiento para leer el código. Se ejecuta `validar.sh` contra el snapshot actual.\n\nLa prosa envejece; el chequeo se reevalúa. Esta separación reduce supervisión y evita que el informe se convierta en una verdad congelada.\n\n## Del hallazgo a una propuesta desplegable\n\nLa nueva etapa agrega continuidad al trabajo: un hallazgo verificable puede convertirse en una propuesta de cambio separada del snapshot, pasar por un pull request y llegar a un responsable con autoridad para desplegar. El mapa ayuda a elegir dónde mirar; el contrato determina qué evidencia entregar; la vía de despliegue gobierna cuándo se permite escribir.\n\nSon verificaciones diferentes:\n\n| Verificación | Qué establece | Qué no establece |\n| --- | --- | --- |\n| Chequeo del hallazgo | Si el código satisface una condición concreta | Que todo el proceso funcione correctamente |\n| Comparación con la base productiva | Si se detecta deriva bajo la comparación normalizada desde que se preparó la propuesta | Cambios borrados por la normalización, equivalencia semántica ni estabilidad de dependencias |\n| Descarga posterior al despliegue | Si el código descargado coincide con el enviado bajo la comparación implementada | Que sus efectos de negocio sean los esperados |\n\nUna corrección de idempotencia, por ejemplo, puede tener un chequeo estático que detecte la condición de protección y aun necesitar una prueba de ejecuciones repetidas para demostrar que no duplica efectos. La presencia de `validar.sh` mejora la revisión; no autoriza a confundir inspección de código con validación integral.\n\nLa documentación de la etapa multiusuario registra controles probados con escritura deshabilitada y mantiene pendiente el primer despliegue real desde `cambios/`. El circuito completo es la dirección implementada por el proyecto, con esa validación operativa aún abierta. La prueba piloto que sigue demuestra el análisis y sus entregables, no un despliegue posterior.\n\n## Prueba piloto\n\nUna rama sin manual previo fue analizada siguiendo únicamente el contrato. El agente entregó los tres archivos y los hallazgos prioritarios se verificaron contra el código.\n\nLa prueba encontró errores de idempotencia, validaciones incompletas y superficie de ejecución externa que requería revisión. Las reglas de anonimización preservan las categorías del problema, pero no publican el circuito, los nombres ni las condiciones exactas del cliente.\n\nEl análisis también marcó como no confirmados los puntos que la API no permitía comprobar. Esa disciplina fue parte del éxito, no una limitación a esconder.\n\n## Elegir el siguiente paso\n\nPara un circuito desconocido, conviene empezar por mapa, contrato y chequeos antes de preparar cambios. Cuando el hallazgo ya tiene evidencia, se puede usar la [plataforma de funciones](/entrada/backup-versionado-crm) para organizar la propuesta y la [separación de autoridades](/entrada/arquitectura-read-only) para limitar su publicación. Un rediseño amplio o una condición que el snapshot no permite comprobar necesitan otra investigación; no deben disfrazarse de corrección lista para desplegar.\n\n## Beneficio obtenido\n\nLa capacidad de diagnóstico dejó de depender de quien conoce de memoria la organización. El costo central queda en generar el snapshot y los reportes; cada miembro del equipo puede analizar una rama con su propia herramienta y verificar correcciones sin acceso productivo.\n"
    },
    {
      "slug": "caso-tablero-continuidad-operativa",
      "title": "Caso real — De contador a tablero de continuidad operativa",
      "summary": "Una herramienta personal creció hasta unir incidentes, salud de servicios y señales progresivas sin llevar credenciales al navegador.",
      "type": "case-study",
      "order": 1,
      "tags": [
        "caso-real",
        "observabilidad",
        "astro",
        "typescript",
        "n8n",
        "incidentes",
        "seguridad"
      ],
      "related": [
        "continuidad-y-observabilidad",
        "caso-orca-cockpit-multiagente"
      ],
      "area": "Casos de producto",
      "glyph": "◌",
      "hue": "rgba(87,217,232,.22)",
      "file": "caso-tablero-continuidad-operativa.md",
      "html": "<h2 id=\"el-punto-de-partida\">El punto de partida</h2>\n<p>La primera necesidad parecía mínima: mostrar cuánto tiempo había pasado desde el último incidente. Pero un número aislado no explicaba qué había ocurrido, si el problema seguía abierto ni qué parte del entorno estaba afectada.</p>\n<p>El producto terminó convirtiéndose en una pequeña central operativa: continuidad, bitácora de incidentes, métricas y salud de varios servicios en una sola superficie.</p>\n<h2 id=\"la-arquitectura-que-lo-hizo-posible\">La arquitectura que lo hizo posible</h2>\n<table>\n<thead>\n<tr>\n<th>Capa</th>\n<th>Tecnología</th>\n<th>Responsabilidad</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Interfaz</td>\n<td>Astro + Tailwind CSS</td>\n<td>Sitio estático rápido, responsive y fácil de desplegar</td>\n</tr>\n<tr>\n<td>Dominio</td>\n<td>TypeScript</td>\n<td>Cálculo de continuidad, estados, normalización y fusión de señales</td>\n</tr>\n<tr>\n<td>Respaldo local</td>\n<td><code>localStorage</code></td>\n<td>Conservar acciones cuando la capa remota no responde</td>\n</tr>\n<tr>\n<td>Integración</td>\n<td>n8n</td>\n<td>Persistencia de incidentes y ejecución de comprobaciones</td>\n</tr>\n<tr>\n<td>Persistencia</td>\n<td>Data Tables</td>\n<td>Sincronización del historial entre dispositivos</td>\n</tr>\n<tr>\n<td>Entrega</td>\n<td>Hosting estático con políticas de seguridad</td>\n<td>Publicación del frontend sin secretos embebidos</td>\n</tr>\n</tbody>\n</table>\n<p>La decisión central fue mantener el navegador como consumidor de un contrato acotado. Los accesos autenticados y las credenciales quedaron del lado de la capa de integración, que sólo publicaba estados normalizados.</p>\n<h2 id=\"de-un-timestamp-a-un-ciclo-de-vida\">De un timestamp a un ciclo de vida</h2>\n<p>Un incidente no es solamente una fecha de reinicio. Tiene inicio real, momento de reporte, estado, cierre y una nota opcional de resolución.</p>\n<p>Modelarlo de esa manera resolvió casos que el contador simple escondía:</p>\n<ul>\n<li>una incidencia abierta detiene la continuidad y evita un falso “todo bien”;</li>\n<li>varias incidencias pueden superponerse;</li>\n<li>el nuevo período sano comienza después del último cierre efectivo;</li>\n<li>registros antiguos pueden seguir leyéndose sin reescribir el historial;</li>\n<li>un corte de conectividad no obliga a perder el alta o el cierre local.</li>\n</ul>\n<p>La interfaz pasó de celebrar un número a representar honestamente el estado operativo.</p>\n<h2 id=\"salud-progresiva-no-una-espera-monolitica\">Salud progresiva, no una espera monolítica</h2>\n<p>Las comprobaciones se dividieron por grupos y el frontend las solicitó en paralelo. Cada respuesta parcial se fusiona con el estado existente sin borrar servicios que esa rama no observó.</p>\n<p>Esto permitió que una caída conocida apareciera apenas se detectaba, aun cuando otras fuentes siguieran demoradas. También exigió reglas explícitas para evitar carreras, datos viejos y estados transitorios engañosos.</p>\n<h3 id=\"semantica-antes-que-color\">Semántica antes que color</h3>\n<p>No toda respuesta HTTP exitosa prueba que el servicio esté sano. Un frontend puede devolver su HTML genérico ante una ruta inexistente y producir un falso verde.</p>\n<p>Por eso el tablero distingue:</p>\n<ul>\n<li><strong>operativo:</strong> la señal esperada respondió y su contenido es válido;</li>\n<li><strong>degradado:</strong> el proceso está vivo, pero todavía no puede atender correctamente;</li>\n<li><strong>caído:</strong> existe evidencia concreta de indisponibilidad;</li>\n<li><strong>no verificable:</strong> hubo respuesta, pero no demuestra la condición buscada;</li>\n<li><strong>sin datos o comprobando:</strong> todavía no existe una lectura suficiente.</li>\n</ul>\n<p>Separar liveness de readiness evitó alertar como caída cada reinicio normal. Validar el cuerpo además del código HTTP evitó checks verdes que en realidad no medían nada.</p>\n<h2 id=\"seguridad-y-resiliencia-como-parte-del-producto\">Seguridad y resiliencia como parte del producto</h2>\n<p>El endurecimiento no quedó para el final:</p>\n<ul>\n<li>el frontend nunca recibe credenciales de proveedores;</li>\n<li>una política CSP estricta limita la ejecución inesperada;</li>\n<li>las dependencias se auditan y actualizan;</li>\n<li>los endpoints aceptados se normalizan y restringen;</li>\n<li>los estados parciales conservan la última observación válida;</li>\n<li>las animaciones respetan preferencias de movimiento reducido;</li>\n<li>el área con scroll puede recorrerse con teclado.</li>\n</ul>\n<p>Los workflows también se trataron como código: se verificaron sus nodos, contratos y recorridos para detectar errores de generación, grupos duplicados y respuestas cruzadas.</p>\n<h2 id=\"beneficios-obtenidos\">Beneficios obtenidos</h2>\n<ul>\n<li>una lectura común para continuidad, incidentes y dependencias;</li>\n<li>detección más temprana gracias a respuestas progresivas;</li>\n<li>menos falsos positivos y falsos verdes;</li>\n<li>continuidad de uso ante fallas temporales de la integración;</li>\n<li>una frontera clara entre visualización pública y acceso autenticado;</li>\n<li>comportamiento comprobable incluso cuando la automatización vive fuera del repositorio tradicional.</li>\n</ul>\n<h2 id=\"la-leccion-transferible\">La lección transferible</h2>\n<p>La observabilidad útil no consiste en sumar checks. Consiste en definir qué prueba cada señal, qué no puede probar y cómo se combinan resultados incompletos sin mentirle al operador.</p>\n<p>El contador siguió siendo la imagen central, pero el verdadero producto pasó a ser el modelo de continuidad que había detrás.</p>\n<blockquote>\n<p>Caso basado en una implementación real. Se removieron nombres, dominios, endpoints, cantidades, proveedores internos y datos operativos identificables.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "El punto de partida",
          "depth": 2,
          "id": "el-punto-de-partida"
        },
        {
          "label": "La arquitectura que lo hizo posible",
          "depth": 2,
          "id": "la-arquitectura-que-lo-hizo-posible"
        },
        {
          "label": "De un timestamp a un ciclo de vida",
          "depth": 2,
          "id": "de-un-timestamp-a-un-ciclo-de-vida"
        },
        {
          "label": "Salud progresiva, no una espera monolítica",
          "depth": 2,
          "id": "salud-progresiva-no-una-espera-monolitica"
        },
        {
          "label": "Semántica antes que color",
          "depth": 3,
          "id": "semantica-antes-que-color"
        },
        {
          "label": "Seguridad y resiliencia como parte del producto",
          "depth": 2,
          "id": "seguridad-y-resiliencia-como-parte-del-producto"
        },
        {
          "label": "Beneficios obtenidos",
          "depth": 2,
          "id": "beneficios-obtenidos"
        },
        {
          "label": "La lección transferible",
          "depth": 2,
          "id": "la-leccion-transferible"
        }
      ],
      "raw": "---\nslug: caso-tablero-continuidad-operativa\ntitle: Caso real — De contador a tablero de continuidad operativa\ntype: case-study\norder: 1\nsummary: Una herramienta personal creció hasta unir incidentes, salud de servicios y señales progresivas sin llevar credenciales al navegador.\ntags: [caso-real, observabilidad, astro, typescript, n8n, incidentes, seguridad]\nrelated: [continuidad-y-observabilidad, caso-orca-cockpit-multiagente]\narea: Casos de producto\nglyph: ◌\nhue: rgba(87,217,232,.22)\n---\n\n# Caso real — De contador a tablero de continuidad operativa\n\n## El punto de partida\n\nLa primera necesidad parecía mínima: mostrar cuánto tiempo había pasado desde el último incidente. Pero un número aislado no explicaba qué había ocurrido, si el problema seguía abierto ni qué parte del entorno estaba afectada.\n\nEl producto terminó convirtiéndose en una pequeña central operativa: continuidad, bitácora de incidentes, métricas y salud de varios servicios en una sola superficie.\n\n## La arquitectura que lo hizo posible\n\n| Capa | Tecnología | Responsabilidad |\n|---|---|---|\n| Interfaz | Astro + Tailwind CSS | Sitio estático rápido, responsive y fácil de desplegar |\n| Dominio | TypeScript | Cálculo de continuidad, estados, normalización y fusión de señales |\n| Respaldo local | `localStorage` | Conservar acciones cuando la capa remota no responde |\n| Integración | n8n | Persistencia de incidentes y ejecución de comprobaciones |\n| Persistencia | Data Tables | Sincronización del historial entre dispositivos |\n| Entrega | Hosting estático con políticas de seguridad | Publicación del frontend sin secretos embebidos |\n\nLa decisión central fue mantener el navegador como consumidor de un contrato acotado. Los accesos autenticados y las credenciales quedaron del lado de la capa de integración, que sólo publicaba estados normalizados.\n\n## De un timestamp a un ciclo de vida\n\nUn incidente no es solamente una fecha de reinicio. Tiene inicio real, momento de reporte, estado, cierre y una nota opcional de resolución.\n\nModelarlo de esa manera resolvió casos que el contador simple escondía:\n\n- una incidencia abierta detiene la continuidad y evita un falso “todo bien”;\n- varias incidencias pueden superponerse;\n- el nuevo período sano comienza después del último cierre efectivo;\n- registros antiguos pueden seguir leyéndose sin reescribir el historial;\n- un corte de conectividad no obliga a perder el alta o el cierre local.\n\nLa interfaz pasó de celebrar un número a representar honestamente el estado operativo.\n\n## Salud progresiva, no una espera monolítica\n\nLas comprobaciones se dividieron por grupos y el frontend las solicitó en paralelo. Cada respuesta parcial se fusiona con el estado existente sin borrar servicios que esa rama no observó.\n\nEsto permitió que una caída conocida apareciera apenas se detectaba, aun cuando otras fuentes siguieran demoradas. También exigió reglas explícitas para evitar carreras, datos viejos y estados transitorios engañosos.\n\n### Semántica antes que color\n\nNo toda respuesta HTTP exitosa prueba que el servicio esté sano. Un frontend puede devolver su HTML genérico ante una ruta inexistente y producir un falso verde.\n\nPor eso el tablero distingue:\n\n- **operativo:** la señal esperada respondió y su contenido es válido;\n- **degradado:** el proceso está vivo, pero todavía no puede atender correctamente;\n- **caído:** existe evidencia concreta de indisponibilidad;\n- **no verificable:** hubo respuesta, pero no demuestra la condición buscada;\n- **sin datos o comprobando:** todavía no existe una lectura suficiente.\n\nSeparar liveness de readiness evitó alertar como caída cada reinicio normal. Validar el cuerpo además del código HTTP evitó checks verdes que en realidad no medían nada.\n\n## Seguridad y resiliencia como parte del producto\n\nEl endurecimiento no quedó para el final:\n\n- el frontend nunca recibe credenciales de proveedores;\n- una política CSP estricta limita la ejecución inesperada;\n- las dependencias se auditan y actualizan;\n- los endpoints aceptados se normalizan y restringen;\n- los estados parciales conservan la última observación válida;\n- las animaciones respetan preferencias de movimiento reducido;\n- el área con scroll puede recorrerse con teclado.\n\nLos workflows también se trataron como código: se verificaron sus nodos, contratos y recorridos para detectar errores de generación, grupos duplicados y respuestas cruzadas.\n\n## Beneficios obtenidos\n\n- una lectura común para continuidad, incidentes y dependencias;\n- detección más temprana gracias a respuestas progresivas;\n- menos falsos positivos y falsos verdes;\n- continuidad de uso ante fallas temporales de la integración;\n- una frontera clara entre visualización pública y acceso autenticado;\n- comportamiento comprobable incluso cuando la automatización vive fuera del repositorio tradicional.\n\n## La lección transferible\n\nLa observabilidad útil no consiste en sumar checks. Consiste en definir qué prueba cada señal, qué no puede probar y cómo se combinan resultados incompletos sin mentirle al operador.\n\nEl contador siguió siendo la imagen central, pero el verdadero producto pasó a ser el modelo de continuidad que había detrás.\n\n> Caso basado en una implementación real. Se removieron nombres, dominios, endpoints, cantidades, proveedores internos y datos operativos identificables.\n"
    },
    {
      "slug": "caso-widgets-crm-flujos-guiados",
      "title": "Caso real — Widgets que convierten reglas del CRM en flujos guiados",
      "summary": "Dos widgets embebidos llevaron contexto, validaciones y automatización al punto exacto donde el equipo tomaba decisiones.",
      "type": "case-study",
      "order": 2,
      "tags": [
        "caso-real",
        "crm",
        "widgets",
        "javascript",
        "deluge",
        "n8n",
        "integraciones",
        "ux"
      ],
      "related": [
        "backup-versionado-crm",
        "arquitectura-read-only",
        "modelos-guiados-el-entorno-es-la-politica"
      ],
      "area": "Casos de producto",
      "glyph": "◆",
      "hue": "rgba(236,95,189,.24)",
      "file": "caso-widgets-crm-flujos-guiados.md",
      "html": "<h2 id=\"el-problema-de-fondo\">El problema de fondo</h2>\n<p>El CRM concentraba datos y automatizaciones, pero algunas tareas seguían exigiendo conocer demasiadas reglas de memoria: qué opciones eran válidas, qué límites aplicaban, cuándo correspondía una aprobación y cómo reportar un problema sin perder el contexto de origen.</p>\n<p>La solución no fue crear otra aplicación separada. Se construyeron widgets embebidos que aparecían dentro del registro y convertían esas reglas en recorridos guiados.</p>\n<h2 id=\"dos-recorridos-una-misma-idea\">Dos recorridos, una misma idea</h2>\n<h3 id=\"seleccion-y-confirmacion-de-una-propuesta\">Selección y confirmación de una propuesta</h3>\n<p>El primer widget reúne configuración del registro, catálogo vigente, medios de pago, cuotas, descuentos, condiciones adicionales y una eventual contraoferta.</p>\n<p>Antes de permitir una confirmación:</p>\n<ul>\n<li>verifica que el registro esté en la etapa correcta;</li>\n<li>filtra las opciones por contexto;</li>\n<li>calcula importes y cuotas en tiempo real;</li>\n<li>aplica límites distintos según el tipo de propuesta;</li>\n<li>deshabilita combinaciones incompatibles y explica el motivo;</li>\n<li>deriva excepciones al rol aprobador;</li>\n<li>adjunta documentación cuando corresponde;</li>\n<li>arma un payload único y evita envíos duplicados.</li>\n</ul>\n<p>La interfaz hace visible la política mientras la persona decide. No depende de que recuerde una tabla externa ni de que descubra el error después de guardar.</p>\n<h3 id=\"reporte-contextual-de-problemas\">Reporte contextual de problemas</h3>\n<p>El segundo widget puede abrirse desde distintos módulos. Detecta la entidad y el registro de origen, recupera su contexto y prepara un reporte vinculado desde el comienzo.</p>\n<p>Un buscador con categorías reemplaza una lista extensa y permite explorar o encontrar un tipo de problema ignorando mayúsculas y tildes. La selección debe provenir del catálogo: escribir texto parecido no alcanza para enviar una clasificación ambigua.</p>\n<p>También contempla adjuntos, estados de carga, errores parciales y módulos que todavía no tienen todos sus campos confirmados. El flujo principal permanece operativo aunque falle información secundaria de diagnóstico.</p>\n<h2 id=\"arquitectura-de-integracion\">Arquitectura de integración</h2>\n<table>\n<thead>\n<tr>\n<th>Pieza</th>\n<th>Función</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Widget HTML/CSS/JavaScript</td>\n<td>Interacción rápida dentro del iframe del CRM</td>\n</tr>\n<tr>\n<td>SDK de widgets</td>\n<td>Contexto de página, lectura del registro, adjuntos y cierre del popup</td>\n</tr>\n<tr>\n<td>Funciones del CRM</td>\n<td>Datos preparados y reglas cercanas al modelo de negocio</td>\n</tr>\n<tr>\n<td>Webhook</td>\n<td>Contrato explícito de salida</td>\n</tr>\n<tr>\n<td>n8n</td>\n<td>Orquestación de escrituras y acciones posteriores</td>\n</tr>\n<tr>\n<td>CRM</td>\n<td>Fuente de verdad y trazabilidad final</td>\n</tr>\n</tbody>\n</table>\n<p>La frontera fue deliberada: el widget guía, valida y presenta; las funciones recuperan contexto; la automatización coordina la escritura. Ninguna pieza necesita fingir que es todo el sistema.</p>\n<h2 id=\"decisiones-que-dieron-resultado\">Decisiones que dieron resultado</h2>\n<h3 id=\"reglas-visibles-en-el-momento-correcto\">Reglas visibles en el momento correcto</h3>\n<p>Un límite que sólo existe en documentación llega tarde. Mostrarlo junto al control afectado reduce ensayo, error y consultas laterales.</p>\n<h3 id=\"bloqueos-proporcionales\">Bloqueos proporcionales</h3>\n<p>Una etapa incorrecta bloquea el recorrido completo. Una combinación inválida bloquea sólo esa alternativa. Un fallo al adjuntar se informa sin ocultar que el registro principal ya fue creado.</p>\n<h3 id=\"estados-mutuamente-excluyentes\">Estados mutuamente excluyentes</h3>\n<p>Carga, error técnico, contexto no habilitado y flujo normal tienen pantallas separadas. Esto evita interfaces mezcladas donde parece posible confirmar mientras todavía falta información crítica.</p>\n<h3 id=\"robustez-en-un-entorno-embebido\">Robustez en un entorno embebido</h3>\n<p>El SDK y sus respuestas no siempre llegan con la forma ideal. Se agregaron watchdogs, parseo defensivo, protección contra doble envío y aislamiento de diagnósticos para que una falla secundaria no rompa los controles esenciales.</p>\n<h3 id=\"contexto-que-viaja-con-la-accion\">Contexto que viaja con la acción</h3>\n<p>El reporte nace relacionado con el registro desde el cual se abrió. Eso elimina la búsqueda manual posterior y mejora la calidad de la información que recibe quien resuelve el problema.</p>\n<h2 id=\"beneficios-obtenidos\">Beneficios obtenidos</h2>\n<ul>\n<li>menos decisiones inválidas antes de escribir en el CRM;</li>\n<li>políticas comerciales convertidas en feedback inmediato;</li>\n<li>excepciones encaminadas al aprobador correcto;</li>\n<li>reportes más consistentes y vinculados a su origen;</li>\n<li>menor carga cognitiva para el equipo operativo;</li>\n<li>trazabilidad de extremo a extremo entre interfaz, funciones, automatización y registro final;</li>\n<li>una base reutilizable para sumar recorridos sin sacar al usuario de su herramienta cotidiana.</li>\n</ul>\n<h2 id=\"la-leccion-transferible\">La lección transferible</h2>\n<p>Un buen widget de CRM no es un formulario más lindo. Es una capa de traducción entre el modelo de datos, la política del negocio y la decisión humana.</p>\n<p>Cuando el control aparece en el punto de trabajo, la prevención deja de depender de capacitación perfecta: el propio entorno conduce hacia una acción válida.</p>\n<blockquote>\n<p>Caso basado en dos implementaciones reales. Se removieron nombres, dominios, módulos internos, catálogos, cifras, identificadores y detalles comerciales sensibles.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "El problema de fondo",
          "depth": 2,
          "id": "el-problema-de-fondo"
        },
        {
          "label": "Dos recorridos, una misma idea",
          "depth": 2,
          "id": "dos-recorridos-una-misma-idea"
        },
        {
          "label": "Selección y confirmación de una propuesta",
          "depth": 3,
          "id": "seleccion-y-confirmacion-de-una-propuesta"
        },
        {
          "label": "Reporte contextual de problemas",
          "depth": 3,
          "id": "reporte-contextual-de-problemas"
        },
        {
          "label": "Arquitectura de integración",
          "depth": 2,
          "id": "arquitectura-de-integracion"
        },
        {
          "label": "Decisiones que dieron resultado",
          "depth": 2,
          "id": "decisiones-que-dieron-resultado"
        },
        {
          "label": "Reglas visibles en el momento correcto",
          "depth": 3,
          "id": "reglas-visibles-en-el-momento-correcto"
        },
        {
          "label": "Bloqueos proporcionales",
          "depth": 3,
          "id": "bloqueos-proporcionales"
        },
        {
          "label": "Estados mutuamente excluyentes",
          "depth": 3,
          "id": "estados-mutuamente-excluyentes"
        },
        {
          "label": "Robustez en un entorno embebido",
          "depth": 3,
          "id": "robustez-en-un-entorno-embebido"
        },
        {
          "label": "Contexto que viaja con la acción",
          "depth": 3,
          "id": "contexto-que-viaja-con-la-accion"
        },
        {
          "label": "Beneficios obtenidos",
          "depth": 2,
          "id": "beneficios-obtenidos"
        },
        {
          "label": "La lección transferible",
          "depth": 2,
          "id": "la-leccion-transferible"
        }
      ],
      "raw": "---\nslug: caso-widgets-crm-flujos-guiados\ntitle: Caso real — Widgets que convierten reglas del CRM en flujos guiados\ntype: case-study\norder: 2\nsummary: Dos widgets embebidos llevaron contexto, validaciones y automatización al punto exacto donde el equipo tomaba decisiones.\ntags: [caso-real, crm, widgets, javascript, deluge, n8n, integraciones, ux]\nrelated: [backup-versionado-crm, arquitectura-read-only, modelos-guiados-el-entorno-es-la-politica]\narea: Casos de producto\nglyph: ◆\nhue: rgba(236,95,189,.24)\n---\n\n# Caso real — Widgets que convierten reglas del CRM en flujos guiados\n\n## El problema de fondo\n\nEl CRM concentraba datos y automatizaciones, pero algunas tareas seguían exigiendo conocer demasiadas reglas de memoria: qué opciones eran válidas, qué límites aplicaban, cuándo correspondía una aprobación y cómo reportar un problema sin perder el contexto de origen.\n\nLa solución no fue crear otra aplicación separada. Se construyeron widgets embebidos que aparecían dentro del registro y convertían esas reglas en recorridos guiados.\n\n## Dos recorridos, una misma idea\n\n### Selección y confirmación de una propuesta\n\nEl primer widget reúne configuración del registro, catálogo vigente, medios de pago, cuotas, descuentos, condiciones adicionales y una eventual contraoferta.\n\nAntes de permitir una confirmación:\n\n- verifica que el registro esté en la etapa correcta;\n- filtra las opciones por contexto;\n- calcula importes y cuotas en tiempo real;\n- aplica límites distintos según el tipo de propuesta;\n- deshabilita combinaciones incompatibles y explica el motivo;\n- deriva excepciones al rol aprobador;\n- adjunta documentación cuando corresponde;\n- arma un payload único y evita envíos duplicados.\n\nLa interfaz hace visible la política mientras la persona decide. No depende de que recuerde una tabla externa ni de que descubra el error después de guardar.\n\n### Reporte contextual de problemas\n\nEl segundo widget puede abrirse desde distintos módulos. Detecta la entidad y el registro de origen, recupera su contexto y prepara un reporte vinculado desde el comienzo.\n\nUn buscador con categorías reemplaza una lista extensa y permite explorar o encontrar un tipo de problema ignorando mayúsculas y tildes. La selección debe provenir del catálogo: escribir texto parecido no alcanza para enviar una clasificación ambigua.\n\nTambién contempla adjuntos, estados de carga, errores parciales y módulos que todavía no tienen todos sus campos confirmados. El flujo principal permanece operativo aunque falle información secundaria de diagnóstico.\n\n## Arquitectura de integración\n\n| Pieza | Función |\n|---|---|\n| Widget HTML/CSS/JavaScript | Interacción rápida dentro del iframe del CRM |\n| SDK de widgets | Contexto de página, lectura del registro, adjuntos y cierre del popup |\n| Funciones del CRM | Datos preparados y reglas cercanas al modelo de negocio |\n| Webhook | Contrato explícito de salida |\n| n8n | Orquestación de escrituras y acciones posteriores |\n| CRM | Fuente de verdad y trazabilidad final |\n\nLa frontera fue deliberada: el widget guía, valida y presenta; las funciones recuperan contexto; la automatización coordina la escritura. Ninguna pieza necesita fingir que es todo el sistema.\n\n## Decisiones que dieron resultado\n\n### Reglas visibles en el momento correcto\n\nUn límite que sólo existe en documentación llega tarde. Mostrarlo junto al control afectado reduce ensayo, error y consultas laterales.\n\n### Bloqueos proporcionales\n\nUna etapa incorrecta bloquea el recorrido completo. Una combinación inválida bloquea sólo esa alternativa. Un fallo al adjuntar se informa sin ocultar que el registro principal ya fue creado.\n\n### Estados mutuamente excluyentes\n\nCarga, error técnico, contexto no habilitado y flujo normal tienen pantallas separadas. Esto evita interfaces mezcladas donde parece posible confirmar mientras todavía falta información crítica.\n\n### Robustez en un entorno embebido\n\nEl SDK y sus respuestas no siempre llegan con la forma ideal. Se agregaron watchdogs, parseo defensivo, protección contra doble envío y aislamiento de diagnósticos para que una falla secundaria no rompa los controles esenciales.\n\n### Contexto que viaja con la acción\n\nEl reporte nace relacionado con el registro desde el cual se abrió. Eso elimina la búsqueda manual posterior y mejora la calidad de la información que recibe quien resuelve el problema.\n\n## Beneficios obtenidos\n\n- menos decisiones inválidas antes de escribir en el CRM;\n- políticas comerciales convertidas en feedback inmediato;\n- excepciones encaminadas al aprobador correcto;\n- reportes más consistentes y vinculados a su origen;\n- menor carga cognitiva para el equipo operativo;\n- trazabilidad de extremo a extremo entre interfaz, funciones, automatización y registro final;\n- una base reutilizable para sumar recorridos sin sacar al usuario de su herramienta cotidiana.\n\n## La lección transferible\n\nUn buen widget de CRM no es un formulario más lindo. Es una capa de traducción entre el modelo de datos, la política del negocio y la decisión humana.\n\nCuando el control aparece en el punto de trabajo, la prevención deja de depender de capacitación perfecta: el propio entorno conduce hacia una acción válida.\n\n> Caso basado en dos implementaciones reales. Se removieron nombres, dominios, módulos internos, catálogos, cifras, identificadores y detalles comerciales sensibles.\n"
    },
    {
      "slug": "caso-jev-director-narrativo",
      "title": "Caso: un Director que separa narración y memoria",
      "summary": "Una arquitectura orquestada donde un modelo redacta la escena, Jev decide sus consecuencias y un registro de eventos reconstruye lo que cada personaje puede recordar.",
      "type": "case-study",
      "order": 3,
      "tags": [
        "jev",
        "narrativa",
        "memoria",
        "agentes",
        "eventos",
        "caso-real"
      ],
      "related": [
        "jev-decisiones-estructuradas",
        "orquestacion",
        "continuidad-y-observabilidad"
      ],
      "area": "Casos de producto",
      "glyph": "◉",
      "hue": "rgba(236,95,189,.24)",
      "file": "caso-jev-director-narrativo.md",
      "html": "<h2 id=\"el-problema-que-aparecio-despues-de-escribir\">El problema que apareció después de escribir</h2>\n<p>En una aplicación de ficción interactiva, el modelo generativo podía producir escenas y diálogos. El desafío era conservar las consecuencias: quién descubrió un secreto, qué promesa quedó pendiente, cómo cambió una relación y qué tema seguía abierto.</p>\n<p>Un chat largo no es una fuente estable para reconstruir todo eso. Repetirle el historial entero al narrador consume contexto y no garantiza que distinga entre un hecho duradero, una interpretación y un gesto cotidiano. La v2 incorporó un <strong>Director</strong> que observa cada turno y mantiene un estado narrativo separado de la prosa.</p>\n<h2 id=\"la-orquestacion\">La orquestación</h2>\n<p>El flujo divide responsabilidades:</p>\n<ol>\n<li><strong>Narrador:</strong> escribe la escena y entrega acciones con los personajes identificados.</li>\n<li><strong>Constructor de candidatos:</strong> arma pares de relación a partir de esos identificadores. Un compilador pequeño propone afirmaciones sobre hechos, temas y promesas.</li>\n<li><strong>Jev:</strong> responde preguntas tipadas sobre cambios de relación, categorías narrativas, equivalencia con asuntos registrados y quién se enteró.</li>\n<li><strong>Código de dominio:</strong> transforma decisiones válidas en eventos, limita su efecto y reconstruye el estado mediante <code>replay</code>.</li>\n<li><strong>Contexto del siguiente turno:</strong> resume lo relevante para el narrador y recupera sólo recuerdos que corresponden a ese punto de la historia.</li>\n</ol>\n<p>El Director tiene un núcleo de eventos y reducers sin llamadas al modelo; la parte que consulta a Jev vive separada. Así se puede probar la lógica de estado sin red y revisar de dónde salió cada consecuencia.</p>\n<h2 id=\"relaciones-que-un-momento-pese-no-significa-que-cambie-todo\">Relaciones: que un momento pese no significa que cambie todo</h2>\n<p>Los candidatos son pares dirigidos entre el protagonista y los demás personajes presentes. La dirección importa: la confianza de A hacia B puede cambiar aunque la de B hacia A no lo haga. El primer llamado a Jev pregunta, en lote, si hubo un cambio genuino; un segundo llamado evalúa dimensión, dirección y magnitud sólo para los candidatos seleccionados.</p>\n<p>Las pruebas mostraron que un gesto agradable podía recibir demasiado peso si se miraba sólo la intensidad del momento. El cálculo incorporó otras dos señales: la probabilidad de que la relación haya cambiado y si alguien aprendió algo nuevo de la otra persona. Un café cotidiano y una revelación dejan huellas distintas.</p>\n<p>El código acota el delta máximo por escena e invierte el signo cuando corresponde a tensión: mejorar una relación puede bajar la tensión mientras suben confianza o cercanía. También normaliza correctamente <em>Score</em> antes de aplicar el cambio; el valor crudo representa la escala de criterios definida en la pregunta.</p>\n<h2 id=\"hechos-saber-algo-no-es-haber-estado-cerca\">Hechos: saber algo no es haber estado cerca</h2>\n<p>Para el estado narrativo, un compilador propone afirmaciones en tercera persona. Jev las clasifica como hecho duradero, tema abierto, promesa o nada. Luego compara candidatos con lo ya registrado y con otros del mismo turno para evitar duplicados semánticos.</p>\n<p>La pregunta «¿quién se enteró?» se hace por separado. Que un personaje esté en la escena no implica que oyó una conversación privada o entendió una alusión. Si se entera varios turnos más tarde, se actualiza la lista de quienes conocen <strong>el mismo hecho</strong>; no se inventa otro hecho igual.</p>\n<p>Los eventos resultantes alimentan un registro del cual se reconstruye el estado. El resumen que recibe el narrador incluye hechos que conoce alguno de los presentes, relaciones expresadas en palabras y asuntos pendientes. Los recuerdos, además, se filtran por línea de tiempo: no entra un evento futuro ni uno que ocurrió exclusivamente en otra rama. Ese último filtro es una regla de código, no una decisión de Jev.</p>\n<h2 id=\"lo-que-la-prueba-permite-afirmar\">Lo que la prueba permite afirmar</h2>\n<p>El Director está implementado en una rama v2 y se calibró con fragmentos de historia anotados a mano. Se hizo además una comparación a ciegas de la respuesta del narrador con y sin el resumen del Director sobre una sesión real: <strong>20 pares; 7 preferencias por la versión con resumen, 5 por la versión sin él y 8 empates</strong>. Es evidencia acotada de coherencia; no demuestra una mejora clara de la calidad de escritura.</p>\n<p>La atribución de quién sabe qué todavía falla en escenas implícitas; en pruebas manuales un modelo generativo usado como juez resolvió mejor algunos ejemplos. También quedan promesas condicionales sin detectar y una falla de red al consultar Jev todavía puede cortar el turno. La v2 está en evaluación, con trabajo pendiente antes de tratarla como una solución cerrada.</p>\n<h2 id=\"la-decision-arquitectonica\">La decisión arquitectónica</h2>\n<p>La separación deja un contrato legible: <strong>un modelo redacta, otro ayuda a decidir qué consecuencias hubo y el código determina qué queda registrado y qué puede recordarse</strong>. Jev aporta decisiones estructuradas donde la pregunta es pequeña y verificable; el Director aporta reglas, trazabilidad y límites temporales.</p>\n<p>El valor del caso no está en sumar un modelo al pipeline. Está en poder señalar un turno, una decisión y un evento cuando la historia recuerda algo que no debería, o se olvida de algo que sí pasó.</p>\n<blockquote>\n<p>Caso basado en una v2 funcional en evaluación. Se anonimizaron producto, personajes, sesiones y detalles del repositorio; las cifras corresponden a una prueba comparativa acotada, no a una medición de producción.</p>\n</blockquote>\n",
      "headings": [
        {
          "label": "El problema que apareció después de escribir",
          "depth": 2,
          "id": "el-problema-que-aparecio-despues-de-escribir"
        },
        {
          "label": "La orquestación",
          "depth": 2,
          "id": "la-orquestacion"
        },
        {
          "label": "Relaciones: que un momento pese no significa que cambie todo",
          "depth": 2,
          "id": "relaciones-que-un-momento-pese-no-significa-que-cambie-todo"
        },
        {
          "label": "Hechos: saber algo no es haber estado cerca",
          "depth": 2,
          "id": "hechos-saber-algo-no-es-haber-estado-cerca"
        },
        {
          "label": "Lo que la prueba permite afirmar",
          "depth": 2,
          "id": "lo-que-la-prueba-permite-afirmar"
        },
        {
          "label": "La decisión arquitectónica",
          "depth": 2,
          "id": "la-decision-arquitectonica"
        }
      ],
      "raw": "---\nslug: caso-jev-director-narrativo\ntitle: \"Caso: un Director que separa narración y memoria\"\ntype: case-study\norder: 3\nsummary: \"Una arquitectura orquestada donde un modelo redacta la escena, Jev decide sus consecuencias y un registro de eventos reconstruye lo que cada personaje puede recordar.\"\ntags: [jev, narrativa, memoria, agentes, eventos, caso-real]\nrelated: [jev-decisiones-estructuradas, orquestacion, continuidad-y-observabilidad]\narea: Casos de producto\nglyph: ◉\nhue: rgba(236,95,189,.24)\n---\n\n# Caso: un Director que separa narración y memoria\n\n## El problema que apareció después de escribir\n\nEn una aplicación de ficción interactiva, el modelo generativo podía producir escenas y diálogos. El desafío era conservar las consecuencias: quién descubrió un secreto, qué promesa quedó pendiente, cómo cambió una relación y qué tema seguía abierto.\n\nUn chat largo no es una fuente estable para reconstruir todo eso. Repetirle el historial entero al narrador consume contexto y no garantiza que distinga entre un hecho duradero, una interpretación y un gesto cotidiano. La v2 incorporó un **Director** que observa cada turno y mantiene un estado narrativo separado de la prosa.\n\n## La orquestación\n\nEl flujo divide responsabilidades:\n\n1. **Narrador:** escribe la escena y entrega acciones con los personajes identificados.\n2. **Constructor de candidatos:** arma pares de relación a partir de esos identificadores. Un compilador pequeño propone afirmaciones sobre hechos, temas y promesas.\n3. **Jev:** responde preguntas tipadas sobre cambios de relación, categorías narrativas, equivalencia con asuntos registrados y quién se enteró.\n4. **Código de dominio:** transforma decisiones válidas en eventos, limita su efecto y reconstruye el estado mediante `replay`.\n5. **Contexto del siguiente turno:** resume lo relevante para el narrador y recupera sólo recuerdos que corresponden a ese punto de la historia.\n\nEl Director tiene un núcleo de eventos y reducers sin llamadas al modelo; la parte que consulta a Jev vive separada. Así se puede probar la lógica de estado sin red y revisar de dónde salió cada consecuencia.\n\n## Relaciones: que un momento pese no significa que cambie todo\n\nLos candidatos son pares dirigidos entre el protagonista y los demás personajes presentes. La dirección importa: la confianza de A hacia B puede cambiar aunque la de B hacia A no lo haga. El primer llamado a Jev pregunta, en lote, si hubo un cambio genuino; un segundo llamado evalúa dimensión, dirección y magnitud sólo para los candidatos seleccionados.\n\nLas pruebas mostraron que un gesto agradable podía recibir demasiado peso si se miraba sólo la intensidad del momento. El cálculo incorporó otras dos señales: la probabilidad de que la relación haya cambiado y si alguien aprendió algo nuevo de la otra persona. Un café cotidiano y una revelación dejan huellas distintas.\n\nEl código acota el delta máximo por escena e invierte el signo cuando corresponde a tensión: mejorar una relación puede bajar la tensión mientras suben confianza o cercanía. También normaliza correctamente *Score* antes de aplicar el cambio; el valor crudo representa la escala de criterios definida en la pregunta.\n\n## Hechos: saber algo no es haber estado cerca\n\nPara el estado narrativo, un compilador propone afirmaciones en tercera persona. Jev las clasifica como hecho duradero, tema abierto, promesa o nada. Luego compara candidatos con lo ya registrado y con otros del mismo turno para evitar duplicados semánticos.\n\nLa pregunta «¿quién se enteró?» se hace por separado. Que un personaje esté en la escena no implica que oyó una conversación privada o entendió una alusión. Si se entera varios turnos más tarde, se actualiza la lista de quienes conocen **el mismo hecho**; no se inventa otro hecho igual.\n\nLos eventos resultantes alimentan un registro del cual se reconstruye el estado. El resumen que recibe el narrador incluye hechos que conoce alguno de los presentes, relaciones expresadas en palabras y asuntos pendientes. Los recuerdos, además, se filtran por línea de tiempo: no entra un evento futuro ni uno que ocurrió exclusivamente en otra rama. Ese último filtro es una regla de código, no una decisión de Jev.\n\n## Lo que la prueba permite afirmar\n\nEl Director está implementado en una rama v2 y se calibró con fragmentos de historia anotados a mano. Se hizo además una comparación a ciegas de la respuesta del narrador con y sin el resumen del Director sobre una sesión real: **20 pares; 7 preferencias por la versión con resumen, 5 por la versión sin él y 8 empates**. Es evidencia acotada de coherencia; no demuestra una mejora clara de la calidad de escritura.\n\nLa atribución de quién sabe qué todavía falla en escenas implícitas; en pruebas manuales un modelo generativo usado como juez resolvió mejor algunos ejemplos. También quedan promesas condicionales sin detectar y una falla de red al consultar Jev todavía puede cortar el turno. La v2 está en evaluación, con trabajo pendiente antes de tratarla como una solución cerrada.\n\n## La decisión arquitectónica\n\nLa separación deja un contrato legible: **un modelo redacta, otro ayuda a decidir qué consecuencias hubo y el código determina qué queda registrado y qué puede recordarse**. Jev aporta decisiones estructuradas donde la pregunta es pequeña y verificable; el Director aporta reglas, trazabilidad y límites temporales.\n\nEl valor del caso no está en sumar un modelo al pipeline. Está en poder señalar un turno, una decisión y un evento cuando la historia recuerda algo que no debería, o se olvida de algo que sí pasó.\n\n> Caso basado en una v2 funcional en evaluación. Se anonimizaron producto, personajes, sesiones y detalles del repositorio; las cifras corresponden a una prueba comparativa acotada, no a una medición de producción.\n"
    },
    {
      "slug": "tailscale-entorno-agentes",
      "title": "Tailscale en un entorno de agentes: portátil, VPS y WSL",
      "summary": "Un diseño de referencia anonimizado para acceder al host de trabajo, operar una VPS y compartir previews internas sin publicar puertos de administración.",
      "type": "guide",
      "order": 10,
      "tags": [
        "tailscale",
        "orca",
        "wsl",
        "vps",
        "ssh",
        "agentes"
      ],
      "related": [
        "tailscale-red-privada-identidad",
        "tailscale-permisos-grants",
        "acceso-portatil-orca",
        "hosts-ssh"
      ],
      "area": "Casos de producto",
      "glyph": "◆",
      "hue": "rgba(237,195,94,.24)",
      "file": "tailscale-entorno-agentes.md",
      "html": "<h2 id=\"el-escenario\">El escenario</h2>\n<p>Un desarrollador trabaja en Windows con WSL 2: ahí viven repositorios, agentes y procesos locales. También administra una VPS y quiere entrar desde una notebook cuando se mueve. El objetivo es conservar <strong>una sola estación de trabajo</strong> y darle rutas privadas a operaciones puntuales. Este es un diseño de referencia anonimizado, no el registro de una implementación ya verificada.</p>\n<p>La <a href=\"/entrada/acceso-portatil-orca\">guía de acceso portátil a Orca</a> plantea esa continuidad. Acá ampliamos el mapa para incorporar la VPS y las previews de desarrollo.</p>\n<h2 id=\"mapa-de-conexiones\">Mapa de conexiones</h2>\n<table>\n<thead>\n<tr>\n<th>Desde</th>\n<th>Hacia</th>\n<th>Uso</th>\n<th>Límite</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Notebook</td>\n<td>Host Windows/WSL</td>\n<td>Orca y SSH</td>\n<td>Sólo la identidad y el puerto autorizados</td>\n</tr>\n<tr>\n<td>Host de trabajo</td>\n<td>VPS</td>\n<td>Administración o API interna</td>\n<td>Sólo los servicios necesarios</td>\n</tr>\n<tr>\n<td>Equipo invitado</td>\n<td>Preview local</td>\n<td>Revisión de una interfaz</td>\n<td>Acceso temporal y restringido</td>\n</tr>\n</tbody>\n</table>\n<p>La notebook funciona como cliente; los repos, credenciales de ejecución y ramas siguen en el host. La VPS es otro nodo con identidad propia. Los agentes pueden operar por esas rutas, pero su capacidad de modificar código o producción sigue dependiendo de credenciales, permisos del servicio y aprobaciones del flujo de trabajo.</p>\n<h2 id=\"la-decision-incomoda-de-wsl-2\">La decisión incómoda de WSL 2</h2>\n<p>Tailscale documenta un conflicto cuando se ejecuta <strong>a la vez en Windows y dentro de WSL 2</strong>: el tráfico cifrado de WSL sobre el Tailscale del host puede fallar por el tamaño de los paquetes. Para este diseño, el punto de partida es instalar Tailscale <strong>en Windows</strong> y mantener una sola instancia de red. Si un cliente remoto necesita llegar a <code>sshd</code> dentro de WSL, hay que verificar la ruta Windows → WSL, la dirección y el puerto de escucha, el firewall y el modo de red de WSL vigente; no asumir que la IP de la tailnet del Windows apunta mágicamente al Linux. <a href=\"https://tailscale.com/docs/install/windows/wsl2\" target=\"_blank\" rel=\"noopener noreferrer\">Tailscale en WSL 2</a></p>\n<p>Antes de cambiar reglas de red, comprobá desde la propia máquina Windows que podés conectar al SSH de WSL. Después comprobalo desde la notebook por la dirección de Tailscale del host. Si una actualización de WSL cambia el enrutamiento, la prueba remota es la que detecta la regresión. La alternativa de ejecutar Tailscale <em>sólo</em> dentro de WSL existe, pero requiere evaluar su ciclo de vida y las consideraciones de MTU que describe la documentación.</p>\n<h2 id=\"administrar-la-vps-sin-confundir-red-con-autoridad\">Administrar la VPS sin confundir red con autoridad</h2>\n<p>En la VPS, Tailscale puede dar una dirección privada estable para SSH o una API interna. Un servidor automatizado debería tener identidad de máquina mediante tag y una forma de autenticación administrada, sin pegar auth keys en repositorios o imágenes. La política puede habilitar host de trabajo → VPS TCP 22 o 443 y dejar fuera la base de datos. La app y SSH siguen validando usuarios, sesiones y acciones. <a href=\"https://tailscale.com/docs/how-to/set-up-servers\" target=\"_blank\" rel=\"noopener noreferrer\">Configurar servidores</a> · <a href=\"https://tailscale.com/docs/features/access-control/auth-keys\" target=\"_blank\" rel=\"noopener noreferrer\">Auth keys</a></p>\n<p>Si el servicio está en un contenedor, decidí dónde vive Tailscale: en el host con un proxy al contenedor o en un contenedor con estado y autenticación propios. La primera opción reduce identidades que gestionar para pocas apps; la segunda sirve cuando se necesita un ciclo de vida independiente. Ninguna habilita automáticamente acceso a toda la red Docker. <a href=\"https://tailscale.com/docs/features/containers/docker/docker-params\" target=\"_blank\" rel=\"noopener noreferrer\">Parámetros para Docker</a></p>\n<h2 id=\"previews-serve-y-funnel-hacen-trabajos-distintos\">Previews: Serve y Funnel hacen trabajos distintos</h2>\n<p><strong>Tailscale Serve</strong> publica un servicio local hacia la tailnet y mantiene las reglas de acceso de la red. <strong>Funnel</strong> lo expone a Internet: sirve para una demo pública deliberada, con controles de la aplicación y un tiempo de vida claro. Para una revisión interna de un panel o una interfaz, Serve es el punto de partida. Revisá el comando y sus requisitos en la documentación vigente antes de activarlo, porque su sintaxis cambió con el tiempo. <a href=\"https://tailscale.com/docs/features/tailscale-serve\" target=\"_blank\" rel=\"noopener noreferrer\">Serve</a> · <a href=\"https://tailscale.com/docs/features/tailscale-funnel\" target=\"_blank\" rel=\"noopener noreferrer\">Funnel</a></p>\n<h2 id=\"un-preflight-que-cabe-en-una-tarde\">Un preflight que cabe en una tarde</h2>\n<ol>\n<li>Elegí el host que será el nodo de Tailscale en la máquina Windows/WSL; verificá que SSH de WSL sea accesible desde Windows.</li>\n<li>Registrá notebook, host y VPS con identidades distinguibles; asigná tags a servidores, no a personas.</li>\n<li>Definí una <a href=\"/entrada/tailscale-permisos-grants\">política mínima por origen, destino y puerto</a> y revisá que no quede una regla amplia anterior.</li>\n<li>Probá notebook → host y host → VPS con el protocolo real. Probá también una conexión que debe fallar hacia un servicio <strong>encendido</strong>.</li>\n<li>Reiniciá WSL o el host y repetí las pruebas. Si el host está apagado, ningún túnel conserva el entorno de agentes disponible.</li>\n</ol>\n<p>El resultado es concreto: movilidad sin clones paralelos, VPS administrable por ruta privada y previews que se comparten con alcance explícito. La red conecta las piezas; la autorización de cada servicio y la continuidad operativa siguen en manos del equipo.</p>\n",
      "headings": [
        {
          "label": "El escenario",
          "depth": 2,
          "id": "el-escenario"
        },
        {
          "label": "Mapa de conexiones",
          "depth": 2,
          "id": "mapa-de-conexiones"
        },
        {
          "label": "La decisión incómoda de WSL 2",
          "depth": 2,
          "id": "la-decision-incomoda-de-wsl-2"
        },
        {
          "label": "Administrar la VPS sin confundir red con autoridad",
          "depth": 2,
          "id": "administrar-la-vps-sin-confundir-red-con-autoridad"
        },
        {
          "label": "Previews: Serve y Funnel hacen trabajos distintos",
          "depth": 2,
          "id": "previews-serve-y-funnel-hacen-trabajos-distintos"
        },
        {
          "label": "Un preflight que cabe en una tarde",
          "depth": 2,
          "id": "un-preflight-que-cabe-en-una-tarde"
        }
      ],
      "raw": "---\nslug: tailscale-entorno-agentes\ntitle: \"Tailscale en un entorno de agentes: portátil, VPS y WSL\"\ntype: guide\norder: 10\nsummary: \"Un diseño de referencia anonimizado para acceder al host de trabajo, operar una VPS y compartir previews internas sin publicar puertos de administración.\"\ntags: [tailscale, orca, wsl, vps, ssh, agentes]\nrelated: [tailscale-red-privada-identidad, tailscale-permisos-grants, acceso-portatil-orca, hosts-ssh]\narea: Casos de producto\nglyph: ◆\nhue: rgba(237,195,94,.24)\n---\n\n# Tailscale en un entorno de agentes: portátil, VPS y WSL\n\n## El escenario\n\nUn desarrollador trabaja en Windows con WSL 2: ahí viven repositorios, agentes y procesos locales. También administra una VPS y quiere entrar desde una notebook cuando se mueve. El objetivo es conservar **una sola estación de trabajo** y darle rutas privadas a operaciones puntuales. Este es un diseño de referencia anonimizado, no el registro de una implementación ya verificada.\n\nLa [guía de acceso portátil a Orca](/entrada/acceso-portatil-orca) plantea esa continuidad. Acá ampliamos el mapa para incorporar la VPS y las previews de desarrollo.\n\n## Mapa de conexiones\n\n| Desde | Hacia | Uso | Límite |\n| --- | --- | --- | --- |\n| Notebook | Host Windows/WSL | Orca y SSH | Sólo la identidad y el puerto autorizados |\n| Host de trabajo | VPS | Administración o API interna | Sólo los servicios necesarios |\n| Equipo invitado | Preview local | Revisión de una interfaz | Acceso temporal y restringido |\n\nLa notebook funciona como cliente; los repos, credenciales de ejecución y ramas siguen en el host. La VPS es otro nodo con identidad propia. Los agentes pueden operar por esas rutas, pero su capacidad de modificar código o producción sigue dependiendo de credenciales, permisos del servicio y aprobaciones del flujo de trabajo.\n\n## La decisión incómoda de WSL 2\n\nTailscale documenta un conflicto cuando se ejecuta **a la vez en Windows y dentro de WSL 2**: el tráfico cifrado de WSL sobre el Tailscale del host puede fallar por el tamaño de los paquetes. Para este diseño, el punto de partida es instalar Tailscale **en Windows** y mantener una sola instancia de red. Si un cliente remoto necesita llegar a `sshd` dentro de WSL, hay que verificar la ruta Windows → WSL, la dirección y el puerto de escucha, el firewall y el modo de red de WSL vigente; no asumir que la IP de la tailnet del Windows apunta mágicamente al Linux. [Tailscale en WSL 2](https://tailscale.com/docs/install/windows/wsl2)\n\nAntes de cambiar reglas de red, comprobá desde la propia máquina Windows que podés conectar al SSH de WSL. Después comprobalo desde la notebook por la dirección de Tailscale del host. Si una actualización de WSL cambia el enrutamiento, la prueba remota es la que detecta la regresión. La alternativa de ejecutar Tailscale *sólo* dentro de WSL existe, pero requiere evaluar su ciclo de vida y las consideraciones de MTU que describe la documentación.\n\n## Administrar la VPS sin confundir red con autoridad\n\nEn la VPS, Tailscale puede dar una dirección privada estable para SSH o una API interna. Un servidor automatizado debería tener identidad de máquina mediante tag y una forma de autenticación administrada, sin pegar auth keys en repositorios o imágenes. La política puede habilitar host de trabajo → VPS TCP 22 o 443 y dejar fuera la base de datos. La app y SSH siguen validando usuarios, sesiones y acciones. [Configurar servidores](https://tailscale.com/docs/how-to/set-up-servers) · [Auth keys](https://tailscale.com/docs/features/access-control/auth-keys)\n\nSi el servicio está en un contenedor, decidí dónde vive Tailscale: en el host con un proxy al contenedor o en un contenedor con estado y autenticación propios. La primera opción reduce identidades que gestionar para pocas apps; la segunda sirve cuando se necesita un ciclo de vida independiente. Ninguna habilita automáticamente acceso a toda la red Docker. [Parámetros para Docker](https://tailscale.com/docs/features/containers/docker/docker-params)\n\n## Previews: Serve y Funnel hacen trabajos distintos\n\n**Tailscale Serve** publica un servicio local hacia la tailnet y mantiene las reglas de acceso de la red. **Funnel** lo expone a Internet: sirve para una demo pública deliberada, con controles de la aplicación y un tiempo de vida claro. Para una revisión interna de un panel o una interfaz, Serve es el punto de partida. Revisá el comando y sus requisitos en la documentación vigente antes de activarlo, porque su sintaxis cambió con el tiempo. [Serve](https://tailscale.com/docs/features/tailscale-serve) · [Funnel](https://tailscale.com/docs/features/tailscale-funnel)\n\n## Un preflight que cabe en una tarde\n\n1. Elegí el host que será el nodo de Tailscale en la máquina Windows/WSL; verificá que SSH de WSL sea accesible desde Windows.\n2. Registrá notebook, host y VPS con identidades distinguibles; asigná tags a servidores, no a personas.\n3. Definí una [política mínima por origen, destino y puerto](/entrada/tailscale-permisos-grants) y revisá que no quede una regla amplia anterior.\n4. Probá notebook → host y host → VPS con el protocolo real. Probá también una conexión que debe fallar hacia un servicio **encendido**.\n5. Reiniciá WSL o el host y repetí las pruebas. Si el host está apagado, ningún túnel conserva el entorno de agentes disponible.\n\nEl resultado es concreto: movilidad sin clones paralelos, VPS administrable por ruta privada y previews que se comparten con alcance explícito. La red conecta las piezas; la autorización de cada servicio y la continuidad operativa siguen en manos del equipo.\n"
    }
  ]
}
