Consulta los ejemplos de administración desde la aplicación y mediante webhooks en el OpenAI Cookbook.
Cómo funciona
Managed Agents Runtime Services (M.A.R.S.) de DigitalOcean inicia una microVM de Firecracker con la imagen codex-agentapi. La imagen incluye Codex e inicia el ejecutor, que establece una conexión saliente con la API de agentes.
Elige el aprovisionamiento administrado mediante webhooks para iniciar o reanudar sandboxes a partir de eventos de OpenAI, o el aprovisionamiento administrado desde la aplicación para controlarlos desde tu aplicación. Para un inicio rápido interactivo, usa el flujo opcional con la CLI de DigitalOcean. Consulta Ciclo de vida del sandbox para conocer el comportamiento de conexión y recuperación.
M.A.R.S. está en versión preliminar privada, disponible solo por invitación. Solicita acceso a través del anuncio de la versión preliminar privada de DigitalOcean.
Antes de comenzar
Necesitas una cuenta de DigitalOcean con sandboxes habilitados y acceso a codex-agentapi, y un proyecto de OpenAI con acceso a la API de agentes.
Usa OPENAI_API_KEY para tu aplicación o CLI. Configura OPENAI_EXECUTOR_API_KEY con una clave de entorno. Pasa únicamente la clave de entorno al sandbox como CODEX_API_KEY.
Para controladores de webhooks o aplicaciones de Python, configura DIGITALOCEAN_TOKEN e instala el SDK beta de PyDo con soporte para operaciones asíncronas (pydo[aio]). Usa el SDK de OpenAI para las solicitudes a la API de agentes. Solo necesitas instalar la CLI para el flujo que la utiliza.
Administración mediante webhooks
- Crea un agente almacenado y guarda su ID como
OPENAI_AGENT_ID. Despliega un controlador de webhooks HTTPS en DigitalOcean App Platform con este ID,OPENAI_API_KEYpara las lecturas de sesiones,DIGITALOCEAN_TOKENyOPENAI_EXECUTOR_API_KEY. - Registra su punto de acceso
/webhooken tu proyecto de OpenAI. Habilitaagent.session.action_requiredyagent.session.failed, luego almacena el secreto de firma comoOPENAI_WEBHOOK_SECRETy vuelve a desplegar el controlador. - Sigue los pasos de la sesión con el mismo
OPENAI_AGENT_IDy con/workspacecomo directorio de trabajo. Abre el flujo de eventos y envía la entrada. Cuando OpenAI solicita unaenvironment_connection, el controlador verifica la firma, recupera la sesión actual y comprueba su ID de agente y las acciones requeridas. Buscamars-{session_id}en DigitalOcean y reanuda un sandbox pausado o crea uno si no hay ninguno activo. - Al recibir
agent.session.failed, recupera la sesión de nuevo y elimina su sandbox solo si el estado actual de la sesión sigue siendofailed.
La imagen conecta el ejecutor al entorno de la sesión. Tu aplicación envía la entrada y transmite los resultados a través de la API de agentes; el controlador se encarga del aprovisionamiento y la reconexión. Ejecuta el aprovisionamiento de forma secuencial para cada sesión a fin de manejar las entregas duplicadas y concurrentes. Consulta la guía del ciclo de vida administrado mediante webhooks para conocer los requisitos del controlador.
Pruébalo con la CLI de DigitalOcean
La CLI crea ambos recursos y te permite interactuar con el agente desde tu terminal. Aprovisiona el sandbox directamente, sin un controlador de webhooks.
Instala la versión beta de doctl que incluye harness-runtime y luego autentícate:
doctl auth init
Guarda este archivo de manifiesto como agents.yaml:
name: openai-codex-session
agent: codex-agentapi
config:
agent:
model: gpt-5.6-sol
instructions: Work from the files in /workspace.
environment:
type: self_hosted
workspace_directory: /workspace
egress:
- api.openai.com
- codex-cloud-environments.chatgpt.com
env:
CODEX_ENVIRONMENT_ID: ${ENV_ID}
secrets:
CODEX_API_KEY: ${OPENAI_EXECUTOR_API_KEY}
El bloque config es la solicitud de creación de sesión de OpenAI. La CLI autentica esa solicitud con OPENAI_API_KEY, completa ${ENV_ID} a partir de la respuesta y pasa únicamente la clave de entorno al sandbox. Mantén los archivos de manifiesto resueltos fuera de los registros y del control de versiones. Agrega a egress todos los destinos que necesiten tus herramientas.
Crea la sesión y el sandbox:
doctl harness-runtime create --spec agents.yaml
De forma predeterminada, el comando espera hasta 300 segundos a que los recursos estén listos. Guarda el ID de sesión de OpenAI y el ID de sesión de DigitalOcean que aparecen en los detalles de la sesión y luego conéctate:
doctl harness-runtime launch openai-codex-session
Pídele al agente que escriba hello en /workspace/hello.txt y que lea lo que escribió. Presiona Ctrl+D para desconectarte sin eliminar la sesión y ejecuta el mismo comando launch para volver a conectarte. Sigue los pasos de Limpieza cuando termines.
Administración desde la aplicación
Usa esta opción cuando tu aplicación se encargue de la creación de sesiones y del aprovisionamiento de sandboxes. Primero crea la sesión de OpenAI:
import OpenAI from "openai";
const client = new OpenAI();
const session = await client.beta.agents.sessions.create({
agent: {
model: "gpt-6-astra",
instructions:
"You are a helpful coding assistant. Write clean code and verify that it works.",
},
environment: {
type: "self_hosted",
workspace_directory: "/workspace",
},
});
console.log(session);Guarda session.id y el ID del entorno como se describe en Conectar un sandbox. Guarda este archivo de manifiesto exclusivo del sandbox como sandbox.yaml; la configuración del agente ya se envió a OpenAI:
agent: codex-agentapi
egress:
- api.openai.com
- codex-cloud-environments.chatgpt.com
env:
CODEX_ENVIRONMENT_ID: ${ENV_ID}
secrets:
CODEX_API_KEY: ${OPENAI_EXECUTOR_API_KEY}
- Crea un
pydo.aio.ClientconDIGITALOCEAN_TOKENy llama aclient.agents.create_session. Asigna aparams.openai_session_idel ID de sesión de OpenAI, abody.manifestel contenido desandbox.yamly abody.variablesun mapeo deENV_IDyOPENAI_EXECUTOR_API_KEYa sus respectivos valores. Guarda elsession_idde DigitalOcean que se devuelve. - Abre el flujo de eventos y envía la entrada, pidiéndole al agente que escriba y lea
/workspace/hello.txt. La entrada espera a que se conecte el ejecutor. Confirma el evento de conexión y que se haya completado un turno, y revisa la salida del agente para detectar fallas de las herramientas. - Recupera el archivo con
workspace_download, usando la ruta relativahello.txt. Conserva ambos recursos para los turnos posteriores o realiza la limpieza.
Establece tiempos de espera limitados para la configuración y la ejecución, y maneja las fallas de conexión en tu aplicación. No asocies un manejador de webhooks de aprovisionamiento a las sesiones que tu aplicación o CLI administra directamente.
Limpieza
Guarda los archivos que necesites, luego elimina la sesión de OpenAI y destruye el sandbox de DigitalOcean. La eliminación de la sesión no emite un webhook, así que realiza ambas operaciones e informa las fallas de limpieza.
Con PyDo, llama a client.agents.destroy_session con el ID de sesión de DigitalOcean. Con la CLI, pasa ese ID o el nombre del sandbox:
doctl harness-runtime remove openai-codex-session
Elimina el registro del webhook de OpenAI antes de eliminar un controlador de webhooks.
Referencias
- Consulta la configuración del sandbox de DigitalOcean
- Consulta SDK de Python de DigitalOcean
- Consulta la versión beta de la CLI de DigitalOcean