Exécuter dans le cloud
Configurez Vercel ou Daytona et synchronisez le travail de l’agent avec votre dépôt.
Prérequis
Section intitulée « Prérequis »Installez le SDK du fournisseur cloud choisi à côté d’Outpost. La sandbox s’exécute à distance : votre machine n’a donc pas besoin de Docker ou de Podman.
L’hôte a besoin d’identifiants d’allocation pour créer les sandboxes. Ils restent sur l’hôte et sont distincts des identifiants de l’agent, qu’Outpost installe dans le répertoire personnel privé de la sandbox.
| Fournisseur | Identifiants d’allocation sur l’hôte |
|---|---|
| Vercel | VERCEL_OIDC_TOKEN (obtenu par npx vercel env pull), ou token, teamId et projectId dans create |
| Daytona | DAYTONA_API_KEY, ou apiKey dans connection |
L’image de la sandbox doit fournir sh et git pour synchroniser le dépôt, et node pour transmettre des entrées à l’agent en direct.
Vercel Sandbox
Section intitulée « Vercel Sandbox »Vercel arrête une sandbox après create.timeout millisecondes : choisissez une durée supérieure à celle de votre tâche.
Référence API : VercelOptions.
API : createVercelSandboxProvider · VercelOptions.
Daytona Sandbox
Section intitulée « Daytona Sandbox »Créez un fournisseur Daytona avec une image Node.js 24. Utilisez ce sandboxProvider dans votre configuration ou passez-le directement à la tâche, comme dans l’exemple ci-dessous.
Référence API : DaytonaOptions.
Comparer Vercel et Daytona
Section intitulée « Comparer Vercel et Daytona »| Vercel | Daytona | |
|---|---|---|
attach() | Non : les terminaux interactifs sont refusés | Oui, via l’API PTY de Daytona |
| Entrées en direct | Chaque instruction est ajoutée à un fichier de la sandbox | Idem |
| Règles de sortie | Pare-feu natif : domaines, CIDR autorisés et refusés | Confirmées par Daytona : domaines ou CIDR IPv4 |
| Facturation | Jusqu’à l’arrêt de la sandbox par Outpost | Jusqu’à la suppression de la sandbox par Outpost |
Chaque instruction en direct coûte une commande du fournisseur : un wrapper lancé avec l’agent lit le fichier et alimente son entrée standard.
Lancer une tâche
Section intitulée « Lancer une tâche »Passez le fournisseur à dispatch() ou à createSandbox(), comme pour toute sandbox.
Avant le premier tour, Outpost installe la CLI de l’agent, dans sa version épinglée, si l’image ne la contient pas ; c’est le cas sur toute sandbox distante. Définissez bootstrap: false quand l’image doit la fournir. Le hook sandboxReady installe ensuite les dépendances du projet (Préparer l’environnement).
dispatch() libère la sandbox à son retour. Fermez une sandbox créée par createSandbox() dans un finally, ou avec await using : le fournisseur la facture jusque-là.
Accès au dépôt
Section intitulée « Accès au dépôt »La sandbox travaille sur sa propre copie du dépôt. Outpost la maintient alignée sur le worktree géré de votre machine. Les sandboxes Firecracker et les conteneurs en Git privé se synchronisent de la même façon.
Choisir la branche
Section intitulée « Choisir la branche »Sans branch, une sandbox cloud utilise integrate : une nouvelle branche outpost/job-…, fusionnée dans votre branche courante à la fin. named garde le travail sur une branche que vous nommez. current est refusé, car la sandbox ne peut pas modifier votre checkout sur place. Voir Dépôt et branche.
Envoyer des fichiers absents de Git
Section intitulée « Envoyer des fichiers absents de Git »Commitez les fichiers nécessaires avant de lancer la tâche. Pour une configuration de test ignorée par Git ou d’autres fichiers locaux, consultez les options du workspace et de synchronisation ci-dessous.
Référence API : WorkspaceOptions et SandboxOptions.
Une copie exclue par .gitignore voyage dans un seul sens : les modifications que l’agent y apporte restent dans la sandbox. Toute autre copie devient du travail non commité dans le worktree : passez alors includeUncommitted: true.
Quand la synchronisation s’arrête
Section intitulée « Quand la synchronisation s’arrête »Outpost n’écrase jamais un travail qu’il ne peut pas sauvegarder. Il s’arrête sur une erreur de code workspace dont details.recovery désigne le dossier de .outpost/recovery qui contient les changements téléchargés et la sauvegarde. Inspectez-le avec Récupérer du travail.
| Cause | Solution |
|---|---|
| Le worktree géré a changé pendant que la sandbox était ouverte | Ne touchez pas à .outpost/workspaces pendant l’exécution |
| L’agent a modifié un fichier non commité dans le worktree | Commitez d’abord le fichier, ou passez includeUncommitted: true |
Une copie n’est pas exclue par le .gitignore commité (première synchronisation) | Passez includeUncommitted: true, ou ignorez le fichier dans .gitignore |
L’agent a créé un fichier que votre hôte ignore hors de .gitignore | Déplacez la règle d’exclusion dans le .gitignore commité |
| L’agent a réécrit un commit déjà synchronisé | Demandez de nouveaux commits plutôt qu’un amend ou un rebase |
recoveryTransport sur dispatch() ou createSandbox() archive aussi chaque sauvegarde dans un stockage objet.
- Toutes les références: Le archive d’historique contient toutes les branches et tous les tags du dépôt, pas seulement la branche de travail.
- Délai des commandes:
sandbox.command()sansdeadlineMss’arrête au bout de 10 minutes. Les tours de l’agent suivent leurs propres limites. - Fin de sortie: Le résultat d’une commande garde les 64 derniers Kio de chaque flux. L’option
retaindu fournisseur le modifie. - Installation de la CLI: Elle demande
npm(oucurlpour Antigravity) et un accès réseau dans la sandbox. Avec un agent de repli, seul le premier candidat est installé. - Arrêts imprévus: Outpost libère les sandboxes sur
SIGINTetSIGTERM. Un processus tué laisse la sandbox tourner jusqu’au délai propre du fournisseur.
Implémenter un autre fournisseur distant : Ajouter un fournisseur de sandbox.
API : SandboxOptions · EgressPolicy.