devin-remote 二进制程序分发,以及适用于自定义编排器的 spawn 约定。
身份验证
Outposts 以你的账户为作用域,并在该账户下的所有组织之间共享。
CLI
devin worker start
devin-remote 二进制程序,并处理这些会话。请在包含该会话已检出代码仓库的目录中运行此命令。
工作器环境还可以包含
DEVIN_CHROME_PATH,用于为会话指定 Chrome/Chromium 二进制程序,以启用浏览器功能。
devin worker outpost create
orchestrator 作用域。
输出新 outpost 的 ID (
outpost_env-...)。你也可以在 Web 应用的 设置 → 环境 → Outposts 中创建 outpost。
devin worker outpost delete
Fleet API
https://api.devin.ai/opbeta/outposts/ 下,并使用 Bearer 令牌进行认证:
metadata / spec / status 结构,队列则遵循 Kubernetes 的“先列出再监听”语义,并保证至少一次投递。
对象
队列条目 (devins)
spec.network_policy 会说明会话的网络访问是否受限 (enabled) ,以及允许访问的目标 (allow) :主机名 glob 模式 ({"hostname": ...}) 、IPv4 地址/CIDR ({"ipv4": ...}) 或 IPv6 地址/CIDR ({"ipv6": ...}) 。
Outpost
列出排队会话
示例响应:
- 当
has_next_page为true时,将每个响应中的cursor传入下一次请求。 - 投递采用至少一次语义:处于页面边界的会话可能会同时出现在前后两个页面中,因此应按
metadata.session_id对条目执行 upsert,而不要将每一项都视为新项 (claim CAS会让重复项不会造成影响) 。 - 当
has_next_page变为false时,将返回的游标保存为监听的起始位置。
监听变更
MODIFIED 事件 (新排队的会话也会以 MODIFIED 事件形式到达) ;当该条目被移除时会触发 DELETED 事件。每个 SSE 的 data 字段都包含:
- 处理完每个事件后,保存其顶层
cursor;重新连接时使用上次保存的游标,以回放断开期间发生的变更。 - 事件交付至少一次——因此需要容忍重复事件。
- 流最多持续五分钟;应采用可重连的监听循环。
- 当
watch=true时,phase和acceptor_id过滤器会被忽略;请根据每个事件object中的字段过滤收到的事件。 - 省略游标会从头开始,因此常规对账应采用“先列出再监听”的方式。
获取队列条目
认领会话
409。认领成功后的响应会包含 status.connect_token 和 status.gateway_url —— 也就是 devin-remote 建立连接所需的凭据 (请参阅 spawn 约定) 。
认领表示工作器承诺会在服务器分配的认领截止时间 (status.claim_deadline) 内就绪;过期的认领会自动返回队列。
解除认领
Outposts
status.queue_depth 和 status.active_claims。
远程二进制程序分发
devin worker start 命令会自动下载正确的 devin-remote 二进制程序。不使用 Devin CLI 的自定义编排器可直接从以下地址下载:
如果该 session 的队列条目包含
spec.remote_binary_sha,请使用该 SHA,而不要使用 latest——这会将该 session 固定到经过测试的特定版本。
Spawn 约定
devin worker start,而是自行启动 devin-remote,请按如下方式启动它:
为远程端提供一个干净的环境,其中只包含上述变量以及基础系统变量 (
PATH、HOME、USER、LOGNAME、TMPDIR、LANG、TZ,以及——用于 Linux/X11 上桌面流的屏幕捕获——DISPLAY、WAYLAND_DISPLAY、XAUTHORITY) 。不要将任何 Agent 不应看到的信息泄露到远程端:这些信息会被 Agent 的 shell 继承。
额外的生命周期要求:
- 工作目录:从包含该会话代码仓库的目录启动远程端 (与
devin worker start的规则相同) 。 - 会话结束:当会话结束 (进入休眠或终止) 时,Devin 会通知远程端,远程端随后会自行以退出状态码 0 退出。将正常退出来视为会话结束:确认队列条目的
status.session_status为suspended或terminated(状态更新可能会比退出晚几秒,因此请重读几次) ,然后释放认领。作为回退方案,也要在远程端运行期间轮询status.session_status,并在其变为terminated时自行终止进程 (或者当队列条目消失时终止) 。

