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.entries.*.tools.swarm,為單一已設定的代理覆寫 Swarm。每個代理的物件會合併至頂層 tools.swarm 物件之上。
需求
agents.run、phase 和 log 客體全域變數同時需要 Swarm 與 OpenClaw Code Mode:
sessions_spawn 的有效存取權。工具設定檔、允許/拒絕政策、供應商規則及沙箱政策都可能移除該工具。
如果指令碼回報 sessions_spawn 無法使用,請參閱 Code Mode 啟用方式和子代理。
defaultAgentId 和每次執行的 agentId 值,都必須指定提出要求者的 subagents.allowAgents 政策所允許的已設定目標。OpenClaw 會拒絕未知或不允許的目標,而不會改用其他代理。
撰寫 Swarm 指令碼
啟用 Swarm 後,Code Mode 會提供以下客體 API:schema,agents.run() 會解析為子項的最終文字。若提供 JSON Schema,則會解析為子項透過 structured_output 工具提交的值。失敗、遭終止、逾時或結構描述無效的子項,會以 SwarmAgentError 拒絕該 Promise。請在 Code Mode 內從 API.read("agents.d.ts") 讀取確切產生的宣告與簡短協調慣用法。
使用 label,可在儀表板與側邊欄中顯示容易辨識的子項名稱。在選項中使用 phase,可在該子項啟動前立即發布階段;若多個子項屬於同一階段,也可呼叫 phase()。
log() 會發布簡短的進度備註。進度呼叫採射後不理方式;若介面無法使用,也不會延遲指令碼。
並行分派並取得結構化結果
此範例會為每個主題啟動一個研究代理,等待所有代理完成,然後要求最後一個子項綜整其結構化報告:Promise.all 是分派與彙整的邊界。OpenClaw 最多會為群組啟動 maxConcurrent 個子項,其餘則依提交順序排入佇列。
Code Mode 另外透過 tools.codeMode.maxPendingToolCalls 限制同時執行的客體橋接呼叫(預設為 16,上限為 128)。對於非常大的群組,請在該限制以下分批啟動,並為 phase()、log() 和子項等待狀態轉換保留空間。maxConcurrent 會限制執行中的子項數量;它不會提高客體橋接呼叫限制。
在決策關卡中迴圈執行
當每次執行都會決定是否需要再執行一次時,請使用有界的while 迴圈:
maxTotalPerGroup 是最終安全防線,不能取代明確的停止條件。
處理第一個完成的子項
agents.run() 會傳回一般 Promise,因此 Promise.race 可對第一個完成的 Code Mode 子項做出反應。對於呼叫較低階工具的測試框架,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 群組內依先進先出順序排入佇列,並巢狀位於全域子代理通道中。這些並行處理層會將工作排入佇列,而非拒絕工作。超出任一群組上限的收集器產生作業會遭拒絕,且錯誤中會包含相關的設定鍵。
觀察 Swarm
Swarm 運作時,在控制介面中開啟父工作階段的儀表板。Swarm 小工具會呈現每個作用中的收集器群組,每個子項各以一個圓點表示,並顯示已排入佇列、執行中、已完成或失敗狀態。標籤會顯示在圓點的工具提示中,因此簡短且穩定的標籤可讓較大型的 Swarm 更容易閱讀。 工作階段側邊欄會保留一般的父項/子項樹狀結構。展開父項列,即可檢查收集器子項或開啟其逐字記錄,而不會失去 Swarm 階層結構。 收集器結果在其群組封存前仍可等待取得。每個成員都達到保留期限後,OpenClaw 會將該群組的子項目整批封存,使已完成的群集不會留在即時工作階段樹狀結構中。從其他執行框架使用 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 秒逾時。
在目前支援的 Codex 執行階段中,動態 OpenClaw 工具結果會以 JSON 文字傳送至 Code Mode。讀取欄位前,請先剖析每個結果。Codex 也會將動態工具呼叫序列化,因此 Promise.all 不會同時提交多個 sessions_spawn 呼叫。請在有界迴圈中啟動收集器;已接受的子項目在後續啟動請求提交時仍可繼續執行。
agents_wait 呼叫接受 1–1000 個執行 ID。它會傳回:
pending 為空。收集器模式支援原生 OpenClaw 子代理程式;不支援 ACP 執行階段、執行緒綁定、可見工作階段或持續性工作階段模式。
限制與藍圖
Swarm v1 執行單次收集器子項目;規劃中的agents.session() API 將新增具狀態的多輪工作程式。子項目目前在本機閘道的子代理程式通道上執行;雲端配置規劃為明確的產生選項。儲存的工作流程定義和圖形 DSL 並不屬於 Swarm 目前的發展方向。