El Harness de Microsoft Agent Framework convierte un IChatClient en un agente autónomo
La capa de runtime reutiliza el pipeline, los proveedores de contexto y los middlewares del framework para sostener trabajo de varios pasos sin escribir el bucle a mano.

Cuando un agente basado en LLM tiene que resolver algo que no cabe en un solo prompt, el desarrollador acaba escribiendo el mismo bucle a mano: invocar, recoger las llamadas a herramientas, decidir si ya terminó, repetir. El Agent Harness de Microsoft Agent Framework existe para no reescribir esa pieza cada vez. Es una capa de runtime que toma un IChatClient y lo convierte en un agente capaz de sostener trabajo de varios pasos —investigación, código, análisis de datos— reutilizando los componentes que ya están en el framework: chat client, pipeline de chat, proveedores de contexto y middlewares, en lugar de montar un runtime paralelo.
El objeto resultante sigue siendo un AIAgent normal, solo que con capacidades extra activadas por configuración. El método de extensión AsHarnessAgent sobre el chat client es todo lo que hace falta para el caso mínimo. A partir de ahí, HarnessAgentOptions separa dos niveles de instrucciones: las que gobiernan cómo se comporta el agente y las que describen su tarea concreta. Las primeras se anteponen siempre a las segundas, así que conviene tratarlas como capas.
El bucle acotado
La pieza con más peso en la práctica es el control de iteraciones. El Harness no repite indefinidamente: necesita un evaluador de finalización y un tope duro. En el ejemplo que acompaña a la documentación, un CompletionMarkerLoopEvaluator busca en la última respuesta del modelo un marcador exacto y el bucle sigue mientras no aparezca, con LoopAgentOptions.MaxIterations como límite que corta aunque el marcador no llegue nunca. Si se declaran varios evaluadores, se ejecutan en orden y el bucle solo para cuando todos coinciden en no continuar. Por dentro, configurar esto aplica un LoopAgent como decorador más externo del agente, el mismo que existe de forma suelta.
Hay un detalle que conviene conocer antes de llevarlo a producción: si una iteración devuelve una solicitud de aprobación de herramienta pendiente, el bucle se detiene antes de evaluar la condición de finalización. La aprobación escapa del bucle en vez de quedar enterrada bajo otra vuelta automática. Microsoft recomienda además acotar siempre los bucles autónomos, porque un evaluador puede fallar o el modelo puede atascarse.
El caso concreto
El ejemplo publicado es TopicResearchAgent, una aplicación de consola en C#: se le pasa un tema, por ejemplo la arquitectura de Kafka, y el agente lo descompone en preguntas, lanza varias búsquedas web desde ángulos distintos —fundamentos, funcionamiento interno, alternativas, compromisos— con Tavily Search como herramienta, y compila un informe técnico cuando considera que tiene material suficiente. Ni el número de búsquedas ni su orden los fija el desarrollador.
Lo relevante no es el agente de investigación en sí, sino el patrón: orquestación de bucles con condición de parada y aprobaciones de herramientas dentro del framework, sin código propio para sostenerlas. Para quien ya esté montando agentes con este SDK, es una capa que evita mantener esa lógica a mano. Lo que no aparece en el material publicado son cifras de rendimiento ni comparaciones contra implementaciones caseras del mismo bucle.

