De herramienta interna a starter kit público: nuestro harness de agentes en GitHub
En un post anterior de esta categoría contamos, en términos generales, cómo estábamos aplicando a este mismo sitio los principios de arquitectura de contenidos y flujos editoriales que proponemos a nuestros clientes. Desde entonces dimos un paso más: el conjunto de agentes de IA que coordina ese trabajo —lo que internamente llamamos "el harness"— ahora también existe como un starter kit público, publicado en GitHub como agent-harness-drupal, con todo lo específico de este proyecto (nombre de cliente, dominio, tablero de seguimiento, entradas de memoria) removido o reducido a plantillas vacías para completar.
¿Qué es exactamente? Una arquitectura multi-agente para Claude Code: un orquestador que habla con la persona y decide qué hacer, un planificador que convierte un objetivo en tareas, un documentador que registra qué funcionó y qué no en una memoria de corto y largo plazo, doce agentes de ejecución especializados (contenido, estilo, SEO, desarrollo Drupal, frontend, testing, revisión de pull requests, entre otros), dos flujos que los encadenan en el orden correcto —uno para contenido, otro para desarrollo y pruebas— y skills de dominio Drupal reutilizables. Lo dejamos marcado como "alpha" a propósito: el mecanismo está probado en un caso de uso real, este mismo sitio (trilingüe ES/EN/PT, sobre Drupal 11, con flujo editorial completo), pero todavía no en un segundo proyecto distinto.
En la práctica, dos reglas sostienen todo el sistema y no son negociables. Ningún agente publica contenido directamente: cualquier borrador queda en estado de revisión hasta que una persona lo aprueba explícitamente. Y ningún agente mergea código a la rama principal: el flujo de desarrollo siempre termina en una rama con pruebas verificadas, un pull request abierto y revisado, y el merge final en manos humanas. Son los mismos dos gates que ya veníamos aplicando en este sitio antes de pensar en publicar el harness como algo reutilizable.
Que el mecanismo esté "probado" no significa que haya salido bien a la primera. Dos ejemplos reales, sin maquillar. Durante una sesión enfocada en delegar más trabajo a otra herramienta de IA (Kimi Code CLI) para no gastar contexto propio, nos dimos cuenta de que veníamos escribiendo a mano, en cada pedido, reglas operativas —rama correcta, correr los linters antes de entregar— que ya existían precargadas en la configuración de cada agente. El problema no era que la herramienta delegada trabajara mal; era que no estábamos usando lo que ya teníamos armado. Corregirlo fue el cambio de mayor impacto de toda la sesión, y quedó una línea de base con números concretos (cuántas invocaciones, cuánta fricción) para poder comparar de verdad en la próxima, en vez de asumir que mejoró.
El segundo ejemplo es distinto: intentando publicar un cambio de texto en los tres idiomas del sitio, el borrador de un idioma se perdía en silencio cada vez que guardábamos otro idioma con un borrador propio pendiente. Lo reprodujimos dos veces, con dos métodos distintos, antes de siquiera sospechar que no era un error nuestro. Terminó siendo un bug activo y sin resolver del propio Drupal 11, con otros reportes describiendo el mismo patrón. Existía un atajo más rápido —forzarlo con un script tocando la base de datos directamente— pero era exactamente el tipo de intervención que ya nos había costado un incidente antes, así que lo dejamos documentado y pendiente de decisión, en vez de forzarlo.
¿Qué se puede hacer hoy con el starter kit? Tomarlo como punto de partida para otro proyecto Drupal con necesidades parecidas —flujo editorial, multilenguaje, un equipo chico que necesita moverse rápido sin perder control de calidad— y adaptar las partes que en el repo quedan marcadas como ejemplo del proyecto original (el modelo de contenido con Paragraphs anidados, las plantillas Twig, ciertas convenciones de tema) a la estructura real de cada sitio. Sigue siendo un alpha: probado a fondo en un caso, todavía no en varios. Si alguien lo prueba en su propio proyecto, es información real que nos interesa conocer.