<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://3cucharadas.cl/feed/ia.xml" rel="self" type="application/atom+xml" /><link href="https://3cucharadas.cl/" rel="alternate" type="text/html" hreflang="es" /><updated>2026-07-05T20:48:44-04:00</updated><id>https://3cucharadas.cl/feed/ia.xml</id><title type="html">3 Cucharadas | Ia</title><subtitle>Explorando curiosidades</subtitle><author><name>Cristián Labra Olivares</name></author><entry xml:lang="es"><title type="html">Multiagentes en 3 cucharadas: lo que me funcionó y lo que no</title><link href="https://3cucharadas.cl/ia/productividad/desarrollo/multiagente-penta-agent-modelos/" rel="alternate" type="text/html" title="Multiagentes en 3 cucharadas: lo que me funcionó y lo que no" /><published>2026-06-26T20:00:00-04:00</published><updated>2026-06-26T20:00:00-04:00</updated><id>https://3cucharadas.cl/ia/productividad/desarrollo/multiagente-penta-agent-modelos-v2</id><content type="html" xml:base="https://3cucharadas.cl/ia/productividad/desarrollo/multiagente-penta-agent-modelos/"><![CDATA[<p class="text-justify">Esto empezó como una molestia práctica: tareas largas que se cortaban por cuota, conversaciones que quedaban demasiado cargadas y revisiones que exigían copiar contexto entre ventanas de forma incómoda e ineficiente. Para resolverlo armé un multiagente en VS Code, sobre Arch Linux, y llamé primero tri-agent y luego de un par de meses ya es <code class="language-plaintext highlighter-rouge">penta-agent</code>, una forma todavía imperfecta de coordinar agentes, roles, permisos y trazas dentro de mi flujo.</p>

<p class="text-justify">No es algo nuevo ni una promesa de autonomía total, de hecho mantenerlo da harta pega. Pero, es un contrato local de trabajo que ordena quién ejecuta, quién revisa, cuándo se usa MCP, cuándo entra Gemini/Antigravity, cuándo Copilot queda como apoyo, qué skills se cargan y qué evidencia o producto queda al cierre.</p>

<p class="text-justify">Lo cuento desde casos de uso concretos míos: minutas, revisión normativa, de planillas, modelos estadísticos, scripts de automatización en server de la casa, timers de sistema, nube propia, seguridad del router, backups, blog y mantenimiento cotidiano. En todos esos casos me ha servido tener algo de “gobernanza” agéntica. Quizás una falsa sensación de soberanía digital también.</p>

<p class="text-justify">La tesis es simple: un sistema multiagente sin roles, permisos ni trazas puede parecer sofisticado, pero en la práctica se parece demasiado a una reunión sin acta.</p>

<p><strong>Tres ideas para comenzar:</strong></p>

<ul>
  <li><strong>Codex me ha funcionado como ejecutor principal</strong>: lee archivos, aplica parches, corre validaciones y puede cerrar diffs con evidencia. No es infalible, por eso no debería autovalidarse en cambios críticos.</li>
  <li><strong>Claude me ha servido como revisor fuerte (sobre todo con Opus)</strong>: revisa arquitectura, normativa, supuestos estadísticos y riesgos argumentales. Lo uso como freno, y apoyo al ejecutor principal.</li>
  <li><strong>Gemini/Antigravity, Copilot y LiteLLM (con DeepSeek y Z.ai) sirven mejor acotados</strong>: exploración, validación, canary o tareas pequeñas. Cuando empiezan a decidir con poco contexto, el flujo empeora.</li>
</ul>

<h2 id="cucharada-1-el-problema-no-era-usar-agentes-era-no-perder-continuidad">Cucharada 1: el problema no era usar agentes, era no perder continuidad</h2>

<p class="text-justify">En una tarea larga, el costo de una pausa no es solo el tiempo sin respuesta. Lo más caro es perder continuidad: qué se estaba probando, qué archivo cambió, qué hipótesis falló, qué validación quedó pendiente y qué contexto ya no conviene seguir arrastrando.</p>

<p class="text-justify">Mi primer error fue tratar cada modelo/agente como una “segunda opinión” o validación simétrica. Eso no escala. En una minuta o una revisión normativa, terminaba con comentarios útiles pero difíciles de reconciliar.</p>

<p class="text-justify">La solución fue más aburrida y más útil: separar roles. No porque sea “la” forma correcta para todo el mundo, sino porque en mi flujo baja el costo de volver a una tarea, sin recapitular era alto.</p>

