Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Heartbeat 還是 Cron? 請參閱自動化與任務,了解何時使用各自。
快速開始(初學者)
設定範例:
預設值
- 間隔:
30m(或在偵測到 Anthropic OAuth/token 驗證模式時為1h,包含 Claude CLI 重用)。設定agents.defaults.heartbeat.every或每個代理的agents.list[].heartbeat.every;使用0m停用。 - 提示本文(可透過
agents.defaults.heartbeat.prompt設定):Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. - Heartbeat 提示會以使用者訊息原樣送出。只有在預設代理已啟用 Heartbeat 時,系統提示才會包含「Heartbeat」區段,且該次執行會在內部標記。
- 使用
0m停用 Heartbeat 時,一般執行也會從啟動內容中省略HEARTBEAT.md,因此模型不會看到僅供 Heartbeat 使用的指示。 - 活動時段(
heartbeat.activeHours)會在設定的時區中檢查。位於時間範圍外時,Heartbeat 會跳過,直到下一個落在時間範圍內的 tick。 - 當 Cron 工作正在作用中或排隊時,Heartbeat 會自動延後。設定
heartbeat.skipWhenBusy: true也會在額外忙碌的通道(子代理或巢狀命令工作)上延後;這對本機 Ollama 和其他受限的單一執行階段主機很有用。
Heartbeat 提示的用途
預設提示刻意保持寬泛:- 背景任務:「Consider outstanding tasks」會促使代理檢視後續事項(收件匣、行事曆、提醒、排隊工作),並浮現任何緊急事項。
- 人類關懷確認:「Checkup sometimes on your human during day time」會促使偶爾發送輕量的「有什麼需要嗎?」訊息,但會使用你設定的本地時區(請參閱時區)來避免夜間垃圾訊息。
agents.defaults.heartbeat.prompt(或 agents.list[].heartbeat.prompt)設定為自訂本文(原樣送出)。
回應合約
- 如果沒有任何需要注意的事項,請回覆
HEARTBEAT_OK。 - 在 Heartbeat 執行期間,當
HEARTBEAT_OK出現在回覆的開頭或結尾時,OpenClaw 會將它視為確認。此 token 會被移除,且如果剩餘內容 ≤ackMaxChars(預設:300),該回覆會被丟棄。 - 如果
HEARTBEAT_OK出現在回覆的中間,則不會受到特殊處理。 - 對於警示,請勿包含
HEARTBEAT_OK;只回傳警示文字。
HEARTBEAT_OK 會被移除並記錄;只有 HEARTBEAT_OK 的訊息會被丟棄。
設定
範圍與優先順序
agents.defaults.heartbeat設定全域 Heartbeat 行為。agents.list[].heartbeat會合併在其上;如果任何代理有heartbeat區塊,只有那些代理會執行 Heartbeat。channels.defaults.heartbeat設定所有頻道的可見性預設值。channels.<channel>.heartbeat覆寫頻道預設值。channels.<channel>.accounts.<id>.heartbeat(多帳號頻道)覆寫每個頻道的設定。
每個代理的 Heartbeat
如果任何agents.list[] 項目包含 heartbeat 區塊,只有那些代理會執行 Heartbeat。每個代理的區塊會合併在 agents.defaults.heartbeat 之上(因此你可以先設定一次共用預設值,再按代理覆寫)。
範例:兩個代理,只有第二個代理會執行 Heartbeat。
活動時段範例
將 Heartbeat 限制在特定時區的營業時間內:24/7 設定
如果你想讓 Heartbeat 全天執行,請使用下列其中一種模式:- 完全省略
activeHours(沒有時間範圍限制;這是預設行為)。 - 設定全天時間範圍:
activeHours: { start: "00:00", end: "24:00" }。
多帳號範例
使用accountId 在 Telegram 等多帳號頻道上指定特定帳號:
欄位註記
Heartbeat 間隔(持續時間字串;預設單位 = 分鐘)。
Heartbeat 執行的選用模型覆寫(
provider/model)。啟用時,也會在可用時傳遞個別的
Reasoning: 訊息(形狀與 /reasoning on 相同)。為 true 時,Heartbeat 執行會使用輕量級啟動內容,且只保留工作區啟動檔案中的
HEARTBEAT.md。為 true 時,每次 Heartbeat 都會在沒有先前對話歷史的新工作階段中執行。使用與 Cron
sessionTarget: "isolated" 相同的隔離模式。可大幅降低每次 Heartbeat 的 token 成本。與 lightContext: true 搭配可達到最大節省。傳遞路由仍會使用主要工作階段內容。為 true 時,Heartbeat 執行會在額外忙碌的通道上延後:子代理或巢狀命令工作。即使沒有此旗標,Cron 通道一律會延後 Heartbeat,因此本機模型主機不會同時執行 Cron 和 Heartbeat 提示。
last:傳遞到最後使用的外部頻道。- 明確頻道:任何已設定的頻道或 Plugin ID,例如
discord、matrix、telegram或whatsapp。 none(預設):執行 Heartbeat,但不會向外部傳遞。
控制直接/DM 傳遞行為。
allow:允許直接/DM Heartbeat 傳遞。block:抑制直接/DM 傳遞(reason=dm-blocked)。選用收件者覆寫(頻道特定 ID,例如 WhatsApp 的 E.164 或 Telegram 聊天 ID)。對於 Telegram 主題/執行緒,請使用
<chatId>:topic:<messageThreadId>。多帳號頻道的選用帳號 ID。當
target: "last" 時,如果解析後的最後頻道支援帳號,帳號 ID 會套用到該頻道;否則會被忽略。如果帳號 ID 與解析後頻道的任何已設定帳號不相符,傳遞會被跳過。覆寫預設提示本文(不會合併)。
傳遞前,在
HEARTBEAT_OK 之後允許的最大字元數。為 true 時,會在 Heartbeat 執行期間抑制工具錯誤警告酬載。
將 Heartbeat 執行限制在一段時間範圍內。物件包含
start(HH:MM,含起始時間;使用 00:00 表示一天開始)、end(HH:MM,不含結束時間;可用 24:00 表示一天結束),以及選用的 timezone。- 省略或
"user":若已設定,會使用你的agents.defaults.userTimezone,否則退回使用主機系統時區。 "local":一律使用主機系統時區。- 任何 IANA 識別碼(例如
America/New_York):直接使用;若無效,則退回使用上方的"user"行為。 - 對於作用中時段,
start和end不可相同;相同值會被視為零寬度(永遠在時段之外)。 - 在作用中時段之外,Heartbeat 會被略過,直到下一個落在時段內的 tick。
傳送行為
工作階段與目標路由
工作階段與目標路由
- Heartbeat 預設會在 agent 的主要工作階段中執行(
agent:<id>:<mainKey>),或在session.scope = "global"時使用global。設定session可覆寫為特定頻道工作階段(Discord/WhatsApp/等)。 session只會影響執行情境;傳送由target和to控制。- 若要傳送到特定頻道/收件者,請設定
target+to。使用target: "last"時,傳送會使用該工作階段最後一個外部頻道。 - Heartbeat 傳送預設允許直接/DM 目標。設定
directPolicy: "block"可在仍執行 Heartbeat 回合的同時抑制直接目標傳送。 - 如果主佇列、目標工作階段 lane、cron lane,或作用中的 cron job 忙碌中,Heartbeat 會被略過並稍後重試。
- 如果
skipWhenBusy: true,subagent 和巢狀 lane 也會延後 Heartbeat 執行。 - 如果
target解析後沒有外部目的地,執行仍會發生,但不會送出對外訊息。
可見性與略過行為
可見性與略過行為
- 如果
showOk、showAlerts和useIndicator全部停用,執行會一開始就以reason=alerts-disabled略過。 - 如果只有警示傳送被停用,OpenClaw 仍可執行 Heartbeat、更新到期任務時間戳、還原工作階段閒置時間戳,並抑制對外警示酬載。
- 如果解析後的 Heartbeat 目標支援輸入中狀態,OpenClaw 會在 Heartbeat 執行期間顯示輸入中。這會使用 Heartbeat 原本會傳送聊天輸出的同一個目標,並可透過
typingMode: "never"停用。
工作階段生命週期與稽核
工作階段生命週期與稽核
- 僅 Heartbeat 的回覆不會讓工作階段保持存活。Heartbeat 中繼資料可能會更新工作階段列,但閒置到期會使用最後一則真實使用者/頻道訊息的
lastInteractionAt,每日到期會使用sessionStartedAt。 - Control UI 和 WebChat 歷程會隱藏 Heartbeat 提示和僅 OK 的確認。底層工作階段逐字稿仍可包含這些回合,以便稽核/重播。
- 分離式背景任務可以將系統事件排入佇列,並在主要工作階段應快速注意到某些事時喚醒 Heartbeat。該喚醒不會讓 Heartbeat 執行背景任務。
可見性控制
預設情況下,HEARTBEAT_OK 確認會被抑制,而警示內容會被傳送。你可以依頻道或依帳號調整:
每個旗標的作用
showOk:當模型傳回僅 OK 的回覆時,送出HEARTBEAT_OK確認。showAlerts:當模型傳回非 OK 回覆時,送出警示內容。useIndicator:為 UI 狀態介面發出指示器事件。
個別頻道與個別帳號範例
常見模式
| 目標 | 設定 |
|---|---|
| 預設行為(靜默 OK、開啟警示) | (不需要設定) |
| 完全靜默(無訊息、無指示器) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: false } |
| 僅指示器(無訊息) | channels.defaults.heartbeat: { showOk: false, showAlerts: false, useIndicator: true } |
| 只在一個頻道顯示 OK | channels.telegram.heartbeat: { showOk: true } |
HEARTBEAT.md(選用)
如果工作區中存在HEARTBEAT.md 檔案,預設提示會告訴 agent 閱讀它。可把它視為你的「Heartbeat 檢查清單」:小型、穩定,且適合每 30 分鐘納入一次。
在一般執行中,只有在預設 agent 啟用 Heartbeat 指引時,才會注入 HEARTBEAT.md。使用 0m 停用 Heartbeat cadence,或設定 includeSystemPromptSection: false,會將它從一般 bootstrap 情境中省略。
如果 HEARTBEAT.md 存在但實際上是空的(只有空白行和像 # Heading 這樣的 markdown 標題),OpenClaw 會略過 Heartbeat 執行以節省 API 呼叫。該略過會回報為 reason=empty-heartbeat-file。如果檔案不存在,Heartbeat 仍會執行,並由模型決定要做什麼。
保持精簡(簡短檢查清單或提醒)以避免提示膨脹。
HEARTBEAT.md 範例:
tasks: 區塊
HEARTBEAT.md 也支援小型結構化 tasks: 區塊,用於 Heartbeat 本身內以間隔為基礎的檢查。
範例:
行為
行為
- OpenClaw 會解析
tasks:區塊,並依每個任務自己的interval檢查。 - 只有到期任務會包含在該 tick 的 Heartbeat 提示中。
- 如果沒有任務到期,Heartbeat 會完全略過(
reason=no-tasks-due),以避免浪費模型呼叫。 HEARTBEAT.md中的非任務內容會保留,並在到期任務清單之後附加為額外情境。- 任務上次執行時間戳會儲存在工作階段狀態(
heartbeatTaskState)中,因此間隔能在一般重新啟動後保留。 - 任務時間戳只會在 Heartbeat 執行完成其一般回覆路徑後才推進。被略過的
empty-heartbeat-file/no-tasks-due執行不會將任務標記為已完成。
agent 可以更新 HEARTBEAT.md 嗎?
可以,只要你要求它。HEARTBEAT.md 只是 agent 工作區中的一般檔案,所以你可以在一般聊天中告訴 agent,例如:
- “Update
HEARTBEAT.mdto add a daily calendar check.” - “Rewrite
HEARTBEAT.mdso it’s shorter and focused on inbox follow-ups.”
手動喚醒(隨選)
你可以使用以下指令排入一個系統事件並觸發立即 Heartbeat:heartbeat,手動喚醒會立即執行每個這類 agent 的 Heartbeat。
使用 --mode next-heartbeat 可等待下一個排程 tick。
推理傳送(選用)
預設情況下,Heartbeat 只會傳送最終的「回答」酬載。 如果你想要透明度,請啟用:agents.defaults.heartbeat.includeReasoning: true
Reasoning: 為前綴的訊息(形狀與 /reasoning on 相同)。當 agent 管理多個工作階段/codexes,而你想查看它為什麼決定 ping 你時,這可能很有用,但也可能洩露比你想要更多的內部細節。建議在群組聊天中保持關閉。
成本意識
Heartbeat 會執行完整 agent 回合。較短的間隔會消耗更多 token。若要降低成本:- 使用
isolatedSession: true以避免傳送完整對話歷程(每次執行約從 ~100K token 降至 ~2-5K)。 - 使用
lightContext: true將 bootstrap 檔案限制為只有HEARTBEAT.md。 - 設定較便宜的
model(例如ollama/llama3.2:1b)。 - 讓
HEARTBEAT.md保持精簡。 - 如果你只想要內部狀態更新,請使用
target: "none"。
Heartbeat 後的情境溢位
如果 Heartbeat 使用較小的本機模型,例如具備 32k 視窗的 Ollama 模型,而下一個主要工作階段回合回報情境溢位,請檢查前一個 Heartbeat 是否讓工作階段停留在 Heartbeat 模型上。當最後的執行階段模型符合已設定的heartbeat.model 時,OpenClaw 的重設訊息會指出這一點。
使用 isolatedSession: true 在全新工作階段中執行 Heartbeat,並搭配 lightContext: true 取得最小提示,或選擇具備足夠大情境視窗、可供共享工作階段使用的 Heartbeat 模型。