<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog de Maguyva</title><description>Análisis técnicos a fondo sobre inteligencia de código MCP, arquitectura de agentes de IA y lecciones de construir una plataforma de búsqueda de código multilenguaje.</description><link>https://maguyva.ai/es/blog</link><language>es</language><atom:link href="https://maguyva.ai/es/rss.xml" rel="self" type="application/rss+xml"/><item><title>Un contexto que viaja</title><link>https://maguyva.ai/es/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/es/blog/context-that-travels</guid><description>El indexador de Cursor es excelente dentro de Cursor. Maguyva es el mapa MCP alojado que el mismo agente puede consultar desde otros editores, CLI y CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;El indexador de Cursor es excelente dentro de Cursor. El autocompletado, la edición en línea, el chat y el agente en esa ventana ya se apoyan en un índice de proyecto que Cursor gestiona para el espacio de trabajo abierto. Si Cursor es la única superficie en la que escribes, y ese índice ya encuentra los archivos correctos, quédate ahí. Ese es el caso honesto de «quédate donde estás», y con razón es la primera frase de esta página.&lt;/p&gt;
&lt;p&gt;Este artículo trata de la otra mitad de una semana común. El mismo repositorio también se abre en Claude Code, se consulta desde Codex CLI, se revisa en una segunda máquina, o lo consulta un agente que corre en CI. La pregunta no es «qué indexador es mejor». La pregunta es si el mapa en el que confía el agente en una ventana es el mismo en el que confía en la siguiente.&lt;/p&gt;
&lt;p&gt;Maguyva es ese mapa que viaja. Es una capa de contexto de código MCP remota. El agente la consulta igual que consulta cualquier otra herramienta MCP. Los resultados vuelven como rutas clasificadas con números de línea. Cursor sigue siendo el editor. El contexto es lo que se mueve.&lt;/p&gt;
&lt;h2 id=&quot;para-qué-sirve-el-indexador-de-cursor&quot;&gt;Para qué sirve el indexador de Cursor&lt;/h2&gt;
&lt;p&gt;La indexación integrada de Cursor existe para que el chat, el agente y la búsqueda dentro del editor puedan recuperar código relevante en lugar de depender solo de lo que cabe en la ventana de contexto en bruto del modelo. Ese es el diseño correcto para un IDE. El índice es nativo de Cursor. No es un servidor MCP y no es accesible desde ningún otro cliente.&lt;/p&gt;
&lt;p&gt;Así funciona, según la documentación pública de Cursor y el propio relato de Cursor en el momento de escribir esto: la ruta de búsqueda principal ya no es un índice de embeddings en la nube. El equipo de Cursor declaró en su foro comunitario que la búsqueda semántica/basada en embeddings dedicada se está retirando en favor de la recuperación basada en grep, porque los modelos actuales buscan lo bastante bien en un árbol vivo por sí solos. En su lugar está Instant Grep, un índice de búsqueda local construido con n-gramas, listas invertidas y filtros de Bloom, mantenido en una tabla de búsqueda mapeada en memoria, de modo que las consultas se resuelven en la propia máquina del desarrollador en lugar de en un servidor.&lt;/p&gt;
&lt;p&gt;El índice en sí vive dentro del propio directorio &lt;code&gt;.git/cursor/&lt;/code&gt; del repositorio, anclado a un commit de git específico; los cambios desde ese commit se superponen en lugar de disparar un nuevo escaneo, y el índice solo se reconstruye cuando el estado local se ha alejado mucho de aquello contra lo que se construyó. Como está dentro de &lt;code&gt;.git&lt;/code&gt;, nunca se rastrea ni se sube — borra la carpeta y el índice desaparece. &lt;code&gt;.gitignore&lt;/code&gt; se respeta por construcción, ya que solo el contenido rastreado por git es elegible, y &lt;code&gt;.cursorignore&lt;/code&gt; se aplica en la ruta de lectura. Ya no hay ningún paso de embedding del lado del servidor ni base de datos vectorial remota en esa ruta. La documentación anterior describía un diseño asistido por la nube — cifrado de fragmentos, sincronización por árbol de Merkle, reutilización de índices entre compañeros de equipo — y el propio equipo de Cursor ha dicho desde entonces que ese diseño se está retirando, así que este artículo ya no lo describe como vigente.&lt;/p&gt;
&lt;p&gt;Una característica destacada dentro del editor es el subagente Explore de Cursor. Puede lanzar varias búsquedas paralelas en su propia ventana de contexto, con un modelo más rápido, y devolver solo los hallazgos relevantes, de modo que la conversación principal no se llene de resultados de búsqueda. Es una fortaleza genuina dentro del editor. Consérvala.&lt;/p&gt;
&lt;p&gt;Los espacios de trabajo multi-raíz están soportados: el contexto de cada carpeta abierta está disponible para el Agente. Algunas funciones dependientes de git, como los worktrees, están desactivadas en configuraciones multi-raíz, y los Cloud Agents no soportan en absoluto los espacios de trabajo multi-raíz.&lt;/p&gt;
&lt;p&gt;Nada de esto es una razón para abandonar Cursor. Es una descripción precisa de un mapa que es excelente donde vive.&lt;/p&gt;
&lt;h2 id=&quot;qué-significa-realmente-viajar&quot;&gt;Qué significa realmente «viajar»&lt;/h2&gt;
&lt;p&gt;Un mapa viaja cuando las mismas preguntas devuelven el mismo tipo de respuesta, con citas que puedes abrir, desde más de un cliente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Cursor: «¿Dónde está definido &lt;code&gt;parseConfig&lt;/code&gt;, y quién lo llama?»&lt;/li&gt;
&lt;li&gt;En Claude Code, en el mismo repo: la misma pregunta.&lt;/li&gt;
&lt;li&gt;En Codex CLI, en una máquina de revisión que nunca abrió la ventana de Cursor: la misma pregunta.&lt;/li&gt;
&lt;li&gt;En un agente de CI que habla MCP: la misma pregunta, contra el mismo snapshot alojado.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si cada superficie construye su propio índice privado, no tienes un mapa. Tienes varias cachés que divergen. El índice del editor puede estar al día para el árbol en disco. La sesión de CLI puede llevar un día de retraso. El trabajo de CI puede estar mirando un checkout distinto. El agente seguirá sonando seguro de sí mismo de todos modos.&lt;/p&gt;
&lt;p&gt;El indexador de Cursor no está pensado para resolver eso. Como vive dentro del editor, el contexto que construye es para ese editor. Un lector que también necesita una CLI, un pipeline de CI o un editor distinto necesita una herramienta separada para esas superficies. Eso es un hecho de alcance, no un defecto. Maguyva es esa herramienta separada.&lt;/p&gt;
&lt;p&gt;Un recuento publicado de lenguajes para el indexador de Cursor no aparece en las notas que este borrador puede usar. Maguyva publica más de 279 lenguajes y tecnologías basadas en texto. El precio de Cursor tampoco se copia aquí; consulta su página de precios. Maguyva cobra por espacio de trabajo, no por asiento, con planes publicados de $0, $19, $49 y $149 según la huella indexada y el tamaño del espacio de trabajo.&lt;/p&gt;
&lt;h2 id=&quot;un-mapa-alojado-todos-los-clientes-mcp&quot;&gt;Un mapa alojado, todos los clientes MCP&lt;/h2&gt;
&lt;p&gt;Maguyva es un servidor MCP remoto. Conectas GitHub, eliges los repositorios, y el pipeline en la nube construye símbolos, aristas del grafo y un mapa clasificado. Añades una clave de API a la configuración MCP del cliente que ya usas. Maguyva tiene guías de configuración para 24 clientes MCP documentados — Cursor incluido — y puede conectarse a otros clientes compatibles con MCP que soporten la configuración estándar.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/es/for-cursor&quot;&gt;página de configuración de Cursor&lt;/a&gt; es la ruta específica del editor si ahí es donde trabajas. El mismo servidor responde a Claude Code, VS Code, Windsurf, Codex CLI y el resto. No cambias de editor. Le das a cada agente la misma superficie de herramientas: 11 herramientas MCP de cara al cliente en búsqueda, símbolos, análisis de dependencias, recuperación de archivos, contexto de repositorio y flujos de trabajo utilitarios deterministas. La recuperación semántica, estructural, por grafo y de texto se fusionan en resultados clasificados.&lt;/p&gt;
&lt;p&gt;Ese es el beneficio de la portabilidad. Las citas que evaluaste en Cursor esta mañana tienen la misma forma que las citas que Codex CLI devolverá esta noche. Ruta de archivo y número de línea. Ábrelas. Si están mal, lo ves. Si están bien, el siguiente cambio tiene un lugar donde aterrizar. La afirmación aprobada es menos ediciones alucinadas, no la promesa de que cada edición sea correcta.&lt;/p&gt;
&lt;p&gt;La frescura está publicada. Los snapshots llevan marca de tiempo, así que el agente sabe qué versión del árbol está leyendo. La cadencia de reconstrucción es diaria en el plan gratuito y cada hora en los planes de pago. El límite honesto es el trabajo local no sincronizado: una edición que solo existe en un árbol de trabajo aún no está en el mapa alojado. Ese límite es el mismo sin importar desde qué cliente consultes, y ese es justamente el punto. La deriva entre clientes ya no es un segundo límite oculto.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/es/docs&quot;&gt;documentación&lt;/a&gt; da el bucle de activación que aplica a cada cliente: indexar un repo que ya conoces, conectar el cliente, hacer una pregunta que puedas verificar. Hazlo una vez en Cursor. Hazlo de nuevo desde la CLI que realmente usas en días de revisión. Si ambas respuestas citan el mismo handler, el mapa viajó.&lt;/p&gt;
&lt;h2 id=&quot;cómo-conviven-los-dos-mapas&quot;&gt;Cómo conviven los dos mapas&lt;/h2&gt;
&lt;p&gt;Usa ambos. No son alternativas en el sentido de una página de comparación.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantén el indexador de Cursor activo para el proyecto en disco. Deja que Explore, Instant Grep y el agente dentro del editor lo usen. Ese bucle es nativo y rápido.&lt;/li&gt;
&lt;li&gt;Añade Maguyva como servidor MCP en Cursor para que la misma sesión también pueda consultar el mapa alojado del espacio de trabajo. Cursor es un cliente Maguyva documentado. No eliges un índice y borras el otro.&lt;/li&gt;
&lt;li&gt;Añade el mismo servidor Maguyva a Claude Code, Codex CLI, o cualquier otro cliente MCP que toque el repo. Una sola forma de clave de API. Un solo espacio de trabajo.&lt;/li&gt;
&lt;li&gt;Si un agente de CI es compatible con MCP, apúntalo al mismo servidor. Leerá el mismo snapshot con marca de tiempo que leyó el portátil.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El índice del editor sigue siendo la mejor herramienta para «qué hay en disco en esta ventana, ahora mismo». El mapa alojado es la mejor herramienta para «cómo se ve este espacio de trabajo para cada agente que lo toque hoy». Esas frases no compiten.&lt;/p&gt;
&lt;p&gt;Las cuotas de espacio de trabajo están publicadas en la &lt;a href=&quot;https://maguyva.ai/es/pricing&quot;&gt;página de precios&lt;/a&gt;: repos, líneas indexadas y usuarios, facturados por espacio de trabajo. Agentes y humanos comparten el mismo recuento de usuarios. Empieza gratis con un repo que ya sepas evaluar. Aumenta el espacio de trabajo solo después de que las citas sobrevivan al contacto con el árbol.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-esta-página-no-afirma&quot;&gt;Lo que esta página no afirma&lt;/h2&gt;
&lt;p&gt;No afirma que el indexador de Cursor sea débil, incompleto, o una razón para cambiar de editor. La primera frase de este borrador es lo contrario.&lt;/p&gt;
&lt;p&gt;No afirma que Maguyva reemplace a Instant Grep o al subagente Explore. Esas son funciones de Cursor. Se quedan en Cursor.&lt;/p&gt;
&lt;p&gt;No inventa un recuento de lenguajes, una cifra de latencia, ni un ahorro de tokens para ninguno de los dos productos. Las cifras desconocidas permanecen sin publicar.&lt;/p&gt;
&lt;p&gt;No finge que el trabajo local no subido está en el mapa alojado. Los snapshots con marca de tiempo hacen visible ese límite. No lo eliminan.&lt;/p&gt;
&lt;p&gt;La prueba es ordinaria. Indexa un repo que ya conoces. Haz una pregunta que puedas verificar, primero en Cursor, luego en un segundo cliente MCP. Un contexto que viaja es la misma cita en ambos lugares.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Primero el mapa, después la revisión</title><link>https://maguyva.ai/es/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/es/blog/map-first-review-second</guid><description>Ancla al agente de código en un mapa del repo antes de que escriba. Deja que Greptile revise el pull request después. Un dúo complementario, no un reemplazo.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dos trabajos distintos se sitúan a cada lado de un pull request. Antes de que el agente escriba, necesita un mapa del árbol que está a punto de cambiar. Después de que el agente abre un PR, algo debería leer ese cambio contra el resto del sistema y dejar comentarios sobre los que un humano pueda actuar.&lt;/p&gt;
&lt;p&gt;Esos trabajos se parecen desde lejos porque ambos implican «entender la base de código». No son el mismo producto. Uno responde «¿dónde debería aterrizar este cambio?». El otro responde «¿qué rompió este diff que un linter línea por línea no verá?». Confundirlos produce un primer borrador peor y una revisión más ruidosa.&lt;/p&gt;
&lt;p&gt;Este artículo es una guía de flujo de trabajo conjunto. Maguyva es el mapa que el agente consulta primero. Greptile es el agente de revisión que comenta el PR después. El dúo es complementario por construcción: Maguyva no revisa pull requests, y Greptile no reemplaza la capa de contexto que el agente usó para escribirlos.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-es-útil-esta-división&quot;&gt;Por qué es útil esta división&lt;/h2&gt;
&lt;p&gt;Un agente de código que parte de priors de entrenamiento más unos cuantos archivos pegados inventará una ruta plausible y la editará. Ese es el fallo del archivo equivocado, y es un problema de recuperación. Maguyva es una capa de contexto de código MCP remota: recuperación semántica, estructural (AST), por grafo/dependencia y de texto, fusionada en resultados clasificados, más búsqueda de símbolos y recuperación de archivos. Las respuestas fundamentadas vuelven como &lt;code&gt;path/file.ext:line&lt;/code&gt;, así que puedes rechazar un fallo antes de que exista un parche. La afirmación se mantiene modesta: menos ediciones alucinadas. El modelo todavía puede adivinar. El primer paso simplemente deja de ser una suposición.&lt;/p&gt;
&lt;p&gt;Greptile es un agente de revisión de código con IA. En sus propias palabras, revisa automáticamente cada pull request con comprensión completa de la base de código, y posiciona eso frente a los linters tradicionales que verifican archivos de forma aislada en lugar del sistema entero. La configuración consiste en instalar la app de GitHub o GitLab y seleccionar repositorios. No hay ningún índice local que tengas que gestionar. El alojamiento es Greptile Cloud (declaran cumplimiento SOC 2 Tipo II, con un informe disponible bajo solicitud), con una opción autoalojada ofrecida a empresas.&lt;/p&gt;
&lt;p&gt;Su propio flujo numerado es: conectar y construir un grafo de dependencias de cada función, clase y dependencia; en cada pull request, analizar el cambio usando ese grafo completo del repo y publicar hallazgos como comentarios del PR con correcciones sugeridas, en unos tres minutos; cada comentario puede pasar el problema a un agente de código que el equipo ya usa. También declaran leer comentarios humanos anteriores de PRs a lo largo del tiempo para aprender los estándares de código de un equipo y reducir sugerencias ruidosas. Su sistema de aprendizaje, según declaran, necesita entre 2 y 3 semanas para adaptarse.&lt;/p&gt;
&lt;p&gt;Eso es revisión, no redacción. La fortaleza de Greptile es el contexto de grafo completo del repo sobre el cambio que ya aterrizó en un PR, seguido de un bucle cerrado que envía el hallazgo a Claude Code, Codex, Conductor, Cursor o Devin. La fortaleza de Maguyva es el mapa clasificado que el agente consultó antes de que ese cambio se escribiera. Usa ambos. No le pidas a ninguno de los dos que haga el trabajo del otro.&lt;/p&gt;
&lt;p&gt;Una integración de producto de primera parte Maguyva–Greptile no está declarada. No la necesitas. Maguyva habla con el agente por MCP. Greptile habla con GitHub o GitLab a través de su app. Se encuentran en el pull request. Sin script de pegamento, sin cron que canalice una herramienta hacia la otra. El dúo prescinde de bash porque cada producto ya ocupa la superficie que le corresponde.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-esto-no-es&quot;&gt;Lo que esto no es&lt;/h2&gt;
&lt;p&gt;Esto no es un desmontaje de Greptile. No es una página de «cambia de revisor». Greptile se lanzó en Hacker News el 5 de marzo de 2024 como empresa de Y Combinator W24, y ese hilo es cómo mucha gente conoció el producto por primera vez. Si así fue como los encontraste, quédate con ellos. Esta página es la mitad delantera que falta en ese bucle: anclar al agente para que el PR que Greptile ve ya apunte a los archivos correctos.&lt;/p&gt;
&lt;p&gt;Los materiales de marketing de Greptile encabezan con afirmaciones de velocidad de revisión y detección de bugs. Trátalas como afirmaciones propias de Greptile, no como cifras verificadas independientemente. Este borrador no las repite como hechos.&lt;/p&gt;
&lt;p&gt;La cobertura de lenguajes es el mismo tipo de honestidad. Greptile enmarca su soporte como cobertura de todos los lenguajes de programación en lugar de una lista enumerada; no se indica una cifra precisa. Maguyva publica más de 279 lenguajes y tecnologías basadas en texto, con una división técnica (AST respaldado por parser frente a solo texto) en el sitio cuando la pregunta es técnica. Son productos distintos haciendo afirmaciones distintas. No los mezcles.&lt;/p&gt;
&lt;p&gt;El precio de Greptile no se indica en las notas que este borrador puede usar. Existen planes de pago; consulta su página de precios. Maguyva cobra por espacio de trabajo, no por asiento. Los planes empiezan gratis. La &lt;a href=&quot;https://maguyva.ai/es/pricing&quot;&gt;página de precios&lt;/a&gt; lista los niveles publicados si necesitas las cifras de espacio de trabajo.&lt;/p&gt;
&lt;h2 id=&quot;flujo-de-trabajo&quot;&gt;Flujo de trabajo&lt;/h2&gt;
&lt;p&gt;Tres etapas con nombre. Ejecútalas en este orden. No te saltes ninguna la primera vez que pruebes el dúo.&lt;/p&gt;
&lt;h3 id=&quot;1-contexto-de-maguyva&quot;&gt;1. Contexto de Maguyva&lt;/h3&gt;
&lt;p&gt;Indexa un repositorio que ya conozcas. Conecta el cliente MCP en el que ya escribes — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, u otro cliente compatible con MCP. Maguyva tiene guías de configuración para 24 clientes MCP documentados y puede conectarse a otros clientes que soporten la configuración MCP estándar.&lt;/p&gt;
&lt;p&gt;Haz una pregunta que puedas evaluar antes de que nadie escriba una línea. «¿Dónde se gestiona la expiración de sesión, y qué la llama?» es un mejor primer movimiento que «arregla la autenticación». Exige citas. Abre los resultados &lt;code&gt;file.ext:line&lt;/code&gt;. Sigue el símbolo. Confirma la dependencia que estás a punto de tocar.&lt;/p&gt;
&lt;p&gt;Maguyva expone 11 herramientas MCP de cara al cliente en búsqueda, símbolos, análisis de dependencias, recuperación de archivos, contexto de repositorio y flujos de trabajo utilitarios deterministas. Cuatro modos de recuperación se fusionan en resultados clasificados; &lt;code&gt;find_symbol&lt;/code&gt; es una herramienta separada cuando ya conoces el nombre. Los &lt;a href=&quot;https://maguyva.ai/es/docs&quot;&gt;docs&lt;/a&gt; describen el camino más corto: empezar gratis, indexar un repo que ya conoces, conectar el cliente, luego hacer una pregunta que puedas verificar.&lt;/p&gt;
&lt;p&gt;Los snapshots llevan marca de tiempo, así que el agente puede saber qué versión del árbol está leyendo. El límite honesto es el trabajo local no sincronizado. Si la edición solo existe en un árbol de trabajo y no se ha subido, el mapa alojado todavía no la contiene. Los archivos de instrucciones (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) siguen teniendo su lugar aquí, para convenciones y lo que no hay que tocar. No son un mapa vivo. Úsalos para el comportamiento. Usa Maguyva para los hechos.&lt;/p&gt;
&lt;p&gt;No dejes que el agente abra un PR antes de que las citas sobrevivan al contacto con el repo. Esa barrera es todo el sentido de esta etapa.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-del-agente&quot;&gt;2. PR del agente&lt;/h3&gt;
&lt;p&gt;El mismo agente ahora escribe el cambio en el cliente por el que ya pagas. Maguyva no es un editor ni un revisor. El agente sigue produciendo el diff. Sigues abriendo el pull request en GitHub o GitLab como ya lo haces.&lt;/p&gt;
&lt;p&gt;Lo que debería ser distinto es el primer archivo. El PR debería nombrar el handler que realmente implementa el comportamiento, el llamador que se romperá, y la prueba que fallará si el cambio está mal. Si se saltó la etapa 1, la etapa 3 gastará sus comentarios en un cambio que aterrizó en el paquete equivocado. Greptile puede seguir encontrando problemas sistémicos. No debería tener que recuperarse además de una ruta alucinada.&lt;/p&gt;
&lt;p&gt;Mantén el PR acotado. Un primer archivo fundamentado no es licencia para reescribir el módulo. El dúo complementario funciona cuando el agente hizo un trabajo con un mapa, y luego le pidió a un revisor que hiciera otro trabajo sobre un diff acotado.&lt;/p&gt;
&lt;h3 id=&quot;3-revisión-de-greptile&quot;&gt;3. Revisión de Greptile&lt;/h3&gt;
&lt;p&gt;Greptile ya está conectado al repositorio a través de la app de GitHub o GitLab. En el nuevo pull request analiza el cambio usando el grafo completo del repo que construyó y publica hallazgos como comentarios con correcciones sugeridas. Sus propios materiales sitúan ese pase en unos tres minutos.&lt;/p&gt;
&lt;p&gt;Lee los comentarios como leerías a un compañero cuidadoso: abre la ubicación citada, decide si el hallazgo es real, luego actúa. Donde Greptile ofrece «Fix with your Agent», envía el problema — rutas de archivo, números de línea, código sugerido — a Claude Code, Codex, Conductor, Cursor o Devin. «Fix All» envía todos los problemas de la revisión de una vez. También ofrecen un MCP de Greptile y un plugin de Claude Code para ese traspaso. Maguyva no está en esa lista de destinos nombrados; esa ausencia no es un problema. Maguyva ya hizo su trabajo en la etapa 1. El agente de código que escribió el PR es el que debería recibir la carga útil de corrección.&lt;/p&gt;
&lt;p&gt;Espera ruido durante las primeras 2 a 3 semanas mientras el sistema de aprendizaje de Greptile se adapta a los comentarios que tu equipo realmente deja. Ese es su calendario declarado, no un defecto en el dúo. La revisión humana sigue en el bucle. Greptile es el primer pase automatizado, no el botón de fusión.&lt;/p&gt;
&lt;p&gt;Si un comentario de Greptile señala un archivo que el agente nunca consultó en la etapa 1, esa es una señal útil. O el mapa se perdió un llamador, o el agente se saltó una cita. Corrige el borrador contra el comentario. No desactives al revisor.&lt;/p&gt;
&lt;h2 id=&quot;cómo-mantener-honesto-el-complemento&quot;&gt;Cómo mantener honesto el complemento&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva primero, siempre. Una revisión de un PR con el archivo equivocado sigue siendo una revisión del archivo equivocado.&lt;/li&gt;
&lt;li&gt;Greptile después, siempre. Un borrador bien citado igual necesita una lectura del diff a escala del sistema entero.&lt;/li&gt;
&lt;li&gt;No le pidas a Maguyva que publique comentarios en PRs. No lo hace.&lt;/li&gt;
&lt;li&gt;No le pidas a Greptile que sea la primera capa de recuperación del agente mientras todavía está eligiendo una ruta. Ese no es el trabajo para el que está cableada su app de GitHub o GitLab.&lt;/li&gt;
&lt;li&gt;No inventes un pipeline de bash que los «sincronice». El PR es la interfaz.&lt;/li&gt;
&lt;li&gt;Verifica ambos lados de forma independiente. Indexa un repo que ya conoces. Haz una pregunta que puedas verificar. Luego abre un PR pequeño y lee lo que Greptile realmente comenta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El bucle es ordinario una vez que se nombra. Primero el mapa. Luego el PR del agente. Luego la revisión. Cada producto se queda en el lado del pull request en el que es bueno.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Dar a un agente de IA el contexto de un repositorio grande sin indexador local</title><link>https://maguyva.ai/es/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/es/blog/large-repo-context-without-a-local-indexer</guid><description>Cómo dar a un agente de código un mapa consultable de un repositorio grande desde la nube, sin ejecutar un indexador local en tu portátil.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un repositorio grande no cabe en una ventana de contexto, y si alguna vez has apuntado un indexador de portátil a un monorepo real, sabes que ahí tampoco cabe cómodamente — la RAM se dispara, el primer índice tarda una hora, y tu agente sigue empezando la siguiente sesión adivinando qué archivos importan.&lt;/p&gt;
&lt;p&gt;La respuesta habitual es ejecutar un indexador junto al editor, y para un repo que cabe cómodamente en una sola máquina, es una buena respuesta. Si tu monorepo ya se indexa rápido en Cursor y ese es el único sitio donde necesitas el mapa, este artículo no tiene nada que añadir — sáltatelo.&lt;/p&gt;
&lt;p&gt;Este artículo trata del otro caso — cuando un agente necesita un mapa consultable de un repo grande, y no quieres ejecutar un indexador local para conseguirlo.&lt;/p&gt;
&lt;h2 id=&quot;cuándo-un-indexador-local-es-la-herramienta-equivocada&quot;&gt;Cuándo un indexador local es la herramienta equivocada&lt;/h2&gt;
&lt;p&gt;Un índice local asume que el código vive en la máquina que lo consulta, y a la escala real de un monorepo esa suposición se tensa incluso dentro de un solo editor. El repo es sencillamente más grande de lo que quieres mantener caliente en un portátil: trabajas en un paquete mientras el radio de impacto vive tres directorios más allá, y un primer índice en frío de un árbol de dos millones de líneas no es algo que quieras sufrir dos veces — ni en tu máquina, ni en un runner de CI que nunca clonó el árbol antes. O un compañero debería poder consultar el mismo mapa que tú, sin esperar a que su propia máquina se abra paso por el mismo índice.&lt;/p&gt;
&lt;p&gt;Nada de esto es razón para desechar un buen indexador de editor. Es razón para tener también un mapa alojado que cualquiera de tus agentes pueda consultar por MCP.&lt;/p&gt;
&lt;p&gt;Y el problema de escala va más allá de «demasiados archivos para pegar». En un árbol grande, la pregunta interesante casi nunca es «muéstrame este archivo» — es qué archivo, qué símbolo, qué llamadores, qué pruebas. Un agente que empieza listando &lt;code&gt;src/&lt;/code&gt; y leyendo los tres primeros resultados fallará alegremente el handler en &lt;code&gt;apps/api&lt;/code&gt; y el cliente generado en &lt;code&gt;packages/sdk&lt;/code&gt;. Lo que necesitas es una recuperación construida desde todo el árbol, luego clasificada, luego citada.&lt;/p&gt;
&lt;h2 id=&quot;qué-significa-realmente-contexto-de-un-repo-grande&quot;&gt;Qué significa realmente «contexto de un repo grande»&lt;/h2&gt;
&lt;p&gt;Volcar archivos en el prompt no es contexto — es una copia más pequeña y peor del árbol. Lo que tu agente realmente necesita es hacer preguntas y recibir respuestas citadas de vuelta: dónde está definido este símbolo y quién lo llama, qué depende del módulo que estoy a punto de cambiar, qué archivo de prueba cubre este comportamiento, y cómo se ve el árbol &lt;em&gt;ahora&lt;/em&gt;, no el trimestre pasado.&lt;/p&gt;
&lt;p&gt;Esas respuestas tienen que venir de un índice construido a partir de tu repo en lugar de la memoria del modelo sobre repos de otras personas, y el índice tiene que vivir en algún lugar distinto de la ventana de contexto del agente. Para este problema, también debería vivir en algún lugar distinto de tu portátil.&lt;/p&gt;
&lt;p&gt;Otra cosa que los archivos de instrucciones no pueden hacer por ti: &lt;code&gt;CLAUDE.md&lt;/code&gt; y &lt;code&gt;AGENTS.md&lt;/code&gt; son el lugar correcto para las convenciones y el comportamiento, pero no son un mapa vivo, clasificado y consultable de un árbol de dos millones de líneas. Usa las reglas para el comportamiento; usa la inteligencia del repo para los hechos.&lt;/p&gt;
&lt;h2 id=&quot;construir-el-mapa-en-la-nube-consultarlo-desde-cualquier-cliente&quot;&gt;Construir el mapa en la nube, consultarlo desde cualquier cliente&lt;/h2&gt;
&lt;p&gt;Maguyva es una capa de contexto de código MCP remota. Conectas GitHub, eliges tus repositorios, y te marchas mientras los pipelines en la nube analizan el árbol, construyen los símbolos y las aristas del grafo, y mantienen un mapa clasificado — sin indexador local, nunca.&lt;/p&gt;
&lt;p&gt;Cuando subes código, los archivos cambiados se analizan de forma incremental, y las capas de grafo y clasificación se reconstruyen según un calendario: diario en el plan gratuito, cada hora en los de pago. Cada snapshot lleva marca de tiempo, así que tu agente puede saber qué versión del árbol está leyendo. El límite honesto aquí es el trabajo local no sincronizado — una edición que solo existe en tu árbol de trabajo, nunca subida, aún no está en el mapa alojado.&lt;/p&gt;
&lt;p&gt;Luego conectas el cliente que ya uses añadiendo una clave de API a su configuración MCP. Hay guías de configuración para 24 clientes MCP documentados, y cualquier otro cliente compatible con MCP que soporte la configuración estándar también puede conectarse. Si Cursor es donde vives, la &lt;a href=&quot;https://maguyva.ai/es/for-cursor&quot;&gt;página de Cursor&lt;/a&gt; recorre ese camino; el mismo servidor responde a Claude Code, VS Code, Windsurf, Codex CLI y el resto.&lt;/p&gt;
&lt;p&gt;No cambias de editor. Le das a tu agente una superficie de herramientas — 11 herramientas MCP en búsqueda, símbolos, análisis de dependencias, recuperación de archivos y contexto de repositorio — con cobertura de más de 279 lenguajes y tecnologías basadas en texto, lo cual importa más de lo que crees en un monorepo que dejó de ser un solo lenguaje hace años.&lt;/p&gt;
&lt;p&gt;Las respuestas vuelven fundamentadas, como rutas de archivo con números de línea. La recuperación semántica, estructural, por grafo y de texto se fusionan en resultados clasificados, de modo que una pregunta como «qué depende de parseConfig» no te da ni un volcado de grep ni un solo fragmento semántico, sino el puñado de lugares que realmente importan.&lt;/p&gt;
&lt;h2 id=&quot;una-guía-concreta&quot;&gt;Una guía concreta&lt;/h2&gt;
&lt;p&gt;No empieces indexando toda la empresa. Este es el camino que funciona:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Elige un repositorio que ya conozcas bien — un paquete que puedas evaluar a mano vale más que el árbol más grande que tengas.&lt;/li&gt;
&lt;li&gt;Empieza gratis: 3 repos, 50k líneas indexadas, las 11 herramientas, sin cuota mensual de consultas. Si tu repo representativo es más grande, la &lt;a href=&quot;https://maguyva.ai/es/pricing&quot;&gt;página de precios&lt;/a&gt; lista los niveles de espacio de trabajo ($0, $19, $49, $149) por huella indexada — no por número de asientos.&lt;/li&gt;
&lt;li&gt;Conecta GitHub y espera a que termine el primer índice. No estás compilando nada localmente.&lt;/li&gt;
&lt;li&gt;Conecta el cliente MCP — unas pocas líneas de configuración. Maguyva es un servidor MCP remoto, así que no hay plugins, ni extensiones, ni un segundo editor que adoptar.&lt;/li&gt;
&lt;li&gt;Haz una pregunta que puedas verificar. «¿Qué depende de parseConfig?» o «¿Dónde se gestiona la expiración de sesión de inicio?» Luego abre los resultados citados &lt;code&gt;file.ext:line&lt;/code&gt; y compáralos con el árbol que tienes delante.&lt;/li&gt;
&lt;li&gt;Solo después de que las citas sobrevivan a ese contacto dejas que el agente edite.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si el primer repo encaja bien y tu árbol es grande, sube el espacio de trabajo para que coincida con tus líneas indexadas y la cadencia de reconstrucción. Humanos y agentes comparten el mismo recuento de usuarios — Maguyva cobra por espacio de trabajo, no por asiento — así que añadir un tercer agente al bucle no te cuesta nada.&lt;/p&gt;
&lt;p&gt;La prueba de activación es la misma que recomiendan los &lt;a href=&quot;https://maguyva.ai/es/docs&quot;&gt;docs&lt;/a&gt; para cualquier primera ejecución: indexar un repo que ya conoces, hacer una pregunta que puedas verificar. Un repo grande no cambia la prueba; solo hace que un primer archivo equivocado salga más caro.&lt;/p&gt;
&lt;h2 id=&quot;qué-vigilar-una-vez-conectado&quot;&gt;Qué vigilar una vez conectado&lt;/h2&gt;
&lt;p&gt;Vigila tres cosas. Frescura: los planes de pago se reconstruyen cada hora, los gratuitos a diario, y el trabajo local no subido no estará en el mapa — ese es el trato que aceptas. Alcance: indexa un conjunto representativo de repos, no cada fork archivado; el nivel gratuito está deliberadamente dimensionado para averiguar si las respuestas merecen la pena conservarse. Y verificación: un mapa de repo grande que no pueda citar rutas y números de línea es solo un motor de adivinanzas más lento, así que haz que tu agente muestre la ubicación antes de entregar el parche.&lt;/p&gt;
&lt;p&gt;Luego ejecuta la misma prueba que ejecutarías en un repo pequeño. Indexa un repo que ya conoces. Haz una pregunta que puedas verificar. Si el mapa es real, tu agente deja de empezar desde un árbol frío.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Por qué tu agente de código con IA alucina rutas de archivo</title><link>https://maguyva.ai/es/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/es/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Los agentes de código con IA inventan rutas de archivo cuando no tienen un mapa real del repo. Aquí está por qué ocurre, y cómo la fundamentación lleva a menos ediciones alucinadas.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;La señal delatora no es un cuerpo de función incorrecto. Es una edición segura de sí misma a un archivo que no existe, o a un archivo que existe pero no es el que implementa el comportamiento.&lt;/p&gt;
&lt;p&gt;Pediste una corrección de expiración de sesión. El agente abrió &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Esa ruta es plausible. También está mal. El handler real vive en &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, renombrado hace dos refactorizaciones. El agente no te mintió. Completó una cadena con forma de ruta a partir de priors de entrenamiento más lo que ya hubiera en la ventana de contexto.&lt;/p&gt;
&lt;p&gt;Este es el modo de fallo común en un repositorio real. El modelo sabe escribir código. El error está en elegir el lugar equivocado para escribirlo.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-los-agentes-inventan-rutas&quot;&gt;Por qué los agentes inventan rutas&lt;/h2&gt;
&lt;p&gt;Un agente de código es un modelo de predicción del siguiente token con herramientas. Cuando dices «arregla la expiración de sesión», tiene que nombrar un archivo antes de poder leer o parchear nada. Si todavía no tiene un mapa fundamentado, construye una ruta a partir de:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Convenciones de nombres que ha visto en otros repositorios. &lt;code&gt;src/auth/session.ts&lt;/code&gt; es una forma frecuente.&lt;/li&gt;
&lt;li&gt;Archivos que ya están en la conversación, que quizá sean los que pegaste la semana pasada, no los que importan ahora.&lt;/li&gt;
&lt;li&gt;Listados de directorios que ejecutó por casualidad, incompletos en un árbol grande.&lt;/li&gt;
&lt;li&gt;Archivos de instrucciones. &lt;code&gt;CLAUDE.md&lt;/code&gt; y &lt;code&gt;AGENTS.md&lt;/code&gt; le dicen al agente cómo comportarse. No son un índice vivo de símbolos, llamadores o rutas actuales.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ninguna de esas fuentes es un mapa de este repo, hoy. El modelo llena el vacío como llena cualquier vacío: con una continuación de alta probabilidad. Esa continuación a menudo se ve como una ruta real. A veces el archivo existe y está junto al correcto. A veces existió en una rama que se fusionó el mes pasado. A veces nunca existió.&lt;/p&gt;
&lt;p&gt;Grep no te salva aquí si el agente nunca busca la cadena correcta. El agente adivinó una ruta, luego leyó lo que esa ruta devolvía, luego la editó. El primer paso equivocado fue la ruta, no el parche.&lt;/p&gt;
&lt;p&gt;Leer archivos tampoco es lo mismo que encontrar los correctos. Claude Code, Cursor, Codex y herramientas similares pueden abrir lo que sea que les señales. La pregunta es si encuentran de forma fiable los archivos correctos, los símbolos importantes, las dependencias, las pruebas y el radio de impacto antes de editar. El acceso a archivos sin un mapa sigue empezando con una suposición.&lt;/p&gt;
&lt;h2 id=&quot;la-edición-del-archivo-equivocado-es-un-problema-de-recuperación&quot;&gt;La edición del archivo equivocado es un problema de recuperación&lt;/h2&gt;
&lt;p&gt;Trata la ruta inventada como un fallo de recuperación, no como un defecto de personalidad.&lt;/p&gt;
&lt;p&gt;Si el agente tuviera que devolver &lt;code&gt;path/file.ext:line&lt;/code&gt; antes de que se le permitiera editar, sucederían dos cosas. Primero, podrías abrir la cita y rechazar el trabajo en diez segundos. Segundo, el agente tendría que consultar algo que realmente conoce el árbol.&lt;/p&gt;
&lt;p&gt;Ese es el trabajo de una capa de contexto de código. La búsqueda semántica sola no basta. Un fragmento que «suena a expiración de sesión» puede aterrizar igualmente en un paquete obsoleto. También necesitas texto exacto cuando conoces la cadena, búsqueda de símbolos cuando conoces el nombre, búsqueda estructural cuando conoces la forma, y un grafo de dependencias cuando necesitas llamadores y radio de impacto.&lt;/p&gt;
&lt;p&gt;Maguyva es esa capa para agentes de código compatibles con MCP. No es un editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf y otros clientes MCP se quedan donde están. El agente consulta un mapa clasificado antes de tocar una línea.&lt;/p&gt;
&lt;p&gt;La afirmación es modesta a propósito: menos ediciones alucinadas. Maguyva no le quita al modelo la capacidad de adivinar. Cambia el primer paso por defecto de «inventar una ruta plausible» a «pedir ubicaciones clasificadas y citadas».&lt;/p&gt;
&lt;h2 id=&quot;cómo-se-ve-una-respuesta-fundamentada&quot;&gt;Cómo se ve una respuesta fundamentada&lt;/h2&gt;
&lt;p&gt;Una respuesta útil a «dónde se gestiona la expiración de sesión» no es un párrafo. Es una lista corta de ubicaciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - el handler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - el llamador&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - la prueba que fallará si el cambio está mal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puedes abrir esas líneas. Si están mal, te detienes. Si están bien, el agente puede editar. La verificación es el punto, no un eslogan.&lt;/p&gt;
&lt;p&gt;Maguyva expone 11 herramientas MCP de cara al cliente en búsqueda, símbolos, análisis de dependencias, recuperación de archivos, contexto de repositorio y flujos de trabajo utilitarios deterministas. Cuatro modos de recuperación (semántico, estructural, grafo/dependencia y texto) se fusionan en resultados clasificados; la búsqueda de símbolos es una herramienta MCP separada (&lt;code&gt;find_symbol&lt;/code&gt;). Las respuestas fundamentadas vuelven con rutas de archivo y números de línea, así que puedes evaluarlas contra el árbol que tienes delante.&lt;/p&gt;
&lt;p&gt;Los &lt;a href=&quot;https://maguyva.ai/es/docs&quot;&gt;docs&lt;/a&gt; describen el camino más corto: empezar gratis, indexar un repo que ya conoces, conectar el cliente, luego hacer una pregunta que puedas verificar.&lt;/p&gt;
&lt;h2 id=&quot;un-bucle-que-cambia-la-primera-edición&quot;&gt;Un bucle que cambia la primera edición&lt;/h2&gt;
&lt;p&gt;No necesitas una nueva religión de flujo de trabajo. Necesitas un paso extra antes de la primera escritura.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Haz una pregunta que ya puedas evaluar. «¿Qué código gestiona el inicio de sesión y la expiración de sesión?» es mejor que «arregla la autenticación».&lt;/li&gt;
&lt;li&gt;Exige citas. Ruta de archivo y número de línea, no un resumen de «el módulo de autenticación».&lt;/li&gt;
&lt;li&gt;Abre los archivos citados. Sigue el símbolo. Confirma la dependencia que estás a punto de tocar.&lt;/li&gt;
&lt;li&gt;Solo entonces dejas que el agente parchee.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si el paso 2 no devuelve nada útil, el agente no tiene permiso para improvisar una ruta. Busca de nuevo, o tú se lo indicas. Esa única barrera es lo que produce menos ediciones alucinadas. El modelo es el mismo modelo. El mapa es lo que cambió.&lt;/p&gt;
&lt;p&gt;Los archivos de instrucciones siguen importando. Consérvalos. Úsalos para convenciones, reglas de revisión y lo que no hay que tocar. No les pidas que sean el índice. Un &lt;code&gt;CLAUDE.md&lt;/code&gt; que lista tres directorios importantes quedará obsoleto la semana siguiente a una división de paquete. Un mapa consultable se actualiza cuando el repo se actualiza.&lt;/p&gt;
&lt;p&gt;Un fallo relacionado es el archivo casi-correcto: el agente abre &lt;code&gt;auth.ts&lt;/code&gt; cuando el comportamiento vive en &lt;code&gt;auth-client.ts&lt;/code&gt;, o parchea un archivo generado en lugar de la fuente, o edita la copia en &lt;code&gt;packages/legacy&lt;/code&gt; porque el nombre coincidía. Las citas no hacen esos errores imposibles. Los hacen visibles antes de que el diff aterrice.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-un-mapa-no-arreglará-por-ti&quot;&gt;Lo que un mapa no arreglará por ti&lt;/h2&gt;
&lt;p&gt;Sé claro sobre lo que estás obteniendo. Un mapa fundamentado no hará correcta cada edición — tu agente puede seguir escribiendo un mal parche en exactamente el archivo correcto. Si tu base de código se apoya en despacho dinámico, reflexión o monkey-patching, algunas búsquedas de símbolos volverán más pobres de lo que te gustaría, porque eso es lo que la indirección en tiempo de ejecución le hace a cualquier índice estático. Y si esperas un porcentaje — «rutas alucinadas reducidas en X%» — no lo encontrarás aquí, porque nadie puede medir honestamente esa cifra para tu repo salvo tú.&lt;/p&gt;
&lt;p&gt;Lo que puedes esperar es más estrecho y más útil: el agente deja de abrir sus ediciones con una ruta adivinada. Ese primer paso queda fundamentado en un mapa real, y de ahí vienen las menos ediciones alucinadas. Todo lo que viene después de la cita — leer el diff, juzgar el parche — sigue siendo tu trabajo, igual que siempre lo fue.&lt;/p&gt;
&lt;p&gt;La prueba casi no te cuesta nada: indexa un repo que ya conoces y haz una pregunta que puedas verificar. Empieza con una ruta con la que ya te hayan quemado antes. Si las citas están mal, lo verás de inmediato. Si están bien, la siguiente edición de tu agente tiene un lugar mejor donde aterrizar.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Por qué actualizamos la búsqueda de código a voyage-4-large</title><link>https://maguyva.ai/es/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/es/blog/upgrading-code-search-to-voyage-4-large</guid><description>Migramos nuestros embeddings de código a voyage-4-large — actualmente en la cima de la tabla pública de RTEB para recuperación de código. La versión honesta: el compromiso que hacemos, qué indexamos realmente, y por qué pagamos por embeddings premium.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de benchmark en esta publicación reflejan las tablas de RTEB al momento de la publicación (junio de 2026). Las tablas cambian; trata las clasificaciones como una instantánea, no como un hecho permanente.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La búsqueda semántica es tan buena como los embeddings que hay detrás.&lt;/p&gt;
&lt;p&gt;Cuando un agente le pregunta a Maguyva «dónde manejamos los reintentos», no está haciendo grep de la palabra «retry». Está pidiendo el &lt;em&gt;significado&lt;/em&gt; — el bucle de backoff, el circuit breaker, la cosa que envuelve una llamada inestable. Esa pregunta la responde un modelo vectorial que convierte el código en un punto en el espacio y encuentra a sus vecinos. Elige un mejor modelo y cada consulta semántica del producto gana precisión discretamente.&lt;/p&gt;
&lt;p&gt;Así que cambiamos el nuestro. Desde junio de 2026, los embeddings de código de Maguyva corren sobre &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, en reemplazo de &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;el-benchmark&quot;&gt;El benchmark&lt;/h2&gt;
&lt;p&gt;No tomamos esta decisión por intuición. El &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; público clasifica modelos de embeddings en tareas reales de recuperación, y en su tabla de &lt;strong&gt;Code&lt;/strong&gt;, &lt;code&gt;voyage-4-large&lt;/code&gt; ocupa el &lt;strong&gt;#1 general (90.86)&lt;/strong&gt; — por delante de &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90.26) y, notablemente, por delante del modelo que ya estábamos usando, &lt;code&gt;voyage-code-3&lt;/code&gt; (89.73, #3).&lt;/p&gt;
&lt;p&gt;Esa es una brecha absoluta pequeña. Pero es una brecha en la dirección correcta, en un benchmark público, en la tarea exacta que nos importa: recuperar código por significado.&lt;/p&gt;
&lt;h2 id=&quot;el-compromiso-que-aceptamos-cuantización-binaria&quot;&gt;El compromiso que aceptamos: cuantización binaria&lt;/h2&gt;
&lt;p&gt;Aquí está la parte que la mayoría de las publicaciones de «actualizamos nuestro modelo» se saltan.&lt;/p&gt;
&lt;p&gt;Maguyva no almacena vectores de precisión completa. Almacenamos embeddings &lt;strong&gt;cuantizados en binario&lt;/strong&gt;: cada vector de 2048 dimensiones se colapsa a una firma de 2048 bits — &lt;strong&gt;256 bytes por vector&lt;/strong&gt;. Esas firmas se buscan con distancia de Hamming, indexadas y particionadas por tenant.&lt;/p&gt;
&lt;p&gt;Ese es un compromiso deliberado. La cuantización binaria cede algo de precisión de recuperación a cambio de un almacenamiento dramáticamente más pequeño y un cálculo de distancia rápido y barato, sin necesidad de operar una base de datos vectorial separada. Para un producto que indexa repositorios completos por espacio de trabajo, esa economía importa más que exprimir la última fracción de un punto de benchmark.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; encaja en este diseño sin forzar una migración de la capa de almacenamiento: produce una salida de 2048 dimensiones, igual que &lt;code&gt;voyage-code-3&lt;/code&gt;, así que nuestras columnas &lt;code&gt;bit(2048)&lt;/code&gt; y la ruta de búsqueda por Hamming no cambiaron. El modelo mejoró; el esquema se quedó igual.&lt;/p&gt;
&lt;h2 id=&quot;el-código-fue-solo-el-comienzo&quot;&gt;El código fue solo el comienzo&lt;/h2&gt;
&lt;p&gt;Maguyva es una herramienta de inteligencia de código. Pero también somos el cliente cero, y lo apuntamos a otra cosa: el markdown que vive en nuestros repositorios junto al código. Registros de decisiones de arquitectura, runbooks, contratos, documentos de finanzas y políticas — todo bajo control de versiones en Git, todo detrás del mismo servidor MCP, un índice semántico sobre los &lt;em&gt;documentos&lt;/em&gt;, no solo sobre el código fuente.&lt;/p&gt;
&lt;p&gt;Por eso importa exactamente la amplitud de voyage-4-large. En la misma familia de tablas de RTEB es &lt;strong&gt;#1 en finanzas, #1 en salud y #1 en recuperación general de texto&lt;/strong&gt; — por delante de Gemini Embedding de Google, Embed v4 de Cohere y text-embedding-3-large de OpenAI. (Voyage es cocreador de RTEB, así que lo leemos como una señal pública fuerte más que como un árbitro perfectamente neutral, pero se compara cabeza a cabeza contra todos los modelos comerciales importantes, en conjuntos de reserva privados). El mismo índice que encuentra la función correcta para un agente encuentra la cláusula correcta en un contrato o la línea correcta en una política — y en esos dominios, voyage-4-large no es un compromiso, es el líder.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-pagamos-por-embeddings-premium&quot;&gt;Por qué pagamos por embeddings premium&lt;/h2&gt;
&lt;p&gt;Hay una forma más barata de hacer búsqueda, y gran parte de ella es gratis. La búsqueda léxica — BM25 y sus parientes — busca coincidencias de palabras clave, corre localmente y no cuesta nada. Los modelos de embeddings de código abierto como BGE, Nomic y embeddinggemma dan una recuperación semántica genuinamente &lt;em&gt;decente&lt;/em&gt;, y puedes alojarlos tú mismo por el precio de una GPU. Maguyva también usa el lado gratuito: cada consulta fusiona búsqueda de texto, AST, grafo y semántica. En lo que no escatimamos es en la capa semántica.&lt;/p&gt;
&lt;p&gt;Pagamos por token por embeddings premium — &lt;code&gt;voyage-4-large&lt;/code&gt; — en lugar de autoalojar un modelo gratuito, por dos razones. Primero, la búsqueda por palabras clave sola no puede responder «dónde manejamos los reintentos» cuando el código dice &lt;code&gt;backoff&lt;/code&gt; y &lt;code&gt;circuit breaker&lt;/code&gt; y nunca dice la palabra «retry» — el significado es la razón de ser del embedding, y en los dominios a los que servimos los modelos abiertos van a la zaga de los premium: un par de puntos por detrás en texto general, y más atrás todavía en nichos como código, contratos y finanzas. Segundo, en nuestra experiencia la calidad de la recuperación moldea la respuesta final más que el modelo del otro lado — un agente fuerte al que le dan el contexto equivocado de todas formas responde mal, y nunca ve el documento que nunca le dieron.&lt;/p&gt;
&lt;p&gt;Así que los embeddings premium son una factura por token que escala con cada repositorio y documento que indexamos — y la pagamos a propósito. Por el resultado que obtienen nuestros usuarios, la función correcta o la cláusula correcta, creemos que ese compromiso vale la pena.&lt;/p&gt;
&lt;h2 id=&quot;la-parte-honesta&quot;&gt;La parte honesta&lt;/h2&gt;
&lt;p&gt;La propia documentación de Voyage todavía etiqueta a &lt;code&gt;voyage-code-3&lt;/code&gt; como el modelo optimizado para código. Entonces, ¿por qué cambiar?&lt;/p&gt;
&lt;p&gt;Porque leímos el benchmark público, no solo la tabla de modelos del proveedor, y el benchmark puso a &lt;code&gt;voyage-4-large&lt;/code&gt; en la cima para recuperación de código. Esta fue una decisión con visión de futuro: tomar el modelo más nuevo y generalmente más fuerte y validarlo contra una tabla pública en las tareas que importan. Nos sentimos cómodos haciendo esa apuesta porque la evidencia es amplia — voyage-4-large no solo gana en código, también lidera en finanzas, salud y recuperación general.&lt;/p&gt;
&lt;h2 id=&quot;los-cimientos-discretos&quot;&gt;Los cimientos discretos&lt;/h2&gt;
&lt;p&gt;Cada herramienta que exponemos — búsqueda semántica, recopilación de contexto de tareas, preguntas y respuestas fundamentadas — termina apoyándose en la recuperación. Cuando el recuperador mejora, el agente del otro lado obtiene mejor evidencia, toma menos decisiones equivocadas, y fundamenta sus respuestas en el código correcto — o en la cláusula correcta, o en la política correcta. Un modelo de embeddings más preciso no es una función vistosa. Son los cimientos de todo lo demás, y acabamos de reforzarlos. No lo vas a notar. Ese es el punto.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Mejora recursiva del soporte de lenguajes: afinando la inteligencia de código en ~280 lenguajes</title><link>https://maguyva.ai/es/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/es/blog/autonomous-quality-loops-language-grind</guid><description>Damos soporte de inteligencia de código para ~280 lenguajes. Ningún humano puede auditar eso a mano. Así que construimos un bucle de mejora recursiva del soporte de lenguajes — verificación puntual, LLM como juez, corregir una cosa, revalidar — y lo ejecutamos con una flota de agentes aislados hasta que la extracción sea realmente correcta, no solo verde.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (mayo de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva extrae símbolos, referencias y un grafo de dependencias del código fuente en aproximadamente 280 lenguajes. Cada lenguaje es un handler de tree-sitter personalizado — consultas, heurísticas, casos extremos — y cada handler puede estar sutilmente equivocado a su propia manera. Una llamada a método emitida como una lectura. Una función atribuida al alcance envolvente equivocado. Una relación que simplemente no existe.&lt;/p&gt;
&lt;p&gt;Eso no se puede auditar a mano. Ningún equipo puede leer la salida de extracción en 280 gramáticas y detectar las aristas malas. Así que la pregunta interesante no es «¿nuestra extracción es correcta?» — es «¿cómo &lt;em&gt;descubres&lt;/em&gt; que está mal, a esta escala, sin un humano en cada ciclo?». Nuestra respuesta es la mejora recursiva del soporte de lenguajes: un bucle de calidad impulsado por agentes de lenguaje, un LLM que actúa como juez, y una regla que seguimos reaprendiendo: verde no es lo mismo que correcto.&lt;/p&gt;
&lt;h2 id=&quot;verde-no-es-correcto&quot;&gt;Verde no es correcto&lt;/h2&gt;
&lt;p&gt;Cada lenguaje tiene un conjunto de fixtures, y un control previo al lanzamiento lo evalúa en cinco dimensiones — exactitud, integridad estructural, completitud, calidad y rendimiento. Un lenguaje pasa a &lt;strong&gt;VERDE&lt;/strong&gt; solo cuando, en sus fixtures, la precisión es ≥ 0.95, el recall ≥ 0.99 y el F1 ≥ 0.97, con al menos 20 aristas esperadas para tener confianza estadística. Por debajo de eso es AMARILLO o ROJO, y no se publica.&lt;/p&gt;
&lt;p&gt;Ese control es necesario, pero no suficiente. Los fixtures se validan contra fixtures &lt;em&gt;que nosotros escribimos&lt;/em&gt;. Codifican los casos que ya se nos ocurrieron. Un handler puede ser impecable en sus fixtures y aun así estropear un patrón que solo aparece en código real — un modismo de macro, un método con restricciones sobre sus tipos genéricos, una característica del lenguaje para la que nadie escribió un fixture. VERDE significa que los fixtures pasan. No significa que un repositorio real se extraiga limpiamente. Así que el bucle tiene que dejar atrás los fixtures y mirar el mundo real.&lt;/p&gt;
&lt;h2 id=&quot;el-bucle-interno-verificación-puntual-juicio-corrección-prueba&quot;&gt;El bucle interno: verificación puntual, juicio, corrección, prueba&lt;/h2&gt;
&lt;p&gt;El bucle central se ejecuta para un lenguaje a la vez:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Hay algunas cosas que hacen que esto funcione en lugar de dar vueltas sin avanzar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El juez es el agente, no una llamada a una API.&lt;/strong&gt; Cuando decimos «LLM como juez», nos referimos a que el propio agente de lenguaje lee cada arista muestreada contra la fuente real y la clasifica con una rúbrica fija de cinco categorías: ¿esta arista es correcta, es un falso positivo, es la relación correcta con el tipo equivocado, está unida al alcance equivocado, o lleva metadatos equivocados? Esa rúbrica es todo el juego — un «23% de tasa de error» no significa nada hasta que sabes si son defectos reales o el juez contando mal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrige una cosa, y luego pruébalo.&lt;/strong&gt; Cada iteración cambia exactamente un activo editable, luego se vuelve a ejecutar con un entorno de pruebas fijo y conserva el cambio solo si el F1 mejora y la reclasificación se ve mejor. Si no, se revierte. Nada de lotes de ediciones especulativas, nada de «debería estar mejor». Un cambio se gana su lugar o desaparece. Y cuando una corrección se mantiene, se promueve al conjunto de fixtures — para que el bug que corrigió nunca pueda volver en silencio. Ese paso de promoción es lo que hace que el bucle sea &lt;em&gt;recursivo&lt;/em&gt; y no simplemente repetitivo: cada pasada endurece el oráculo contra el que se valida la siguiente pasada.&lt;/p&gt;
&lt;h2 id=&quot;la-lección-que-seguimos-reaprendiendo-las-métricas-sobrerreportan&quot;&gt;La lección que seguimos reaprendiendo: las métricas sobrerreportan&lt;/h2&gt;
&lt;p&gt;Aquí está la trampa, y caímos de lleno en ella. Las métricas secundarias del corpus — con qué frecuencia un destino extraído no tiene un símbolo resoluble, cuántos símbolos parecen «huérfanos», etcétera — sobrerreportan masivamente los problemas. En su mayoría son &lt;em&gt;artefactos de paradigma&lt;/em&gt;, no bugs.&lt;/p&gt;
&lt;p&gt;El ejemplo más claro: &lt;code&gt;llvm&lt;/code&gt; mostró en un momento una tasa del 73% de «fuente sin símbolo» y fue tildado de catastrófico. Investigamos. La precisión real era del &lt;strong&gt;98.5%&lt;/strong&gt;. Los «símbolos faltantes» eran casi todos referencias externas legítimas — llamadas a la biblioteca estándar, a frameworks, a código que vive fuera del repositorio. La métrica estaba midiendo una propiedad del lenguaje, no un defecto del handler. Lenguajes como Zig, COBOL y Odin muestran tasas de «huérfanos» del 65–70% y son totalmente correctos; COBOL tuvo cero errores reales.&lt;/p&gt;
&lt;p&gt;Si hubiéramos dejado que esos números guiaran el trabajo, habríamos pasado semanas «arreglando» handlers que ya estaban bien e ignorando los lenguajes con bugs reales y silenciosos. La conclusión es tajante: las métricas agregadas son, en el mejor de los casos, una señal aproximada de triaje. &lt;strong&gt;La señal de calidad real es la verificación puntual con clasificación de aristas&lt;/strong&gt; — mirar aristas reales en repositorios reales y juzgarlas una por una. Datos por encima de la intuición, pero solo una vez que sabes qué datos están diciendo la verdad.&lt;/p&gt;
&lt;h2 id=&quot;el-bucle-externo-una-flota-no-un-maratón&quot;&gt;El bucle externo: una flota, no un maratón&lt;/h2&gt;
&lt;p&gt;Hacerlo de a un lenguaje a la vez tomaría una eternidad en 280 de ellos, así que el bucle interno se envuelve en uno externo que ejecuta muchos en paralelo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada agente trabaja en un worktree desechable para que no se pisen entre sí. El orquestador integra sus correcciones de a una, cada una detrás de una verificación de regresión de manifiesto completo: un cambio que ayuda a su propio lenguaje pero rompe silenciosamente otros tres no se integra. La integración está controlada y confirmada antes de que se publique nada — el control de regresión decide qué es &lt;em&gt;seguro&lt;/em&gt;, un humano sigue decidiendo qué &lt;em&gt;se lanza&lt;/em&gt;. Luego el pool rota hacia el siguiente conjunto de lenguajes y todo el proceso se repite.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-todavía-es-imperfecto&quot;&gt;Lo que todavía es imperfecto&lt;/h2&gt;
&lt;p&gt;El juez puede equivocarse, y el error tiene una dirección: un agente que corre con muy poco contexto &lt;em&gt;sobrerreporta&lt;/em&gt;. En un lote, ocho lenguajes fueron marcados con un 5–20% de error; al inspeccionarlos, solo uno de esos lenguajes tenía un bug real — el resto eran errores del juez por no captar la semántica propia del lenguaje (una línea de fuente que legítimamente emite varias aristas, enlaces de parámetros modelados como asignaciones, lenguajes con una referencia por identificador). Por eso muestreamos con dos semillas y hacemos verificación cruzada, y por eso un desacuerdo entre el juez y los fixtures se trata como la señal &lt;em&gt;más&lt;/em&gt; interesante, no como un veredicto definitivo — a veces lo que está mal es el fixture.&lt;/p&gt;
&lt;p&gt;También somos honestos sobre el objetivo. La meta es cero errores reales, punto — pero «cero» es una dirección hacia la que nos esforzamos, lenguaje por lenguaje, no una casilla que se marca. Siempre hay otro repositorio con otro modismo.&lt;/p&gt;
&lt;h2 id=&quot;ganado-no-afirmado&quot;&gt;Ganado, no afirmado&lt;/h2&gt;
&lt;p&gt;Todo lo que Maguyva hace por un agente — encontrar un símbolo, rastrear una dependencia, responder una pregunta con código citado — descansa en que la extracción de base sea correcta. En 280 lenguajes, «correcto» no se puede simplemente afirmar; hay que &lt;em&gt;ganárselo&lt;/em&gt; continuamente contra código real. El bucle es cómo nos lo ganamos: un ciclo autónomo de verificación puntual y corrección que trata sus propias métricas con sospecha, prueba cada cambio, y convierte cada corrección en una protección contra la próxima regresión. No es glamoroso. Es el trabajo que nos permite decir «damos soporte a tu lenguaje» y decirlo en serio. Verde es fácil. Correcto se gana.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Búsqueda por fusión multimodal: eligiendo el recuperador correcto para cada consulta</title><link>https://maguyva.ai/es/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/es/blog/multi-modal-fusion-search</guid><description>Una consulta como &apos;dónde está definido parseConfig&apos; necesita una búsqueda distinta a &apos;cómo funciona la autenticación&apos;. Maguyva clasifica la intención, pondera en consecuencia cuatro modalidades de recuperación, y fusiona los resultados con Reciprocal Rank Fusion ponderada.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Nota sobre el diseño histórico: este artículo de abril de 2026 describe el diseño de enrutamiento de entonces, no el comportamiento predeterminado actual. La corrección de septiembre que figura más abajo solo trata una afirmación sobre mediciones. Para conocer el enrutamiento, los preajustes y los controles explícitos de modalidades actuales, consulte &lt;a href=&quot;https://maguyva.ai/es/docs/how-it-works&quot;&gt;Cómo funciona&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Una consulta de búsqueda no es una sola cosa.&lt;/p&gt;
&lt;p&gt;«dónde está definido &lt;code&gt;parseConfig&lt;/code&gt;» quiere un símbolo exacto — una ubicación precisa, rápido. «cómo funciona la autenticación» quiere significado — el conjunto de código relacionado que explica un concepto. «qué se rompe si cambio esta función» quiere el grafo de dependencias. «encontrar la cadena &lt;code&gt;ECONNREFUSED&lt;/code&gt;» quiere una coincidencia literal, nada elaborado.&lt;/p&gt;
&lt;p&gt;Grep es excelente para coincidencias literales y útil para algunas búsquedas de referencias, pero no es un grafo de dependencias y no entiende el significado. Los embeddings cubren el lado semántico, pero son la herramienta equivocada para cadenas exactas y análisis de impacto. La mayoría de las herramientas de búsqueda de código eligen un solo motor y hacen que cada consulta viva con esa elección. Maguyva no elige. Determina qué tipo de pregunta hiciste y luego combina cuatro recuperadores en la proporción que esa pregunta merece.&lt;/p&gt;
&lt;h2 id=&quot;cuatro-modalidades&quot;&gt;Cuatro modalidades&lt;/h2&gt;
&lt;p&gt;Por debajo hay cuatro formas independientes de encontrar código:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semántica&lt;/strong&gt; — búsqueda vectorial sobre embeddings binarios de Voyage; encuentra código por significado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;texto&lt;/strong&gt; — coincidencia por trigramas; encuentra literales, cadenas de error, identificadores exactos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;estructural&lt;/strong&gt; — consultas AST; encuentra definiciones, firmas y construcciones del lenguaje.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;grafo&lt;/strong&gt; — el grafo de dependencias; encuentra quién llama, a quién se llama, y el radio de impacto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada una es fuerte en una clase distinta de pregunta. El truco está en decidir cuánto confiar en cada una para la consulta que tienes delante.&lt;/p&gt;
&lt;h2 id=&quot;clasificación-de-intención&quot;&gt;Clasificación de intención&lt;/h2&gt;
&lt;p&gt;Antes de que corra cualquier recuperación, un clasificador ligero ordena la consulta en una de seis intenciones, con un puntaje de confianza. Es deliberadamente barato — heurísticas ordenadas, gana la primera coincidencia — porque corre en la ruta crítica y solo agrega uno o dos milisegundos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;empieza con &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (confianza 0.95)&lt;/li&gt;
&lt;li&gt;«who calls» (quién llama), «usages of» (usos de), «references to» (referencias a) → &lt;strong&gt;find_references&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;«impact» (impacto), «blast radius» (radio de impacto), «what depends on» (qué depende de) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;un &lt;code&gt;&quot;string&quot;&lt;/code&gt; entre comillas o un token de error como &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0.85–0.90)&lt;/li&gt;
&lt;li&gt;un identificador &lt;code&gt;CamelCase&lt;/code&gt; o &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0.60–0.80)&lt;/li&gt;
&lt;li&gt;«how» (cómo), «why» (por qué), «explain» (explica), «architecture» (arquitectura) → &lt;strong&gt;understand_code&lt;/strong&gt; (0.75)&lt;/li&gt;
&lt;li&gt;nada coincide → &lt;strong&gt;understand_code&lt;/strong&gt;, confianza baja (0.40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada intención lleva un perfil de ponderación entre las cuatro modalidades. Estos son los números reales:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intención&lt;/th&gt;
&lt;th&gt;semántica&lt;/th&gt;
&lt;th&gt;texto&lt;/th&gt;
&lt;th&gt;estructural (AST)&lt;/th&gt;
&lt;th&gt;grafo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Así que «dónde está definido &lt;code&gt;parseConfig&lt;/code&gt;» se apoya fuerte en AST (0.6). «cómo funciona la autenticación» se apoya en vectores semánticos (0.5). «qué depende de esto» es casi todo grafo (0.7). «encontrar &lt;code&gt;ECONNREFUSED&lt;/code&gt;» es casi todo trigramas (0.9), con el modelo de embeddings completamente apagado — porque la similitud semántica es exactamente la herramienta equivocada para una cadena exacta.&lt;/p&gt;
&lt;h2 id=&quot;la-ruta-rápida-y-la-ruta-fusionada&quot;&gt;La ruta rápida y la ruta fusionada&lt;/h2&gt;
&lt;p&gt;Cuando el clasificador tiene confianza — puntaje ≥ 0.85 — y la consulta es normal, Maguyva se salta la fusión por completo y enruta directo a la única modalidad dominante. «dónde está definido X» no necesita cuatro recuperadores; necesita el índice AST, ya. Esa ruta directa se reporta como &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Todo lo ambiguo pasa por la fusión. Las cuatro modalidades (o tres, en el preajuste predeterminado) corren en paralelo, cada una devolviendo su propia lista clasificada, y las combinamos.&lt;/p&gt;
&lt;h2 id=&quot;reciprocal-rank-fusion-ponderada&quot;&gt;Reciprocal Rank Fusion ponderada&lt;/h2&gt;
&lt;p&gt;Fusionar recuperadores heterogéneos es más difícil de lo que suena: una similitud coseno de 0.82, un puntaje de trigramas de 137 y una centralidad de grafo de 0.004 no están en la misma escala, así que no puedes simplemente sumarlos. Reciprocal Rank Fusion evita el problema descartando los puntajes crudos y conservando solo la &lt;strong&gt;posición&lt;/strong&gt; que cada motor asignó. La contribución de un resultado desde una modalidad es:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;donde &lt;code&gt;rank&lt;/code&gt; es su posición en la lista de esa modalidad y &lt;code&gt;k&lt;/code&gt; es una constante de suavizado. Las contribuciones se suman entre modalidades para cualquier resultado que más de un motor encontró — el acuerdo entre recuperadores flota naturalmente hacia arriba. Usamos &lt;strong&gt;k = 40&lt;/strong&gt; en el preajuste predeterminado y 60 en &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; corre solo en modo semántico, así que la fusión nunca entra en juego ahí). El trabajo original de RRF llegó a k = 60 para recuperación de propósito general; nuestro valor predeterminado acentúa un poco más las primeras posiciones, lo que le da al acuerdo entre modalidades sobre los resultados mejor clasificados un poco más de peso — y no recomendamos ajustarlo a mano.&lt;/p&gt;
&lt;p&gt;Además de eso, los resultados llevan un &lt;strong&gt;impulso de importancia de grafo&lt;/strong&gt;. Un hub — una función de la que depende toda la base de código — debería superar a un nodo hoja poco conocido incluso con la misma relevancia textual, así que multiplicamos cada contribución por:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La centralidad viene de las métricas precalculadas de PageRank/grado del pipeline, y el impulso está limitado a 1.5× para que una función popular no pueda enterrar por completo a una más relevante pero poco conocida. Finalmente degradamos los resultados de rutas de vendor, build y archivo, y deduplicamos al mejor fragmento por archivo.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-todavía-es-imperfecto&quot;&gt;Lo que todavía es imperfecto&lt;/h2&gt;
&lt;p&gt;El clasificador de intención es un conjunto de expresiones regulares, no un modelo entrenado. Maneja las formas habituales de consulta mediante heurísticas, y una consulta ambigua recurre a &lt;code&gt;understand_code&lt;/code&gt; y a una combinación con mayor peso semántico. Una versión anterior de este artículo describía como conseguida una reducción de la tasa de consultas sin resultados de aproximadamente el 15% a menos del 5%. En realidad, la propuesta de diciembre de 2025 indicaba una tasa inicial estimada y un objetivo; no se proporciona un conjunto de consultas ni un registro de medición que lo respalde. Retiramos esa afirmación de mejora conseguida; consulte las &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;evidencias de origen y la corrección&lt;/a&gt;. No hemos sustituido el clasificador por un modelo entrenado porque la versión económica es rápida y suficiente para la función de enrutamiento prevista, y porque un clasificador equivocado pero seguro de sí mismo es peor que una alternativa predeterminada honesta. Los pesos son supuestos previos elegidos a mano, no aprendidos de datos de clics que no recopilamos.&lt;/p&gt;
&lt;h2 id=&quot;pregunta-lo-que-necesitas-no-la-herramienta&quot;&gt;Pregunta lo que necesitas, no la herramienta&lt;/h2&gt;
&lt;p&gt;Un agente no debería tener que saber si recurrir a grep, a embeddings o al grafo de llamadas — debería hacer su pregunta en términos simples y obtener la respuesta correcta. La fusión multimodal es lo que permite que &lt;code&gt;find_symbol&lt;/code&gt;, la búsqueda semántica y el análisis de dependencias convivan detrás de una sola interfaz de consulta: el sistema lee la forma de la pregunta y ensambla en silencio el recuperador correcto para ella. El modelo que puntúa los embeddings importa, pero también importa saber cuándo &lt;em&gt;no&lt;/em&gt; usarlos. Elegir la herramienta correcta para cada consulta es su propio tipo de calidad, y es una que preferimos asumir nosotros en lugar de delegarla a quien hace la llamada.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Observabilidad de agentes: hooks, Alloy y Grafana</title><link>https://maguyva.ai/es/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/es/blog/agent-observability-hooks-alloy-grafana</guid><description>Conectamos Claude Code y Codex a un único stack de Grafana con OpenTelemetry y Alloy, y luego usamos trazas y registros para encontrar y corregir problemas de comportamiento de los agentes en su origen.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Los sistemas de agentes fallan de formas extrañas.&lt;/p&gt;
&lt;p&gt;A veces el modelo es el problema. A veces la herramienta es el problema. A veces tu servidor MCP está bien, pero el agente eligió al especialista equivocado, o pasó la mitad de la sesión haciendo trabajo de shell que no esperabas, o consumió presupuesto silenciosamente en un bucle que desde afuera parecía productivo.&lt;/p&gt;
&lt;p&gt;Si no puedes ver la diferencia, en realidad no estás operando un sistema de agentes. Estás adivinando.&lt;/p&gt;
&lt;p&gt;Así que construimos un stack de observabilidad para nuestro propio flujo de trabajo: Claude Code, Codex, eventos de hooks de Claude, eventos de notify de Codex, OpenTelemetry nativo, Grafana Alloy y Grafana Cloud del otro lado.&lt;/p&gt;
&lt;p&gt;La parte interesante no es «hicimos un dashboard». La parte interesante es que tuvimos que dividir la telemetría en dos flujos distintos porque ninguna fuente única nos daba el panorama completo.&lt;/p&gt;
&lt;h2 id=&quot;el-problema-la-telemetría-de-agentes-está-fragmentada&quot;&gt;El problema: la telemetría de agentes está fragmentada&lt;/h2&gt;
&lt;p&gt;Los agentes de codificación modernos ya emiten algo de telemetría. Eso ayuda, pero no es suficiente.&lt;/p&gt;
&lt;p&gt;OTEL nativo es bueno para responder preguntas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cuántas solicitudes hicimos?&lt;/li&gt;
&lt;li&gt;¿Cuánto costó una sesión?&lt;/li&gt;
&lt;li&gt;¿Dónde están los spans y las trazas?&lt;/li&gt;
&lt;li&gt;¿Hubo un pico de latencia?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es mucho peor para responder preguntas como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿En qué servidor MCP se apoyó el agente?&lt;/li&gt;
&lt;li&gt;¿Esta falla ocurrió en &lt;code&gt;Bash&lt;/code&gt;, en una herramienta de archivos integrada o en una llamada MCP?&lt;/li&gt;
&lt;li&gt;¿Qué skill se activó realmente?&lt;/li&gt;
&lt;li&gt;¿Qué tipo de subagente se despachó?&lt;/li&gt;
&lt;li&gt;¿La sesión estaba haciendo trabajo útil o solo dando vueltas?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esa segunda clase de pregunta vive más cerca de los hooks que de las trazas.&lt;/p&gt;
&lt;p&gt;Pero lo inverso también es cierto: algunas de las preguntas de rendimiento más importantes viven más cerca de las trazas que de los hooks.&lt;/p&gt;
&lt;p&gt;Si quieres saber dónde se acumuló realmente la latencia, qué spans fueron lentos, o si la sesión gastó tiempo en llamadas al modelo o en ejecución de herramientas, necesitas datos de trazas además de eventos semánticos.&lt;/p&gt;
&lt;h2 id=&quot;la-arquitectura-a-la-que-llegamos&quot;&gt;La arquitectura a la que llegamos&lt;/h2&gt;
&lt;p&gt;Ejecutamos dos rutas de telemetría en paralelo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esa división es deliberada.&lt;/p&gt;
&lt;p&gt;También es asimétrica. Claude Code nos da una interfaz de hooks de ciclo de vida mucho más rica. Codex nos da OTEL nativo más una interfaz de notify, así que normalizamos eventos de finalización de turno menos detallados hacia el mismo esquema de logs, en lugar de fingir que ambos runtimes exponen los mismos controles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OTEL nativo&lt;/strong&gt; nos da el flujo base: logs y trazas del runtime mismo, además de métricas donde el runtime realmente las emite.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los eventos de hooks y notify&lt;/strong&gt; nos dan la capa semántica: cosas como &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt; y los metadatos clasificados que realmente nos importan al depurar el comportamiento de los agentes. Claude Code aporta aquí el flujo de eventos más rico. Codex aporta un flujo normalizado menos detallado, pero igualmente útil.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-existen-los-hooks-en-primer-lugar&quot;&gt;Por qué existen los hooks en primer lugar&lt;/h2&gt;
&lt;p&gt;Nuestro pipeline de hooks enriquece los eventos antes de que lleguen a Loki.&lt;/p&gt;
&lt;p&gt;En lugar de simplemente decir «se ejecutó una herramienta», clasificamos el evento en campos como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: qué backend MCP manejó la llamada&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: la familia de comandos de shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: qué tipo de especialista se despachó&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: si el origen fue Claude Code o Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eso significa que podemos hacer preguntas que importan operativamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esos no son campos decorativos. Son la diferencia entre «el agente se sintió lento» y «el agente pasó los últimos diez minutos en operaciones de git intensivas en shell con una alta tasa de fallos de herramientas».&lt;/p&gt;
&lt;p&gt;Un detalle de implementación que parece más raro de lo que es: el flujo compartido de Loki sigue usando &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; como etiqueta incluso cuando el evento viene de Codex. La verdadera división entre runtimes ocurre en &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-alloy-está-en-el-medio&quot;&gt;Por qué Alloy está en el medio&lt;/h2&gt;
&lt;p&gt;Grafana Alloy no es solo un reenviador en esta configuración. Es el punto de aplicación de las políticas.&lt;/p&gt;
&lt;p&gt;Apuntamos el flujo OTEL nativo de Claude Code y Codex a un proxy local de Alloy en &lt;code&gt;localhost:4318&lt;/code&gt;, y luego dejamos que Alloy limpie el payload antes de reenviarlo a Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Eso importa porque la telemetría cruda de agentes está llena de campos de alta cardinalidad que son útiles para el análisis, pero terribles como etiquetas indexadas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;conteos de tokens&lt;/li&gt;
&lt;li&gt;duraciones&lt;/li&gt;
&lt;li&gt;blobs de parámetros de herramientas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si indexas todo, obtienes una explosión de etiquetas y un mal día.&lt;/p&gt;
&lt;p&gt;Así que Alloy hace tres cosas por nosotros:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantiene indexado un conjunto muy pequeño de etiquetas de baja cardinalidad.&lt;/li&gt;
&lt;li&gt;Mueve los campos ruidosos pero útiles a metadatos estructurados.&lt;/li&gt;
&lt;li&gt;Descarta por completo el ruido puro.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La idea importante es simple: &lt;strong&gt;observar más, indexar menos&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-el-flujo-de-hooks-evita-a-alloy&quot;&gt;Por qué el flujo de hooks evita a Alloy&lt;/h2&gt;
&lt;p&gt;El flujo de hooks ya viene formado para Loki.&lt;/p&gt;
&lt;p&gt;Para cuando &lt;code&gt;send_event.py&lt;/code&gt; envía un evento, ya hemos decidido qué campos merecen tratamiento de etiqueta y cuáles pertenecen al cuerpo JSON estructurado. Ese flujo va directo a la puerta de enlace OTLP de Grafana Cloud en lugar de pasar de nuevo por Alloy.&lt;/p&gt;
&lt;p&gt;Así que el sistema tiene una división de trabajo clara:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; doma el flujo OTEL nativo en bruto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;El enriquecimiento de hooks&lt;/strong&gt; hace que los eventos semánticos sean consultables.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eso mantiene la arquitectura más simple que intentar forzar todo por una sola ruta.&lt;/p&gt;
&lt;h2 id=&quot;qué-muestra-realmente-el-dashboard&quot;&gt;Qué muestra realmente el dashboard&lt;/h2&gt;
&lt;p&gt;La captura de pantalla de abajo es de uno de los dashboards de observabilidad detrás de nuestro flujo de trabajo con agentes. No es un benchmark, y los números son solo una instantánea en el tiempo. Lo importante es la forma de los datos: feed de actividad, llamadas a herramientas, fallos, prompts y desgloses por agente, herramientas integradas, uso de MCP, comandos de shell y skills.&lt;/p&gt;
&lt;p&gt;La parte útil es que este dashboard vive en el mismo stack de Grafana que el resto de la telemetría de agentes. Podemos filtrar por agente de origen y familia de herramientas, y mirar entre runtimes sin inventar una historia de observabilidad distinta para cada sistema.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Abrir la captura del dashboard de observabilidad en resolución completa&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Dashboard de Grafana que muestra un feed de actividad, conteos de llamadas a herramientas, fallos, prompts y desgloses por agentes, herramientas integradas, uso de MCP, comandos de CLI y skills para un flujo de trabajo de agentes.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Uno de los dashboards en vivo detrás de nuestro flujo de trabajo con agentes. Esta captura es solo una porción de un stack de Grafana compartido que también recibe telemetría de nuestros otros runtimes y sistemas de agentes. Haz clic en la imagen para ver la versión en resolución completa.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;por-qué-las-trazas-importan-más-de-lo-que-parece-a-primera-vista&quot;&gt;Por qué las trazas importan más de lo que parece a primera vista&lt;/h2&gt;
&lt;p&gt;Los logs nos dicen qué categoría de trabajo ocurrió. Las trazas nos dicen cómo se desarrolló el trabajo a lo largo del tiempo.&lt;/p&gt;
&lt;p&gt;Esa distinción importa en los sistemas de agentes porque «lento» es demasiado impreciso para ser útil.&lt;/p&gt;
&lt;p&gt;Una traza puede decirnos si el problema vino de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la latencia del modelo&lt;/li&gt;
&lt;li&gt;el tiempo de ejecución de herramientas&lt;/li&gt;
&lt;li&gt;reintentos repetidos&lt;/li&gt;
&lt;li&gt;una interacción MCP especialmente costosa&lt;/li&gt;
&lt;li&gt;una larga cola de operaciones pequeñas que por separado parecían inofensivas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En la práctica usamos juntos el flujo de hooks y las trazas de Tempo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Los logs de hooks&lt;/strong&gt; responden: ¿qué tipo de cosa ocurrió?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Las trazas&lt;/strong&gt; responden: ¿a dónde se fue el tiempo?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La combinación es lo que convierte la observabilidad de un dashboard en una explicación.&lt;/p&gt;
&lt;h2 id=&quot;dónde-encaja-codex&quot;&gt;Dónde encaja Codex&lt;/h2&gt;
&lt;p&gt;Codex es parte del mismo stack, pero no es idéntico a Claude Code.&lt;/p&gt;
&lt;p&gt;Para Codex conectamos dos piezas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL nativo de Codex hacia Alloy&lt;/li&gt;
&lt;li&gt;Un webhook de notify hacia &lt;code&gt;codex_notify.py&lt;/code&gt;, que mapea las finalizaciones de turno al mismo esquema de Loki que usamos para los eventos de hooks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eso nos da un filtro unificado como &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; dentro del mismo flujo de logs.&lt;/p&gt;
&lt;p&gt;La salvedad honesta: el payload de notify de Codex es actualmente menos detallado que el payload de hooks de Claude Code porque no es el mismo tipo de interfaz de integración. En nuestra configuración actual, las finalizaciones de turno de Codex se pueden normalizar hacia el esquema compartido, pero la extracción detallada herramienta por herramienta sigue siendo mejor en el flujo OTEL nativo que en el bridge de notify.&lt;/p&gt;
&lt;p&gt;Eso no es una razón para evitar esta publicación. Es justamente el punto de la publicación. Los sistemas de observabilidad reales se ensamblan a partir de señales imperfectas.&lt;/p&gt;
&lt;h2 id=&quot;grafana-a-través-de-mcp-cambia-las-reglas-del-juego&quot;&gt;Grafana a través de MCP cambia las reglas del juego&lt;/h2&gt;
&lt;p&gt;El cambio más grande es que Grafana ya no es solo un lugar que los humanos visitan en un navegador.&lt;/p&gt;
&lt;p&gt;En este repositorio también exponemos Grafana a través de MCP. Eso significa que un agente puede consultar Loki, Prometheus y Tempo directamente, en lugar de esperar a que un humano inspeccione manualmente los dashboards primero.&lt;/p&gt;
&lt;p&gt;Eso convierte la observabilidad en una entrada activa del flujo de trabajo.&lt;/p&gt;
&lt;p&gt;Un agente puede preguntar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Qué familias de herramientas fallaron más en la última hora?&lt;/li&gt;
&lt;li&gt;¿Qué servidor MCP dominó una sesión?&lt;/li&gt;
&lt;li&gt;¿Los cambios recientes redujeron los fallos de herramientas o solo movieron el trabajo a rutas más intensivas en shell con los mismos errores?&lt;/li&gt;
&lt;li&gt;¿Qué trazas muestran la latencia más alta o reintentos repetidos?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una vez que tienes eso, estás muy cerca de un bucle de autosuperación.&lt;/p&gt;
&lt;h2 id=&quot;del-dashboard-al-bucle-de-retroalimentación&quot;&gt;Del dashboard al bucle de retroalimentación&lt;/h2&gt;
&lt;p&gt;Esta es la parte que encontramos más interesante.&lt;/p&gt;
&lt;p&gt;Una vez que el stack de observabilidad es consultable desde la capa de agentes, la telemetría deja de ser un medio pasivo de consulta de informes y se convierte en una señal de control.&lt;/p&gt;
&lt;p&gt;El bucle se ve así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La actividad de los agentes emite trazas, métricas y logs de hooks enriquecidos.&lt;/li&gt;
&lt;li&gt;Grafana almacena la evidencia en Loki, Tempo y Prometheus donde existen métricas.&lt;/li&gt;
&lt;li&gt;Los agentes consultan esa evidencia a través de MCP de Grafana.&lt;/li&gt;
&lt;li&gt;El sistema identifica una mala mezcla de herramientas, skills frágiles, enrutamiento débil o flujos de trabajo intensivos en shell que siguen produciendo errores evitables.&lt;/li&gt;
&lt;li&gt;Los agentes u operadores ajustan prompts, configuraciones de agentes, descripciones de skills, reglas de enrutamiento o acceso a herramientas.&lt;/li&gt;
&lt;li&gt;La siguiente sesión produce una nueva forma de telemetría, y el ciclo se repite.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Así es como pasas de un «dashboard interesante» a un «sistema de mejora medible».&lt;/p&gt;
&lt;p&gt;El objetivo no es maximizar una sola categoría de herramientas. Es llegar a la mezcla correcta de CLI, herramientas integradas, llamadas MCP y skills para el trabajo que realmente se está haciendo.&lt;/p&gt;
&lt;h2 id=&quot;qué-nos-permite-responder-esto&quot;&gt;Qué nos permite responder esto&lt;/h2&gt;
&lt;p&gt;Una vez que ambos runtimes aterrizan en el mismo stack de Grafana, podemos responder preguntas operativas mucho más rápido:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Los fallos se concentran en una sola familia de herramientas?&lt;/li&gt;
&lt;li&gt;¿Los flujos de trabajo intensivos en shell están creando errores evitables donde debería existir una herramienta de más alto nivel?&lt;/li&gt;
&lt;li&gt;¿Qué servidores MCP cargan con la mayor parte del trabajo?&lt;/li&gt;
&lt;li&gt;¿Estamos pagando por actividad de agentes que no produce avances significativos?&lt;/li&gt;
&lt;li&gt;¿Una sesión no está sana por culpa del modelo, de las herramientas o de la capa de orquestación?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es especialmente útil en flujos de trabajo multiagente, donde «el agente estuvo ocupado» no dice casi nada.&lt;/p&gt;
&lt;p&gt;Si un especialista sigue siendo despachado y produciendo altas tasas de fallo, eso es un problema de enrutamiento o de diseño de prompts.&lt;/p&gt;
&lt;p&gt;Si un servidor MCP domina todas las llamadas, eso puede ser buena arquitectura o una señal de que todo lo demás es peso muerto.&lt;/p&gt;
&lt;p&gt;Si los fallos de herramientas se disparan mientras el costo se mantiene alto, tienes un problema operativo, no un problema de calidad.&lt;/p&gt;
&lt;p&gt;Si el trabajo de shell sigue fallando de formas predecibles y evitables donde debería existir una herramienta de más alto nivel, esa es una señal de producto.&lt;/p&gt;
&lt;p&gt;Si una skill se activa constantemente pero no mejora los resultados, esa es una señal de prompt o de enrutamiento.&lt;/p&gt;
&lt;h2 id=&quot;la-verdadera-lección&quot;&gt;La verdadera lección&lt;/h2&gt;
&lt;p&gt;La lección más profunda aquí es que la observabilidad de agentes necesita tanto &lt;strong&gt;telemetría de runtime&lt;/strong&gt; como &lt;strong&gt;telemetría de flujo de trabajo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La telemetría de runtime te dice qué hizo el sistema.&lt;/p&gt;
&lt;p&gt;La telemetría de flujo de trabajo te dice qué creía el agente que estaba haciendo.&lt;/p&gt;
&lt;p&gt;Necesitamos ambas.&lt;/p&gt;
&lt;p&gt;Si solo conservas trazas y contadores, te pierdes la capa semántica. Si solo conservas eventos de hooks, te pierdes la latencia, los spans y el panorama más amplio del runtime.&lt;/p&gt;
&lt;p&gt;Y si conservas ambas pero nunca las retroalimentas hacia la capa de agentes, tienes monitoreo, no adaptación.&lt;/p&gt;
&lt;p&gt;La combinación es lo que hace que el sistema sea lo bastante explicable para operarlo y lo bastante ajustable para mejorarlo.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-todavía-es-imperfecto&quot;&gt;Lo que todavía es imperfecto&lt;/h2&gt;
&lt;p&gt;Todavía quedan asperezas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No todos los eventos de hooks incluyen los datos de duración y tokens que quisiéramos.&lt;/li&gt;
&lt;li&gt;Algunas de las mejores vistas de tiempos siguen viniendo de las trazas de Tempo, no de los logs de hooks.&lt;/li&gt;
&lt;li&gt;Hoy Codex es semánticamente menos rico que Claude Code en el flujo de eventos enriquecido.&lt;/li&gt;
&lt;li&gt;La captura del dashboard es una vista de operaciones en vivo, no una pieza de marketing pulida.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ese último punto es intencional. Preferimos mostrar el panel de instrumentos real antes que fingir que los sistemas de agentes se explican mágicamente por sí solos.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-esto-le-importa-a-maguyva&quot;&gt;Por qué esto le importa a Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva trata de darles a los agentes mejor inteligencia de código. Pero en cuanto los agentes empiezan a hacer trabajo realmente útil, aparece de inmediato un nuevo requisito: necesitas ver cómo se están comportando.&lt;/p&gt;
&lt;p&gt;La calidad de la búsqueda, la calidad del enrutamiento, la selección de herramientas y la eficiencia del contexto se convierten todas en problemas observables.&lt;/p&gt;
&lt;p&gt;Por eso creemos que vale la pena escribir sobre esto. El stack de agentes del futuro no es solo prompts y herramientas. Es prompts, herramientas y la capa de instrumentación que te dice si todo el conjunto está funcionando.&lt;/p&gt;
&lt;p&gt;Si estás construyendo flujos de trabajo de agentes serios, la observabilidad no es infraestructura opcional. Es parte del producto.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Extraer conocimiento para cerrar el bucle: cómo los cambios se convierten en memoria institucional</title><link>https://maguyva.ai/es/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/es/blog/mining-workflow-closing-the-loop</guid><description>Los commits de Git se convierten en entradas de changelog estructuradas y registros de decisiones arquitectónicas, que luego retroalimentan a los agentes de IA como memoria institucional consultable.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (febrero de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Todo equipo de ingeniería enfrenta el mismo desafío: los cambios ocurren constantemente, pero el &lt;em&gt;por qué&lt;/em&gt; detrás de esos cambios desaparece. Seis meses después, alguien pregunta «¿por qué adoptamos DuckDB para las etapas del pipeline?» y la respuesta solo vive en la cabeza de quien tomó esa decisión, si es que todavía sigue por ahí.&lt;/p&gt;
&lt;p&gt;Construimos un flujo de trabajo de minería que cierra este bucle. Los cambios fluyen a través de commits de Git, se procesan mediante nuestro pipeline de minería, se convierten en entradas de changelog estructuradas y registros de decisiones arquitectónicas, y luego retroalimentan a nuestros agentes de IA mediante consultas por CLI. El resultado: memoria institucional a la que tanto humanos como IA pueden acceder.&lt;/p&gt;
&lt;h2 id=&quot;el-problema-las-decisiones-se-evaporan&quot;&gt;El problema: las decisiones se evaporan&lt;/h2&gt;
&lt;p&gt;Considera un escenario típico. Un desarrollador hace commit:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este commit representa una elección arquitectónica significativa. El equipo evaluó opciones, consideró los compromisos, y se decidió por DuckDB por razones específicas. Pero todo ese contexto vive en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un hilo de Slack (probablemente borrado)&lt;/li&gt;
&lt;li&gt;La memoria de alguien (definitivamente se va desvaneciendo)&lt;/li&gt;
&lt;li&gt;Un comentario en el código (tal vez, si tienes suerte)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tres meses después, un nuevo integrante del equipo pregunta: «¿debería usar DuckDB o SQLite para esta nueva etapa?». Sin memoria institucional, o reinventa la rueda o toma decisiones inconsistentes.&lt;/p&gt;
&lt;h2 id=&quot;el-bucle-de-los-commits-al-contexto&quot;&gt;El bucle: de los commits al contexto&lt;/h2&gt;
&lt;p&gt;Nuestro flujo de trabajo de minería transforma el historial de Git en conocimiento consultable:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La idea clave: tanto los changelogs como las decisiones arquitectónicas fluyen del mismo historial de Git, procesado a través de un pipeline unificado. Esto garantiza que nada se escape.&lt;/p&gt;
&lt;h2 id=&quot;cómo-funciona-la-minería&quot;&gt;Cómo funciona la minería&lt;/h2&gt;
&lt;h3 id=&quot;paso-1-sincronizar-el-índice&quot;&gt;Paso 1: sincronizar el índice&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando escanea el historial de Git y construye un índice de todos los commits. Extrae señales estructuradas de cada commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipo de commit según Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Alcance (qué paquete o área)&lt;/li&gt;
&lt;li&gt;Marcadores de cambios disruptivos&lt;/li&gt;
&lt;li&gt;Archivos tocados y métricas de complejidad&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;paso-2-verificar-el-estado-de-cobertura&quot;&gt;Paso 2: verificar el estado de cobertura&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Así se ve nuestro estado actual:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15,637 commits procesados. 476 se convirtieron en decisiones arquitectónicas. 6,799 se convirtieron en entradas de changelog. Cada commit está clasificado.&lt;/p&gt;
&lt;h3 id=&quot;paso-3-obtener-candidatos-para-revisión&quot;&gt;Paso 3: obtener candidatos para revisión&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto muestra los commits que todavía no se han procesado, con el contexto completo para su clasificación:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las señales ayudan a guiar la clasificación: &lt;code&gt;is_releasable_type: true&lt;/code&gt; sugiere que esto debería aparecer en el changelog. El gran número de inserciones y los archivos de infraestructura sugieren que también podría ser una decisión arquitectónica.&lt;/p&gt;
&lt;h3 id=&quot;paso-4-clasificar-commits&quot;&gt;Paso 4: clasificar commits&lt;/h3&gt;
&lt;p&gt;Aquí se bifurcan dos caminos: entradas de changelog y decisiones arquitectónicas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para entradas de changelog:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto registra que el commit &lt;code&gt;abc123&lt;/code&gt; debería aparecer en el changelog bajo la categoría «Added».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para decisiones arquitectónicas:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Primero, obtén un ID de decisión real:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Luego clasifica con el ID de decisión:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto vincula el commit a un registro de decisión que se creará o actualizará.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para procesamiento por lotes (lo que en realidad hacemos):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El formato JSONL admite ambos dominios en una sola pasada:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;paso-5-renderizar-las-salidas&quot;&gt;Paso 5: renderizar las salidas&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto genera archivos &lt;code&gt;CHANGELOG.md&lt;/code&gt; por paquete a partir del ledger. Los changelogs son artefactos derivados: bórralos y se regeneran perfectamente a partir del ledger fuente.&lt;/p&gt;
&lt;h2 id=&quot;la-estructura-del-registro-de-decisiones&quot;&gt;La estructura del registro de decisiones&lt;/h2&gt;
&lt;p&gt;Las decisiones extraídas se convierten en archivos YAML con metadatos ricos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada decisión enlaza de vuelta a sus commits de origen. Cada decisión especifica qué archivos afecta. Las relaciones entre decisiones son explícitas.&lt;/p&gt;
&lt;h2 id=&quot;integración-con-la-cli-consultando-la-memoria-institucional&quot;&gt;Integración con la CLI: consultando la memoria institucional&lt;/h2&gt;
&lt;p&gt;Aquí es donde se cierra el bucle. Los agentes pueden consultar decisiones a través de la CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Devuelve decisiones sobre lógica de reintento, manejo de errores, patrones de recuperación.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Devuelve el registro de decisión completo con contexto, justificación e impacto.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Muestra qué elecciones arquitectónicas se tomaron recientemente.&lt;/p&gt;
&lt;h3 id=&quot;cómo-usan-esto-los-agentes&quot;&gt;Cómo usan esto los agentes&lt;/h3&gt;
&lt;p&gt;Las instrucciones base de nuestro orquestador incluyen:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cuando se le pide a un agente que implemente algo relacionado con DuckDB, primero puede verificar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Y descubrir DEC-PL-142, aprendiendo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por qué elegimos DuckDB (context)&lt;/li&gt;
&lt;li&gt;Cómo usarlo correctamente (agent_guidance)&lt;/li&gt;
&lt;li&gt;Qué archivos revisar (files)&lt;/li&gt;
&lt;li&gt;Qué decisiones relacionadas existen (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El agente no reinventa la rueda. Construye sobre patrones ya establecidos.&lt;/p&gt;
&lt;h2 id=&quot;la-prueba-de-las-tres-preguntas&quot;&gt;La prueba de las tres preguntas&lt;/h2&gt;
&lt;p&gt;No todo commit merece un registro de decisión. Usamos la prueba de las tres preguntas para filtrar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;¿Fue difícil de tomar?&lt;/strong&gt; ¿Requirió un análisis significativo, evaluación de compromisos o debate?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Es costoso de cambiar?&lt;/strong&gt; ¿Revertir esta decisión requeriría un retrabajo significativo?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;¿Tiene impacto en todo el sistema?&lt;/strong&gt; ¿Afecta a varios paquetes o establece patrones que otros seguirán?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si un commit responde «sí» a al menos una de estas preguntas, es candidato para la extracción de una decisión. Nuestra tasa típica: 1-4 decisiones por cada 100 commits (alrededor del 1-4%).&lt;/p&gt;
&lt;p&gt;Para las entradas de changelog, el umbral es más bajo: cualquier cambio visible para el usuario (funciones, correcciones, mejoras) se registra. Las tareas internas, las actualizaciones de documentación y las refactorizaciones normalmente se omiten. Nuestra tasa típica: 30-50 entradas de changelog por cada 100 commits.&lt;/p&gt;
&lt;h2 id=&quot;almacenamiento-de-datos-ledgers-de-solo-anexado&quot;&gt;Almacenamiento de datos: ledgers de solo anexado&lt;/h2&gt;
&lt;p&gt;El sistema de minería usa ledgers JSONL de solo anexado para una operación multiagente sin conflictos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El formato JSONL con &lt;code&gt;merge=union&lt;/code&gt; en &lt;code&gt;.gitattributes&lt;/code&gt; significa que varios agentes pueden clasificar commits simultáneamente sin conflictos de fusión. Cada línea es independiente.&lt;/p&gt;
&lt;h2 id=&quot;controles-de-validación&quot;&gt;Controles de validación&lt;/h2&gt;
&lt;p&gt;Antes de cualquier sesión de minería, ejecutamos una validación:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto verifica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validez del formato del SHA&lt;/li&gt;
&lt;li&gt;Cumplimiento del formato del ID de decisión&lt;/li&gt;
&lt;li&gt;Ausencia de entradas duplicadas para el mismo SHA&lt;/li&gt;
&lt;li&gt;Que las decisiones referenciadas realmente existan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Después de la clasificación, validamos de nuevo antes de hacer commit de los cambios.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-esto-importa&quot;&gt;Por qué esto importa&lt;/h2&gt;
&lt;p&gt;El bucle de retroalimentación que construimos resuelve varios problemas:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para nuevos integrantes del equipo:&lt;/strong&gt; en lugar de preguntar «¿por qué hicimos X?», pueden buscar en el registro de decisiones. El contexto se conserva.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para los agentes de IA:&lt;/strong&gt; no operan en el vacío. Pueden consultar el conocimiento institucional antes de hacer recomendaciones. Cuando se les pide agregar una nueva etapa al pipeline, pueden descubrir el patrón de DuckDB y seguirlo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para la consistencia arquitectónica:&lt;/strong&gt; las decisiones son explícitas y consultables. Cuando alguien propone un enfoque que contradice una decisión existente, el sistema puede sacar a la luz el conflicto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para la generación del changelog:&lt;/strong&gt; las notas de la versión no son una carrera de último minuto. Son un subproducto de la clasificación continua durante el desarrollo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para la incorporación de nuevos integrantes:&lt;/strong&gt; los nuevos agentes heredan el contexto completo de la base de código. No solo ven el código, ven las decisiones que lo formaron.&lt;/p&gt;
&lt;h2 id=&quot;estado-actual&quot;&gt;Estado actual&lt;/h2&gt;
&lt;p&gt;A la fecha:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15,637 commits&lt;/strong&gt; procesados a través del pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 decisiones arquitectónicas&lt;/strong&gt; extraídas y documentadas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6,799 entradas de changelog&lt;/strong&gt; registradas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% de cobertura&lt;/strong&gt; en ambos dominios&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada commit desde que empezamos ha sido clasificado. La memoria institucional está completa y es consultable.&lt;/p&gt;
&lt;h2 id=&quot;cómo-empezar&quot;&gt;Cómo empezar&lt;/h2&gt;
&lt;p&gt;Si quieres implementar algo similar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Empieza con commits en el formato Conventional Commits.&lt;/strong&gt; El pipeline de minería funciona mejor cuando los commits tienen prefijos estructurados (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Define tus dominios.&lt;/strong&gt; Nosotros usamos dominios como &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Estos organizan las decisiones por área.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Construye el hábito de la clasificación.&lt;/strong&gt; La minería funciona cuando los equipos clasifican commits regularmente. El procesamiento por lotes con asistencia de LLM ayuda a escalar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Haz que las decisiones sean consultables.&lt;/strong&gt; El valor se multiplica cuando los agentes pueden buscar decisiones vía CLI. Estructura tu salida para consumo por máquinas.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cierra el bucle.&lt;/strong&gt; Las decisiones deberían influir en el trabajo futuro. Incluye referencias a decisiones en las instrucciones de los agentes y en las listas de verificación de revisión de código.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El objetivo no es una documentación perfecta. Es hacer que el &lt;em&gt;por qué&lt;/em&gt; detrás de los cambios sea accesible tanto para humanos como para IA, hoy y dentro de seis meses. Cuando los cambios se convierten en memoria institucional, los equipos construyen sobre patrones establecidos en lugar de reinventarlos.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;El flujo de trabajo de minería es parte de nuestro motor de orquestación, específicamente el módulo de motor de contexto dentro de nuestro paquete de orquestación.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Minería de skills: de 3,500 candidatas a 466 capacidades</title><link>https://maguyva.ai/es/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/es/blog/skill-mining-3500-and-counting</guid><description>Evaluamos 3,500 skills candidatas y adoptamos 466. Un bucle sistemático de minería e ingesta para construir, a gran escala, una biblioteca coherente de skills para agentes de IA.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (enero de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;el-problema-de-las-3500-skills&quot;&gt;El problema de las 3,500 skills&lt;/h2&gt;
&lt;p&gt;Cuando empezamos a construir un sistema de orquestación de agentes, enfrentamos un desafío interesante: hay miles de skills potenciales dispersas por todo el ecosistema de IA. Repositorios de GitHub, documentación de proveedores, proyectos comunitarios, patrones internos: las skills existen en todas partes. Pero ¿cuáles importan? ¿Cuáles funcionan? ¿Y cómo mantienes una biblioteca de skills coherente que los agentes realmente puedan usar?&lt;/p&gt;
&lt;p&gt;Nuestra respuesta: un bucle sistemático de minería e ingesta.&lt;/p&gt;
&lt;h2 id=&quot;los-números-de-hoy&quot;&gt;Los números de hoy&lt;/h2&gt;
&lt;p&gt;Apenas tres meses después de que Anthropic lanzara Agent Skills el 16 de octubre de 2025, así estábamos parados cuando se publicó esta entrada el 27 de enero de 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Métrica&lt;/th&gt;
&lt;th&gt;Cantidad&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Candidatas identificadas&lt;/td&gt;
&lt;td&gt;3,500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills adoptadas&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills de proveedores&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills internas&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Proveedores activos&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens promedio por skill&lt;/td&gt;
&lt;td&gt;2,834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Herramientas referenciadas&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Etiquetas únicas&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Revisamos más de 3,500 skills candidatas. Adoptamos 466. Eso es una tasa de adopción del 13% — y esa selectividad es deliberada.&lt;/p&gt;
&lt;h2 id=&quot;el-sistema-de-niveles-de-conocimiento&quot;&gt;El sistema de niveles de conocimiento&lt;/h2&gt;
&lt;p&gt;No todas las skills son iguales. Las organizamos en cinco capas de conocimiento (K0-K4), cada una representando un alcance de aplicabilidad distinto:&lt;/p&gt;
&lt;h3 id=&quot;k0-fundamentos-universal&quot;&gt;K0: fundamentos (universal)&lt;/h3&gt;
&lt;p&gt;Skills que todo agente debería tener. Representan capacidades de «buen pensador» que funcionan en cualquier lugar.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las skills K0 son portables a cualquier proyecto, cualquier dominio, cualquier stack. Codifican patrones cognitivos universales.&lt;/p&gt;
&lt;h3 id=&quot;k1-identidades-disciplina&quot;&gt;K1: identidades (disciplina)&lt;/h3&gt;
&lt;p&gt;Skills de «buen ingeniero» o «buen investigador» que aplican en distintos proyectos dentro de una disciplina.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-dominios-experticia-temática&quot;&gt;K2: dominios (experticia temática)&lt;/h3&gt;
&lt;p&gt;Skills de «buen experto en bases de datos» o «buen ingeniero de seguridad» portables dentro de un campo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stacks-tecnología&quot;&gt;K3: stacks (tecnología)&lt;/h3&gt;
&lt;p&gt;Skills de «buen usuario de Supabase» o «buen desarrollador de Cloudflare» para stacks tecnológicos específicos.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-proyecto-organización&quot;&gt;K4: proyecto (organización)&lt;/h3&gt;
&lt;p&gt;Skills específicas de nuestra organización y nuestros flujos de trabajo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;el-bucle-de-minería&quot;&gt;El bucle de minería&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-descubrimiento&quot;&gt;Fase 1: descubrimiento&lt;/h3&gt;
&lt;p&gt;Las skills vienen de todas partes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repositorios de proveedores&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase y colaboradores de la comunidad publican colecciones de skills. Rastreamos más de 25 raíces de proveedores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proyectos comunitarios&lt;/strong&gt;: GitHub está lleno de plantillas de Claude Code, patrones de agentes y definiciones de flujos de trabajo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patrones internos&lt;/strong&gt;: a medida que nuestro equipo resuelve problemas, emergen patrones. Estos se formalizan en skills.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minería de documentación&lt;/strong&gt;: la documentación técnica a menudo contiene skills implícitas — procedimientos, listas de verificación, árboles de decisión.&lt;/p&gt;
&lt;p&gt;El descubrimiento es continuo. Usamos un backlog de skills para rastrear candidatas antes de la evaluación formal.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-evaluación&quot;&gt;Fase 2: evaluación&lt;/h3&gt;
&lt;p&gt;Cada candidata pasa por la misma rúbrica:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Deben cumplirse los cinco criterios de producto. Por eso se rechaza el 87% de las candidatas.&lt;/p&gt;
&lt;p&gt;Luego cada candidata pasa por una revisión de confianza separada. No tratamos un repositorio oficial de un proveedor, un mantenedor de la comunidad bien conocido y un repositorio aleatorio de GitHub como fuentes de verdad equivalentes.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Los proveedores confiables reciben una revisión de procedencia más ligera, pero no un pase libre. Las fuentes no confiables o desconocidas reciben una auditoría manual más profunda, y no ejecutamos scripts incluidos hasta que hayan sido leídos, delimitados y clasificados como seguros.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Análisis de brechas&lt;/strong&gt;: antes de adoptar, buscamos en nuestro registro:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si ya lo tenemos, no lo necesitamos. Si tenemos algo cercano, podríamos fusionar en lugar de adoptar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Puntuación de profundidad y estándares&lt;/strong&gt;: también puntuamos qué tan a fondo una candidata usa el modelo agent-skill. Un solo &lt;code&gt;SKILL.md&lt;/code&gt; todavía puede ser útil, pero las skills más profundas son más valiosas cuando separan las instrucciones de las referencias, scripts y assets de la manera que &lt;code&gt;agentskills.io&lt;/code&gt; recomienda.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las estrellas de GitHub pueden elevar un poco un puntaje de credibilidad, pero nunca rescatan a una skill superficial o insegura. Un repositorio con muchas estrellas y un solo &lt;code&gt;SKILL.md&lt;/code&gt; vago y scripts opacos puntúa por debajo de un repositorio más pequeño con una descripción precisa, referencias cuidadosamente seleccionadas en &lt;code&gt;references/&lt;/code&gt;, y helpers atómicos que realmente aprovechan toda la capacidad de la skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Análisis estructural&lt;/strong&gt;: verificamos la calidad de la skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Si una candidata incluye scripts, esa revisión se vuelve más estricta. Una buena skill no solo es útil; tiene que ser legible, acotada y segura de entregar a un agente. Ese filtro de seguridad por sí solo descalifica una porción significativa de candidatas por lo demás interesantes.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-ingesta&quot;&gt;Fase 3: ingesta&lt;/h3&gt;
&lt;p&gt;Cuando una skill pasa la evaluación, entra al registro. Pero las skills nunca se adoptan sin cambios. Se modifican para encajar en nuestro sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modificaciones al adoptar&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Normalización de metadatos&lt;/strong&gt;: cada skill recibe nuestro esquema de frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asignación de nivel K&lt;/strong&gt;: las skills se colocan en la capa de conocimiento correspondiente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enriquecimiento de etiquetas&lt;/strong&gt;: se agregan etiquetas para facilitar el descubrimiento&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Declaración de herramientas&lt;/strong&gt;: las herramientas permitidas se declaran explícitamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alineación de secciones&lt;/strong&gt;: el contenido se reestructura para coincidir con nuestra plantilla&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un YAML de skill típico después de la ingesta:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-4-asignación-de-alcance&quot;&gt;Fase 4: asignación de alcance&lt;/h3&gt;
&lt;p&gt;Las skills se asignan a alcances (scopes) — categorías que determinan qué agentes cargan qué skills:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Los agentes declaran sus alcances, y las skills se asignan automáticamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-5-materialización&quot;&gt;Fase 5: materialización&lt;/h3&gt;
&lt;p&gt;Las skills no viven como YAML en producción. Se renderizan en archivos SKILL.md que Claude Code puede cargar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este comando:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Lee todas las definiciones YAML de skills&lt;/li&gt;
&lt;li&gt;Las renderiza mediante plantillas Jinja&lt;/li&gt;
&lt;li&gt;Escribe archivos SKILL.md en &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organiza por nivel K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La estructura de salida final:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;el-patrón-de-alcance-latente&quot;&gt;El patrón de alcance latente&lt;/h2&gt;
&lt;p&gt;Uno de nuestros patrones más poderosos son las skills «adoptadas pero no cargadas». Las llamamos alcances latentes (dormant scopes).&lt;/p&gt;
&lt;p&gt;Considera las skills de computación científica del repositorio k-dense-scientific. Adoptamos más de 120 skills que cubren bioinformática, química, computación cuántica e informática clínica. Pero la mayoría de nuestros agentes no necesitan acoplamiento molecular ni análisis de expresión génica.&lt;/p&gt;
&lt;p&gt;En lugar de cargar las 120 skills en cada agente (inflando las ventanas de contexto), nosotros:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adoptamos&lt;/strong&gt; las skills con un alcance específico (por ejemplo, &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Las mantenemos &lt;strong&gt;latentes&lt;/strong&gt; — registradas pero no cargadas&lt;/li&gt;
&lt;li&gt;Las &lt;strong&gt;habilitamos&lt;/strong&gt; solo cuando un agente declara ese alcance&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este patrón nos permite tener 466 skills en el registro mientras los agentes típicos solo cargan entre 40 y 60 relevantes.&lt;/p&gt;
&lt;h2 id=&quot;tipos-de-skills&quot;&gt;Tipos de skills&lt;/h2&gt;
&lt;p&gt;Las skills vienen en tres patrones cognitivos:&lt;/p&gt;
&lt;h3 id=&quot;workflow-flujo-de-trabajo&quot;&gt;Workflow (flujo de trabajo)&lt;/h3&gt;
&lt;p&gt;Pasos procedimentales ordenados: «1. Haz X, 2. Luego Y, 3. Finalmente Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline-disciplina&quot;&gt;Discipline (disciplina)&lt;/h3&gt;
&lt;p&gt;Salvaguardas de comportamiento: «Siempre X», «Nunca Y», «Prefiere Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist-lista-de-verificación&quot;&gt;Checklist (lista de verificación)&lt;/h3&gt;
&lt;p&gt;Criterios de verificación: «Confirma X», «Verifica Y», «Revisa Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;controles-de-calidad&quot;&gt;Controles de calidad&lt;/h2&gt;
&lt;p&gt;Cada skill debe pasar la validación antes de lanzarse:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Las descripciones deben tener entre 50 y 400 caracteres con frases de activación («Usar cuando…», «Cuando necesites…») para que Claude Code sepa cuándo sugerirlas.&lt;/p&gt;
&lt;p&gt;Validamos continuamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;el-ecosistema-de-proveedores&quot;&gt;El ecosistema de proveedores&lt;/h2&gt;
&lt;p&gt;Nuestras 373 skills de proveedores vienen de:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proveedor&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Dominio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Servicios en la nube&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Generación de documentos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Bases de datos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Computación científica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Ciencia de datos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Automatización de navegador&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cada raíz de proveedor se declara en metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cuando se ejecuta &lt;code&gt;orkestra sync&lt;/code&gt;, las skills de proveedores se enlazan simbólicamente en &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; con su espacio de nombres de proveedor.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-hemos-aprendido&quot;&gt;Lo que hemos aprendido&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La selectividad rinde frutos.&lt;/strong&gt; Es tentador adoptar todo lo que parece útil. Pero cada skill cuesta tokens. Con un promedio de 2,834 tokens por skill, el exceso duele rápido. Nuestra tasa de adopción del 13% mantiene a los agentes ligeros.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La estructura habilita el descubrimiento.&lt;/strong&gt; El sistema de niveles K no es solo organización, se trata de portabilidad. Las skills K0 se pueden reutilizar en cualquier lugar. Las skills K4 son deliberadamente específicas del proyecto. Esta claridad ayuda tanto a humanos como a agentes a encontrar lo que necesitan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Los alcances latentes escalan.&lt;/strong&gt; Puedes adoptar cientos de skills sin cargarlas todas. Los alcances te permiten construir un registro exhaustivo mientras mantienes manejables las ventanas de contexto de cada agente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La modificación al adoptar es esencial.&lt;/strong&gt; Las skills de proveedores en bruto rara vez encajan en tu sistema. El proceso de ingesta — agregar metadatos, asignar niveles, enriquecer etiquetas — hace que las skills externas funcionen internamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La minería es continua.&lt;/strong&gt; El número 3,500 sigue creciendo. Aparecen nuevos repositorios de proveedores. Emergen patrones comunitarios. Se solidifican flujos de trabajo internos. El bucle nunca se detiene.&lt;/p&gt;
&lt;h2 id=&quot;qué-sigue&quot;&gt;Qué sigue&lt;/h2&gt;
&lt;p&gt;Estamos trabajando en varias mejoras:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Detección automatizada de brechas&lt;/strong&gt;: alertar cuando fallos comunes de agentes podrían resolverse con una skill no adoptada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flujos de desuso de skills&lt;/strong&gt;: proceso formal para retirar skills que fueron reemplazadas o que no se usan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependencias entre skills&lt;/strong&gt;: declaración explícita de los prerrequisitos de una skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analítica de uso&lt;/strong&gt;: rastrear qué skills invocan realmente los agentes frente a cuáles solo cargan&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;El bucle de minería de skills es infraestructura. No es glamoroso. Pero es lo que hace que 41 agentes funcionen de forma coherente con 466 capacidades mientras se mantienen dentro de los límites de contexto.&lt;/p&gt;
&lt;p&gt;Esa es la historia de cómo 3,500 se convierte en 466. No ignorando 3,000, sino evaluándolas sistemáticamente y adoptando solo lo que funciona.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;¿Quieres ver el sistema de skills en acción? Consulta &lt;code&gt;uv run orkestra skills list&lt;/code&gt; para explorar nuestro registro actual.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Divulgación progresiva: ventanas CLI hacia los sistemas de agentes</title><link>https://maguyva.ai/es/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/es/blog/progressive-disclosure-cli-into-agents</guid><description>Los sistemas de agentes son opacos por defecto. La divulgación progresiva les da a los operadores vistas de CLI en capas, desde verificaciones rápidas de estado hasta los detalles internos completos de los agentes y sus rastros de decisiones.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (enero de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Los sistemas de agentes son opacos por diseño. Toman decisiones, invocan herramientas y coordinan trabajo entre decenas de especialistas. Pero cuando algo sale mal, o cuando simplemente quieres entender qué está pasando, ¿dónde miras?&lt;/p&gt;
&lt;p&gt;La respuesta es la divulgación progresiva: una interfaz en capas que revela exactamente tanta complejidad como necesitas, exactamente cuando la necesitas.&lt;/p&gt;
&lt;h2 id=&quot;el-problema-de-la-opacidad&quot;&gt;El problema de la opacidad&lt;/h2&gt;
&lt;p&gt;Un sistema moderno de orquestación de agentes puede tener:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más de 40 agentes especialistas, cada uno con capacidades distintas&lt;/li&gt;
&lt;li&gt;Más de 700 skills que abarcan automatización interna e integraciones con proveedores&lt;/li&gt;
&lt;li&gt;Más de 470 decisiones arquitectónicas que moldean el comportamiento&lt;/li&gt;
&lt;li&gt;Decenas de servidores de herramientas MCP que proporcionan capacidades externas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta complejidad es intencional. Los agentes necesitan acceso a contexto rico — conocimiento de dominio, inteligencia de código, esquemas de bases de datos — para tomar buenas decisiones. Pero esa misma riqueza crea un problema de visibilidad.&lt;/p&gt;
&lt;p&gt;¿Cómo sabes qué agente maneja las migraciones de bases de datos? ¿Qué decisiones moldearon el comportamiento de clasificación del sistema de búsqueda? ¿A qué herramientas tiene acceso el asesor de arquitectura?&lt;/p&gt;
&lt;p&gt;Sin acceso estructurado, te queda leer el código fuente o esperar que la documentación esté al día.&lt;/p&gt;
&lt;h2 id=&quot;la-divulgación-progresiva-como-arquitectura&quot;&gt;La divulgación progresiva como arquitectura&lt;/h2&gt;
&lt;p&gt;La divulgación progresiva no es solo un patrón de interfaz de usuario. Es un principio arquitectónico: organizar la información en capas, cada una más profunda que la anterior, para que los usuarios puedan detenerse en el nivel que responde su pregunta.&lt;/p&gt;
&lt;p&gt;Para los sistemas de agentes, esto se traduce en comandos de CLI con profundidad creciente:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Pregunta que responde&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;¿Todo está sano?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;¿Qué agentes existen?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;¿Qué hace este agente?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;¿Por qué funciona así?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Herramientas MCP de Maguyva&lt;/td&gt;
&lt;td&gt;Muéstrame el código.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Cada nivel responde una pregunta de seguimiento natural. Rara vez necesitas saltar directo al nivel 5.&lt;/p&gt;
&lt;h2 id=&quot;nivel-1-salud-del-sistema&quot;&gt;Nivel 1: salud del sistema&lt;/h2&gt;
&lt;p&gt;La primera pregunta siempre es: ¿todo está funcionando?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un comando. Cuatro números. Suficiente para saber que el sistema está configurado y que los registros están poblados.&lt;/p&gt;
&lt;p&gt;Si el conteo de agentes cae inesperadamente o las skills fallan al cargar, lo ves aquí primero. No hace falta bucear en los logs.&lt;/p&gt;
&lt;h2 id=&quot;nivel-2-inventario-de-agentes&quot;&gt;Nivel 2: inventario de agentes&lt;/h2&gt;
&lt;p&gt;Una vez que sabes que el sistema está sano, la siguiente pregunta es: ¿qué hay disponible?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto devuelve datos estructurados — nombres de agentes, descripciones, preferencias de modelo, cobertura de dominio. La salida es JSON por defecto, lo que facilita canalizarla hacia &lt;code&gt;jq&lt;/code&gt; para filtrar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;¿Quieres agentes que manejen trabajo de bases de datos? El comando de búsqueda lo acota:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto escanea nombres, descripciones y capacidades. Encuentras al especialista correcto sin leer 40 definiciones de agentes.&lt;/p&gt;
&lt;h2 id=&quot;nivel-3-análisis-profundo-del-agente&quot;&gt;Nivel 3: análisis profundo del agente&lt;/h2&gt;
&lt;p&gt;¿Encontraste un agente que parece relevante? El comando &lt;code&gt;info&lt;/code&gt; lo revela todo:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La salida incluye:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadatos&lt;/strong&gt;: nombre, categoría, preferencia de modelo, descripción&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dominios&lt;/strong&gt;: qué áreas de conocimiento cubre este agente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identidad&lt;/strong&gt;: rasgos de carácter (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guías de herramientas&lt;/strong&gt;: qué documentación de herramientas se inyecta en el contexto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Herramientas&lt;/strong&gt;: la lista completa de herramientas MCP disponibles para este agente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquí tienes una muestra de lo que ves:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto te dice exactamente qué puede hacer el agente. No hace falta leer el código fuente.&lt;/p&gt;
&lt;h2 id=&quot;nivel-4-arqueología-de-decisiones&quot;&gt;Nivel 4: arqueología de decisiones&lt;/h2&gt;
&lt;p&gt;Los agentes se comportan de acuerdo con decisiones documentadas. Cuando necesitas entender &lt;em&gt;por qué&lt;/em&gt; algo funciona de una manera particular, el registro de decisiones es la fuente de verdad.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto devuelve las decisiones arquitectónicas que coinciden:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cada decisión tiene procedencia completa — cuándo se tomó, por qué, qué compromisos se consideraron, qué commits la implementaron:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta es documentación arquitectónica que se mantiene al día porque se extrae de los commits, no se mantiene manualmente.&lt;/p&gt;
&lt;h2 id=&quot;nivel-5-inteligencia-de-código-directa&quot;&gt;Nivel 5: inteligencia de código directa&lt;/h2&gt;
&lt;p&gt;Cuando necesitas ver la implementación real — no metadatos sobre ella — las herramientas MCP de Maguyva dan acceso directo.&lt;/p&gt;
&lt;p&gt;Desde dentro de una sesión de agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto enruta automáticamente entre búsqueda semántica, de texto y AST para encontrar código relevante. Para símbolos específicos:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Para análisis de dependencias:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Estas no son solo reemplazos de grep. Tienen en cuenta el grafo, están indexadas semánticamente, y están integradas con la misma inteligencia de código que impulsa a los propios agentes.&lt;/p&gt;
&lt;h2 id=&quot;búsqueda-unificada-entre-registros&quot;&gt;Búsqueda unificada entre registros&lt;/h2&gt;
&lt;p&gt;A veces no sabes qué registro tiene la respuesta. La búsqueda unificada abarca todo:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 coincidencias en cinco registros. El resumen te dice dónde profundizar. Elimina &lt;code&gt;--summary&lt;/code&gt; para resultados detallados, o agrega &lt;code&gt;--limit 5&lt;/code&gt; para mantener la salida manejable.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-esto-importa&quot;&gt;Por qué esto importa&lt;/h2&gt;
&lt;p&gt;La divulgación progresiva no se trata solo de conveniencia. Cambia cómo interactúas con sistemas complejos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La depuración se vuelve manejable.&lt;/strong&gt; Cuando un agente toma una decisión inesperada, no haces grep en los logs. Verificas a qué herramientas tiene acceso (&lt;code&gt;agents info&lt;/code&gt;), qué decisiones moldean su comportamiento (&lt;code&gt;decisions search&lt;/code&gt;), y rastreas la implementación si hace falta (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La incorporación se acelera.&lt;/strong&gt; Los nuevos integrantes del equipo no necesitan leer toda la base de código. Empiezan con &lt;code&gt;system status&lt;/code&gt;, exploran con &lt;code&gt;agents list&lt;/code&gt;, y profundizan solo cuando se topan con algo que no entienden.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La documentación se mantiene al día.&lt;/strong&gt; Como la CLI lee de los mismos registros que configuran a los agentes, la salida siempre es precisa. No hay desfase entre lo que dice la documentación y lo que hace el sistema.&lt;/p&gt;
&lt;h2 id=&quot;la-cli-como-interfaz&quot;&gt;La CLI como interfaz&lt;/h2&gt;
&lt;p&gt;Podríamos haber construido un dashboard web. Podríamos haber escrito documentación extensa. En cambio, construimos una CLI que lee de la fuente de verdad.&lt;/p&gt;
&lt;p&gt;La CLI tiene ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Componible&lt;/strong&gt;: canaliza la salida a través de &lt;code&gt;jq&lt;/code&gt;, intégrala con scripts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatizable&lt;/strong&gt;: automatiza verificaciones, genera reportes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rápida&lt;/strong&gt;: sin cargas de página, sin flujos de autenticación&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precisa&lt;/strong&gt;: lee la configuración real, no una representación en caché&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para sistemas donde la corrección importa más que la estética, la CLI gana.&lt;/p&gt;
&lt;h2 id=&quot;construyendo-tu-propia-divulgación-progresiva&quot;&gt;Construyendo tu propia divulgación progresiva&lt;/h2&gt;
&lt;p&gt;Si estás construyendo sistemas de agentes, considera cómo los usuarios los van a inspeccionar:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Empieza con verificaciones de salud.&lt;/strong&gt; Un comando que te diga si las cosas están funcionando.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ofrece vistas de inventario.&lt;/strong&gt; Lista lo que existe antes de explicar qué hace.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Habilita consultas dirigidas.&lt;/strong&gt; La búsqueda le gana a la navegación a gran escala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expón la procedencia.&lt;/strong&gt; Deja que los usuarios rastreen las decisiones hasta sus orígenes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conecta con la inteligencia de código.&lt;/strong&gt; Tarde o temprano, los usuarios necesitan ver la implementación.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Cada capa responde una pregunta de seguimiento. Constrúyelas en orden de frecuencia — la mayoría de los usuarios se detienen en la capa 2 o 3. Solo los usuarios avanzados llegan a la capa 5.&lt;/p&gt;
&lt;p&gt;El objetivo no es exponer todo. Es exponer exactamente lo necesario, exactamente cuando se necesita. Eso es la divulgación progresiva aplicada a la arquitectura de agentes.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Ground Truths: anclando a los agentes de IA en la realidad</title><link>https://maguyva.ai/es/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/es/blog/ground-truths-anchoring-ai-to-reality</guid><description>Los agentes de IA alucinan con total confianza. Los ground truths son hechos versionados y delimitados que anclan el comportamiento de los agentes a la realidad. Así es como los construimos y los hacemos cumplir.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (enero de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Los agentes de IA son notablemente capaces. Pueden razonar, sintetizar y generar. Pero tienen una debilidad fundamental: se inventan cosas. No maliciosamente, sino con confianza. Un agente puede inventar parámetros de API que no existen, hacer referencia a configuraciones que nunca se definieron, o aplicar patrones de sus datos de entrenamiento que contradicen tu arquitectura real.&lt;/p&gt;
&lt;p&gt;La mitigación estándar es «dale más contexto al agente». Pero el contexto puede ser contradictorio. La documentación se desvía de la implementación. Los comentarios mienten. Incluso el código puede engañar cuando se lee sin entender la intención.&lt;/p&gt;
&lt;p&gt;Necesitábamos algo más explícito. Algo que no pudiera ignorarse ni malinterpretarse. Algo que anclara a los agentes a una realidad verificable.&lt;/p&gt;
&lt;p&gt;Los llamamos Ground Truths: hechos de referencia.&lt;/p&gt;
&lt;h2 id=&quot;qué-es-un-ground-truth&quot;&gt;¿Qué es un Ground Truth?&lt;/h2&gt;
&lt;p&gt;Un ground truth es una declaración de hecho explícita y versionada que los agentes deben respetar. No es documentación. No es un comentario. Es una entidad de primera clase en el sistema con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un identificador único&lt;/strong&gt; (como &lt;code&gt;GT-MAG-015&lt;/code&gt; o &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un estado de ciclo de vida&lt;/strong&gt; (vigente, tentativo o en desuso)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un alcance&lt;/strong&gt; (de toda la plataforma, específico de un paquete o acotado a un dominio)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidencia&lt;/strong&gt; (rutas de archivo, URLs o referencias que respaldan la declaración)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guía para el agente&lt;/strong&gt; (instrucciones explícitas de qué hacer y qué evitar)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aquí hay un ejemplo de nuestra plataforma de inteligencia de código Maguyva:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto no es prosa. Es un contrato. Cuando un agente se encuentra con este ground truth, sabe que:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El comportamiento predeterminado es determinista (resultados vacíos, no conjeturas difusas)&lt;/li&gt;
&lt;li&gt;Hay parámetros específicos (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) con comportamientos definidos&lt;/li&gt;
&lt;li&gt;Existe evidencia en archivos específicos que se pueden verificar&lt;/li&gt;
&lt;li&gt;La declaración se verificó en una fecha específica&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;la-anatomía-de-un-registro-de-ground-truths&quot;&gt;La anatomía de un registro de Ground Truths&lt;/h2&gt;
&lt;p&gt;Los ground truths viven en registros YAML bajo &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Cada paquete o dominio puede tener su propio registro. La estructura es:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;El registro incluye metadatos sobre la colección misma, configuración de renderizado para la generación de documentación, y las declaraciones en sí. Cada declaración sigue un esquema estricto validado por modelos de Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;cómo-acceden-los-agentes-a-los-ground-truths&quot;&gt;Cómo acceden los agentes a los Ground Truths&lt;/h2&gt;
&lt;p&gt;Los ground truths se exponen a través de múltiples canales:&lt;/p&gt;
&lt;h3 id=&quot;1-documentación-renderizada&quot;&gt;1. Documentación renderizada&lt;/h3&gt;
&lt;p&gt;El comando &lt;code&gt;orkestra sync&lt;/code&gt; transforma los registros YAML en markdown legible:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto genera archivos &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; que se incluyen en el contexto del agente. La salida renderizada agrupa las declaraciones por estado y categoría:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-búsqueda-por-cli&quot;&gt;2. Búsqueda por CLI&lt;/h3&gt;
&lt;p&gt;Los agentes con acceso a shell pueden buscar ground truths mediante programación:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La función de búsqueda puntúa las coincidencias en varios campos con relevancia ponderada:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-composición-de-contexto&quot;&gt;3. Composición de contexto&lt;/h3&gt;
&lt;p&gt;Cuando los agentes se renderizan a partir de definiciones YAML, su contexto puede hacer referencia a registros de ground truths:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto garantiza que los ground truths relevantes se carguen antes de que el agente comience a trabajar.&lt;/p&gt;
&lt;h2 id=&quot;categorías-de-ground-truths&quot;&gt;Categorías de Ground Truths&lt;/h2&gt;
&lt;p&gt;Mirando nuestros registros en conjunto, los ground truths se agrupan en varios patrones:&lt;/p&gt;
&lt;h3 id=&quot;principios-del-producto&quot;&gt;Principios del producto&lt;/h3&gt;
&lt;p&gt;Restricciones sobre qué es y qué no es el producto:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Maguyva es de solo lectura respecto de los repositorios de los usuarios; el único activo que no se puede reconstruir es la caché de embeddings pagada». (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;límites-de-arquitectura&quot;&gt;Límites de arquitectura&lt;/h3&gt;
&lt;p&gt;Dónde viven las responsabilidades y por qué:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Los límites entre pipeline y Maguyva son intencionales: pipeline es reutilizable, Maguyva contiene la lógica específica de código, y CQRS separa las escrituras de las etapas del pipeline de las lecturas del servidor». (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;reglas-antialucinación&quot;&gt;Reglas antialucinación&lt;/h3&gt;
&lt;p&gt;Mandatos explícitos que mantienen los contratos de herramientas deterministas en lugar de inferidos:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«La coincidencia difusa de símbolos es opcional mediante &lt;code&gt;find_similar=true&lt;/code&gt;. El comportamiento predeterminado devuelve resultados vacíos para símbolos inexistentes; &lt;code&gt;exact_match=true&lt;/code&gt; impone coincidencia estricta y desactiva todos los mecanismos de respaldo difusos». (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;controles-de-calidad&quot;&gt;Controles de calidad&lt;/h3&gt;
&lt;p&gt;Estándares que deben mantenerse:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Los cambios a la infraestructura compartida (post_filters.py, extractores de relaciones, handlers compartidos) DEBEN validarse contra TODOS los lenguajes compatibles mediante la generación de un manifiesto completo antes de hacer commit. Una validación de un solo lenguaje es insuficiente para código compartido». (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;patrones-de-código&quot;&gt;Patrones de código&lt;/h3&gt;
&lt;p&gt;Requisitos de implementación:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Usa &lt;code&gt;asyncio.to_thread()&lt;/code&gt; para trabajo limitado por CPU en contextos asíncronos; el patrón en desuso &lt;code&gt;loop.run_in_executor()&lt;/code&gt; no debe usarse en código nuevo». (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;el-ciclo-de-vida-de-un-ground-truth&quot;&gt;El ciclo de vida de un Ground Truth&lt;/h2&gt;
&lt;p&gt;Los ground truths no son estáticos. Evolucionan a través de un ciclo de vida definido:&lt;/p&gt;
&lt;h3 id=&quot;tentativo&quot;&gt;Tentativo&lt;/h3&gt;
&lt;p&gt;Una verdad propuesta bajo evaluación. La declaración se registra, pero puede cambiar:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;vigente&quot;&gt;Vigente&lt;/h3&gt;
&lt;p&gt;Una verdad verificada que los agentes deben respetar. La evidencia ha sido validada:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;en-desuso&quot;&gt;En desuso&lt;/h3&gt;
&lt;p&gt;Una verdad que ya no aplica. Se conserva como referencia histórica con un puntero a lo que la reemplazó:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;por-qué-no-simplemente-documentación&quot;&gt;¿Por qué no simplemente documentación?&lt;/h2&gt;
&lt;p&gt;La documentación cumple un propósito distinto. Explica. Enseña. Puede ser vaga, puede usar calificadores como «generalmente» o «típicamente».&lt;/p&gt;
&lt;p&gt;Los ground truths no pueden ser vagos. Son afirmaciones. O aplican, o no aplican.&lt;/p&gt;
&lt;p&gt;Considera la diferencia:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentación:&lt;/strong&gt; «La API generalmente devuelve resultados vacíos cuando no se encuentra un símbolo, aunque la coincidencia difusa puede estar habilitada en algunas configuraciones».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ground Truth:&lt;/strong&gt; «El comportamiento predeterminado devuelve resultados vacíos para símbolos inexistentes; &lt;code&gt;exact_match=true&lt;/code&gt; impone coincidencia estricta y desactiva todos los mecanismos de respaldo difusos».&lt;/p&gt;
&lt;p&gt;La primera es útil para que los humanos aprendan el sistema. La segunda es accionable para que los agentes tomen decisiones.&lt;/p&gt;
&lt;h2 id=&quot;guía-para-el-agente-qué-hacer-y-qué-evitar&quot;&gt;Guía para el agente: qué hacer y qué evitar&lt;/h2&gt;
&lt;p&gt;Algunos ground truths incluyen guía explícita para el agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto elimina la ambigüedad. Un agente que lee esto sabe no solo qué es verdad, sino qué acciones implica esa verdad.&lt;/p&gt;
&lt;h2 id=&quot;verificación-y-mantenimiento&quot;&gt;Verificación y mantenimiento&lt;/h2&gt;
&lt;p&gt;Los ground truths requieren mantenimiento. Rastreamos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: cuándo alguien confirmó que la declaración sigue siendo válida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: archivos que respaldan la declaración (se puede verificar si existen)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: de dónde se originó la verdad (inspección por CLI, revisión de arquitectura, aprendizaje posterior a un incidente)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un ground truth con fechas de verificación desactualizadas o enlaces de evidencia rotos es una señal para investigar. O la verdad sigue siendo válida y necesita reverificación, o la realidad cambió y la verdad necesita actualizarse.&lt;/p&gt;
&lt;h2 id=&quot;ejemplos-reales-de-producción&quot;&gt;Ejemplos reales de producción&lt;/h2&gt;
&lt;h3 id=&quot;límite-de-seguridad&quot;&gt;Límite de seguridad&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Este ground truth evita una clase de «mejoras de seguridad» mal orientadas que romperían el producto.&lt;/p&gt;
&lt;h3 id=&quot;precisión-en-tiempo-de-extracción&quot;&gt;Precisión en tiempo de extracción&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto surgió de una experiencia dolorosa. Los agentes solían parchar paquetes de lenguaje fallidos agregando filtros que solo actuaban en el validador, lo que hacía que el arnés de pruebas se viera más verde, mientras que el extractor real de Maguyva seguía emitiendo las aristas equivocadas. La regla obliga a que las correcciones vuelvan a la ruta real: configuración YAML, consultas o handlers.&lt;/p&gt;
&lt;h3 id=&quot;filtrado-en-múltiples-niveles&quot;&gt;Filtrado en múltiples niveles&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esto evita que los agentes agreguen filtros en el lugar equivocado, un error común que causaba regresiones de precisión.&lt;/p&gt;
&lt;h2 id=&quot;integración-con-el-sistema-de-orquestación&quot;&gt;Integración con el sistema de orquestación&lt;/h2&gt;
&lt;p&gt;Los ground truths son una capa de un sistema de contexto más amplio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Decisiones arquitectónicas (ADRs)&lt;/strong&gt; - Registran por qué elegimos el enfoque A sobre el B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ground Truths&lt;/strong&gt; - Indican qué está establecido con certeza en este momento&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Patrones de dominio&lt;/strong&gt; - Describen cómo hacer las cosas correctamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antipatrones&lt;/strong&gt; - Describen qué evitar y por qué&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un agente que trabaja en el sistema tiene acceso a los cuatro. Los ground truths proporcionan el ancla factual, mientras que las decisiones explican la historia, los patrones guían la implementación y los antipatrones advierten sobre los riesgos.&lt;/p&gt;
&lt;h2 id=&quot;midiendo-el-impacto&quot;&gt;Midiendo el impacto&lt;/h2&gt;
&lt;p&gt;Desde que introdujimos los ground truths, hemos observado:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menos ciclos de «corregir la corrección alucinada»&lt;/li&gt;
&lt;li&gt;Toma de decisiones más segura por parte de los agentes cuando los hechos son claros&lt;/li&gt;
&lt;li&gt;Mejores revisiones de PR porque las expectativas son explícitas&lt;/li&gt;
&lt;li&gt;Menor tiempo de incorporación para nuevos agentes (y humanos)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La inversión en mantener los ground truths se paga sola con menos depuración y límites de sistema más claros.&lt;/p&gt;
&lt;h2 id=&quot;cómo-empezar&quot;&gt;Cómo empezar&lt;/h2&gt;
&lt;p&gt;Para agregar un ground truth a tu sistema:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crea un &lt;code&gt;ground_truths.yaml&lt;/code&gt; en el directorio &lt;code&gt;ai_assets/reference/&lt;/code&gt; de tu paquete&lt;/li&gt;
&lt;li&gt;Define los metadatos y la configuración de renderizado&lt;/li&gt;
&lt;li&gt;Agrega declaraciones siguiendo el esquema&lt;/li&gt;
&lt;li&gt;Ejecuta &lt;code&gt;uv run orkestra sync&lt;/code&gt; para generar la documentación&lt;/li&gt;
&lt;li&gt;Incluye el registro en la composición de contexto del agente&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Empieza con los hechos que causan más confusión o las restricciones que se violan con más frecuencia. Esos son tus ground truths de mayor valor.&lt;/p&gt;
&lt;h2 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h2&gt;
&lt;p&gt;Los agentes de IA van a alucinar. Es su naturaleza. Pero podemos crear entornos donde la alucinación esté acotada, donde ciertos hechos sean innegociables, donde los agentes puedan contrastar sus suposiciones con una realidad verificada.&lt;/p&gt;
&lt;p&gt;Los ground truths no son una solución completa. Requieren mantenimiento. Pueden quedar desactualizados. Agregan sobrecarga al proceso de desarrollo.&lt;/p&gt;
&lt;p&gt;Pero aportan algo valioso: un vocabulario compartido de hechos en el que tanto humanos como agentes pueden confiar. En un mundo donde los agentes participan cada vez más en el desarrollo de software, esa base compartida se vuelve esencial.&lt;/p&gt;
&lt;p&gt;La alternativa son ciclos interminables de agentes cometiendo errores con total confianza y humanos corrigiéndolos. Los ground truths rompen ese ciclo al hacer que las correcciones sean explícitas y duraderas.&lt;/p&gt;
&lt;p&gt;Tus agentes merecen saber qué es verdad. Díselo.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: orquestando agentes de IA a gran escala</title><link>https://maguyva.ai/es/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/es/blog/orkestra-agent-orchestration</guid><description>Un solo orquestador enruta el trabajo hacia agentes de IA especialistas, cada uno con skills y memoria propias. Cómo Orkestra coordina 46 agentes y 466 skills en producción.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las cifras de esta publicación reflejan el sistema al momento de su publicación (enero de 2026). Consulta nuestra &lt;a href=&quot;https://maguyva.ai/es/team&quot;&gt;página del equipo&lt;/a&gt; para ver las cifras actuales.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cuando empezamos a construir con Claude Code, nos topamos con un problema que todo equipo que usa asistentes de codificación con IA termina enfrentando: un solo agente no puede hacer todo bien.&lt;/p&gt;
&lt;p&gt;Puedes indicarle a un agente que sea un especialista en bases de datos. O un auditor de seguridad. O un ingeniero de frontend. Pero en el momento en que le pides ser los tres a la vez, la calidad sufre. El contexto se diluye. Las instrucciones entran en conflicto. El agente se convierte en un generalista que es mediocre en todo.&lt;/p&gt;
&lt;p&gt;Así que construimos Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;qué-es-orkestra&quot;&gt;¿Qué es Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra es un sistema de orquestación de agentes para Claude Code y herramientas de codificación con IA similares. Coordina múltiples agentes especializados, cada uno con experticia distinta, bajo un único orquestador que enruta el trabajo hacia el especialista correcto.&lt;/p&gt;
&lt;p&gt;Piénsalo como una agencia de personal para agentes de IA. El orquestador recibe una tarea, identifica qué especialista debería encargarse de ella, y delega con el contexto correcto. Cuando el trabajo está terminado, los resultados vuelven al orquestador para su síntesis.&lt;/p&gt;
&lt;p&gt;Los números cuentan la historia:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Cantidad&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agentes especialistas&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skills reutilizables&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arquetipos de identidad&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mentalidades&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estilos de comunicación&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dominios de conocimiento&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;el-sistema-de-personajes-dd-para-agentes&quot;&gt;El sistema de personajes: D&amp;amp;D para agentes&lt;/h2&gt;
&lt;p&gt;La idea central detrás de Orkestra es que el comportamiento de un agente emerge de tres primitivas componibles:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identidad&lt;/strong&gt; define &lt;em&gt;qué&lt;/em&gt; es el agente. Un arquitecto diseña estructuras de sistemas. Un depurador rastrea fallos hasta sus causas raíz. Un guardián vela por el cumplimiento normativo y los límites de seguridad. Tenemos 27 arquetipos de identidad que se pueden combinar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mentalidad&lt;/strong&gt; define &lt;em&gt;cómo&lt;/em&gt; piensa el agente. Una mentalidad analítica fundamenta las afirmaciones en evidencia y cuantifica la incertidumbre. Una mentalidad escéptica cuestiona los supuestos y busca evidencia que los desmienta. Una mentalidad exploratoria abraza la ambigüedad y prueba múltiples enfoques.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estilo&lt;/strong&gt; define &lt;em&gt;cómo&lt;/em&gt; se comunica el agente. Un estilo técnico incluye valores exactos y hace referencia a archivos específicos. Un estilo conciso elimina el relleno y va directo a la respuesta. Un estilo diplomático equilibra la honestidad con el tacto.&lt;/p&gt;
&lt;p&gt;Un agente combina estas primitivas:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta composición crea un agente que diseña sistemas (architect), conecta conocimiento entre dominios (knowledge-architect), fija la dirección estratégica (strategist), piensa en evidencia y datos (analytical), y se comunica sin relleno (concise).&lt;/p&gt;
&lt;p&gt;El poder está en la explosión combinatoria. 27 identidades por 11 mentalidades por 10 estilos arrojan casi 3,000 personalidades de agente posibles. Pero solo defines las combinaciones que importan para tu trabajo.&lt;/p&gt;
&lt;h2 id=&quot;skills-módulos-de-capacidades-reutilizables&quot;&gt;Skills: módulos de capacidades reutilizables&lt;/h2&gt;
&lt;p&gt;Las skills son el conocimiento y los flujos de trabajo que los agentes pueden invocar. Siguen un sistema por niveles basado en el alcance:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nivel&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;th&gt;Alcance&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Fundamentos&lt;/td&gt;
&lt;td&gt;Metodología universal&lt;/td&gt;
&lt;td&gt;Disciplina test-first, finalización basada en evidencia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identidades&lt;/td&gt;
&lt;td&gt;Flujos basados en rol&lt;/td&gt;
&lt;td&gt;Estándares de interfaz CLI, guía de rendimiento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Dominios&lt;/td&gt;
&lt;td&gt;Conocimiento específico de dominio&lt;/td&gt;
&lt;td&gt;Patrones de migración de bases de datos, validación de autenticación&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stacks&lt;/td&gt;
&lt;td&gt;Específico de tecnología&lt;/td&gt;
&lt;td&gt;Despliegue en Cloudflare, operaciones de Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Proyecto&lt;/td&gt;
&lt;td&gt;Solo esta base de código&lt;/td&gt;
&lt;td&gt;Flujos y convenciones específicos del proyecto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Las skills se cargan bajo demanda (lazy-loaded). Un agente ve los nombres y descripciones de las skills al iniciar, pero el contenido completo de una skill solo se carga cuando se activa. Esto mantiene el contexto ligero mientras hace que cientos de skills sean descubribles.&lt;/p&gt;
&lt;p&gt;Cada skill incluye:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Condiciones de activación claras («Usar al migrar esquemas de bases de datos»)&lt;/li&gt;
&lt;li&gt;Guía paso a paso&lt;/li&gt;
&lt;li&gt;Herramientas permitidas para el flujo de trabajo&lt;/li&gt;
&lt;li&gt;Criterios de éxito y rutas de recuperación ante fallos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las 466 skills de nuestro registro cubren de todo, desde el aislamiento de worktrees de Git hasta flujos de investigación web y validación de salud de despliegues.&lt;/p&gt;
&lt;h2 id=&quot;por-qué-importa-la-orquestación&quot;&gt;Por qué importa la orquestación&lt;/h2&gt;
&lt;p&gt;Las arquitecturas de un solo agente chocan con paredes rápidamente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dilución de contexto.&lt;/strong&gt; Una ventana de contexto de 200k tokens suena grande hasta que cargas esquemas de bases de datos, documentación de API, fixtures de pruebas y conocimiento de dominio. Los especialistas pueden trabajar con contexto acotado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conflictos de instrucciones.&lt;/strong&gt; Decirle a un agente que sea «minucioso pero rápido» y que «verifique todo pero sin sobrediseñar» crea tensión. Los especialistas resuelven esto teniendo un alcance claro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profundidad de experticia.&lt;/strong&gt; Un agente generalista sabe un poco de todo. Un agente especialista, compuesto con la identidad y las skills correctas, conoce su dominio a fondo.&lt;/p&gt;
&lt;p&gt;Orkestra implementa una orquestación plana: un orquestador coordina múltiples especialistas. Los especialistas no pueden generar subespecialistas. Esto evita una explosión de complejidad mientras habilita el trabajo en paralelo.&lt;/p&gt;
&lt;p&gt;El orquestador tiene acceso a 2.2 millones de tokens de capacidad efectiva: su propia ventana de 200k más 10 subagentes concurrentes con 200k cada uno. Trabajo que agotaría a un solo agente corre cómodamente a través de la flota.&lt;/p&gt;
&lt;h2 id=&quot;el-pipeline-de-renderizado&quot;&gt;El pipeline de renderizado&lt;/h2&gt;
&lt;p&gt;Las definiciones de agentes viven en YAML. Claude Code lee Markdown. Orkestra tiende un puente sobre esa brecha con un pipeline de renderizado determinista:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Los operadores editan la fuente YAML. Ejecutan &lt;code&gt;orkestra sync&lt;/code&gt;. El Markdown renderizado aparece en &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code recoge los cambios.&lt;/p&gt;
&lt;p&gt;Esta separación sirve a audiencias distintas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;fuente YAML&lt;/strong&gt; incluye metadatos de ciclo de vida, etiquetas, reglas de validación y notas de desuso para las herramientas&lt;/li&gt;
&lt;li&gt;El &lt;strong&gt;Markdown renderizado&lt;/strong&gt; incluye solo lo que el modelo necesita: descripción, herramientas, skills y guía de comportamiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El pipeline compone identidades, mentalidades, estilos y skills en un solo prompt coherente. Un agente architect-analytical-concise recibe un system prompt muy distinto al de un agente debugger-skeptical-technical, incluso si comparten algunas skills subyacentes.&lt;/p&gt;
&lt;h2 id=&quot;conocimiento-de-dominio-el-patrón-de-cuatro-archivos&quot;&gt;Conocimiento de dominio: el patrón de cuatro archivos&lt;/h2&gt;
&lt;p&gt;Cada dominio de conocimiento sigue una estructura consistente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Esta estructura sirve para la carga de contexto de los agentes. Un agente que trabaja en autenticación carga &lt;code&gt;authentication/patterns.md&lt;/code&gt; para orientarse y &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; para evitar errores conocidos. Los archivos tienen un tamaño pensado para una carga de contexto eficiente: lo bastante enfocados para ser útiles, lo bastante completos para ser autoritativos.&lt;/p&gt;
&lt;p&gt;Mantenemos 21 dominios de nivel superior que incluyen analítica, autenticación, ciencia de datos, infraestructura, machine learning, rendimiento, seguridad y más. Cada dominio puede tener subdominios para una granularidad más fina.&lt;/p&gt;
&lt;h2 id=&quot;valores-el-sistema-operativo&quot;&gt;Valores: el sistema operativo&lt;/h2&gt;
&lt;p&gt;Todos los agentes comparten una capa base de valores que define cómo operan:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La simplicidad primero.&lt;/strong&gt; Usa la solución más simple que funcione. Agrega complejidad solo cuando esté justificada.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Corrige las causas raíz.&lt;/strong&gt; Nunca te limites a poner parches sin resolver la causa del fallo. Si un pipeline falla, depura el pipeline. Si una prueba falla, corrige el código o la prueba.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Basado en evidencia.&lt;/strong&gt; Etiqueta las afirmaciones como «verificadas» (con benchmarks) o «estimadas» (con supuestos). Un patrón detectado no equivale a un problema confirmado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Economía de contexto.&lt;/strong&gt; Las herramientas MCP cuestan 0.1% del contexto. Las lecturas de archivos cuestan 2% cada una. Aplica experticia de dominio antes de explorar el código.&lt;/p&gt;
&lt;p&gt;Estos valores se propagan a cada especialista a través del pipeline de renderizado. Un agente no puede eludirlos mediante composición.&lt;/p&gt;
&lt;h2 id=&quot;cli-el-plano-de-control&quot;&gt;CLI: el plano de control&lt;/h2&gt;
&lt;p&gt;Orkestra viene con una CLI para gestionar el ecosistema de agentes:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La CLI es la fuente de verdad sobre qué agentes existen, qué skills tienen, y si el sistema está sano. Ejecuta la validación antes de la sincronización para detectar problemas temprano.&lt;/p&gt;
&lt;h2 id=&quot;consideraciones-sobre-código-abierto&quot;&gt;Consideraciones sobre código abierto&lt;/h2&gt;
&lt;p&gt;Construimos Orkestra para resolver nuestro propio problema: coordinar agentes de IA a gran escala para una base de código compleja. Los patrones que descubrimos no son específicos de nuestro dominio.&lt;/p&gt;
&lt;p&gt;El sistema de composición de personajes (identidad + mentalidad + estilo) aplica a cualquier equipo que defina personalidades de agentes.&lt;/p&gt;
&lt;p&gt;El sistema de niveles de skills (K0-K4) ofrece un modelo mental para organizar capacidades reutilizables por alcance.&lt;/p&gt;
&lt;p&gt;El patrón del pipeline de renderizado (fuente YAML + plantillas + artefactos generados) separa las responsabilidades entre las herramientas y el consumo del modelo.&lt;/p&gt;
&lt;p&gt;El modelo de orquestación plana (un coordinador, muchos especialistas) evita la complejidad mientras habilita el paralelismo.&lt;/p&gt;
&lt;p&gt;Si Orkestra se vuelve código abierto depende de si estos patrones tienen valor para otros que construyen con Claude Code. Si estás chocando con las paredes que describimos, la arquitectura podría ayudar.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-aprendimos&quot;&gt;Lo que aprendimos&lt;/h2&gt;
&lt;p&gt;Construir Orkestra nos enseñó que la orquestación no se trata de hacer a los agentes más inteligentes. Se trata de hacerlos más enfocados.&lt;/p&gt;
&lt;p&gt;Un solo agente con instrucciones perfectas de todas formas se queda sin contexto. Un solo agente con todas las skills de todas formas se confunde sobre cuáles aplicar. Un solo agente que intenta ser todo produce resultados mediocres en todas partes.&lt;/p&gt;
&lt;p&gt;Cuarenta especialistas, cada uno excelente en su dominio, coordinados por un orquestador que sabe cuándo delegar: así es como lanzamos.&lt;/p&gt;
&lt;p&gt;Los números importan menos que la arquitectura. Podrías necesitar cinco agentes o cincuenta. El principio se mantiene: composición sobre capacidad, especialización sobre generalización, coordinación sobre heroísmos individuales.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra impulsa el ecosistema de agentes detrás de Maguyva, nuestra plataforma de inteligencia de código. ¿Quieres saber más? Contacta al equipo.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>