devin-remote-Binärdatei und die Spawn-Spezifikation für benutzerdefinierte Orchestratoren.
Authentifizierung
Outposts sind Ihrem Konto zugeordnet und werden von allen zugehörigen Organisationen gemeinsam genutzt.
devin worker start kann auch ohne vorab bereitgestelltes Token mit Ihrer bestehenden CLI-Anmeldung ausgeführt werden – siehe Starten ohne Token.
CLI
devin worker start
devin-remote-Binärdatei herunter und führt Sitzungen aus. Führen Sie den Befehl in dem Verzeichnis aus, in dem Sitzungen arbeiten sollen: Die Repositorys einer Sitzung befinden sich im Unterverzeichnis repos dieses Verzeichnisses, sodass your-org/app unter $(pwd)/repos/app ausgecheckt wird. Bereits dort vorhandene Repositorys werden wiederverwendet; fehlende werden beim Start der Sitzung geklont.
Die Umgebung des Workers kann außerdem
DEVIN_CHROME_PATH enthalten, um Sitzungen für Browser-Funktionen auf eine Chrome-/Chromium-Binärdatei zu verweisen.
Starten ohne Token
--token noch DEVIN_OUTPOSTS_TOKEN angegeben sind, erstellt devin worker start mithilfe Ihrer bestehenden CLI-Anmeldung einen Outpost und verwendet bei späteren Ausführungen den gespeicherten Worker-Token wieder.
Plattformvalidierung
devin-remote-Binärdatei herunter und übergibt die Windows-Systemumgebung an die Sitzungen.
devin worker outpost create
Gibt die ID des neuen Outposts aus (
outpost_env-...). Sie können Outposts auch in der Web-App unter Settings → Environment → Outposts erstellen.
devin worker outpost delete
Fleet API
https://api.devin.ai/opbeta/outposts/ verfügbar und verwenden ein Bearer-Token:
metadata-/spec-/status-Struktur, und die Warteschlange verwendet die Kubernetes-Semantik „list-then-watch“ mit mindestens einmaliger Zustellung.
Objekte
Warteschlangeneintrag (devins)
spec.network_policy gibt an, ob der Netzwerkzugriff der Sitzung eingeschränkt ist (enabled) und welche Ziele zulässig sind (allow): Hostname-Muster ({"hostname": ...}), IPv4-Adressen/CIDRs ({"ipv4": ...}) oder IPv6-Adressen/CIDRs ({"ipv6": ...}).
Outpost
Sitzungen in der Warteschlange auflisten
Beispielantwort:
- Übergeben Sie den
Cursorjeder Antwort in die nächste Anfrage, solangehas_next_pagetrueist. - Die Zustellung erfolgt mindestens einmal: Eine Sitzung an einer Seitengrenze kann auf beiden Seiten erscheinen. Führen Sie daher Upserts für Einträge anhand von
metadata.session_idaus, anstatt jedes Element als neu zu behandeln (das Claim-CAS macht Duplikate unschädlich). - Wenn
has_next_pagefalsewird, speichern Sie den zurückgegebenen Cursor als Startposition für einen Watch.
Änderungen beobachten
MODIFIED-Ereignisse werden ausgelöst, wenn sich der Warteschlangeneintrag einer Sitzung ändert (neu in die Warteschlange aufgenommene Sitzungen kommen ebenfalls als MODIFIED an); DELETED-Ereignisse werden ausgelöst, wenn er entfernt wird. Jedes SSE-data-Feld enthält:
- Persistieren Sie nach der Verarbeitung jedes Ereignisses dessen
cursorauf oberster Ebene; stellen Sie die Verbindung mit dem zuletzt persistierten Cursor wieder her, um Änderungen wiederzugeben, die während der Unterbrechung aufgetreten sind. - Die Zustellung erfolgt mindestens einmal — tolerieren Sie doppelte Ereignisse.
- Streams enden nach spätestens fünf Minuten; eine Watch-Schleife mit Wiederverbindung wird erwartet.
phase- undacceptor_id-Filter werden ignoriert, wennwatch=true; filtern Sie beobachtete Ereignisse stattdessen anhand der Felder imobjectjedes Ereignisses.- Wenn der Cursor weggelassen wird, beginnt der Stream am Anfang. Verwenden Sie daher für den normalen Abgleich list-then-watch.
Einen Queue-Eintrag abrufen
Eine Sitzung übernehmen
409 fehl. Eine erfolgreiche Beanspruchungsantwort enthält status.connect_token und status.gateway_url — die Zugangsdaten, die devin-remote zum Herstellen der Verbindung benötigt (siehe den Spawn-Spezifikation).
Mit der Beanspruchung wird zugesichert, dass ein Worker innerhalb der vom Server zugewiesenen Claim-Deadline (status.claim_deadline) bereit ist; abgelaufene Beanspruchungen kehren automatisch in die Warteschlange zurück.
Eine Beanspruchung freigeben
Outposts
orchestrator erforderlich; jede Outpost-Antwort enthält die aktuellen Werte von status.queue_depth und status.active_claims.
Verteilung von Remote-Binärdateien
devin worker start lädt automatisch die passende devin-remote-Binärdatei herunter. Benutzerdefinierte Orchestratoren, die nicht die Devin CLI verwenden, können sie direkt hier abrufen:
Wenn der Warteschlangeneintrag der Sitzung ein
spec.remote_binary_sha enthält, verwenden Sie diesen SHA-Wert anstelle von latest — dadurch wird die Sitzung auf eine bestimmte getestete Version angepinnt.
Spawn-Spezifikation
devin-remote selbst startet, statt devin worker start zu verwenden, starten Sie ihn wie folgt:
Geben Sie dem Remote eine saubere Umgebung, die nur die oben genannten Variablen sowie grundlegende Systemvariablen enthält (
PATH, HOME, USER, LOGNAME, TMPDIR, LANG, TZ und — für die Bildschirmaufnahme des Desktop-Streams unter Linux/X11 — DISPLAY, WAYLAND_DISPLAY, XAUTHORITY). Geben Sie nichts an das Remote weiter, was der Agent nicht sehen können soll: Es wird von der Shell des Agenten vererbt.
Zusätzliche Lifecycle-Erwartungen:
- Arbeitsverzeichnis: Starten Sie das Remote in dem Verzeichnis, in dem die Sitzung arbeiten soll — Repositories befinden sich in dessen Unterverzeichnis
repos, also$(pwd)/repos/<repo-name>(dieselbe Regel wie beidevin worker start). - Sitzungsende: Wenn die Sitzung endet (in den sleep-Zustand wechselt oder beendet wird), benachrichtigt Devin das Remote und es beendet sich selbst mit Status 0. Behandeln Sie einen sauberen Exit als Ende der Sitzung: Bestätigen Sie, dass
status.session_statusdes Warteschlangeneintragssuspendedoderterminatedist (die Statusaktualisierung kann dem Exit um einige Sekunden hinterherhinken, lesen Sie also einige Male erneut), und geben Sie dann die Beanspruchung frei. Als Fallback pollen Siestatus.session_statusauch, während das Remote läuft, und beenden den Prozess selbst, sobald esterminatederreicht (oder der Warteschlangeneintrag verschwindet).

