CLI commands
排程
openclaw cron
管理閘道排程器的排程工作。
快速建立工作
openclaw cron create 是 openclaw cron add 的別名。建立新工作時,請先放排程,再放提示詞:
openclaw cron create "0 7 * * *" \ "彙整夜間更新。" \ --name "晨間摘要" \ --agent ops當工作應以 POST 傳送完成的酬載,而非傳送至聊天目標時,請使用 --webhook <url>:
openclaw cron create "0 18 * * 1-5" \ "以 JSON 彙整今天的部署。" \ --name "部署摘要" \ --webhook "https://example.invalid/openclaw/cron"若要執行確定性的 shell 風格工作,直接在 OpenClaw 排程中執行,而不啟動隔離的代理程式/模型執行,請使用 --command:
openclaw cron create "*/15 * * * *" \ --name "佇列深度探測" \ --command "scripts/check-queue.sh" \ --command-cwd "/srv/app" \ --announce \ --channel telegram \ --to "-1001234567890"--command <shell> 會儲存 argv: ["sh", "-lc", <shell>]。若要精確執行 argv,請使用 --command-argv '["node","scripts/report.mjs"]'。命令工作會擷取 stdout/stderr、記錄一般排程歷程,並透過與隔離工作相同的 announce、webhook 或 none 傳送模式路由輸出。僅印出 NO_REPLY 的命令會被抑制。
工作階段
--session 接受 main、isolated、current 或 session:<id>。
工作階段金鑰
main會繫結至代理程式的主要工作階段。isolated會為每次執行建立新的逐字記錄和工作階段 ID。current會繫結至建立時的作用中工作階段。session:<id>會固定至明確的持久工作階段金鑰。
隔離工作階段語意
隔離執行會重設周遭對話內容。新執行會重設頻道與群組路由、傳送/佇列政策、權限提升、來源及 ACP 執行階段繫結。安全的偏好設定,以及使用者明確選取的模型或驗證覆寫,可以延續至後續執行。
傳送
openclaw cron list 和 openclaw cron show <job-id> 會預覽解析後的傳送路由。對於 channel: "last",預覽會顯示路由是從主要或目前工作階段解析而來,或將以關閉方式失敗。
帶有提供者前綴的目標可釐清尚未解析的公告頻道。例如,當省略 delivery.channel 或其為 last 時,to: "telegram:123" 會選取 Telegram。只有已載入外掛所宣告的前綴才是提供者選擇器。如果明確指定 delivery.channel,前綴必須符合該頻道;搭配 to: "telegram:123" 的 channel: "whatsapp" 會被拒絕。imessage: 和 sms: 等服務前綴仍屬於頻道自行管理的目標語法。
傳送責任歸屬
隔離排程的聊天傳送由代理程式與執行器共同負責:
- 當聊天路由可用時,代理程式可使用
message工具直接傳送。 - 僅當代理程式未直接傳送至解析後的目標時,
announce才會以備援方式傳送最終回覆。 webhook會將完成的酬載 POST 至 URL。none會停用執行器的備援傳送。
使用 cron add|create --webhook <url> 或 cron edit <job-id> --webhook <url> 設定網路鉤子傳送。請勿將 --webhook 與 --announce、--no-deliver、--channel、--to、--thread-id 或 --account 等聊天傳送旗標搭配使用。
cron edit <job-id> 可透過 --clear-channel、--clear-to、--clear-thread-id 和 --clear-account 取消設定個別傳送路由欄位(每一項若與其對應的設定旗標搭配使用,都會被拒絕)。--no-deliver 只會停用執行器備援傳送;不同的是,這些選項會移除已儲存的欄位,使工作再次從預設值解析該部分路由。
--announce 是最終回覆的執行器備援傳送。--no-deliver 會停用該備援,但當聊天路由可用時,不會移除代理程式的 message 工具。
從作用中聊天建立的提醒會保留即時聊天傳送目標,供備援公告傳送使用。內部工作階段金鑰可能為小寫;請勿將其作為 Matrix 房間 ID 等區分大小寫之提供者 ID 的真實來源。
失敗傳送
失敗通知依下列順序解析:
- 工作上的
delivery.failureDestination。 - 全域
cron.failureDestination。 - 工作的主要公告目標(前兩者皆未解析至具體目的地時)。
即使未產生回覆酬載,隔離排程執行也會將執行層級的代理程式失敗視為工作錯誤,因此模型/提供者失敗仍會增加錯誤計數器並觸發失敗通知。
命令排程工作不會啟動隔離的代理程式回合。結束代碼為零時會記錄 ok;非零結束代碼、訊號、逾時或無輸出逾時則會記錄 error,並可能觸發相同的失敗通知路徑。
如果隔離執行在首次模型請求前逾時,openclaw cron show 和 openclaw cron runs 會包含階段特定錯誤,例如 setup timed out before runner start,或指出最後已知啟動階段的停滯訊息(例如 context-engine)。對於命令列介面支援的提供者,模型前監控程序會持續運作,直到外部命令列介面回合開始,因此工作階段查詢、鉤子、驗證、提示詞及命令列介面設定的停滯都會回報為模型前排程失敗。
排程
單次工作
--at <datetime> 會排定單次執行。未含時差的日期時間會視為 UTC,除非同時傳入 --tz <iana>,此時會依指定時區解讀當地鐘面時間。
週期性工作
週期性工作在連續發生錯誤後,會使用指數重試退避:30s、1m、5m、15m、60m。下一次成功執行後,排程會恢復正常。
略過的執行會與執行錯誤分開追蹤。它們不會影響重試退避,但 openclaw cron edit <job-id> --failure-alert-include-skipped 可讓失敗警示包含重複的略過執行通知。
對於以本機已設定模型提供者為目標的隔離工作(基底 URL 位於迴路介面、私人網路或 .local),排程會在啟動代理程式回合前執行輕量的提供者預檢:在 /api/tags 探測 api: "ollama" 提供者;在 /models 探測其他本機 OpenAI 相容提供者(api: "openai-completions",例如 vLLM、SGLang、LM Studio)。如果端點無法連線,該次執行會記錄為 skipped,並在之後的排程重試;每個端點的可連線性結果會快取 5 分鐘,以免許多使用相同本機伺服器的工作反覆探測並造成負荷。
排程工作、待處理的執行階段狀態及執行歷程都位於共用的 SQLite 狀態資料庫中。舊版 jobs.json、<name>-state.json 和 runs/*.jsonl 檔案會匯入一次,並以 .migrated 後綴重新命名。匯入後,請使用 openclaw cron add|edit|remove 編輯排程,而非編輯 JSON 檔案。
手動執行
openclaw cron run <job-id> 預設會強制執行,並在手動執行排入佇列後立即返回。成功回應包含 { ok: true, enqueued: true, runId }。使用傳回的 runId 查看之後的結果:
openclaw cron run <job-id>openclaw cron runs --id <job-id> --run-id <run-id>如果指令碼應阻塞至該次排入佇列的確切執行記錄終止狀態,請加入 --wait:
openclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2s搭配 --wait 時,命令列介面仍會先呼叫 cron.run,再針對傳回的 runId 輪詢 cron.runs。只有當執行以 ok 狀態完成時,命令才會以 0 結束。當執行以 error 或 skipped 完成、閘道回應不包含 runId,或 --wait-timeout 到期時(預設為 10m,預設每隔 2s 輪詢),命令會以非零代碼結束。--poll-interval 必須大於零。
模型
cron add|edit --model <ref> 會為工作選取允許的模型。cron add|edit --fallbacks <list> 會設定每個工作的備援模型,例如 --fallbacks openrouter/gpt-4.1-mini,openai/gpt-5;傳入 --fallbacks "" 可執行不使用備援的嚴格執行。cron edit <job-id> --clear-fallbacks 會移除每個工作的備援覆寫。cron edit <job-id> --clear-model 會移除每個工作的模型覆寫,使工作遵循一般排程模型選取優先順序(若有已儲存的排程工作階段覆寫則使用它,否則使用代理程式/預設模型);此選項不能與 --model 搭配使用。cron add|edit --thinking <level> 會設定每個工作的思考覆寫;cron edit <job-id> --clear-thinking 會移除該覆寫,使工作遵循一般排程思考優先順序,且不能與 --thinking 搭配使用。
排程 --model 是工作的主要模型,而非聊天工作階段的 /model 覆寫。這表示:
- 當選取的工作模型失敗時,已設定的模型備援仍會套用。
- 如果存在每個工作的酬載
fallbacks,它會取代已設定的備援清單。 - 空白的每個工作備援清單(工作酬載/API 中的
--fallbacks ""或fallbacks: [])會使排程執行採用嚴格模式。 - 當工作有
--model,但未設定備援清單時,OpenClaw 會傳入明確的空白備援覆寫,使代理程式主要模型不會被附加為隱藏的重試目標。 - 本機提供者預檢會依序檢查已設定的備援,之後才會將排程執行標記為
skipped。
openclaw doctor 會回報已設定 payload.model 的工作,包括提供者命名空間計數,以及與 agents.defaults.model 不符的項目。當即時聊天與排程工作之間的驗證、提供者或計費行為有所不同時,請使用此檢查。
隔離排程模型優先順序
隔離排程會依下列順序解析作用中模型:
- Gmail 鉤子覆寫。
- 每個工作的
--model。 - 已儲存的排程工作階段模型覆寫(使用者選取模型時)。
- 代理程式或預設模型選取。
快速模式
隔離排程快速模式會遵循解析後的即時模型選擇。模型設定 params.fastMode 預設會套用,但已儲存工作階段的 fastMode 覆寫仍優先於設定。當解析後的模式為 auto 時,截止時間會使用所選模型的 params.fastAutoOnSeconds 值,預設為 60 秒。
即時模型切換重試
如果隔離執行擲回 LiveSessionModelSwitchError,排程會在重試前,為目前執行保存切換後的供應商和模型(若有切換後的驗證設定檔覆寫,也會一併保存)。外層重試迴圈在初次嘗試後最多允許兩次切換重試,之後便會中止,而非無限循環。
執行輸出與拒絕
抑制過時確認訊息
隔離排程回合會抑制僅含過時確認訊息的回覆。如果第一個結果只是暫時狀態更新,且沒有任何後代子代理程式執行負責提供最終答案,排程會在傳送前重新提示一次,以取得真正的結果。
抑制靜默權杖
如果隔離排程執行只傳回靜默權杖(NO_REPLY 或 no_reply),排程會同時抑制直接對外傳送與備援的佇列摘要路徑,因此不會有任何內容回傳至聊天。
結構化拒絕
隔離排程執行會將內嵌執行所提供的結構化執行拒絕中繼資料(編碼為 SYSTEM_RUN_DENIED 或 INVALID_REQUEST 的致命執行工具錯誤)視為權威拒絕訊號。它們也會辨識節點主機的 UNAVAILABLE 包裝,其中包含帶有上述任一代碼的巢狀結構化錯誤。
除非內嵌執行也提供結構化拒絕中繼資料,否則排程不會將最終輸出中的文字或看似要求核准的拒絕措辭分類為拒絕,因此一般的助理文字不會被視為遭封鎖的命令。
cron list 和執行歷程會顯示拒絕原因,而不會將遭封鎖的命令回報為 ok。
保留
保留行為:
cron.sessionRetention(預設為24h,或設為false以停用)會清除已完成的隔離執行工作階段。- 執行歷程會為每個排程工作保留最新的 2000 個終止狀態資料列。遺失的資料列仍採用標準的 24 小時遺失工作清理期限。
移轉較舊的工作
常見編輯
在不變更訊息的情況下更新傳送設定:
openclaw cron edit <job-id> --announce --channel telegram --to "123456789"停用隔離工作的傳送:
openclaw cron edit <job-id> --no-deliver為隔離工作啟用輕量啟動內容:
openclaw cron edit <job-id> --light-context向特定頻道發送公告:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"向 Telegram 論壇主題發送公告:
openclaw cron edit <job-id> --announce --channel telegram --to "-1001234567890" --thread-id 42建立使用輕量啟動內容的隔離工作:
openclaw cron create "0 7 * * *" \ "摘要整理夜間更新。" \ --name "輕量晨間摘要" \ --session isolated \ --light-context \ --no-deliver--light-context 僅適用於隔離的代理程式回合工作。對於排程執行,輕量模式會讓啟動內容保持空白,而非注入完整的工作區啟動集合。
建立具有精確 argv、cwd、env、stdin 和輸出限制的命令工作:
openclaw cron create "*/30 * * * *" \ --name "部位匯出" \ --command-argv '["node","scripts/export-position.mjs"]' \ --command-cwd "/srv/app" \ --command-env "NODE_ENV=production" \ --command-input '{"mode":"summary"}' \ --timeout-seconds 120 \ --no-output-timeout-seconds 30 \ --output-max-bytes 65536 \ --webhook "https://example.invalid/openclaw/cron"常見管理命令
手動執行與檢查:
openclaw cron listopenclaw cron list --agent opsopenclaw cron get <job-id>openclaw cron show <job-id>openclaw cron run <job-id>openclaw cron run <job-id> --dueopenclaw cron run <job-id> --wait --wait-timeout 10mopenclaw cron run <job-id> --wait --wait-timeout 10m --poll-interval 2sopenclaw cron runs --id <job-id> --limit 50openclaw cron runs --id <job-id> --run-id <run-id>openclaw cron list 預設會顯示已啟用的工作。傳入 --all 可納入已停用的工作,或傳入 --agent <id>,僅顯示其有效正規化代理程式 ID 相符的工作;未儲存代理程式 ID 的工作會視為使用已設定的預設代理程式。
openclaw cron get <job-id> 會直接傳回已儲存工作的 JSON。若需要包含傳送路由預覽的人類可讀檢視,請使用 cron show <job-id>。
cron list --json 和 cron show <job-id> --json 會在每個工作的頂層加入 status 欄位,此欄位根據 enabled、state.runningAtMs 和 state.lastRunStatus 計算。值包括:disabled、running、ok、error、skipped 或 idle。JSON 狀態會保持標準且不加裝飾,使外部工具無須重新推導即可讀取工作狀態;人類可讀輸出可能會用失敗次數標示重複的 error 狀態。
cron runs 項目包含傳送診斷資訊,其中包括預期的排程目標、解析後的目標、訊息工具傳送、備援使用情況和已傳送狀態。
每個工作的私有暫存內容(心跳偵測檢查清單和類似的監控內容):
openclaw cron scratch <job-id> # 顯示目前的暫存內容openclaw cron scratch <job-id> --json # 暫存內容及修訂中繼資料openclaw cron scratch <job-id> --set "text" # 以指定文字取代暫存內容openclaw cron scratch <job-id> --file notes.md # 使用檔案內容取代暫存內容(- 代表 stdin)openclaw cron scratch <job-id> --unset # 移除暫存資料列暫存內容會儲存在共用狀態資料庫中,上限為 256 KiB,而且絕不會包含在 cron list/cron get/cron runs 輸出中。寫入會使用命令啟動時讀取的修訂版本,以比較後交換方式防止衝突;也可傳入 --expected-revision <n>,改為固定使用明確的修訂版本。如需瞭解心跳偵測監控器如何使用暫存內容,請參閱心跳偵測。
重新指定代理程式和工作階段:
openclaw cron edit <job-id> --agent opsopenclaw cron edit <job-id> --clear-agentopenclaw cron edit <job-id> --session currentopenclaw cron edit <job-id> --session "session:daily-brief"當代理程式回合工作省略 --agent 時,openclaw cron add 會發出警告,並改用預設代理程式(main)。建立工作時傳入 --agent <id>,即可固定使用特定代理程式。
傳送調整:
openclaw cron edit <job-id> --announce --channel slack --to "channel:C1234567890"openclaw cron edit <job-id> --webhook "https://example.invalid/openclaw/cron"openclaw cron edit <job-id> --best-effort-deliveropenclaw cron edit <job-id> --no-best-effort-deliveropenclaw cron edit <job-id> --no-deliver