openclaw agent
透過閘道執行一次代理回合。如果閘道請求失敗,會回退到內嵌代理;傳入 --local 可一開始就強制使用內嵌執行。
至少傳入一個工作階段選擇器:--to、--session-key、--session-id 或 --agent。
相關:代理傳送工具
選項
-m, --message <text>:訊息內文--message-file <path>:從 UTF-8 檔案讀取訊息內文-t, --to <dest>:用於衍生工作階段鍵的收件者--session-key <key>:用於路由的明確工作階段鍵--session-id <id>:明確的工作階段 ID--agent <id>:代理 ID;覆寫路由繫結--model <id>:此執行的模型覆寫(provider/model或模型 ID)--thinking <level>:代理思考層級(off、minimal、low、medium、high,加上提供者支援的自訂層級,例如xhigh、adaptive或max)--verbose <on|off>:為工作階段保存詳細程度--channel <channel>:傳遞通道;省略時使用主要工作階段通道--reply-to <target>:傳遞目標覆寫--reply-channel <channel>:傳遞通道覆寫--reply-account <id>:傳遞帳戶覆寫--local:直接執行內嵌代理(在外掛登錄檔預載後)--deliver:將回覆傳送回所選通道/目標--timeout <seconds>:覆寫代理逾時(預設 600,或agents.defaults.timeoutSeconds);0會停用逾時--json:輸出 JSON
範例
注意事項
- 只能傳入
--message或--message-file其中一個。--message-file會移除開頭的 UTF-8 BOM 並保留多行內容;若檔案不是有效的 UTF-8,則會拒絕。 - 斜線命令(例如
/compact)不能透過--message執行。命令列介面會拒絕它們,並指向對應的一級命令(壓縮使用openclaw sessions compact <key>)。 --local與內嵌回退執行都是一次性:為該次執行開啟的 bundled MCP loopback 資源與暖身 Claude stdio 工作階段,會在回覆後退役,因此腳本呼叫不會留下正在執行的本機子行程。以閘道為後端的執行,則會將閘道擁有的 MCP loopback 資源保留在正在執行的閘道行程底下。--channel、--reply-channel與--reply-account會影響回覆傳遞,而不是工作階段路由。--session-key會選取明確的工作階段鍵。以代理為前綴的鍵必須使用agent:<agent-id>:<session-key>,且同時提供--agent時,必須符合該鍵的代理 ID。裸露的非哨兵鍵在提供--agent時會限定於該代理,否則會限定於設定的預設代理;例如--agent ops --session-key incident-42會路由到agent:ops:incident-42。字面鍵global與unknown只有在未提供--agent時才維持不限定範圍。--json會保留 stdout 給 JSON 回應;閘道、外掛與內嵌回退診斷會送到 stderr,讓腳本可直接剖析 stdout。- 內嵌回退 JSON 會包含
meta.transport: "embedded"與meta.fallbackFrom: "gateway",讓腳本可偵測回退執行。 - 如果閘道接受執行,但命令列介面在等待最終回覆時逾時,內嵌回退會使用新的
gateway-fallback-*工作階段/執行 ID,並回報meta.fallbackReason: "gateway_timeout"加上回退工作階段欄位,而不是與閘道擁有的逐字稿競爭或靜默取代原始工作階段。 SIGTERM/SIGINT會中斷正在等待、以閘道為後端的請求;如果閘道已接受該次執行,命令列介面也會在結束前為該執行 ID 傳送chat.abort。--local與內嵌回退執行會收到相同訊號,但不會傳送chat.abort。如果內部執行去重鍵已經有此工作階段的作用中執行,回應會回報status: "in_flight",而非 JSON 命令列介面會列印 stderr 診斷,而不是空回覆。對外部排程/systemd 包裝器,請保留硬性終止後援,例如timeout -k 60 600 openclaw agent ...,讓監督程式可在關閉無法排空時回收該行程。- 當此命令觸發
models.json重新產生時,由 SecretRef 管理的提供者憑證會保存為非秘密標記(例如環境變數名稱、secretref-env:ENV_VAR_NAME或secretref-managed),絕不解析為秘密明文。標記寫入來自作用中的來源設定快照,而不是已解析的執行階段秘密值。
JSON 傳遞狀態
使用--json --deliver 時,命令列介面 JSON 回應會包含最上層 deliveryStatus,讓腳本可區分已傳遞、已抑制、部分成功與失敗的傳送:
result.deliveryStatus 保留原始閘道結果形狀。
deliveryStatus.status 是下列其中之一:
| 狀態 | 意義 |
|---|---|
sent | 傳遞已完成。 |
suppressed | 傳遞被刻意不傳送(例如訊息傳送鉤子取消了它,或沒有可見結果)。終端狀態,不重試。 |
partial_failed | 後續酬載失敗前,至少已有一個酬載送出。 |
failed | 沒有完成任何持久傳送,或傳遞預檢失敗。 |
requested:物件存在時一律為true。attempted:持久傳送路徑執行後為true;預檢失敗或沒有可見酬載時為false。succeeded:true、false或"partial";"partial"會搭配status: "partial_failed"。reason:來自持久傳遞或預檢驗證的小寫蛇形命名原因。已知值包含cancelled_by_message_sending_hook、no_visible_payload、no_visible_result、channel_resolved_to_internal、unknown_channel、invalid_delivery_target與no_delivery_target;失敗的持久傳送也可能回報失敗階段。請將未知值視為不透明,因為此集合可能擴充。resultCount:可用時,通道傳送結果的數量。sentBeforeError:部分失敗在出錯前至少送出一個酬載時為true。error:失敗或部分失敗的傳送為true。errorMessage:只有在擷取到基礎傳遞錯誤訊息時才存在。預檢失敗會帶有error/reason,但沒有errorMessage。payloadOutcomes:選用的逐酬載結果,包含可用時的index、status、reason、resultCount、error、stage、sentBeforeError或鉤子中繼資料。