Skip to main content
Usa @phaseo/agent-sdk cuando tu aplicación necesite algo más que generar texto en una sola llamada:
  • bucles de herramientas de varios pasos
  • herramientas del entorno de ejecución local
  • ejecuciones reanudables a partir del estado devuelto por el SDK
  • pausas explícitas para aprobación humana
  • salidas finales tipadas
  • turnos de modelo a través del gateway mediante el SDK de TypeScript existente
El paquete es un SDK que instalas, no una plataforma de agentes alojada. Tú aportas la aplicación, el modelo de despliegue y la estrategia de persistencia que quieras usar con el estado devuelto por cada ejecución.

Modelo de estado

El Agent SDK no guarda las ejecuciones en ningún servicio alojado por Phaseo.
  • run() devuelve el estado completo necesario para continuar más adelante.
  • Si tu aplicación necesita reanudar una ejecución entre solicitudes o reinicios del proceso, guarda el estado devuelto en tu propio almacenamiento.
  • continueRun() acepta directamente el estado anterior de la ejecución.
Phaseo no guarda nada fuera de tu aplicación.

Instalación

Qué incluye el SDK

  • createAgent()
  • defineTool()
  • createGatewayAgentClient()
  • continueRun() para continuar desde un estado de ejecución devuelto anteriormente
  • stream() y continueStream() para obtener resultados progresivos que se pueden volver a reproducir
  • funciones auxiliares para condiciones de parada, como stepCountIs(), maxCost() y hasToolCall()

Primer agente

Modelo mental

El bucle de ejecución hace cuatro cosas:
  1. envía el estado actual de los mensajes al cliente del modelo
  2. ejecuta las llamadas a herramientas locales devueltas
  3. añade los resultados de las herramientas al siguiente turno
  4. devuelve el estado actualizado de la ejecución tras completar cada paso
Así, tu aplicación obtiene un bucle reanudable sin depender de un producto de orquestación alojado.

Elementos básicos

createAgent()

Usa createAgent() para definir:
  • un id estable
  • instrucciones
  • un modelo o preset
  • una lista breve de herramientas
  • análisis opcional de la salida
  • reglas opcionales de revisión humana
  • controles opcionales para reintentos y ejecución de herramientas
Mantén acotado el primer agente. Normalmente basta con un flujo de trabajo y una o dos herramientas.

defineTool()

Define herramientas del entorno de ejecución local con:
  • id
  • description
  • parameters JSON opcionales
  • timeoutMs opcional
  • validadores de ejecución inputSchema y outputSchema
  • execute(), execute: false o callbacks con intervención humana
  • requireApproval, onError, nextTurnParams y eventos de progreso
Si se agota el tiempo, el entorno de ejecución aborta context.signal, marca la ejecución como failed y vuelve a lanzar el error de tiempo de espera. Los esquemas pueden ser una función o cualquier objeto que exponga parse() o safeParse(). Los argumentos no válidos del modelo y los resultados no válidos de las herramientas fallan antes de cruzar el límite de la herramienta.

Aprobación, HITL y herramientas manuales

Controla por llamada las herramientas que producen efectos secundarios:
La ejecución se pausa con run.pause.pendingToolCalls. Reanúdala con el ID exacto de la llamada para no confundir llamadas concurrentes:
Configura execute: false para el trabajo que realiza tu aplicación y proporciona el resultado mediante toolOutputs. Para una herramienta interactiva, devuelve null desde onToolCalled; después de continuar, onResponseReceived puede validar o transformar la respuesta humana recibida.

Herramientas que generan progreso

Un generador asíncrono puede publicar resultados preliminares y devolver un resultado final:
El progreso aparece como eventos tool.preliminary_result y en preliminaryResults del paso.

Resultados en streaming

stream() inicia la misma máquina de estados con un cliente de modelo con streaming. Sus consumidores se pueden reproducir, por lo que la interfaz, la telemetría y el código de persistencia pueden leerlos a la vez:
Usa getReasoningStream(), getItemsStream(), getToolStream() o getFullStream() para acceder a flujos más específicos. cancel() cancela la ejecución.

Representar elementos de ejecución tipados

getItemsStream() devuelve AgentItem<TOutput>, una unión discriminada que se puede gestionar de forma segura con switch:
El mismo contrato de elementos ordenados está disponible en completed.items después de run() o stream(). La salida del proveedor se normaliza en elementos de mensaje, razonamiento, llamada a herramienta, resultado de herramienta, error y salida final. Los campos específicos del proveedor siguen disponibles mediante rawProviderItem en los elementos normalizados.

