DEV Community

Cover image for Deja de Dar Prompts a tu Agente de Codificación. Crea el Bucle que los Genera en su Lugar
Roobia
Roobia

Posted on • Originally published at apidog.com

Deja de Dar Prompts a tu Agente de Codificación. Crea el Bucle que los Genera en su Lugar

Ya no deberías limitarte a escribir prompts para agentes de codificación. Deberías diseñar bucles que hagan que esos agentes se autocorrijan. Los equipos que sacan valor real de los agentes de codificación de IA no tratan al agente como un chat. Lo tratan como un trabajador dentro de un flujo controlado por pruebas, contratos y señales deterministas.

Prueba Apidog hoy

En resumen

Un bucle de agente de codificación ejecuta al agente repetidamente:

  1. genera un cambio;
  2. ejecuta el código;
  3. verifica el resultado contra una señal estricta;
  4. devuelve el fallo al agente;
  5. repite hasta que la verificación pasa o se alcanza un límite.

El agente no es la parte difícil. La puerta de verificación sí lo es.

Una puerta vaga como “revísalo, algo parece mal” produce deriva. Una puerta determinista —una prueba fallida, un contrato roto, una diferencia de esquema— produce convergencia.

Para trabajo de API y backend, tus pruebas automatizadas y verificaciones de contrato deben estar en el centro del flujo agéntico. Las pruebas de API no son una fase final: son el mecanismo que guía al agente.

De escribir prompts a diseñar bucles

El flujo manual típico es este:

  1. escribes un prompt;
  2. lees la respuesta;
  3. pruebas el código;
  4. encuentras un error;
  5. pegas el error en el chat;
  6. repites.

El problema: tú eres el bucle.

El agente puede generar código en segundos, pero queda bloqueado mientras tú cambias de contexto, ejecutas comandos y decides qué decirle después.

Diseñar un bucle invierte el control:

  1. el agente escribe código;
  2. un script ejecuta la verificación;
  3. si falla, el error vuelve automáticamente al agente;
  4. si pasa, el bucle termina;
  5. si agota intentos, escala a un humano.

El artículo de Anthropic sobre la construcción de agentes efectivos apunta en la misma dirección: el valor no viene de un único prompt perfecto, sino del entorno que conectas alrededor del modelo.

La pregunta cambia de:

¿Qué debo decirle al agente?

a:

¿Qué bucle haría que el agente reciba la señal correcta en cada iteración?

Qué es realmente un bucle de agente de codificación

Un bucle útil tiene cinco piezas.

1. Especificación de tarea

Debe definir qué significa “hecho”.

Mal:

Haz que el endpoint de pedidos funcione.
Enter fullscreen mode Exit fullscreen mode

Mejor:

Implementa POST /orders.

Debe:
- devolver 201 cuando el pedido se crea correctamente;
- validar el cuerpo contra el esquema OpenAPI;
- rechazar campos faltantes con 422;
- devolver un cuerpo que coincida con OrderResponse;
- no modificar la especificación OpenAPI.
Enter fullscreen mode Exit fullscreen mode

2. Agente

El modelo más sus herramientas:

  • leer archivos;
  • escribir archivos;
  • ejecutar comandos;
  • inspeccionar logs;
  • consultar documentación o endpoints.

Esta es la parte visible, pero no la más importante.

3. Acción

El agente realiza un cambio y el sistema lo ejecuta:

  • correr tests;
  • compilar;
  • levantar un servicio;
  • hacer una petición HTTP;
  • validar un esquema;
  • ejecutar una suite de contrato.

4. Puerta de verificación

Una comprobación determinista que devuelve éxito o fallo con una razón concreta.

Ejemplos:

  • pytest devuelve exit code distinto de cero;
  • el compilador falla;
  • una respuesta no coincide con el JSON Schema;
  • un endpoint devuelve 500 donde se esperaba 422;
  • la implementación no respeta OpenAPI.

5. Condición de terminación

El bucle debe detenerse cuando:

  • la puerta pasa;
  • se alcanza MAX_ITERATIONS;
  • se supera un presupuesto;
  • el error requiere intervención humana.

