若你在主 Agent 里调用 sessions_spawn 派生子任务,却遇到 ACP_TURN_FAILED、invalid handshake 1008 或 queue owner unavailable,而同一 Gateway 上直连聊天仍正常——本文回答:① runtime=acp 与 runtime=subagent 何时选用;② streamTo / resumeSessionId 为何只对 acp 路径合法、subagent 误填如何分诊;③ ACP 握手失败时的 subagent 降级与 Windows OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE;④ OpenAI Completions vs Responses 下 streamTo 自动填充差异。与升级护航 ACP 分诊、Docker 子代理 1008 配对互补——本篇只啃多 Agent 调度 runtime 选型。
runtime=acp 却不具备 ACP bridge:主通道能聊,一 spawn 就 ACP_TURN_FAILED——根因是 acpx 未注册或 queue owner 离线,而非模型配额。runtime=subagent 里填 streamTo / resumeSessionId:这两字段仅服务 ACP 会话续接语义;subagent 走 Gateway 内嵌 RPC,误填会报参数无效或静默丢字段,表象像「子 Agent 没收到上下文」。OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE 延长或重试。streamTo 目标;Completions 路径不会——误以为是 spawn 坏了,实为 API 形态与 runtime 不匹配。2026 上游把 sessions_spawn 明确拆成两条互斥运行时:runtime=acp 通过 ACP bridge 与外部 acpx 进程对话,支持 streamTo 把子 Agent 输出回流到主会话 UI;runtime=subagent 则在 Gateway 进程内启动轻量子代理,延迟更低、不依赖 acpx,但不支持 ACP 专属的续接字段。选错 runtime 再叠加错误字段,是 on-call 里最耗时的「假复杂」——先把路径对齐,再谈模型与工具 allowlist(见tools.profile 分诊)。
实务上建议把每次 spawn 调用当成一张调度合同归档:合同里必须写清 runtime、是否依赖 UI 回流、主会话走的是 Completions 还是 Responses、以及失败时的降级路径(subagent 或回滚)。缺少这张合同,事后很难解释「同一 Gateway 昨天能 spawn、今天不行」——因为变更往往落在模板字段或 API 形态,而不是 Gateway 进程本身。
| 站内已有长文 | 本篇覆盖 | 本篇不重复 |
|---|---|---|
| 升级护航 ACP 分诊 | spawn 场景下 acp vs subagent 选型与降级 | backup create、gateway probe 全阶梯 |
| Docker 子代理 1008 | subagent 路径与 pairing 1008 的边界区分 | Compose trustedProxies 逐步命令 |
| tools.profile 分诊 | spawn 成功后「子 Agent 无工具」的二次排查 | allowlist 三层叠加专文 |
| SSH 常驻 Gateway | 远程 Mac 上 acpx 与 subagent 共存拓扑 | 端口转发与 launchd 细节 |
runtime=acp vs runtime=subagent:何时用哪条栈选型口诀:要 UI 回流、要续接既有 ACP 会话、要与 Cursor/IDE 侧 acpx 对齐 → acp;要 Gateway 内闭环、要低依赖、acp 当前不可用 → subagent。下表是生产里最常见的四类任务形态(非 exhaustive,但覆盖 80% 工单):
| 任务形态 | 推荐 runtime | 关键参数 | 避免 |
|---|---|---|---|
| 子 Agent 输出要流式回到主聊天窗口 | acp |
streamTo 指向主 session;可选 resumeSessionId |
subagent + streamTo(无效组合) |
| 后台批处理、无需 UI 回流 | subagent |
task 描述 + 超时;不配 streamTo |
强行走 acp 增加 bridge 故障面 |
| ACP bridge 报 queue owner unavailable | 临时 subagent |
工单记录降级;并行修 acpx 注册 | 反复重试 acp 拉高 MTTR |
| 多容器 Docker,RPC healthy 但 spawn 1008 | 先修配对/网段,再 subagent |
对照 trustedProxies;见 Docker 专文 | 未修 bind 就切换 runtime |
streamTo / resumeSessionId:仅 acp 合法的误填分诊社区里大量「spawn 参数看起来对、子 Agent 却空回复」来自字段与 runtime 交叉污染。Gateway 在 subagent 路径会剥离或拒绝 ACP 专属字段;若主 Agent 模板从 Completions 示例复制了 streamTo: "main",而实际调用是 runtime=subagent,日志往往只有泛化的 RPC error,不会明确提示「字段无效」——需要对照调用 JSON。
在 runtime=acp 下,resumeSessionId 用于接续已有 acpx 会话(例如用户在同一线程里多次 spawn);streamTo 则把子 Agent token 流定向到主 Control UI 或指定 channel 渲染目标。2026 Responses API 路由在部分配置下会自动推断 streamTo(当主会话已绑定 Responses 形态且未显式传入时);Completions 形态不会自动填充——若你从 Responses 环境迁到 Completions 而未改 spawn 模板,会出现「以前能回流、现在子 Agent 在后台默默跑完」的回归,这与 upgrade 无关,纯属 API 形态 + runtime 组合问题 🔧。
分诊时可做字段剥离实验:复制失败调用 JSON,去掉 streamTo 与 resumeSessionId 后改 runtime=subagent 重试。若 subagent 立刻成功,则原故障几乎可判定为 ACP 路径或误填,而非 task 内容或模型能力问题;若仍失败,再进入 pairing、Token 或工具面排查。该实验应写在 Runbook 第 4 步,避免 on-call 在 acp 日志里空转。
// ✅ acp:UI 回流 + 可选续接
{
"tool": "sessions_spawn",
"runtime": "acp",
"task": "调研竞品定价并输出表格",
"streamTo": "main",
"resumeSessionId": "acp-sess-abc123"
}
// ✅ subagent:Gateway 内闭环,不要 streamTo
{
"tool": "sessions_spawn",
"runtime": "subagent",
"task": "批量重命名 logs 目录下文件"
}
// ❌ 常见误填:subagent 携带 ACP 字段
{
"runtime": "subagent",
"streamTo": "main"
}
ACP_TURN_FAILED、1008、queue owner当 runtime=acp 失败而主聊天仍正常,按日志指纹分流——不要与「Gateway 完全无回复」混查(后者走通道/模型专文)。
| 日志 / 症状 | 优先怀疑 | 第一动作 |
|---|---|---|
ACP_TURN_FAILED |
acpx 进程未就绪;turn 超时 | Windows 设 OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=1 延长探针;确认 bridge 注册 |
| invalid handshake / WebSocket 1008 | CLI/Gateway/acpx 版本分裂;握手头不匹配 | 对齐同版本;单次 reload;对照钉版矩阵 |
| queue owner unavailable | ACP bridge 注册丢失(2026.3.x 回归窗口) | 确认 host acpx;临时 runtime=subagent 保 SLA |
| subagent 也 1008 | 配对/Token/网段(非 ACP 专属) | 跳转Docker 1008 Runbook |
| spawn 成功但子 Agent 无工具 | tools.profile / agent 覆盖 | 跳转tools.profile 分诊 |
降级策略:当 acp 路径在变更窗口内连续两轮失败(含 reload 后复测),而 subagent 单路径可通过最小任务探针,建议工单显式记录「临时 runtime=subagent」并限制需要 UI 回流的任务——待 acpx 修复后再切回 acp。这与坏版本 digest 回滚正交:降级是保 SLA,回滚是修已知 regression。
OPENCLAW_ACPX_RUNTIME_STARTUP_PROBEWindows 上 provider 扩展与 Defender 扫描常把 acpx 冷启动拖到数秒以上;若 spawn 在 bridge 就绪前发起,表面是 ACP_TURN_FAILED 或 invalid handshake。设置环境变量 OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE=1(具体语义以你安装的 OpenClaw 版本文档为准)可让 Gateway 在首轮 spawn 前多等一轮 acpx 健康探针,降低竞态假失败率。仍失败时,用同机 subagent 最小任务验证 Gateway 调度栈本身未坏,再隔离 acpx 安装/权限问题——避免把 Windows 启动慢误判成「必须回滚 OpenClaw 版本」。
与升级护航的分工在于:升级文章解决「版本迁移后 probe/ACP 全站回归」;本篇解决「版本已稳定、仅 spawn 调度层选错或 handshake 偶发失败」。二者串联时,先确认 upgrade 阶梯已通过,再进入本篇 runtime 矩阵——否则会把 split-brain 误判为 streamTo 误填。
# Windows:延长 acpx 启动探针(示例) $env:OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE = "1" openclaw gateway status openclaw gateway probe # 最小 subagent 探针(不含 streamTo) # 通过 Control UI 或 CLI 触发等价 sessions_spawn,runtime=subagent
| 影响面 | 继续修 acp(配置/bridge) | 临时 runtime=subagent | 钉版/回退 |
|---|---|---|---|
| 仅 spawn/acp 红,主通道与 subagent 探针正常 | 查 acpx 注册、startup probe | 推荐:无 UI 回流任务先走 subagent | 已知 regression 窗口内再考虑 |
| acp + subagent 双失败,probe 也红 | 仅 backup 恢复后单步试 | 不作为首选 | 优先 backup 或 digest 回滚 |
| 必须 UI 回流,acp 不可用 | 修 bridge 前业务受损 | 不可替代 streamTo 场景 | 评估回退或换远程 Mac 常驻 Gateway |
runtime、是否含 streamTo / resumeSessionId、主会话 API 形态(Completions vs Responses)。openclaw gateway status + gateway probe;升级后务必单次 reload(见升级护航)。OPENCLAW_ACPX_RUNTIME_STARTUP_PROBE;捕获 1008 / queue owner 日志。sessions_spawn 成功次数 / 调用总数;acp 桶低于 95% 且 subagent 桶正常时,优先修 bridge 而非换模型。runtime=subagent 调用中仍出现 streamTo/resumeSessionId 的审计计数;生产目标为 0(应用层 lint 或模板审查)。在笔记本 Gateway 上混跑 acpx、合盖睡眠与多 provider 插件,spawn 失败常被误记为「OpenClaw 不稳定」。更稳妥的做法是把权威 Gateway 与 acpx 同驻在常电远程 Mac上,本地仅 SSH 转发 Control UI——spawn 与 probe 在同一节点验收,日志时间线可对齐。
只在主 Agent 里反复改 prompt、却不检查 runtime 与 streamTo 是否匹配,会把 ACP 握手问题放大成「多 Agent 不可用」的错觉。相对地,把 acp/subagent 决策矩阵、误填分诊与 subagent 降级写进 runbook,能把 on-call 从一晚上盲试,压到有探针、有降级、有指标的分钟级事件。
若你仍坚持在 Windows 笔记本或 Docker 分容器拓扑里硬扛 acp bridge,要接受三项隐性成本:启动竞态导致假 1008、Completions/Responses 与 streamTo 自动填充不一致、以及 subagent 与 acp 故障面叠加时的排障半径膨胀。对需要 7×24、spawn 可工单化、acp 与 subagent 可切换 的生产 Gateway,把环境落在 MACCOME Mac mini(M4 / M4 Pro)与六国弹性租期上,通常比在合盖笔记本上与 queue owner 搏斗更省总成本;公开档位可先对照多地区节点与租期指南,再与SSH 常驻 Runbook串联拓扑。
常见问题
streamTo 和 resumeSessionId 能否在 runtime=subagent 时使用?
不能。二者仅对 runtime=acp 的 ACP 续接与 UI 回流有效;subagent 路径应只传 task 等 Gateway 内嵌字段。模板审查可参考租赁价格说明中生产节点工单化实践。