Cron vs Heartbeat:何時使用各自
心跳和 Cron 任務都讓您定期執行任務。本指南幫您為您的使用案例選擇正確的機制。快速決策指南
| 使用案例 | 推薦 | 原因 |
|---|---|---|
| 每 30 分鐘檢查收件匣 | Heartbeat | 與其他檢查批次化,具備語境意識 |
| 每天早上 9 點準時發送報告 | Cron (隔離) | 需要精確時間 |
| 監控日曆中的即將到來事件 | Heartbeat | 週期性覺察的自然適配 |
| 執行每週深度分析 | Cron (隔離) | 獨立任務,可使用不同模型 |
| 20 分鐘後提醒我 | Cron (main, --at) | 一次性精確時間 |
| 背景專案健康檢查 | Heartbeat | 依附於現有週期 |
Heartbeat:週期性覺察
Heartbeats 在主會話以常規間隔(預設:30 分鐘)執行。它們設計用於 Agent 檢查事項並表面任何重要的內容。何時使用 Heartbeat
- 多個週期檢查:與其設定 5 個分開的 Cron 任務檢查收件匣、日曆、天氣、通知和專案狀態,一個 Heartbeat 可以批次所有這些。
- 語境覺察決策:Agent 有完整的主會話語境,所以可以做出聰慧決策,關於什麼是緊急 vs 什麼可以等待。
- 對話連續性:Heartbeat 執行共享相同會話,所以 Agent 記得最近的對話並可以自然地跟進。
- 低開銷監控:一個 Heartbeat 取代許多小型輪詢任務。
Heartbeat 優勢
- 批次多個檢查:一次 Agent 輪次可審查收件匣、日曆和通知。
- 減少 API 呼叫:一個 Heartbeat 比 5 個隔離 Cron 任務便宜。
- 語境覺察:Agent 知道您在做什麼,可以相應地優先考慮。
- 智慧抑制:若沒有需要注意的東西,Agent 回覆
HEARTBEAT_OK且沒有訊息被投遞。 - 自然時間:基於佇列負載稍微漂移,這對大多數監控都很好。
Heartbeat 範例:HEARTBEAT.md 檢查清單
配置 Heartbeat
Cron:精確排程
Cron 任務在精確時間執行,可在隔離會話中執行而不影響主語境。何時使用 Cron
- 精確時間必要:「每週一早上 9:00 AM 傳送」(不是「9 點前後某時」)。
- 獨立任務:不需要對話語境的任務。
- 不同模型/思考:重量級分析值得更強大的模型。
- 一次性提醒:「提醒我在 20 分鐘」搭配
--at。 - 嘈雜/頻繁任務:不應充斥主會話歷史的任務。
- 外部觸發:應獨立於 Agent 是否活躍執行的任務。
Cron 優勢
- 精確時間:5 欄位 Cron 表達式搭配時區支援。
- 會話隔離:在
cron:<jobId>中執行而不污染主歷史。 - 模型覆寫:每項任務使用更便宜或更強大的模型。
- 投遞控制:可直接投遞至頻道;仍預設發佈摘要至主(可配置)。
- 不需 Agent 語境:即使主會話閒置或壓縮時執行。
- 一次性支援:
--at用於精確未來時間戳記。
Cron 範例:每日早晨簡報
Cron 範例:一次性提醒
決策流程圖
合併兩者
最有效的設定使用兩者:- Heartbeat 每 30 分鐘處理例行監控(收件匣、日曆、通知)在一個批次輪次。
- Cron 處理精確排程(每日報告、每週檢查)和一次性提醒。
範例:有效的自動化設定
HEARTBEAT.md (每 30 分鐘檢查):Lobster:具有核准的決定性工作流
Lobster 是多步工具管道的工作流執行時,需要決定性執行和明確核准。當任務多於單個 Agent 輪次,且您想要有人工檢查點的可恢復工作流時,使用它。何時 Lobster 適配
- 多步自動化:您需要固定工具呼叫管道,不是一次性提示。
- 核准閘門:副作用應暫停直到您核准,然後繼續。
- 可恢復執行:繼續暫停的工作流而不重新執行先前的步驟。
它如何與 Heartbeat 和 Cron 配對
- Heartbeat/Cron 決定何時執行發生。
- Lobster 定義哪些步驟在執行啟動時發生。
操作筆記(來自程式碼)
- Lobster 執行為本地子程序(
lobsterCLI)在工具模式中,返回 JSON 信封。 - 若工具返回
needs_approval,使用resumeToken和approve旗標恢復。 - 工具是選用外掛;透過
tools.alsoAllow: ["lobster"]附加啟用(推薦)。 - 若您傳送
lobsterPath,它必須是絕對路徑。
主會話 vs 隔離會話
Heartbeat 和 Cron 都可與主會話互動,但方式不同:| Heartbeat | Cron (main) | Cron (隔離) | |
|---|---|---|---|
| 會話 | Main | Main (via system event) | cron:<jobId> |
| 歷史 | 共享 | 共享 | 每次執行新 |
| 語境 | 完整 | 完整 | 無(乾淨啟動) |
| 模型 | 主會話模型 | 主會話模型 | 可覆寫 |
| 輸出 | 若非 HEARTBEAT_OK 則投遞 | Heartbeat prompt + 事件 | 摘要發佈至主 |
何時使用主會話 Cron
使用--session main 搭配 --system-event 當您想要:
- 提醒/事件出現在主會話語境中
- Agent 在下次心跳期間以完整語境處理它
- 無分開隔離執行
何時使用隔離 Cron
使用--session isolated 當您想要:
- 乾淨的盤子而無先前語境
- 不同的模型或思考設定
- 輸出直接投遞至頻道(摘要仍預設發佈至主)
- 不充斥主會話的歷史
成本考量
| 機制 | 成本表現 |
|---|---|
| Heartbeat | 每 N 分鐘一個輪次;隨 HEARTBEAT.md 大小擴展 |
| Cron (main) | 新增事件至下次心跳(無隔離輪次) |
| Cron (隔離) | 每項任務完整 Agent 輪次;可使用更便宜模型 |
- 保持
HEARTBEAT.md小以最小化 Token 開銷。 - 將類似檢查批次到 Heartbeat 而非多個 Cron 任務。
- 若僅想內部處理,使用
target: "none"在 Heartbeat。 - 對常規任務使用隔離 Cron 搭配更便宜模型。