<p class="text-justify">Me sirve leer la convergencia de proveedores desde ahí. Codex documenta configuración, sandbox, permisos, MCP, <code class="language-plaintext highlighter-rouge">AGENTS.md</code>, skills y subagentes; GitHub Copilot admite instrucciones de repositorio; Gemini Code Assist describe un agent mode con herramientas, MCP y aprobación de cambios; y Claude Code permite hooks en puntos como <code class="language-plaintext highlighter-rouge">PreToolUse</code>, <code class="language-plaintext highlighter-rouge">PostToolUse</code> y <code class="language-plaintext highlighter-rouge">SessionStart</code>.<sup id="fnref:openai-config"><a href="#fn:openai-config" class="footnote" rel="footnote" role="doc-noteref">1</a></sup><sup id="fnref:github-instructions"><a href="#fn:github-instructions" class="footnote" rel="footnote" role="doc-noteref">2</a></sup><sup id="fnref:gemini-agent"><a href="#fn:gemini-agent" class="footnote" rel="footnote" role="doc-noteref">3</a></sup><sup id="fnref:claude-hooks"><a href="#fn:claude-hooks" class="footnote" rel="footnote" role="doc-noteref">4</a></sup></p>

<p class="table-caption"><strong>Tabla 2</strong> — Roles actuales en <code class="language-plaintext highlighter-rouge">penta-agent</code></p>

<table>
  <thead>
    <tr>
      <th>Componente</th>
      <th>Rol real</th>
      <th>Límite que le impongo</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ChatGPT/Codex</td>
      <td>Orquestador técnico local, planner y ejecutor</td>
      <td>No autovalidarse como única fuente de verdad en cambios críticos</td>
    </tr>
    <tr>
      <td>Claude</td>
      <td>Reviewer, auditor y co-planificador</td>
      <td>No tomar control operativo por defecto</td>
    </tr>
    <tr>
      <td>Gemini/Antigravity</td>
      <td>Explorer, validator y fallback</td>
      <td>No entrar al critical path salvo decisión explícita</td>
    </tr>
    <tr>
      <td>Copilot</td>
      <td>Canary y soporte IDE/GitHub-native</td>
      <td>No tratarlo como árbitro arquitectónico independiente</td>
    </tr>
    <tr>
      <td>LiteLLM sidecar</td>
      <td>Delegación barata y estrecha</td>
      <td>No usarlo para arquitectura, seguridad ni decisiones finales; hoy lo uso acotado con DeepSeek y Z.ai</td>
    </tr>
    <tr>
      <td>Humano</td>
      <td>Cierre, privacidad y aceptación</td>
      <td>No delegar criterio final cuando hay riesgo</td>
    </tr>
  </tbody>
</table>

<p>La arquitectura local lo vuelve explícito. En <code class="language-plaintext highlighter-rouge">routing.yaml</code>, la regla <code class="language-plaintext highlighter-rouge">penta_agent_ops</code> mantiene a Codex como <code class="language-plaintext highlighter-rouge">primary</code>, a Claude como <code class="language-plaintext highlighter-rouge">reviewer</code>, a Gemini como validador/fallback y al humano como checkpoint:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">id</span><span class="pi">:</span> <span class="s">penta_agent_ops</span>
<span class="na">planner</span><span class="pi">:</span> <span class="s">codex</span>
<span class="na">primary</span><span class="pi">:</span> <span class="s">codex</span>
<span class="na">reviewer</span><span class="pi">:</span> <span class="s">claude</span>
<span class="na">escalate_to</span><span class="pi">:</span> <span class="s">humano</span>
<span class="na">validator_chain</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">gemini</span><span class="pi">]</span>
<span class="na">fallback_chain</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">gemini</span><span class="pi">]</span>
<span class="na">planning</span><span class="pi">:</span>
  <span class="na">proactive_skills</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">handoff-protocol</span><span class="pi">,</span> <span class="nv">recall-context</span><span class="pi">]</span>
  <span class="na">mcp_policy</span><span class="pi">:</span>
    <span class="na">mode</span><span class="pi">:</span> <span class="s">conditional</span>
    <span class="na">allowed_paths</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">claude_to_codex_mcp</span><span class="pi">,</span> <span class="nv">gemini_to_codex_mcp</span><span class="pi">]</span>
  <span class="na">provider_roles</span><span class="pi">:</span>
    <span class="na">planning_sidecars</span><span class="pi">:</span>
      <span class="na">canary</span><span class="pi">:</span> <span class="s">copilot</span>
