devin-remote e o contrato de spawn para orquestradores personalizados.
Autenticação
Os Outposts têm escopo no nível da sua conta e são compartilhados entre todas as organizações dela.
CLI
devin worker start
devin-remote correto e executa as sessões. Execute-o a partir do diretório que contém os repositórios da sessão já clonados.
O ambiente do worker também pode incluir
DEVIN_CHROME_PATH para apontar as sessões para um binário do Chrome/Chromium para recursos do navegador.
devin worker outpost create
Exibe o ID do novo outpost (
outpost_env-...). Você também pode criar outposts no app web em Configurações → Ambiente → Outposts.
devin worker outpost delete
Fleet API
https://api.devin.ai/opbeta/outposts/ e usam um token Bearer:
metadata / spec / status, e a fila segue a semântica list-then-watch do Kubernetes, com entrega de pelo menos uma vez.
Objetos
Entrada da fila (devins)
spec.network_policy informa se o acesso de rede da sessão está restrito (enabled) e quais são os destinos permitidos (allow): padrões de hostname ({"hostname": ...}), endereços/CIDRs IPv4 ({"ipv4": ...}) ou endereços/CIDRs IPv6 ({"ipv6": ...}).
Outpost
Listar sessões enfileiradas
Exemplo de resposta:
- Passe o
cursorde cada resposta para a próxima requisição enquantohas_next_pagefortrue. - A entrega segue a semântica at-least-once: uma sessão na fronteira entre páginas pode aparecer em ambas, então faça upsert das entradas por
metadata.session_idem vez de tratar cada item como novo (o reivindicar CAS torna duplicatas inofensivas). - Quando
has_next_pagese tornarfalse, salve o cursor retornado como posição inicial de um watch.
Monitorar alterações
MODIFIED são emitidos quando a entrada da fila de uma sessão é alterada (sessões recém-enfileiradas também são recebidas como MODIFIED); eventos DELETED são emitidos quando ela é removida. Cada campo data de SSE contém:
- Persista o
cursorde nível superior de cada evento após processá-lo; reconecte-se com o último cursor persistido para receber novamente as alterações que ocorreram enquanto a conexão estava interrompida. - A entrega ocorre pelo menos uma vez — tolere eventos duplicados.
- Os fluxos se encerram em, no máximo, cinco minutos; espera-se um loop de watch com reconexão.
- Os filtros
phaseeacceptor_idsão ignorados quandowatch=true; filtre os eventos monitorados usando os campos doobjectde cada evento. - Omitir o cursor faz com que o processo comece do início, portanto use
listseguido dewatchpara a reconciliação normal.
Buscar uma entrada da fila
Reivindicar uma sessão
409. Uma resposta de reivindicação bem-sucedida inclui status.connect_token e status.gateway_url — as credenciais de que o devin-remote precisa para se conectar (consulte o contrato de spawn).
Ao reivindicar a sessão, o worker se compromete a ficar pronto dentro do prazo de reivindicação atribuído pelo servidor (status.claim_deadline); reivindicações expiradas retornam à fila automaticamente.
Remover uma reivindicação
Outposts
status.queue_depth e status.active_claims em tempo real.
Distribuição remota de binários
devin worker start baixa automaticamente o binário devin-remote correto. Orquestradores personalizados que não usam o Devin CLI podem baixá-lo diretamente de:
Se a entrada na fila da sessão incluir um
spec.remote_binary_sha, use esse SHA em vez de latest — isso mantém a sessão fixada em uma versão específica testada.
Contrato de spawn
devin-remote por conta própria em vez de usar devin worker start, inicie-o assim:
Forneça ao remoto um ambiente limpo contendo apenas as variáveis acima, além das variáveis básicas do sistema (
PATH, HOME, USER, LOGNAME, TMPDIR, LANG, TZ e — para a captura de tela do stream de desktop no Linux/X11 — DISPLAY, WAYLAND_DISPLAY, XAUTHORITY). Não exponha ao remoto nada que o agente não deva conseguir ver: esse ambiente é herdado pelo shell do agente.
Expectativas adicionais do ciclo de vida:
- Diretório de trabalho: inicie o remoto a partir do diretório que contém os repositórios da sessão (a mesma regra de
devin worker start). - Fim da sessão: quando a sessão termina (entra em suspensão ou é encerrada), o Devin notifica o remoto e ele encerra por conta própria com status 0. Trate um encerramento limpo como o fim da sessão: confirme que
status.session_statusdo item da fila ésuspendedouterminated(a atualização de status pode demorar alguns segundos para refletir o encerramento, então consulte novamente algumas vezes) e, em seguida, libere a reivindicação. Como fallback, também consultestatus.session_statusenquanto o remoto estiver em execução e encerre você mesmo o processo assim que ele atingirterminated(ou o item da fila desaparecer).