Sin salida, no tienes un flujo de trabajo: tienes un proceso descontrolado.

El patrón mínimo en pseudocódigo

task = load_spec("orders-endpoint.md")
last_result = None

for attempt in range(MAX_ITERATIONS):
    agent.run(task, feedback=last_result)

    result = run_verification()

    if result.passed:
        break

    last_result = result.failures
else:
    escalate_to_human(last_result)
Enter fullscreen mode Exit fullscreen mode

El patrón completo es simple:

  • el agente genera;
  • la puerta juzga;
  • el fallo se convierte en el siguiente prompt;
  • el bucle continúa hasta estar en verde o rendirse.

La técnica que algunas personas llaman “Ralph” es una versión de esto con un MAX_ITERATIONS alto y una especificación breve. Si ya leíste nuestro análisis sobre la arquitectura del arnés del agente, este es el arnés en su forma mínima.

Por qué el prompt único no escala

Un prompt único asume dos cosas:

  1. que el modelo acierta a la primera;
  2. que tú detectarás lo que hizo mal.

Ambas fallan en trabajo real.

Un modelo puede generar un endpoint que:

  • compila;
  • parece correcto;
  • devuelve una respuesta plausible;
  • pero falla en un caso límite;
  • o devuelve el código de estado incorrecto;
  • o rompe el contrato OpenAPI.

En un chat, quizá no lo notes hasta producción. El modelo puede decir “listo” sin tener una señal real de que está listo.

Un bucle evita aceptar la opinión del modelo sobre su propio trabajo.

La regla es:

El agente no decide si terminó. La puerta lo decide.

Si las pruebas están en rojo, la tarea no está terminada. El fallo se convierte en la siguiente entrada del agente.

Esto también mejora la productividad. En vez de observar un agente manualmente, puedes ejecutar varios bucles en paralelo, cada uno con su propia tarea y su propia puerta. Ese es el salto descrito en nuestro artículo sobre flujos de trabajo de agente dinámicos y paralelos: escalas añadiendo bucles, no escribiendo prompts más rápido.

La parte que todos subestiman: la puerta de verificación

La mayoría de los flujos agénticos fallidos no fallan porque el modelo sea débil. Fallan porque la señal de feedback es mala.

Compara estas dos respuestas al agente.

Mala señal:

Algo parece raro. Revisa la implementación.
Enter fullscreen mode Exit fullscreen mode

Buena señal:

Test failed: POST /orders without customer_id

Expected:
HTTP 422

Actual:
HTTP 500

Error:
ValidationError was not handled before creating the order.
Enter fullscreen mode Exit fullscreen mode

La segunda señal le dice al agente qué corregir. La primera lo obliga a adivinar.

Las puertas deterministas convergen. Las puertas difusas se desvían.

Qué hace buena a una puerta

Una buena puerta debe cumplir estas condiciones.

Es binaria y reproducible

Misma entrada, mismo resultado.

pass / fail
Enter fullscreen mode Exit fullscreen mode

No debe depender de una evaluación subjetiva del modelo.

Falla con una razón específica

Debe producir información accionable:

  • nombre de test;
  • diferencia esperado vs actual;
  • línea de error;
  • código de estado;
  • campo inválido;
  • endpoint afectado;
  • contrato incumplido.

El agente no puede editarla libremente

Si el agente puede modificar la prueba para hacerla pasar, la puerta no sirve.

Protege:

  • archivos de test;
  • especificaciones OpenAPI;
  • fixtures críticos;
  • contratos;
  • snapshots aprobados.

Es rápida

Una suite de 20 minutos no sirve como bucle interno.

Usa una puerta rápida para iterar y deja verificaciones más pesadas para CI o pre-merge.

Ya existe en tu stack

No necesitas inventar señales nuevas. Ya tienes muchas:

  • unit tests;
  • type checkers;
  • linters;
  • compiladores;
  • validadores JSON Schema;
  • pruebas de contrato;
  • pruebas de API;
  • suites de integración.