</code></pre></div></div>

<p class="text-justify">El detalle clave es <code class="language-plaintext highlighter-rouge">mcp_policy.mode: conditional</code>. No todo se manda por MCP. No todo merece handoff. No todo merece un segundo proveedor. La evaluación luego de algunas iteraciones la hice proactiva, al igual que con los skills, que los activadores fuesen bien explicitos. Al principio no se activaban cuando querían o los handoffs eran escasos.</p>

<hr />

<h2 id="cucharada-2-el-repositorio-como-contrato-de-trabajo">Cucharada 2: el repositorio como contrato de trabajo</h2>

<p class="text-justify">La pieza que más me ayudó no fue un modelo. Fue una regla de arranque: si una tarea toca multiagente, MCP, Claude, Gemini, Copilot, routing, handoffs o <code class="language-plaintext highlighter-rouge">penta-agent</code>, primero se lee el canon local.</p>

<p>En mi caso, ese canon vive en archivos como:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">router/routing.yaml</code></li>
  <li><code class="language-plaintext highlighter-rouge">shared-references/arquitectura-multiagente.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">playbooks/puente-mcp-codex.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">.mcp.json</code></li>
</ul>

<p class="text-justify">Esto evita un vicio frecuente: hacer uso genérico de CLIs, modelos y comandos antes de entender el “contrato” u objetivo del proyecto. En cosas chicas puede no importar. En una revisión normativa, una corrida estadística o un ajuste de seguridad local, sí importa, ya que la deriva gasta tokens como loco, y a veces termina varado en cualquier lugar.</p>

<p>Un <code class="language-plaintext highlighter-rouge">AGENTS.md</code> útil no necesita ser una novela, gasta contexto, tiene que evitar malas prácticas creo yo:</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gh"># Reglas multiagente del workspace</span>

Si el usuario menciona trabajo multiagente, MCP, Claude, Gemini,
Copilot, routing, handoff o penta-agent:
<span class="p">
1.</span> Usar <span class="sb">`penta-agent/`</span> como source of truth.
<span class="p">2.</span> Leer primero routing, arquitectura, puente MCP y configuración MCP.
<span class="p">3.</span> No hacer probing genérico de CLIs antes de leer el canon.
<span class="p">4.</span> Delegar a Antigravity solo mediante <span class="sb">`scripts/agent/agy-bridge`</span>.
<span class="p">5.</span> No entregar secretos, <span class="sb">`.env`</span>, llaves ni credenciales a proveedores externos.
</code></pre></div></div>

<p class="text-justify">La literatura reciente pareciera ir en una dirección parecida, pero con una advertencia sana. Galster et al. describen estos artefactos como mecanismos versionables para configurar herramientas agenticas y observan que <code class="language-plaintext highlighter-rouge">AGENTS.md</code> emerge como estándar interoperable.<sup id="fnref:galster-config"><a href="#fn:galster-config" class="footnote" rel="footnote" role="doc-noteref">5</a></sup> Arabat y Sayagh proponen mirarlos como “instructions-as-code”, no como notas al margen.<sup id="fnref:instructions-code"><a href="#fn:instructions-code" class="footnote" rel="footnote" role="doc-noteref">6</a></sup> Por otro lado, Gloaguen et al. advierten que los context files pueden reducir éxito y aumentar costo cuando agregan requisitos innecesarios.<sup id="fnref:agents-md-eval"><a href="#fn:agents-md-eval" class="footnote" rel="footnote" role="doc-noteref">7</a></sup> En mi experiencia, hay que buscar bien el equilibrio y estar dispuesto a tunear de forma constante.</p>

<h3 id="skills-procedimientos-no-prompts-eternos">Skills: procedimientos, no prompts eternos</h3>

<p>Las skills me han servido cuando actúan como procedimientos reutilizables con activación clara, límites y referencias. Una skill de publicación, por ejemplo, no debería decir “escribe bonito”; debería decir cosas verificables:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">name</span><span class="pi">:</span> <span class="s">jekyll-post</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Posts Jekyll con front matter, drafts/posts, build y publicacion reproducible.</span>
</code></pre></div></div>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">-</span> Preparar front matter correcto y validar build.
<span class="p">-</span> Mantener claims fechados y trazables.
<span class="p">-</span> Revisar front matter y guía editorial.
</code></pre></div></div>

