Consultez les exemples de gestion par l’application et par webhook dans l’OpenAI Cookbook.
Fonctionnement
Le service Managed Agents Runtime Services (M.A.R.S.) de DigitalOcean démarre une microVM Firecracker à partir de l’image codex-agentapi. Cette image inclut Codex et lance l’exécuteur, qui établit une connexion sortante vers l’API Agents.
Choisissez le provisionnement par webhook pour démarrer ou réactiver les bacs à sable en réponse aux événements OpenAI, ou le provisionnement par l’application pour les piloter depuis votre application. Pour un démarrage rapide et interactif, vous pouvez utiliser la CLI DigitalOcean. Consultez le cycle de vie d’un bac à sable pour comprendre comment la connexion s’établit et se rétablit après une interruption.
DigitalOcean Managed Agents est disponible en préversion publique. Consultez la documentation de DigitalOcean pour savoir comment y accéder et le configurer.
Prérequis
Vous devez disposer d’un compte DigitalOcean sur lequel les bacs à sable sont activés et qui a accès à codex-agentapi, ainsi que d’un projet OpenAI ayant accès à l’API Agents.
Utilisez OPENAI_API_KEY pour votre application ou votre CLI. Attribuez à OPENAI_EXECUTOR_API_KEY la valeur d’une clé d’environnement. Transmettez uniquement la clé d’environnement au bac à sable via CODEX_API_KEY.
Pour les contrôleurs de webhook ou les applications Python, définissez DIGITALOCEAN_TOKEN et installez le SDK PyDo en version 0.41.0 ou ultérieure avec la prise en charge des appels asynchrones (pydo[aio]). Utilisez le SDK OpenAI pour les requêtes à l’API Agents. L’installation de la CLI est nécessaire uniquement si vous suivez la procédure en ligne de commande.
Gestion par webhook
- Créez un agent enregistré et enregistrez son identifiant dans
OPENAI_AGENT_ID. Déployez un contrôleur de webhook HTTPS sur DigitalOcean App Platform avec cet identifiant,OPENAI_API_KEYpour consulter les sessions,DIGITALOCEAN_TOKENetOPENAI_EXECUTOR_API_KEY. - Enregistrez son point de terminaison
/webhookdans votre projet OpenAI. Activez les événementsagent.session.action_requiredetagent.session.failed, puis enregistrez le secret de signature dansOPENAI_WEBHOOK_SECRETet redéployez le contrôleur. - Suivez les étapes d’exécution d’une session en utilisant le même
OPENAI_AGENT_IDet/workspacecomme répertoire de travail. Ouvrez le flux d’événements et envoyez vos instructions. Lorsqu’OpenAI demande une actionenvironment_connection, le contrôleur vérifie la signature, récupère la session en cours et contrôle l’identifiant de l’agent ainsi que les actions requises. Il recherchemars-{session_id}dans DigitalOcean, puis réactive le bac à sable en pause ou en crée un si aucun n’est actif. - À la réception de
agent.session.failed, récupérez à nouveau la session et supprimez son bac à sable uniquement si l’état de la session est toujoursfailed.
L’image connecte l’exécuteur à l’environnement de la session. Votre application envoie les instructions et reçoit les résultats en continu via l’API Agents. Le contrôleur se charge du provisionnement et de la reconnexion. Pour chaque session, exécutez les opérations de provisionnement l’une après l’autre afin de gérer les événements reçus plusieurs fois ou simultanément. Consultez les consignes de gestion du cycle de vie par webhook pour connaître les exigences applicables au contrôleur.
Faites un essai avec la CLI DigitalOcean
La CLI crée la session et le bac à sable et vous permet d’interagir avec l’agent depuis votre terminal. Elle provisionne le bac à sable directement, sans contrôleur de webhook.
Installez doctl en version 1.170.0 ou ultérieure pour disposer de harness-runtime, puis authentifiez-vous :
doctl auth init
Enregistrez ce manifeste sous le nom environment.yaml :
name: openai-codex-session
agent: codex-agentapi
config:
agent:
model: gpt-6.1-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}
Le bloc config contient la requête de création de session destinée à OpenAI. La CLI authentifie cette requête avec OPENAI_API_KEY, renseigne ${ENV_ID} à partir de la réponse et transmet uniquement la clé d’environnement au bac à sable. Une fois les variables remplacées par leurs valeurs, veillez à exclure les manifestes des journaux et du dépôt de code source. Ajoutez à egress toutes les destinations dont vos outils ont besoin.
Créez la session et le bac à sable :
doctl harness-runtime create --spec environment.yaml
Par défaut, la commande attend jusqu’à 300 secondes que les ressources soient prêtes. Enregistrez les identifiants de session OpenAI et DigitalOcean affichés dans les détails de la session, puis connectez-vous à celle-ci :
doctl harness-runtime launch openai-codex-session
Demandez à l’agent d’écrire hello dans /workspace/hello.txt, puis de relire le fichier. Appuyez sur Ctrl+D pour vous déconnecter sans supprimer la session. Exécutez la même commande launch pour vous reconnecter. Lorsque vous avez terminé, suivez les étapes de nettoyage.
Gestion par l’application
Utilisez cette méthode lorsque votre application se charge de créer les sessions et de provisionner les bacs à sable. Créez d’abord la session 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);Enregistrez session.id et l’identifiant de l’environnement comme indiqué dans la section Connexion d’un bac à sable. Enregistrez le manifeste suivant sous le nom sandbox.yaml. Il concerne uniquement le bac à sable, car la configuration de l’agent a déjà été envoyée à 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}
- Créez une instance de
pydo.aio.ClientavecDIGITALOCEAN_TOKENet appelezclient.agents.create_session. Affectez àparams.openai_session_idl’identifiant de la session OpenAI, àbody.manifestle contenu desandbox.yamlet àbody.variablesun dictionnaire associantENV_IDetOPENAI_EXECUTOR_API_KEYà leurs valeurs respectives. Enregistrez lesession_idrenvoyé par DigitalOcean. - Ouvrez le flux d’événements et envoyez vos instructions en demandant à l’agent d’écrire dans
/workspace/hello.txt, puis de relire le fichier. Les instructions restent en attente jusqu’à la connexion de l’exécuteur. Vérifiez que vous avez reçu l’événement de connexion et que le tour est terminé. Examinez la sortie de l’agent pour repérer d’éventuels échecs d’appels d’outils. - Récupérez le fichier avec
workspace_downloaden utilisant le chemin relatifhello.txt. Conservez les deux ressources pour les tours suivants ou supprimez-les.
Dans votre application, fixez des délais maximaux pour la mise en place et l’exécution, et gérez les échecs de connexion. N’associez pas de gestionnaire de webhook de provisionnement aux sessions que votre application ou votre CLI gère directement.
Nettoyage
Enregistrez les fichiers dont vous avez besoin, puis supprimez la session OpenAI et détruisez le bac à sable DigitalOcean. La suppression d’une session ne déclenche aucun webhook. Effectuez donc les deux opérations et signalez tout échec de nettoyage.
Avec PyDo, appelez client.agents.destroy_session avec l’identifiant de la session DigitalOcean. Avec la CLI, indiquez cet identifiant ou le nom du bac à sable :
doctl harness-runtime remove openai-codex-session
Avant de supprimer un contrôleur de webhook, supprimez le webhook enregistré dans votre projet OpenAI.
Références
- Consultez le guide de configuration d’un bac à sable DigitalOcean
- Consultez la documentation du SDK Python de DigitalOcean
- Consultez les versions de la CLI DigitalOcean