devin-remote et le contrat de spawn pour les orchestrateurs personnalisés.
Authentification
Les Outposts sont associés à votre compte et partagés entre toutes les organisations de ce compte.
devin worker start peut également s’exécuter sans jeton préprovisionné en utilisant votre connexion CLI existante — consultez Démarrer sans jeton.
CLI
devin worker start
devin-remote et exécute les sessions. Lancez-la depuis le répertoire dans lequel vous souhaitez exécuter les sessions : les dépôts d’une session se trouvent dans le sous-répertoire repos de ce répertoire ; your-org/app est donc extrait dans $(pwd)/repos/app. Les dépôts déjà présents à cet emplacement sont réutilisés ; ceux qui manquent sont clonés au démarrage de la session.
L’environnement du worker peut également inclure
DEVIN_CHROME_PATH pour faire pointer les sessions vers un binaire Chrome/Chromium pour les fonctionnalités de navigateur.
Démarrer sans jeton
--token et de DEVIN_OUTPOSTS_TOKEN, devin worker start crée un outpost à l’aide de votre connexion CLI existante et réutilise le jeton du worker enregistré lors des exécutions ultérieures.
Validation de la plateforme
devin-remote approprié et transmet l’environnement système Windows aux sessions.
devin worker outpost create
Affiche l’ID du nouvel outpost (
outpost_env-...). Vous pouvez également créer des outposts dans l’application web, sous Settings → Environment → Outposts.
devin worker outpost delete
Fleet API
https://api.devin.ai/opbeta/outposts/ et utilisent un jeton Bearer :
metadata / spec / status, et la file d’attente suit la sémantique Kubernetes « list-then-watch » avec une garantie de livraison au moins une fois.
Objets
Entrée de file d’attente (devins)
spec.network_policy indique si l’accès réseau de la session est restreint (enabled) ainsi que les destinations autorisées (allow) : motifs de nom d’hôte ({"hostname": ...}), adresses IPv4/plages CIDR ({"ipv4": ...}) ou adresses IPv6/plages CIDR ({"ipv6": ...}).
Outpost
Lister les sessions en attente
Exemple de réponse :
- Passez le
cursorde chaque réponse dans la requête suivante tant quehas_next_pagevauttrue. - La livraison suit une sémantique « at-least-once » : une session à la jonction de deux pages peut apparaître dans les deux. Effectuez donc un upsert des entrées à partir de
metadata.session_idplutôt que de traiter chaque élément comme nouveau (le CAS de prise en charge rend les doublons inoffensifs). - Lorsque
has_next_pagepasse àfalse, enregistrez le curseur renvoyé comme position de départ pour une opération de surveillance.
Surveiller les modifications
MODIFIED sont déclenchés lorsque l’entrée de file d’attente d’une session est modifiée (les sessions nouvellement placées en file d’attente arrivent également comme MODIFIED) ; les événements DELETED sont déclenchés lorsqu’elle est supprimée. Chaque champ SSE data contient :
- Conservez le
cursorde premier niveau de chaque événement après l’avoir traité ; reconnectez-vous avec le dernier curseur enregistré pour rejouer les modifications survenues pendant la déconnexion. - La livraison s’effectue au moins une fois — prévoyez donc la possibilité d’événements en double.
- Les flux se terminent au bout de cinq minutes maximum ; une boucle de surveillance avec reconnexion est donc attendue.
- Les filtres
phaseetacceptor_idsont ignorés lorsquewatch=true; filtrez les événements surveillés à l’aide des champs de l’objectde chaque événement. - Si vous omettez le curseur, le flux démarre depuis le début ; utilisez donc list-then-watch pour une réconciliation normale.
Récupérer une entrée de file d’attente
S’attribuer une session
409. Une réponse de prise en charge réussie inclut status.connect_token et status.gateway_url — les identifiants dont devin-remote a besoin pour se connecter (voir le contrat de spawn).
La prise en charge implique qu’un worker sera prêt avant l’échéance de prise en charge attribuée par le serveur (status.claim_deadline) ; les prises en charge expirées sont automatiquement remises dans la file d’attente.
Libérer une prise en charge
Outposts
status.queue_depth et status.active_claims.
Distribution du binaire devin-remote
devin worker start télécharge automatiquement le binaire devin-remote approprié. Les orchestrateurs personnalisés qui n’utilisent pas le Devin CLI peuvent le récupérer directement ici :
Si l’entrée de file d’attente de la session contient un
spec.remote_binary_sha, utilisez ce SHA au lieu de latest — cela verrouille la session sur une version spécifique testée.
Contrat de spawn
devin-remote au lieu d’utiliser devin worker start, démarrez-le comme suit :
Fournissez au remote un environnement propre contenant uniquement les variables ci-dessus, ainsi que les variables système de base (
PATH, HOME, USER, LOGNAME, TMPDIR, LANG, TZ et — pour la capture d’écran du flux du bureau sous Linux/X11 — DISPLAY, WAYLAND_DISPLAY, XAUTHORITY). Ne laissez rien fuiter dans le remote que l’agent ne devrait pas pouvoir voir : il est hérité par le shell de l’agent.
Attentes supplémentaires concernant le cycle de vie :
- Répertoire de travail : lancez le remote depuis le répertoire dans lequel vous souhaitez que la session travaille — les dépôts se trouvent dans son sous-répertoire
repos, c.-à-d.$(pwd)/repos/<repo-name>(même règle que pourdevin worker start). - Fin de session : lorsque la session se termine (se met en veille ou s’arrête), Devin notifie le remote et celui-ci s’arrête de lui-même avec le code de sortie 0. Traitez un arrêt propre comme la fin de la session : confirmez que le
status.session_statusde l’entrée de file d’attente estsuspendedouterminated(la mise à jour du statut peut avoir quelques secondes de retard, donc revérifiez plusieurs fois), puis libérez la prise en charge. En solution de repli, interrogez aussi périodiquementstatus.session_statuspendant l’exécution du remote et tuez vous-même le processus dès qu’il atteintterminated(ou que l’entrée de file d’attente disparaît).