<p class="text-justify">La pregunta mínima para una skill es: cuándo se activa, qué no debe hacer, qué archivos debe leer y qué salida permite verificar que hizo bien su trabajo. Eso calza con la carga progresiva descrita por Anthropic: metadata primero, instrucciones cuando la skill se activa, y recursos o scripts solo si hacen falta.<sup id="fnref:claude-skills"><a href="#fn:claude-skills" class="footnote" rel="footnote" role="doc-noteref">8</a></sup> También calza con SkillJuror, que muestra que la organización de una skill cambia cómo los agentes buscan y aplican conocimiento, aunque el beneficio depende de que los recursos sean accionables.<sup id="fnref:skilljuror"><a href="#fn:skilljuror" class="footnote" rel="footnote" role="doc-noteref">9</a></sup></p>

<p class="text-justify">La advertencia de seguridad es igualmente importante: <code class="language-plaintext highlighter-rouge">SKILL.md</code> no es documentación pasiva.<sup id="fnref:skill-supply-chain"><a href="#fn:skill-supply-chain" class="footnote" rel="footnote" role="doc-noteref">10</a></sup> Si una skill trae scripts, instrucciones ambiguas o metadata manipulable, se parece más a instalar software que a pegar un prompt inocente.</p>

<h3 id="mcp-puente-pero-aún-no-le-saco-el-jugo">MCP: puente, pero aún no le saco el jugo</h3>

<p>El MCP real de <code class="language-plaintext highlighter-rouge">penta-agent</code> es deliberadamente pequeño:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"mcpServers"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"codex"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"stdio"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"command"</span><span class="p">:</span><span class="w"> </span><span class="s2">"scripts/codex_mcp.sh"</span><span class="p">,</span><span class="w">
      </span><span class="nl">"args"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"mcp-server"</span><span class="p">],</span><span class="w">
      </span><span class="nl">"env"</span><span class="p">:</span><span class="w"> </span><span class="p">{}</span><span class="w">
    </span><span class="p">}</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p class="text-justify">La idea no es que todos los agentes se conecten con todos. El camino preferido es <strong>Claude/Gemini hacia Codex</strong> cuando necesitan filesystem, comandos, tests o edición local. Codex hacia Claude o Antigravity usa CLI/handoff controlado. No asumo bridge bidireccional ni <code class="language-plaintext highlighter-rouge">filesystem</code> MCP universal.</p>

<p class="text-justify">Esto también es una decisión de seguridad. La documentación oficial de MCP enumera riesgos como confused deputy, token passthrough, SSRF, secuestro de sesión y compromiso de servidores locales.<sup id="fnref:mcp-security"><a href="#fn:mcp-security" class="footnote" rel="footnote" role="doc-noteref">11</a></sup> La investigación reciente sobre tool poisoning en MCP insiste en que el problema crítico muchas veces está del lado cliente: metadata maliciosa, baja visibilidad de parámetros y confianza implícita.<sup id="fnref:mcp-threat"><a href="#fn:mcp-threat" class="footnote" rel="footnote" role="doc-noteref">12</a></sup>. Aún no le saco todo el provecho.</p>

<h3 id="handoffs-el-antídoto-contra-yo-le-avisé">Handoffs: el antídoto contra “yo le avisé”</h3>

<p>Un handoff no es decir “que lo revise Claude”. Un handoff útil debe dejar rastro mínimo:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>HANDOFF-TRACE: codex le solicita apoyo a claude (model: sonnet) via CLI
MODEL-REPORT: {"agent":"codex","provider":"openai","model":"__default__","source":"self_report"}
MODEL-REPORT: {"agent":"claude","provider":"anthropic","model":"sonnet","source":"self_report"}
</code></pre></div></div>

<p>Y debe separar lo básico:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">metadata</span><span class="pi">:</span>
  <span class="na">from</span><span class="pi">:</span> <span class="s">codex</span>
  <span class="na">to</span><span class="pi">:</span> <span class="s">claude</span>
  <span class="na">via</span><span class="pi">:</span> <span class="s">CLI</span>
  <span class="na">skill</span><span class="pi">:</span> <span class="s">handoff-protocol</span>

<span class="na">contexto_esencial</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">que se hizo</span>
  <span class="pi">-</span> <span class="s">que se descarto</span>
  <span class="pi">-</span> <span class="s">que falta validar</span>