Condiciones de parada y turnos dinámicos

Las condiciones de parada se combinan en una matriz. La primera que se cumpla registra el motivo y devuelve una ejecución stopped:
Las herramientas pueden establecer el contexto de la aplicación con context.setContext() y sobrescribir los parámetros del turno siguiente mediante nextTurnParams.

createGatewayAgentClient()

Usa el adaptador conectado al gateway cuando los turnos del modelo deban ejecutarse a través de Phaseo Gateway. Puede incluir controles nativos del gateway, como:
  • responseFormat
  • plugins
  • gatewayTools
  • toolChoice
  • webSearchOptions
  • providerOptions
  • promptCacheKey
  • includeMeta
Así, la aplicación puede mantener el enrutamiento, la búsqueda, las salidas estructuradas y los valores predeterminados de los plugins junto al cliente del modelo, sin reconstruir los cuerpos de las solicitudes en cada ejecución.

Persistencia gestionada por la aplicación

Si tu aplicación necesita reanudar ejecuciones, guarda directamente el AgentRunResult devuelto o proporciona un acceso state con métodos asíncronos load(runId) y save(result). Así, una ejecución reanudada puede usar runId sin pasar el registro serializado por cada capa. El SDK no incluye adaptadores de persistencia ni un backend de estado alojado, por decisión de diseño. Por tanto, puedes:
  • mantener las ejecuciones de una sola llamada en el mismo proceso
  • serializar las ejecuciones pausadas o incompletas en tus propios registros de aplicación
  • volver a cargar el estado guardado y pasarlo a continueRun() más adelante

Revisión humana y continuación

Usa humanReview cuando una ejecución deba guardar un punto de control y esperar la aprobación:
Continúa con una indicación humana explícita:

Salidas tipadas

Usa parseOutput si tu aplicación necesita un valor final tipado:
Para controlar mejor el comportamiento del modelo, combínalo con las salidas estructuradas del adaptador del gateway:

Controles del runtime

Reintentos del modelo

Usa modelRetry para volver a intentar errores transitorios del modelo antes de guardar la ejecución como failed:
maxRetries cuenta los intentos adicionales posteriores a la primera solicitud del modelo. El registro persistido del paso guarda el total final de reintentos en modelAttempts.

Herramientas locales concurrentes

Si un turno del modelo puede llamar con seguridad a varias herramientas independientes, configura toolExecution.toolConcurrency:
El runtime conserva el orden de los mensajes con resultados de herramientas.

Enrutamiento basado en presets

Usa preset si quieres gestionar los valores predeterminados de enrutamiento, prompts o parámetros en el panel, en lugar de codificarlos en la aplicación:

Eventos del ciclo de vida

Usa onEvent si tu aplicación necesita hooks del ciclo de vida para registros, telemetría o flujos de trabajo internos. Los eventos actuales incluyen:
  • run.started
  • run.resumed
  • step.started
  • step.completed
  • step.failed
  • step.cancelled
  • model.requested
  • model.completed
  • model.failed
  • tool.started
  • tool.completed
  • tool.failed
  • checkpoint.saved
  • run.waiting_for_human
  • run.cancelled
  • run.completed
  • run.failed
Si un paso se completa correctamente, el runtime emite step.completed después de guardar el paso con su punto de control.

Gestión de errores

Los errores del gateway se vuelven a lanzar como AgentGatewayError:
Si el error procede del gateway, las ejecuciones y los pasos fallidos también guardan errorDetails.

Ejemplos incluidos

El paquete incluye actualmente estos ejemplos:
  • examples/research-brief-agent.ts
  • examples/support-triage-agent.ts
  • examples/coding-review-agent.ts
  • examples/parallel-tool-agent.ts

Alcance actual

El SDK se centra deliberadamente en los componentes básicos para crear aplicaciones:
  • persistencia local o gestionada por la aplicación para los puntos de control
  • turnos de modelo a través del gateway
  • herramientas locales
  • bucles de agente reanudables
  • uso de tokens, coste, advertencias, motivos de finalización y resultados de herramientas normalizados por paso
No pretende ser una plataforma de orquestación alojada ni incluir un único backend remoto de persistencia impuesto.

Guías relacionadas

Última modificación el 2 de octubre de 2026