Agents with Vercel AI SDK 7: ToolLoopAgent and HarnessAgent
Veinte líneas. Un agente con tools, loop y condición de parada, sin escribir el ciclo a mano. Eso es lo que te da ToolLoopAgent del AI SDK, y es la razón por la que hoy es mi punto de partida cuando el agente vive en TypeScript y habla con el navegador.
Pero la novedad interesante de la versión 7 no es esa. Es HarnessAgent: la idea de que puedes correr un harness ya existente (Claude Code, Codex, Pi) desde tu app, como si fuera una pieza más.
Qué es el AI SDK (y por qué su sección de agentes importa)
El AI SDK es la librería de Vercel para hablar con modelos: texto, tools, structured outputs, embeddings, streaming. Y trae una definición de agente que ya usé en otra pieza: "los agentes son LLMs que usan tools en un loop". Sus tres componentes: el modelo, las tools y el loop (que maneja contexto y condiciones de parada). - Source: Agents: overview - Vercel AI SDK
ToolLoopAgent: el loop, resuelto
// Fuente: Agents: overview — Vercel AI SDK (adaptado)
import { ToolLoopAgent, tool } from 'ai';
import { z } from 'zod';
const ticketsAgent = new ToolLoopAgent({
model: 'anthropic/claude-sonnet', // o cualquiera: es agnóstico de proveedor
tools: {
listTickets: tool({
description: 'Lista los tickets abiertos del tablero',
inputSchema: z.object({ status: z.string().optional() }),
execute: async ({ status }) => db.listTickets(status),
}),
resolveTicket: tool({
description: 'Marca un ticket como resuelto con un comentario',
inputSchema: z.object({ id: z.string(), comment: z.string() }),
execute: async ({ id, comment }) => db.resolve(id, comment),
}),
},
});
const result = await ticketsAgent.generate({ prompt: 'Resuelve los tickets urgentes' });
console.log(result.steps); // cada paso, con su tool call
El ToolLoopAgent maneja el loop, la gestión de contexto y las condiciones de parada; tú declaras las tools y el objetivo. La documentación lo recomienda como el enfoque por defecto, y sugiere generateText/streamText cuando necesitas control explícito de cada paso. - Source: Agents: overview - Vercel AI SDK
Lo que trae de fábrica
| Necesidad | Qué ofrece el AI SDK |
|---|---|
| Estado fuera del prompt | runtimeContext (estado compartido del agente) y toolsContext (valores por tool, como API keys) |
| Control del loop | stopWhen y prepareStep para decidir cuándo para y qué contexto entra en cada paso |
| Permisos | Aprobaciones de tools basadas en políticas y aprobaciones por tool |
| Delegación | Subagentes con su propio contexto |
| Protocolo | Tools vía MCP y apps MCP |
| Verificación | Evaluación, telemetría y DevTools |
| Entrega al usuario | Streaming y primitivas de UI, más una Terminal UI para probar el agente localmente |
| Portabilidad | Agnóstico de proveedor: el mismo agente cambia de modelo con una línea |
Fuente: Agents: overview - Vercel AI SDK
HarnessAgent: la idea nueva
HarnessAgent responde a otra pregunta: ¿y si no quiero construir el loop, sino usar uno que ya existe?
"Usa
HarnessAgentcuando quieras correr un harness preconfigurado y establecido, como Claude Code, Codex o Pi, en lugar de construir el loop tú mismo alrededor de un modelo. Los harnesses son una abstracción separada de los proveedores y los modelos." - Source: Agents: overview - Vercel AI SDK
Esto confirma lo que venimos diciendo en la serie: el harness es la unidad relevante, no el modelo. Y ahora puedes integrar un harness de terceros en tu app y recibir su salida con las mismas primitivas de streaming y UI que usarías con tu propio agente.
Casos concretos: dar a tu producto un agente de código que corre en un sandbox, o envolver un harness especializado sin reescribir su loop.
Cuándo usarlo (y cuándo ADK)
| Te conviene el AI SDK si… | Te conviene ADK si… |
|---|---|
| Tu app es TypeScript/Next/Angular | Tu equipo es Python/Java/Go |
| El agente habla con el usuario (streaming, UI) | El agente es un backend con workflows y despliegue gestionado |
| Quieres ser agnóstico de proveedor | Quieres el ecosistema Google y Graph Workflows |
Quieres involucrar harnesses existentes (HarnessAgent) | Quieres evaluación y trazado nativos del framework |
No es una pelea: he visto equipos usar los dos. El AI SDK donde vive el producto; ADK donde vive la orquestación pesada.
5 pasos para probarlo hoy
- Define 2 tools de tu dominio (una de lectura, una de escritura) con schemas claros.
- Arma el
ToolLoopAgenty córrelo con la Terminal UI para ver los pasos. - Pon un
stopWhen(máximo de pasos) antes de la primera corrida real. - Activa una aprobación para la tool de escritura y mira el flujo de confirmación.
- Guarda la telemetría de la corrida y escribe 5 evals con esos casos.
El desarrollo completo está en la guía Agentes: de cero a producción.
¿Tu agente vive en el backend o ya dentro de tu app web? Si es lo segundo, este SDK te ahorra el puente completo.