<span class="na">tarea_para_receptor</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">revisar claims</span>
  <span class="pi">-</span> <span class="s">detectar riesgos</span>
  <span class="pi">-</span> <span class="s">no modificar archivos</span>

<span class="na">verificacion</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">pruebas corridas</span>
  <span class="pi">-</span> <span class="s">fuentes consultadas</span>
  <span class="pi">-</span> <span class="s">decision final</span>
</code></pre></div></div>

<p class="text-justify">Esto parece burocracia hasta que algo falla. Cuando falla, la traza permite saber si el problema fue contexto insuficiente, modelo inadecuado, mala ruta, salida ambigua, cuota, permisos, sandbox o una instrucción mal escrita. OpenAI propone una lógica semejante en su loop de mejora de agentes: usar trazas, feedback y evaluaciones para modificar el arnés, no solo para pedirle al modelo que “lo haga mejor”.<sup id="fnref:openai-loop"><a href="#fn:openai-loop" class="footnote" rel="footnote" role="doc-noteref">13</a></sup> Esto me ha servido para usar la skill recall-context luego, ya que con una buena traza recupero trabajo previo de forma bien eficiente entre agentes.</p>

<hr />

<h2 id="cucharada-3-lo-que-aprendí-haciendo-que-fallara">Cucharada 3: lo que aprendí haciendo que fallara</h2>

<p class="text-justify">La lista de errores propios vale más que la lista de herramientas. Este post más que vitrina, ojalá sirva de bitácora y probablemente añeje pronto, pero ojalá le sirva a más de alguien.</p>

<p class="table-caption"><strong>Tabla 3</strong> — Errores propios y controles actuales</p>

<table>
  <thead>
    <tr>
      <th>Error</th>
      <th>Cómo se veía</th>
      <th>Control actual</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tratar modelos como equivalentes</td>
      <td>Cualquier proveedor podía opinar de cualquier cosa</td>
      <td>Roles explícitos: primary, reviewer, explorer, validator, canary</td>
    </tr>
    <tr>
      <td>Fan-out automático</td>
      <td>Pedía segundas opiniones por costumbre</td>
      <td>Evaluar siempre, invocar solo con señal suficiente</td>
    </tr>
    <tr>
      <td>Model IDs frágiles</td>
      <td>Un rename rompía scripts o ejemplos</td>
      <td>Usar <code class="language-plaintext highlighter-rouge">__default__</code>, aliases y discovery diaria</td>
    </tr>
    <tr>
      <td>Sidecar declarado listo demasiado pronto</td>
      <td>El proxy arrancaba, pero el proveedor fallaba por saldo/cuota</td>
      <td>Separar “proxy vivo” de “proveedor usable”</td>
    </tr>
    <tr>
      <td>Context files demasiado largos</td>
      <td>El agente obedecía reglas irrelevantes y exploraba de más</td>
      <td>Instrucciones mínimas, accionables y fechadas</td>
    </tr>
    <tr>
      <td>MCP como solución universal</td>
      <td>Más servidores, más confianza implícita</td>
      <td>MCP condicional, consentimiento, sandbox y mínimos permisos</td>
    </tr>
    <tr>
      <td>Memoria vectorial como fuente de verdad</td>
      <td>Riesgo de drift por dimensiones o índices derivados</td>
      <td>JSONL como fuente; Qdrant/FastEmbed como índice reconstruible</td>
    </tr>
    <tr>
      <td>Copilot como segundo proveedor fuerte</td>
      <td>No siempre aporta independencia real</td>
      <td>Usarlo como canary/support, no como árbitro</td>
    </tr>
  </tbody>
</table>

<p class="text-justify">La parte de memoria merece un párrafo. En <code class="language-plaintext highlighter-rouge">penta-agent</code>, la memoria operativa vive en archivos append-only como <code class="language-plaintext highlighter-rouge">experience-events.jsonl</code>, <code class="language-plaintext highlighter-rouge">experience-lessons.yaml</code> e <code class="language-plaintext highlighter-rouge">interaction-metrics.jsonl</code>. Qdrant y FastEmbed ayudan a recuperar experiencias, pero son derivados. Si cambia el embedding o aparece una dimensión incompatible, se reconstruye el índice desde JSONL. Después de pelear con ese tipo de drift, no quiero que la fuente de verdad sea frágil.</p>

