El bucle de INJX12 Code no es simplemente una función que permite ejecutar el modelo durante más tiempo. La clave reside en colocar un disparador (Trigger), un verificador (Verifier), una condición de éxito (Success condition), una parada forzada (Hard stop) y un límite de permisos (Permission boundary) alrededor de un agente de IA que actúa de forma probabilística, con el fin de convertir las tareas repetitivas en un sistema controlable. Este artículo resume de un solo vistazo las diferencias entre los bucles por turnos (Turn-based), basados en objetivos (Goal-based), basados en el tiempo (Time-based) y proactivos (Proactive Loop), así como los principios de diseño prácticos.
1. ¿Qué es el «Loop» en Claude Code?
En este contexto, el «Loop» no se refiere a las sentencias for o while de los lenguajes de programación. El «bucle» que describe el equipo de Claude Code es una estructura de ejecución en la que el agente observa el estado actual, actúa, verifica el resultado y, a continuación, repite la tarea hasta que se cumplan las condiciones de finalización.
Inicio de la tarea
↓
Análisis del estado y del código
↓
Elaboración del plan
↓
Modificación del código o ejecución de herramientas
↓
Pruebas y verificación
↓
¿Se cumplen las condiciones de finalización?
├─ No: siguiente iteración
└─ Sí: finalización e informe de resultados
A la hora de identificar un bucle, resultan útiles las siguientes cuatro preguntas.
- ¿Qué inicia la tarea?
- ¿Qué finaliza la tarea?
- ¿Qué función de Claude Code controla la repetición?
- ¿Para qué tipo de tareas es adecuado?
No es necesario convertir todas las tareas en bucles complejos. Para tareas en las que el resultado se comprueba de inmediato, como corregir un error tipográfico en un archivo o un simple cambio de nombre, es más eficaz utilizar un indicador de comando normal. Solo se debe optar por un bucle cuando realmente se requieran varias rondas de observación, modificación y verificación.
2. Comparación de los cuatro tipos de bucles
| Tipo | Condición de inicio | Condición de finalización | Función principal | Tareas adecuadas | Responsabilidad del usuario |
|---|---|---|---|---|---|
| Por turnos | Indicación del usuario | Cuando Claude considere que ha finalizado o necesite información adicional | Conversación general, habilidades, herramientas de prueba y navegador | Implementaciones y modificaciones breves y puntuales | Procedimiento de verificación repetitivo |
| Basado en objetivos | El usuario especifica las condiciones de finalización | Cuando el modelo de evaluación confirma que se cumplen las condiciones o el usuario lo interrumpe |
/goal, modo automático si es necesario |
Tareas cuyo estado de finalización es medible, como pruebas, compilaciones y migraciones | Decisión de finalización |
| Basado en el tiempo | Tiempo, intervalo o calendario especificados | El usuario lo cancela o finaliza una tarea externa |
/loop, /schedule
|
Supervisión de PR, CI y despliegues; resúmenes periódicos; sondeo de estado | Momento de la próxima ejecución |
| Proactivo | Calendario, API, eventos de GitHub, etc. | Cumplimiento de los objetivos de tareas individuales, desactivación de rutinas | Rutinas, /goal, habilidades, flujos de trabajo dinámicos, modo automático |
Clasificación de incidencias, gestión de errores, migraciones a gran escala y otras tareas continuas | Detección de tareas, ejecución de indicaciones, orquestación |
La clave de esta clasificación no es «cuán inteligente es la IA», sino qué responsabilidad de control cede la persona al sistema. En el modo «Turn-based», la persona crea el siguiente prompt; en el modo «Goal-based», delega la decisión de si la tarea está completada; y en el modo «Time-based», delega el momento de la reejecución. En la etapa «Proactive», la responsabilidad de detectar la aparición de una tarea y ejecutar el prompt adecuado pasa al sistema.
3. Bucle por turnos: se cede el procedimiento de verificación
El bucle por turnos es la forma básica en la que la mayoría de los desarrolladores utilizan el código Claude.
Persona → Claude → Persona → Claude
Cuando el usuario realiza una solicitud, Claude busca los archivos pertinentes, modifica el código, lo prueba y comunica los resultados. Aunque internamente puedan producirse varias iteraciones de observación, acción y verificación, la autoridad para iniciar la siguiente tarea sigue recayendo en el usuario.
Modificar el código no es lo mismo que completar una funcionalidad
Aunque Claude informe de que «ha completado la implementación y las pruebas», en el producto real pueden persistir los siguientes problemas:
- El estado no cambia al hacer clic en el botón.
- Se produce un error en la consola del navegador.
- El diseño para móviles se ve alterado.
- Faltan atributos de accesibilidad.
- Se superan las pruebas, pero el flujo real del navegador falla.
- Se han modificado archivos que no guardan relación con el cambio.
Por lo tanto, el criterio de finalización no debe ser «se ha modificado el código», sino «se ha verificado el funcionamiento mediante pruebas externas».
Reutilizar la verificación con SKILL.md
Skill es un método que consiste en almacenar en SKILL.md las instrucciones y procedimientos que se utilizan repetidamente. Claude puede cargarlos automáticamente tras evaluar su relevancia, o bien se pueden ejecutar directamente mediante /skill-name. En lugar de incluir siempre los procedimientos operativos largos en CLAUDE.md, separarlos para que Skill se cargue solo cuando sea necesario permite utilizar el contexto de forma más eficiente.
---
name: verify-ui-change
description: Verifica los cambios en la interfaz de usuario en el entorno de ejecución real antes de dar por finalizados dichos cambios.
---
# Verificación de cambios en la interfaz de usuario
1. Ejecuta el servidor de desarrollo.
2. Abre la pantalla modificada en el navegador.
3. Manipula los nuevos controles de forma real.
4. Comprueba si se produce el cambio de estado esperado.
5. Comprueba si hay nuevos errores y advertencias en la consola del navegador.
6. Comprueba la accesibilidad y los principales indicadores de rendimiento.
7. Si falla, corrige el error y vuelve a verificar desde el principio.
8. Informa de las pruebas realizadas, incluyendo los comandos ejecutados, los resultados y las capturas de pantalla.
Una buena «Skill» no contiene recomendaciones abstractas, sino una lista de comprobación viable. «Comprobar que npm test devuelva el código de salida 0» es una regla mucho más sólida que «revisar con más detenimiento».
Solidez de las pruebas de validación
| Prueba | Fiabilidad | Motivo |
|---|---|---|
| Explicación del agente: «Parece que funciona correctamente» | Baja | No es un resultado de ejecución, sino una mera deducción |
| Diferencias de código y revisión estática | Media | Se ven los cambios, pero no se comprueba el comportamiento en tiempo de ejecución |
| Salida real de la prueba y código de salida | Alta | Existen resultados externos reproducibles |
| Interacción con el navegador, capturas de pantalla, resultados de la consola y del rendimiento | Muy alta | Verifica directamente el recorrido del usuario y el estado en tiempo de ejecución |
| El agente de revisión independiente y la integración continua (CI) llegan a la misma conclusión | Muy alto | Reduce el sesgo de autoconfirmación del agente de implementación |
Claude La documentación oficial de Code describe la habilidad «/run», que permite comprobar la aplicación en ejecución, y /verify, que verifica los cambios en el entorno de ejecución real. Si el método de ejecución del proyecto es complejo, es más seguro documentar en una Skill propia del equipo los comandos de inicio exactos, las variables de entorno y los procedimientos de preparación de datos.
4. Bucle basado en objetivos: delega la decisión de finalización
En el bucle basado en objetivos, el usuario no tiene que decidir cada vez si «se debe realizar la tarea una vez más». El usuario define el estado de finalización y Claude continúa con varios turnos hasta que se cumplan dichas condiciones.
El usuario especifica el objetivo
↓
Turno de trabajo de Claude
↓
Un modelo de evaluación independiente comprueba la condición de finalización
├─ No cumplida: se transmite el motivo al siguiente turno
└─ Cumplida: finalización del objetivo
/goal está documentado para su uso en Claude Code v2.1.139 o superior. Solo se puede activar un objetivo por sesión.
Lo que ve realmente el modelo de evaluación
Al finalizar cada turno, un modelo pequeño y rápido independiente analiza las condiciones de finalización y el contenido de la conversación para determinar si se ha «cumplido» o «no se ha cumplido». La configuración predeterminada es un modelo de evaluación de la familia Haiku. Una limitación importante es que el modelo de evaluación no lee los archivos directamente ni ejecuta pruebas por separado.
Por lo tanto, el Claude que ha realizado la tarea debe dejar claramente constancia de las siguientes pruebas en la conversación:
- Los comandos ejecutados
- El número de pruebas y los resultados (superadas o fallidas)
- El código de salida
- El resultado de la compilación
- La lista de archivos modificados
- Las causas de los fallos restantes
- Resultados que confirmen que se han respetado las restricciones de alcance
El modelo de evaluación no juzga «qué ocurrió realmente», sino «qué pruebas se han revelado en la conversación».
Los cuatro elementos de un buen «Goal»
Un buen «Goal» incluye los cuatro elementos siguientes:
- Condiciones de éxito medibles: superación de pruebas, éxito de la compilación, vaciado de la cola, consecución del umbral de puntuación
- Método de verificación: especificar con qué comando o herramienta se demostrará el éxito
- Restricciones del alcance de las modificaciones: directorios modificables, archivos prohibidos, efectos secundarios permitidos
- Condiciones de finalización forzada: número máximo de turnos, tiempo máximo, número de fallos consecutivos; interrupción en caso de error de permisos
/goal: todas las pruebas y lints relacionadas con auth deben superarse,
y git diff solo debe incluir src/auth y los archivos de prueba relacionados.
En cada turno se informará del resultado de la ejecución y del código de salida.
Si se alcanza un máximo de 12 turnos o 45 minutos, se interrumpirá el proceso y se resolverán los fallos restantes.
La condición de finalización clave de /goal en sí misma es la determinación de éxito del modelo de evaluación o el comando /goal clear del usuario. Para imponer un límite de turnos o de tiempo, debe especificarse dentro de las condiciones de Goal.
Condiciones adecuadas y inadecuadas
| Condiciones adecuadas | Condiciones inadecuadas |
|---|---|
npm test finaliza con un código de salida 0 |
Perfeccionar el código |
| Se superan las 48 pruebas relacionadas con la autenticación | Se mejora la experiencia del usuario al máximo |
| Todos los puntos de llamada a la API se cambian a la nueva interfaz y la compilación se realiza con éxito | Se refactoriza con una estructura mejor |
| La cola de incidencias pendientes está vacía y se registra el resultado de cada incidencia | Se resuelven tantas incidencias como sea posible |
Los objetivos ambiguos pueden finalizar demasiado pronto o dar lugar a un ciclo interminable de mejoras.
Comprobación del estado y suspensión
-
/goal: comprueba las condiciones activas, el tiempo de ejecución, el número de turnos de evaluación, el consumo de tokens y el motivo de la última evaluación -
/goal clear: suspende el objetivo activo - Configuración de un nuevo objetivo: sustituye al objetivo existente
-
--resumeo--continue: permite reanudar un objetivo inconcluso
Aunque las condiciones se mantienen al reanudar, el número de turnos, el tiempo y el límite de tokens pueden reiniciarse, por lo que es recomendable gestionar las paradas forzosas junto con los indicadores de rendimiento.
/goal y los permisos son independientes
/goal solo inicia automáticamente el siguiente turno, pero no amplía los permisos de la herramienta. Si la escritura de archivos, los comandos de prueba o las operaciones de Git requieren autorización, es posible que se necesite dicha autorización incluso durante el Goal.
Para la ejecución sin supervisión se puede utilizar el modo «Auto», pero este no es una función que «permita todas las herramientas incondicionalmente». El clasificador bloquea las operaciones que sean destructivas, difíciles de revertir o que tengan como objetivo elementos fuera de los límites de confianza, y las reglas explícitas ask y deny se aplican antes que el clasificador.
5. Bucle basado en el tiempo: supera el momento de reejecución
Si el bucle basado en objetivos aborda «cuándo detenerse», el bucle basado en el tiempo aborda «cuándo volver a ejecutarse». Es adecuado para tareas en las que el estado de un sistema externo cambia con el paso del tiempo.
- Comprobar si hay nuevas revisiones en las PR
- Comprobar si la CI o la implementación han finalizado
- Comprobar el estado de las compilaciones prolongadas
- Resumen diario de mensajes de Slack
- Comprobar si hay nuevas entradas en la cola de incidencias
/loop: ejecución repetida dentro de la sesión actual
/loop 10m Comprueba las PR actuales e incorpora los nuevos comentarios;
si hay alguna CI fallida, analiza la causa y corrígelo.
Las principales formas descritas en este documento son las siguientes.
| Entrada | Acción |
|---|---|
/loop 5m <prompt> |
Ejecuta el prompt a intervalos fijos especificados |
/loop <prompt> |
Claude selecciona el intervalo en cada repetición |
/loop |
Ejecuta el Prompt de mantenimiento integrado o el archivo loop.md del proyecto |
/loop 20m /review-pr 1234 |
Reejecuta la Skill permitida a intervalos especificados |
/loop depende de la sesión actual de Claude Code. El ordenador y la sesión deben estar en ejecución; si se inicia una nueva conversación, las tareas de la sesión se perderán. Las tareas pendientes se pueden recuperar con --resume o --continue, pero las tareas recurrentes caducan, por defecto, 7 días después de su creación. Tampoco se ejecutan de forma retroactiva todos los ciclos perdidos.
Dado que el programador de la sesión puede estar sujeto a fluctuaciones (jitter), puede que no sea adecuado para requisitos operativos que exijan una «ejecución puntual a la hora exacta».
/schedule: Rutina gestionada por Anthropic
/schedule agrupa un Prompt, un Repository, un Connector y un Trigger para crear una rutina que se ejecuta en la infraestructura gestionada por Anthropic. Se puede ejecutar incluso si se cierra el portátil; en la documentación oficial se presenta como «Research Preview».
Los triggers que admite una rutina son los siguientes:
- Programación recurrente
- Programación única en un momento futuro específico
- Llamadas a API autenticadas
- Eventos de pull request o lanzamiento en GitHub
Se pueden vincular varios «Trigger» a una misma «Routine». Por ejemplo, se puede configurar una «Routine» de revisión de pull requests para que se ejecute todas las noches y, al mismo tiempo, responda al evento pull_request.opened.
Comparación entre /loop y /schedule
| Categoría | /loop |
Rutina /schedule
|
|---|---|---|
| Lugar de ejecución | Ordenador y sesión actuales | Nube gestionada por Anthropic |
| Ejecución tras el apagado del ordenador | Normalmente no es posible | Sí |
| Se requiere una sesión abierta | Sí | No |
| Archivos locales sin confirmar | Accesibles | No accesibles; se clona el repositorio de nuevo en cada ejecución |
| Intervalo mínimo | 1 minuto según la documentación oficial | 1 hora según la documentación oficial |
| Persistencia | Centrada en la sesión; las tareas recurrentes caducan a los 7 días | Rutina almacenada en la cuenta |
| Solicitud de permisos | Hereda la política de la sesión actual | Ejecución autónoma sin autorización interactiva |
| Uso adecuado | Supervisión de PR y despliegues breves | Automatización de operaciones continuas |
Cuándo es mejor un evento que un sondeo
Si se comprueban cada minuto las PR en las que rara vez se producen cambios, la mayoría de las ejecuciones finalizarán sin realizar ninguna acción. Si un sistema externo puede enviar eventos, la siguiente estructura resulta más eficiente.
Fallo de CI o actualización de PR
↓
GitHub Trigger o API de Routine
↓
Ejecución de Claude solo cuando sea necesario
El diseño basado en eventos reduce los retrasos y minimiza las llamadas innecesarias al modelo y el consumo de tokens. Si el sondeo es inevitable, es recomendable aumentar el intervalo para adaptarlo a la frecuencia real de los cambios y aplicar un «backoff» cuando no se produzcan cambios durante un periodo prolongado.
Requisitos imprescindibles para las tareas basadas en el tiempo
- Idéntica: aunque se reciba el mismo evento varias veces, no deben producirse comentarios, PR ni implementaciones duplicados.
- Estado de procesamiento: deben registrarse el ID del último evento procesado, el SHA de la confirmación y el ID del comentario de revisión, entre otros.
- Estado de finalización: debe poder determinarse la finalización, por ejemplo, fusión o cierre de una solicitud de incorporación de cambios, cola vacía, éxito o reversión de una implementación.
-
Ámbito de escritura: deben limitarse los efectos secundarios, como permitir comentarios, prohibir la fusión o permitir el push únicamente en la rama
claude/*. - Gestión de fallos: se necesitan reglas de reintento y escalación en caso de fallos en servicios externos, caducidad de la autenticación, límite de frecuencia o falta de permisos.
6. Proactive Loop: va más allá de la detección y la orquestación de tareas
Proactive Loop no es un simple comando, sino una arquitectura de automatización continua que combina varias funciones.
Desencadenante
+ Objetivo
+ Habilidades
+ Flujo de trabajo dinámico
+ Modo automático
+ Repositorio, conector, navegador y herramientas de CI
Las nuevas tareas se detectan, procesan, verifican y se informan de los resultados sin que una persona tenga que introducir comandos en tiempo real.
Ejemplo: gestión automática de comentarios sobre errores
Recepción de incidencias de GitHub o comentarios de Slack
↓
Clasificación por duplicados, prioridad y reproducibilidad
↓
Creación de pruebas de reproducibilidad
↓
Búsqueda de posibles soluciones
↓
Implementación de la solución elegida
↓
Un agente de revisión independiente busca contraejemplos
↓
Verificación de pruebas, compilación y seguridad
↓
Borrador de PR e informe de resultados
Las responsabilidades de cada componente son las siguientes.
| Componente | Responsabilidad |
|---|---|
Trigger o /schedule
|
Determinar el momento de iniciar una nueva tarea |
/goal |
Definir qué se considera completado en esta ejecución |
| Skill | Estandarización de los procedimientos de reproducción, implementación, verificación y presentación de informes |
| Flujo de trabajo dinámico | Ejecución en paralelo de múltiples subagentes y ramificación condicional |
| Modo automático | Ejecución de llamadas a herramientas permitidas sin espera de autorización |
| Política de permisos | Establecer el alcance de lo prohibido, lo autorizado y lo permitido automáticamente |
Flujo de trabajo dinámico y árbol de trabajo
El flujo de trabajo dinámico es una estructura en la que el tiempo de ejecución ejecuta un script de orquestación en JavaScript escrito por Claude. En una llamada a un subagente normal, Claude selecciona el siguiente agente en cada turno, pero en el flujo de trabajo, los bucles, el procesamiento en paralelo, las ramificaciones y el almacenamiento de resultados intermedios se trasladan al script.
Script de flujo de trabajo
├─ Agente A: Análisis de requisitos
├─ Agente B: Diseño de pruebas
├─ Agente C: Búsqueda de opciones de implementación
├─ Agente D: Revisión de seguridad
└─ Juez: Comparación basada en pruebas
Dado que los resultados intermedios se guardan en variables del script y no en el contexto de la conversación principal, es posible organizar tareas a gran escala de forma más reproducible. La documentación actual especifica un límite de tiempo de ejecución de un máximo de 16 agentes simultáneos y 1.000 agentes por ejecución, aunque estas restricciones pueden cambiar durante la fase de vista previa del producto.
Si es necesario probar varias opciones de implementación al mismo tiempo, se puede separar el espacio de trabajo mediante un «Git Worktree».
repo/
worktree-solution-a/
worktree-solution-b/
worktree-solution-c/
Si cada agente trabaja en una rama y un directorio independientes, se pueden reducir los problemas derivados de la sobrescritura simultánea de los mismos archivos. El agente evaluador debe comparar las opciones basándose en el cumplimiento de los requisitos, los resultados de las pruebas, el riesgo de regresión, el alcance de los cambios, la complejidad, el rendimiento, la seguridad y la coherencia con la arquitectura existente.
No siempre es mejor contar con más agentes
Si solo se aumenta el número de agentes en tareas que no admiten paralelismo, se incrementan los costes y los retrasos. Además, si varios agentes comparten la misma suposición errónea, los errores pueden propagarse.
Los casos en los que un flujo de trabajo dinámico resulta adecuado son los siguientes:
- Migraciones en las que se aplica la misma transformación a cientos de archivos
- Auditorías de seguridad y calidad de todo el código fuente
- Comparación de planes desde múltiples perspectivas independientes
- Investigaciones en las que es necesario dividir el procesamiento de muchos elementos y realizar verificaciones cruzadas
- Tareas en las que resulta difícil incluir todos los resultados intermedios en el contexto de un solo agente
Para la corrección de pequeños errores, la refactorización de un solo archivo o la incorporación de pruebas sencillas, es mejor utilizar un bucle por turnos (Turn-based Loop) normal o /goal.
7. Sistema para mantener la calidad del código en el bucle
La calidad de los resultados del bucle depende en gran medida no solo del modelo en sí, sino también del sistema de verificación que lo rodea.
7.1 Ordenar el código base
Claude sigue fielmente los patrones del código existente. Si hay API obsoletas, implementaciones duplicadas, estructuras de pruebas poco claras, módulos gigantescos o reglas de gestión de excepciones incoherentes, Loop puede replicar rápidamente esos problemas.
Los requisitos básicos son los siguientes:
- Formateador y lint
- Límites claros entre directorios y módulos
- Pruebas unitarias, de integración y de extremo a extremo (E2E) fiables
- Distinción entre las API en uso y las API obsoletas
- Normas de desarrollo específicas para cada proyecto
- Entornos de compilación y desarrollo reproducibles
7.2 Crear una «Definición de «hecho»» por tipo de cambio
| Tipo de cambio | Verificación mínima |
|---|---|
| API | Pruebas de contrato, compatibilidad con versiones anteriores, actualización de esquemas y ejemplos de documentación |
| Frontend | Manipulación real del navegador, errores de consola, accesibilidad, pantalla responsiva |
| Base de datos | Migración (adelantada o revertida), ámbito de bloqueo, plan de ejecución |
| Dependencias | Compilación, pruebas de regresión clave, verificación de licencias y seguridad |
| Infraestructura | Diferencias entre planes, privilegios mínimos, reversión, comprobación de exposición de información confidencial |
Es preferible fijar estos criterios en Skills, Hooks, scripts y reglas de CI, en lugar de repetirlos extensamente en el Prompt cada vez.
7.3 Proporcionar documentación actualizada y versiones precisas
Un bucle puede repetir varias veces suposiciones erróneas. Debe facilitarse el acceso a la versión exacta utilizada en el proyecto, la documentación oficial, la documentación interna de arquitectura, las especificaciones de la API, la guía de migración y los ejemplos aprobados.
7.4 Separar el agente de implementación del agente de revisión
El agente de implementación ya se ve influido por el diseño y los razonamientos ya seleccionados. El agente de revisión, en un nuevo contexto, puede plantear las siguientes preguntas de forma más independiente:
- ¿Se han suavizado las pruebas para que se superen?
- ¿Se han modificado archivos que quedan fuera del alcance?
- ¿Se han violado los límites de seguridad?
- ¿Se han omitido las pruebas de rutas de fallo y de valores límite?
- ¿Se ha producido alguna regresión en las funcionalidades existentes?
Es más eficaz redactar la indicación de revisión (Review Prompt) de la siguiente manera: «Busca contraejemplos partiendo de la hipótesis de que la implementación es errónea y adjunta pruebas de reproducción para cada observación», en lugar de «Resume los aspectos positivos».
7.5 Vincular los fallos individuales a la mejora del sistema
Si se repite el mismo error, no basta con corregir solo ese resultado concreto. Para evitar que ese tipo de fallo vuelva a producirse, hay que modificar uno de los siguientes aspectos:
- Añadir pruebas de regresión
- Reforzar los procedimientos de verificación de habilidades
- Añadir reglas a
CLAUDE.md - Añadir reglas de hook o lint
- Añadir reglas de denegación de permisos
- Reforzar las condiciones de finalización del objetivo
- Complementar la lista de comprobación de revisión
Una buena ingeniería de bucles no consiste en corregir un único fallo, sino en crear un sistema en el que sea difícil que vuelva a producirse ese tipo de fallo.