Si todavía no tienes esa capa clara, esta guía sobre qué son realmente las pruebas automatizadas es una buena base antes de conectarlas a un bucle.

Para APIs y backend, tu suite de pruebas es el bucle

Cuando un agente implementa un endpoint, la verdad no es su resumen final. La verdad es el comportamiento observable del endpoint.

Para una API, puedes verificar automáticamente:

  • códigos de estado;
  • cuerpo de respuesta;
  • validación de entrada;
  • autenticación;
  • autorización;
  • compatibilidad con OpenAPI;
  • campos requeridos;
  • tipos de datos;
  • errores esperados;
  • contratos entre servicios.

Eso significa que tu suite de pruebas de API ya tiene la forma correcta para actuar como puerta de verificación.

Bucle concreto para implementar un endpoint

Un flujo práctico para endpoints puede verse así:

  1. El agente lee la especificación de tarea y el archivo OpenAPI.
  2. El agente implementa o modifica el endpoint.
  3. El arnés levanta el servicio.
  4. La suite de API ejecuta casos positivos y negativos.
  5. La puerta valida estado HTTP, cuerpo, esquema y contrato.
  6. Los fallos vuelven al agente en formato estructurado.
  7. El agente corrige.
  8. El bucle repite hasta verde o hasta agotar intentos.
  9. Un humano revisa el diff final.

Ejemplo de feedback útil:

Contract failure: POST /orders

Case:
missing customer_id

Expected:
HTTP 422

Actual:
HTTP 201

Schema:
ErrorResponse

Actual body:
{
  "id": "ord_123",
  "total": 99.5
}

Action:
Reject requests without customer_id before creating the order.
Enter fullscreen mode Exit fullscreen mode

Otro ejemplo:

Schema mismatch: GET /orders/{id}

Field:
total

Expected:
number

Actual:
string

Actual value:
"42.50"
Enter fullscreen mode Exit fullscreen mode

La clave es que el feedback del paso 6 es generado por máquina, no por intuición.

Las pruebas de contrato y esquema-primero importan más en este patrón porque la especificación OpenAPI se convierte en la fuente de verdad compartida por el agente y por la puerta.

Diagrama de flujo de trabajo agéntico para API

Este es el rol de Apidog en un flujo agéntico: centralizar diseño de API, esquema, mock server y pruebas automatizadas en un solo espacio. Así, la especificación y la puerta permanecen alineadas.

Puedes apuntar el bucle a un escenario de prueba de Apidog, recibir aprobado/fallo con validación de esquema y usar el servidor simulado para sustituir dependencias que todavía no existen. Los equipos que trabajan con este patrón también pueden conectar herramientas del agente mediante el depurador de agentes de IA de Apidog, de forma que el agente inspeccione endpoints como lo haría un tester humano.

Si quieres construir la puerta visualmente en lugar de crear tu propio runner, puedes descargar Apidog.

Construye un bucle API autocorregible mínimo

No necesitas un framework complejo. Necesitas:

  • una especificación;
  • un comando de prueba;
  • un agente con acceso limitado;
  • un script que conecte todo.

Paso 1: escribe la especificación

Crea un archivo de tarea:

# Tarea: implementar POST /orders

Implementa el endpoint POST /orders según openapi.yaml.

Requisitos:
- devolver 201 cuando el pedido sea válido;
- devolver 422 si falta customer_id;
- devolver 422 si items está vacío;
- devolver ErrorResponse en errores de validación;
- devolver OrderResponse en éxito;
- no modificar openapi.yaml;
- no modificar tests/.
Enter fullscreen mode Exit fullscreen mode

Mantén la especificación concreta y verificable.

Paso 2: define la puerta como un comando

Cualquier comando sirve si:

  • devuelve 0 cuando pasa;
  • devuelve distinto de 0 cuando falla;
  • imprime errores útiles.

Ejemplo con Apidog CLI:

apidog run ./tests/orders-suite --reporter json > result.json
Enter fullscreen mode Exit fullscreen mode

Ejemplo con pytest:

pytest tests/api/test_orders.py --json-report --json-report-file=result.json
Enter fullscreen mode Exit fullscreen mode