<p class="text-justify">El sidecar de LiteLLM sigue la misma filosofía. Sirve para delegar tareas baratas y acotadas a aliases como <code class="language-plaintext highlighter-rouge">cheap</code>, <code class="language-plaintext highlighter-rouge">cheap-code</code> o <code class="language-plaintext highlighter-rouge">cheap-reasoner</code>, pero no para arquitectura, seguridad ni decisiones finales. Además, el smoke real de proveedor importa más que el contenedor sano. Si DeepSeek responde <code class="language-plaintext highlighter-rouge">Insufficient Balance</code>, el sistema no está listo; solo aprendimos que Docker sabe prender una luz.</p>

<hr />

<h2 id="cierre-bucle-de-optimización">Cierre: bucle de optimización</h2>

<p class="text-justify">No conviene mirar mi stack como si fuera plantilla universal, no lo es. Lo que sí puede servir es tomar elementos de la lógica: contratos pequeños para no depender de memoria humana ni de entusiasmo del momento. Dejé una versión pública y sanitizada del stack en <a href="https://github.com/tatanlabra/penta-agent"><code class="language-plaintext highlighter-rouge">tatanlabra/penta-agent</code></a>. No es un volcado de mi entorno local: quité memoria runtime, rutas privadas, logs, <code class="language-plaintext highlighter-rouge">.env</code>, credenciales, IPs internas y cualquier cosa que pudiera revelar configuración personal. Quien lo clone debería tratarlo como plantilla y revisar los placeholders de <code class="language-plaintext highlighter-rouge">AGENTS.md</code>, <code class="language-plaintext highlighter-rouge">.mcp.json</code>, <code class="language-plaintext highlighter-rouge">router/routing.yaml</code>, <code class="language-plaintext highlighter-rouge">scripts/agent/agy-bridge</code> y <code class="language-plaintext highlighter-rouge">skills/</code> antes de usarlo.</p>

<p class="text-justify"><code class="language-plaintext highlighter-rouge">penta-agent</code> me ha servido no porque tenga muchos agentes, sino porque tiene frenos: roles, rutas, skills, permisos, handoffs, memoria reconstruible y validación. Eso no lo vuelve universal ni superior. Lo vuelve auditable para mis problemas. El <em>vibe coding</em> nombra bien la primera sensación de fluidez: pedir, ver aparecer código, corregir y seguir. Pero cuando el flujo madura, la pregunta cambia: qué tan eficiente, elegante y verificable es la solución que obtienes.</p>

<hr />

<h2 id="referencias-técnicas">Referencias técnicas</h2>

