Promise.all、while 和 if,以分派工作、收集
結果並做出決策。
它沒有圖形 DSL,也沒有獨立的工作流程格式。程式本身就是
協調機制。Swarm 為該程式加入可等待的收集器子項、結構化結果、
有界並行處理和進度回報。
啟用 Swarm
建議的方式是在控制介面中前往 Settings → Labs → Swarm。此 切換開關會立即生效,並將tools.swarm.enabled 寫入你的
設定。
你也可以直接在 openclaw.json 中啟用 Swarm:
數值必須是正整數。OpenClaw 會將
maxConcurrent 限制在 1–1000、將 maxChildrenPerGroup 限制在 1–10000、
將 maxTotalPerGroup 限制在 1–100000,並將 waitTimeoutSecondsMax 限制在
1–86400。
你可以使用 agents.list[].tools.swarm,為單一已設定的代理程式覆寫 Swarm。
每個代理程式的物件會合併並覆蓋頂層
tools.swarm 物件。
需求
agents.run、phase 和 log 客體全域變數同時需要 Swarm 和
OpenClaw 程式碼模式:
sessions_spawn 的有效存取權。工具設定檔、
允許/拒絕原則、供應商規則和沙箱原則都可能移除此工具。
如果指令碼回報 sessions_spawn 無法使用,請參閱程式碼模式啟用方式和
子代理程式。
defaultAgentId 和每次執行的 agentId 值,必須指定一個已設定且
發出請求者的 subagents.allowAgents 原則允許使用的目標。OpenClaw 會拒絕
未知或不允許的目標,而不會改用其他代理程式。
撰寫 Swarm 指令碼
啟用 Swarm 後,程式碼模式會公開此客體 API:schema,agents.run() 會解析為子項的最終文字。若提供
JSON Schema,則會解析為透過子項的
structured_output 工具提交的值。失敗、遭終止、逾時或結構描述無效的子項
會使用 SwarmAgentError 拒絕該 Promise。請在程式碼模式內從 API.read("agents.d.ts")
讀取確切產生的宣告和簡短的協調慣用法。
使用 label,可在儀表板和側邊欄中為子項提供易於辨識的名稱。在選項中使用
phase,可在該子項啟動前立即發布階段;若數個子項屬於同一階段,
則可呼叫 phase()。
log() 會發布簡短的進度附註。進度呼叫是即發即棄;
即使介面無法使用,也不會延遲指令碼。
以結構化結果並行分派
此範例會為每個主題啟動一個研究代理程式,等待所有代理程式完成,然後 要求最後一個子項綜合其結構化報告:Promise.all 是分派與彙集的邊界。OpenClaw 會為該群組啟動最多
maxConcurrent 個子項,其餘子項則依提交
順序排入佇列。
在決策關卡中迴圈
當每次處理都會決定是否需要再執行一次時,請使用有界的while 迴圈:
maxTotalPerGroup 是最後的安全防線,
不能取代明確的停止條件。
處理第一個完成的子項
agents.run() 會傳回一般 Promise,因此 Promise.race 可對第一個完成的
程式碼模式子項做出反應。對於呼叫較低階工具的測試框架,
agents_wait 提供相同的首次完成邊界:只要至少一個要求的執行完成,
或有界逾時到期,就會立即傳回。
完整的排空迴圈請參閱從其他測試框架使用 Swarm。
收集器子項的行為方式
收集器子項是一般的隔離子代理程式工作階段,但具有不同的 完成路徑。它們會寫入可供父項等待的持久收集器結果, 而不是宣告回覆或將回覆導回父工作階段。 目標代理程式會依下列順序解析:agentId,位於產生或agents.run()呼叫上。tools.swarm.defaultAgentId。- 發出請求的代理程式。
worker 代理程式 ID;將其指定為預設值前,請先設定一個代理程式。
在該工作代理程式的個別設定中使用 tools.swarm: false 加以強化,使其
可以被產生,但無法從自己的頂層工作階段啟動 Swarm:
structured_output 工具加入
子項,並根據提供的 JSON Schema 驗證其承載資料。無效或缺少的承載資料
會獲得一次修正提示。若重試後仍無法通過驗證,收集器完成項會保留子項的
原始文字、讓 structured 保持未設定,並包含 schemaError。
低階 agents_wait 結果會公開這些欄位,以供明確的復原邏輯使用。
子項是葉節點
Swarm 子項預設為葉節點。通用的agents.defaults.subagents.maxSpawnDepth 防護機制會在預設深度 1 下,防止子項產生
自己的子項。一般的協調慣用法是將工作傳回父項,而不是從子項產生更多工作:
agents.defaults.subagents.maxSpawnDepth 啟用的選用功能,不建議用於 Swarm。
群組上限、預算和可觀測性皆以扁平的收集器群組為前提。
每個子項只有一個准入擁有者。宣告和互動式子項使用
agents.defaults.subagents.maxChildrenPerAgent(預設為 5),且不會計入
收集器子項。收集器子項僅使用 maxChildrenPerGroup 和
maxTotalPerGroup;它們不會占用每個工作階段的子項預算。產生
深度防護仍適用於這兩種模式。
准入後,超出 maxConcurrent 的子項會在其 Swarm
群組內依 FIFO 順序排入佇列,並巢狀位於全域子代理程式執行通道中。這些並行層會將
工作排入佇列,而不是拒絕工作。超過任一群組上限的收集器產生要求
會遭拒絕,錯誤中會包含相關的設定鍵。
觀察 Swarm
當 Swarm 處於作用中時,在控制介面中開啟父工作階段的儀表板。 Swarm 小工具會將每個作用中的收集器群組呈現為每個子項一個圓點,並顯示 已排入佇列、執行中、完成或失敗狀態。標籤會顯示在圓點工具提示中,因此簡短且 穩定的標籤可讓大型 Swarm 更容易閱讀。 工作階段側邊欄會保留一般的父/子樹狀結構。展開父項資料列, 即可檢查收集器子項或開啟其逐字記錄,而不會失去 Swarm 階層結構。 收集器結果在其群組封存前都可繼續等待。當每個 成員都達到其保留期限後,OpenClaw 會將該群組的子項批次封存, 使已完成的 Swarm 不會留在作用中的工作階段樹狀結構中。從其他測試框架使用 Swarm
你可以在不使用 OpenClaw Code Mode 的情況下使用 Swarm。其核心工具不依賴執行框架:使用sessions_spawn({ collect: true }) 啟動收集器子代理,並透過有界的 agents_wait 呼叫取得其結果。
Codex Code Mode 會自動在 tools.* 下公開符合資格的動態 OpenClaw 工具。它不使用 OpenClaw 的 QuickJS 客體 API,也不需要 tools.codeMode,但仍必須啟用 tools.swarm。Codex 執行框架的 agents_wait 呼叫支援完整的 600 秒逾時。請使用以下模式:
agents_wait 呼叫可接受 1–1000 個執行識別碼。它會傳回:
pending 為空。收集器模式支援原生 OpenClaw 子代理;它不支援 ACP 執行階段、執行緒繫結、可見工作階段或持久工作階段模式。
限制與發展藍圖
Swarm v1 執行一次性的收集器子代理;規劃中的agents.session() API 將加入具狀態的多輪工作代理。目前子代理在本機閘道的子代理通道上執行;雲端部署規劃為明確的啟動選項。已儲存的工作流程定義與圖形 DSL 並非 Swarm 目前的發展方向。