若你在主 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 內嵌欄位。範本審查可參考租賃價格說明中正式節點工單化實踐。