Ejemplo con Newman:

newman run orders.postman_collection.json \
  --environment local.postman_environment.json \
  --reporters cli,json \
  --reporter-json-export result.json
Enter fullscreen mode Exit fullscreen mode

Paso 3: conecta el bucle

import subprocess
import json

MAX_ITERATIONS = 8

def run_agent(task, feedback=None):
    """
    Implementa esta función usando tu agente:
    Claude Code, Cursor, Codex, un agente propio, etc.
    """
    prompt = task

    if feedback:
        prompt += "\n\nFallos de la última ejecución:\n"
        prompt += feedback

    # Ejemplo conceptual:
    # agent.run(prompt)
    print("Running agent with prompt:")
    print(prompt)


def run_gate():
    return subprocess.run(
        [
            "apidog",
            "run",
            "./tests/orders-suite",
            "--reporter",
            "json"
        ],
        capture_output=True,
        text=True
    )


def parse_failures(stdout, stderr):
    if stdout:
        return stdout

    return stderr or "La puerta falló sin salida capturada."


task = """
Implementa POST /orders según openapi.yaml.

No modifiques:
- openapi.yaml
- tests/

La tarea termina cuando la suite orders-suite pasa completa.
"""

feedback = None

for attempt in range(MAX_ITERATIONS):
    print(f"Attempt {attempt + 1}/{MAX_ITERATIONS}")

    run_agent(task=task, feedback=feedback)

    gate = run_gate()

    if gate.returncode == 0:
        print(f"Verde en el intento {attempt + 1}")
        break

    feedback = parse_failures(gate.stdout, gate.stderr)

else:
    print("La suite sigue en rojo. Escalando a un humano.")
    print(feedback)
Enter fullscreen mode Exit fullscreen mode

Este script hace lo esencial:

  • ejecuta el agente;
  • corre la puerta;
  • captura el fallo;
  • lo reutiliza como feedback;
  • corta después de un número máximo de intentos.

Paso 4: protege la puerta

No permitas que el agente edite los archivos que definen la verdad.

Por ejemplo, en tu configuración de agente, excluye:

openapi.yaml
tests/
contracts/
fixtures/approved/
Enter fullscreen mode Exit fullscreen mode

O ejecuta una verificación adicional:

git diff --exit-code openapi.yaml tests/
Enter fullscreen mode Exit fullscreen mode

Si ese comando falla, el agente modificó la puerta.

Puedes integrarlo en el bucle:

def verify_gate_not_modified():
    return subprocess.run(
        ["git", "diff", "--exit-code", "openapi.yaml", "tests/"],
        capture_output=True,
        text=True
    )
Enter fullscreen mode Exit fullscreen mode

Paso 5: limita costo e iteraciones

Siempre define límites:

MAX_ITERATIONS = 8
MAX_SECONDS = 900
MAX_COST_USD = 5
Enter fullscreen mode Exit fullscreen mode

También registra cada intento:

runs/
  attempt-01/
    prompt.md
    result.json
    diff.patch
  attempt-02/
    prompt.md
    result.json
    diff.patch
Enter fullscreen mode Exit fullscreen mode

Esto permite auditar si el bucle converge o solo consume tokens. Si necesitas optimizar gasto, estas notas sobre cómo reducir los costos de tokens del agente aplican directamente.

Errores comunes al diseñar bucles

1. Dejar que el agente evalúe su propio trabajo

Mal:

¿Terminaste? Responde sí o no.
Enter fullscreen mode Exit fullscreen mode

Eso no es una puerta. Es una opinión.

Usa una verificación externa:

npm test
pytest
apidog run ./tests/orders-suite
go test ./...
mvn test
Enter fullscreen mode Exit fullscreen mode

2. Usar una puerta demasiado débil

Si solo tienes tres tests superficiales, el agente optimizará para esos tres tests.

La calidad del bucle está limitada por la calidad de la puerta.

Añade casos negativos:

  • campos faltantes;
  • tipos incorrectos;
  • autenticación ausente;
  • permisos insuficientes;
  • payloads límite;
  • respuestas no conformes al esquema.