<hr />
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:openai-config">
      <p>OpenAI Developers, “Configuration Reference — Codex”, consultado el 21 de junio de 2026. Documenta configuración, permisos, sandbox, MCP, <code class="language-plaintext highlighter-rouge">AGENTS.md</code>, skills y subagentes en Codex. <a href="https://developers.openai.com/codex/config-reference">https://developers.openai.com/codex/config-reference</a> <a href="#fnref:openai-config" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:github-instructions">
      <p>GitHub Docs, “Adding repository custom instructions for GitHub Copilot”, consultado el 21 de junio de 2026. Documenta instrucciones de repositorio y formatos asociados a Copilot. <a href="https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions">https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions</a> <a href="#fnref:github-instructions" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:gemini-agent">
      <p>Google Developers, “Use the Gemini Code Assist agent mode”, consultado el 21 de junio de 2026. Describe agent mode en IDE, uso de herramientas, MCP y aprobación de acciones. <a href="https://developers.google.com/gemini-code-assist/docs/use-agentic-chat-pair-programmer">https://developers.google.com/gemini-code-assist/docs/use-agentic-chat-pair-programmer</a> <a href="#fnref:gemini-agent" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:claude-hooks">
      <p>Anthropic, “Hooks reference — Claude Code Docs”, consultado el 21 de junio de 2026. Describe hooks como puntos de control del ciclo de vida, incluidos <code class="language-plaintext highlighter-rouge">PreToolUse</code>, <code class="language-plaintext highlighter-rouge">PostToolUse</code> y <code class="language-plaintext highlighter-rouge">SessionStart</code>. <a href="https://code.claude.com/docs/en/hooks">https://code.claude.com/docs/en/hooks</a> <a href="#fnref:claude-hooks" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:galster-config">
      <p>Matthias Galster et al., “Configuring Agentic AI Coding Tools: An Exploratory Study”, arXiv:2602.14690, 2026. Analiza mecanismos como context files, skills, subagentes, hooks, settings y MCP. <a href="https://arxiv.org/abs/2602.14690">https://arxiv.org/abs/2602.14690</a> <a href="#fnref:galster-config" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:instructions-code">
      <p>Ali Arabat y Mohammed Sayagh, “Toward Instructions-as-Code: Understanding the Impact of Instruction Files on Agentic Pull Requests”, arXiv:2606.13449, 2026. Analiza pull requests agenticos y concluye que las instrucciones no mejoran automáticamente el desempeño. <a href="https://arxiv.org/abs/2606.13449">https://arxiv.org/abs/2606.13449</a> <a href="#fnref:instructions-code" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:agents-md-eval">
      <p>Thibaud Gloaguen et al., “Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?”, arXiv:2602.11988, 2026. Reporta que context files pueden reducir éxito y elevar costo cuando agregan requisitos innecesarios. <a href="https://arxiv.org/abs/2602.11988">https://arxiv.org/abs/2602.11988</a> <a href="#fnref:agents-md-eval" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:claude-skills">
      <p>Anthropic, “Agent Skills — Claude API Docs”, consultado el 21 de junio de 2026. Describe skills como capacidades modulares con instrucciones, metadata, scripts y referencias, cargadas por etapas. <a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview">https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview</a> <a href="#fnref:claude-skills" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:skilljuror">
      <p>Zhiyu Chen et al., “SkillJuror: Measuring How Agent Skill Organization Changes Runtime Behavior”, arXiv:2606.11543, 2026. Evalúa organización de skills y carga progresiva. <a href="https://arxiv.org/abs/2606.11543">https://arxiv.org/abs/2606.11543</a> <a href="#fnref:skilljuror" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:skill-supply-chain">
      <p>Shoumik Saha, Kazem Faghih y Soheil Feizi, “Under the Hood of SKILL.md: Semantic Supply-chain Attacks on AI Agent Skill Registry”, arXiv:2605.11418, 2026. Advierte que la metadata e instrucciones de <code class="language-plaintext highlighter-rouge">SKILL.md</code> pueden manipular descubrimiento, selección y gobernanza de skills. <a href="https://arxiv.org/abs/2605.11418">https://arxiv.org/abs/2605.11418</a> <a href="#fnref:skill-supply-chain" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:mcp-security">
      <p>Model Context Protocol, “Security Best Practices”, consultado el 21 de junio de 2026. Enumera riesgos y mitigaciones para implementaciones MCP. <a href="https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices">https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices</a> <a href="#fnref:mcp-security" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:mcp-threat">
      <p>Charoes Huang, Xin Huang, Ngoc Phu Tran y Amin Milani Fard, “Model Context Protocol Threat Modeling and Analyzing Vulnerabilities to Prompt Injection with Tool Poisoning”, arXiv:2603.22489, 2026. Aplica STRIDE/DREAD a MCP y destaca tool poisoning como vulnerabilidad crítica del lado cliente. <a href="https://arxiv.org/abs/2603.22489">https://arxiv.org/abs/2603.22489</a> <a href="#fnref:mcp-threat" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:openai-loop">
      <p>OpenAI Cookbook, “Build an Agent Improvement Loop with Traces, Evals, and Codex”, consultado el 21 de junio de 2026. Usa trazas, feedback, evaluaciones y configuración del harness para mejorar agentes. <a href="https://developers.openai.com/cookbook/examples/agents_sdk/agent_improvement_loop">https://developers.openai.com/cookbook/examples/agents_sdk/agent_improvement_loop</a> <a href="#fnref:openai-loop" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Cristián Labra Olivares</name></author><category term="ia" /><category term="productividad" /><category term="desarrollo" /><category term="multiagente" /><category term="multiagente" /><category term="agentic-coding" /><category term="context-engineering" /><category term="codex" /><category term="claude-code" /><category term="gemini" /><category term="antigravity" /><category term="copilot" /><category term="litellm" /><category term="deepseek" /><category term="zai" /><category term="mcp" /><category term="skills" /><category term="agents-md" /><category term="vscode" /><category term="arch-linux" /><summary type="html"><![CDATA[Una experiencia situada con penta-agent: qué me ha servido para coordinar agentes en minutas, normativa, estadística, automatización doméstica, nube propia y seguridad local, sin venderlo como receta universal.]]></summary></entry></feed>