3. No tener condición de terminación

Nunca ejecutes un bucle sin límite.

Mínimo:

MAX_ITERATIONS = 8
Enter fullscreen mode Exit fullscreen mode

Mejor:

MAX_ITERATIONS = 8
MAX_RUNTIME_SECONDS = 900
MAX_CHANGED_FILES = 20
Enter fullscreen mode Exit fullscreen mode

4. Usar puertas lentas

Una suite de integración de 15 minutos puede ser útil en CI, pero no en un bucle interno.

Divide las puertas:

Puerta rápida:
- tests del endpoint;
- validación de esquema;
- contrato local;
- mocks.

Puerta completa:
- integración end-to-end;
- dependencias reales;
- regresión amplia;
- CI pre-merge.
Enter fullscreen mode Exit fullscreen mode

5. Permitir especificaciones mutables

Si el agente cambia OpenAPI para que coincida con su implementación incorrecta, la prueba puede pasar por la razón equivocada.

Regla práctica:

La especificación es la constitución. El agente trabaja bajo ella, no sobre ella.

6. Darle una tarea gigante

Mal:

Construye todo el servicio de pedidos.
Enter fullscreen mode Exit fullscreen mode

Mejor:

Implementa POST /orders.
Luego implementa GET /orders/{id}.
Luego implementa PATCH /orders/{id}/status.
Enter fullscreen mode Exit fullscreen mode

Un endpoint por bucle suele converger mejor que una tarea masiva.

Estos patrones coinciden con lo que cubrimos en la conexión de herramientas en el flujo de trabajo agéntico, independientemente de si usas Claude Code, Cursor, Codex o un agente propio.

Checklist para tu primer bucle

Antes de ejecutarlo, verifica:

  • [ ] La tarea define claramente qué significa “hecho”.
  • [ ] Existe una puerta con salida binaria.
  • [ ] Los fallos son específicos y legibles.
  • [ ] El agente no puede editar tests ni especificaciones.
  • [ ] Hay límite de iteraciones.
  • [ ] Hay logs por intento.
  • [ ] El bucle escala a humano si no converge.
  • [ ] La puerta es lo bastante rápida para iterar.
  • [ ] La especificación OpenAPI es la fuente de verdad.
  • [ ] Los casos negativos están cubiertos.

Hacia dónde va esto

“Deja de escribir prompts, empieza a diseñar bucles” resume una tendencia más amplia.

La habilidad valiosa no es solo el prompt-craft. Es el loop-craft:

  • escribir especificaciones claras;
  • construir puertas deterministas;
  • proteger contratos;
  • definir límites;
  • decidir qué puede tocar el agente;
  • diseñar feedback accionable;
  • conectar el bucle con CI y pruebas.

Eso está más cerca del diseño de sistemas que de la ingeniería de prompts.

También cambia el valor de las pruebas. Antes eran una red de seguridad. En un flujo agéntico, son el mecanismo de dirección.

Una buena cobertura de pruebas automatizadas convierte a un generador rápido pero poco fiable en un sistema que converge hacia un resultado correcto. Sin esa capa, solo generas código no verificado más rápido.

Conclusión

No mejores solo escribiendo mejores prompts para tu agente de codificación. Mejora diseñando el bucle que lo guía.

El agente genera. La puerta decide.

Para APIs, ya tienes los componentes principales:

  • especificación OpenAPI;
  • pruebas de API;
  • validación de esquema;
  • pruebas de contrato;
  • CI;
  • mocks;
  • casos negativos.

Empieza pequeño:

  1. escribe una especificación concisa;
  2. apunta un bucle a una suite rápida de pruebas de API;
  3. protege la puerta;
  4. limita iteraciones;
  5. devuelve fallos estructurados al agente;
  6. revisa el diff final antes de fusionar.

Si quieres una puerta visual, consciente del esquema y compartible con el equipo, Apidog reúne diseño, mock server y pruebas automatizadas en un solo espacio de trabajo. Puedes descargarlo y convertir tus pruebas en la señal que dirige a tus agentes.

Top comments (0)