コンテンツにスキップ

OpenClawのタスク管理:HeartbeatとCronの使い分けガイド

定期的なタスクを自動化しようとするとき、「どの仕組みを使って実行するのが最適か」という問題に直面することがよくあります。単純なリマインダーから、複雑なデータの定期チェックまで、効率的でミスのない仕組みを作りたいですよね。

Heartbeat と Cron はどちらもスケジュールに従ってタスクを実行するためのものですが、それぞれ得意分野が異なります。このガイドでは、ユースケースに合わせて最適なメカニズムを選択する方法を解説します。

ユースケース推奨される方法理由
30分ごとに受信トレイを確認するHeartbeat他のチェックと一括処理でき、コンテキストを考慮できる
毎日午前9時ちょうどにレポートを送信するCron (isolated)正確なタイミングが必要
カレンダーで予定を監視するHeartbeat定期的な状況把握に適している
週に一度の深い分析を実行するCron (isolated)独立したタスクであり、別のモデルを使用できる
20分後にリマインドするCron (main, --at)正確なタイミングでの単発実行
プロジェクトのヘルスチェックをバックグラウンドで行うHeartbeat既存のサイクルに相乗りできる

Heartbeat は、一定の間隔(デフォルトは30分)でメインセッション内で実行されます。これは、エージェントが状況を確認し、重要なことがあれば表面化させるために設計されています。

  • 複数の定期的なチェック: 受信トレイ、カレンダー、天気、通知、プロジェクトステータスを5つの別々の Cron ジョブで確認する代わりに、1つの Heartbeat でこれらすべてをまとめて処理できます。
  • コンテキストを考慮した判断: エージェントはメインセッションの全コンテキストを持っているため、何が緊急で何を後回しにできるかを賢く判断できます。
  • 会話の継続性: Heartbeat の実行は同じセッションを共有するため、エージェントは最近の会話を覚えており、自然にフォローアップできます。
  • 低オーバーヘッドの監視: 1つの Heartbeat が多くの小さなポーリングタスクを置き換えます。
  • 複数のチェックを一括処理: 1回のエージェントのターンで、受信トレイ、カレンダー、通知をまとめて確認できます。
  • API コールの削減: 1つの Heartbeat は、5つの独立した Cron ジョブよりもコストを抑えられます。
  • コンテキストの把握: エージェントはあなたが何に取り組んでいるかを知っているため、それに応じて優先順位を付けられます。
  • スマートな抑制: 注意が必要な事項がない場合、エージェントは HEARTBEAT_OK と返答し、メッセージは配信されません。
  • 自然なタイミング: キューの負荷に基づいてわずかに前後しますが、ほとんどの監視タスクには問題ありません。

Heartbeat の例:HEARTBEAT.md チェックリスト

Section titled “Heartbeat の例:HEARTBEAT.md チェックリスト”
# Heartbeat checklist
- Check email for urgent messages
- Review calendar for events in next 2 hours
- If a background task finished, summarize results
- If idle for 8+ hours, send a brief check-in

エージェントは各 Heartbeat ごとにこの内容を読み取り、すべての項目を1回のターンで処理します。

{
agents: {
defaults: {
heartbeat: {
every: "30m", // interval
target: "last", // explicit alert delivery target (default is "none")
activeHours: { start: "08:00", end: "22:00" }, // optional
},
},
},
}

詳細な設定については Heartbeat を参照してください。

Cron ジョブは正確な時間に実行され、メインのコンテキストに影響を与えずに隔離されたセッションで実行することもできます。 毎正時の定期的なスケジュールは、ジョブごとの決定論的なオフセットによって、0〜5分のウィンドウ内で自動的に分散されます。

  • 正確なタイミングが必要: 「毎週月曜日の午前9時00分に送信する」(「9時ごろ」ではなく)。
  • スタンドアロンタスク: 会話のコンテキストを必要としないタスク。
  • 異なるモデルや思考レベル: より強力なモデルを必要とする重い分析。
  • 単発のリマインダー: --at を使用した「20分後にリマインド」。
  • 頻繁またはノイズの多いタスク: メインセッションの履歴を煩雑にする可能性のあるタスク。
  • 外部トリガー: エージェントが他の活動をしているかどうかに関係なく実行すべきタスク。
  • 正確なタイミング: タイムゾーンをサポートした5フィールドまたは6フィールド(秒単位)の Cron 式。
  • 負荷分散機能: 毎正時のスケジュールは、デフォルトで最大5分間ずらして実行されます。
  • ジョブごとの制御: --stagger <duration> で分散を上書きしたり、 --exact で正確なタイミングを強制したりできます。
  • セッションの隔離: メインの履歴を汚さずに cron:<jobId> で実行されます。
  • モデルの上書き: ジョブごとに安価なモデルや強力なモデルを使い分けることができます。
  • 配信の制御: 隔離されたジョブはデフォルトで announce(要約)になります。必要に応じて none を選択できます。
  • 即時配信: Announce モードは Heartbeat を待たずに直接投稿されます。
  • エージェントのコンテキスト不要: メインセッションがアイドル状態や圧縮された状態でも実行されます。
  • 単発実行のサポート: 将来の正確なタイムスタンプを指定する --at。

Cron の例:毎朝のブリーフィング

Section titled “Cron の例:毎朝のブリーフィング”
Terminal window
openclaw cron add \
--name "Morning briefing" \
--cron "0 7 * * *" \
--tz "America/New_York" \
--session isolated \
--message "Generate today's briefing: weather, calendar, top emails, news summary." \
--model opus \
--announce \
--channel whatsapp \
--to "+15551234567"

これはニューヨーク時間の午前7時ちょうどに実行され、品質のために Opus を使用し、要約を WhatsApp に直接通知します。

Terminal window
openclaw cron add \
--name "Meeting reminder" \
--at "20m" \
--session main \
--system-event "Reminder: standup meeting starts in 10 minutes." \
--wake now \
--delete-after-run

CLI の詳細なリファレンスについては Cron jobs を参照してください。

Does the task need to run at an EXACT time?
YES -> Use cron
NO -> Continue...
Does the task need isolation from main session?
YES -> Use cron (isolated)
NO -> Continue...
Can this task be batched with other periodic checks?
YES -> Use heartbeat (add to HEARTBEAT.md)
NO -> Use cron
Is this a one-shot reminder?
YES -> Use cron with --at
NO -> Continue...
Does it need a different model or thinking level?
YES -> Use cron (isolated) with --model/--thinking
NO -> Use heartbeat

最も効率的なセットアップは、両方を組み合わせることです。

  1. Heartbeat は、30分ごとの一括処理でルーチンの監視(受信トレイ、カレンダー、通知)を担当します。
  2. Cron は、正確なスケジュール(日次レポート、週次レビュー)と単発のリマインダーを担当します。

例:効率的な自動化セットアップ

Section titled “例:効率的な自動化セットアップ”

HEARTBEAT.md(30分ごとにチェック):

# Heartbeat checklist
- Scan inbox for urgent emails
- Check calendar for events in next 2h
- Review any pending tasks
- Light check-in if quiet for 8+ hours

Cron ジョブ(正確なタイミング):

Terminal window
# Daily morning briefing at 7am
openclaw cron add --name "Morning brief" --cron "0 7 * * *" --session isolated --message "..." --announce
# Weekly project review on Mondays at 9am
openclaw cron add --name "Weekly review" --cron "0 9 * * 1" --session isolated --message "..." --model opus
# One-shot reminder
openclaw cron add --name "Call back" --at "2h" --session main --system-event "Call back the client" --wake now

Lobster:承認プロセスを伴う決定論的ワークフロー

Section titled “Lobster:承認プロセスを伴う決定論的ワークフロー”

Lobster は、決定論的な実行と明示的な承認を必要とする多段階のツールパイプラインのためのワークフローランタイムです。 タスクが単一のエージェントのターン以上の内容であり、人間によるチェックポイントを設けて再開可能なワークフローにしたい場合に使用します。

  • 多段階の自動化: 単発のプロンプトではなく、固定されたツールコールのパイプラインが必要な場合。
  • 承認ゲート: 外部への影響がある操作を、承認するまで一時停止し、その後再開させたい場合。
  • 再開可能な実行: 一時停止したワークフローを、前のステップを再実行することなく続行したい場合。

Heartbeat や Cron との組み合わせ方

Section titled “Heartbeat や Cron との組み合わせ方”
  • Heartbeat/Cron が実行の「タイミング」を決定します。
  • Lobster は、実行が開始された後の「ステップの内容」を定義します。

スケジュールされたワークフローの場合は、Cron または Heartbeat を使用して Lobster を呼び出すエージェントのターンをトリガーします。アドホックなワークフローの場合は、Lobster を直接呼び出します。

運用上の注意点(コードより)

Section titled “運用上の注意点(コードより)”
  • Lobster はツールモードでローカルサブプロセス(lobster CLI)として実行され、JSON エンベロープを返します。
  • ツールが needs_approval を返した場合、resumeToken と approve フラグを使用して再開します。
  • このツールはオプションのプラグインです。tools.alsoAllow: ["lobster"] を介して追加的に有効にすることをお勧めします。
  • Lobster は、PATH 上で lobster CLI が利用可能であることを想定しています。

使用方法と例については Lobster を参照してください。

メインセッション vs 隔離セッション

Section titled “メインセッション vs 隔離セッション”

Heartbeat と Cron はどちらもメインセッションとやり取りできますが、その方法は異なります。

HeartbeatCron (main)Cron (isolated)
セッションメインメイン (システムイベント経由)cron:<jobId>
履歴共有される共有される実行ごとにフレッシュ
コンテキストフルフルなし (クリーンに開始)
モデルメインセッションのモデルメインセッションのモデル上書き可能
出力HEARTBEAT_OK 以外なら配信Heartbeat プロンプト + イベント要約を通知 (デフォルト)

メインセッション Cron を使用する場合

Section titled “メインセッション Cron を使用する場合”

以下のような場合には、--session main と --system-event を使用します。

  • リマインダーやイベントをメインセッションのコンテキストに表示させたい。
  • 次の Heartbeat 時にエージェントがフルコンテキストで処理することを望む。
  • 別の隔離された実行を必要としない。
Terminal window
openclaw cron add \
--name "Check project" \
--every "4h" \
--session main \
--system-event "Time for a project health check" \
--wake now

隔離セッション Cron を使用する場合

Section titled “隔離セッション Cron を使用する場合”

以下のような場合には、--session isolated を使用します。

  • 以前のコンテキストがないクリーンな状態で開始したい。
  • 異なるモデルや思考設定を使用したい。
  • 要約をチャンネルに直接通知したい。
  • メインセッションの履歴を汚したくない。
Terminal window
openclaw cron add \
--name "Deep analysis" \
--cron "0 6 * * 0" \
--session isolated \
--message "Weekly codebase analysis..." \
--model opus \
--thinking high \
--announce
メカニズムコストのプロファイル
HeartbeatN分ごとに1ターン。HEARTBEAT.md のサイズに応じて増加
Cron (main)次の Heartbeat にイベントを追加 (独立したターンはなし)
Cron (isolated)ジョブごとにフルエージェントターン。安価なモデルを使用可能

ヒント:

  • トークンのオーバーヘッドを最小限に抑えるため、HEARTBEAT.md は小さく保ちましょう。
  • 複数の Cron ジョブを作る代わりに、似たようなチェックは Heartbeat にまとめましょう。
  • 内部処理のみを行いたい場合は、Heartbeat で target: "none" を使用してください。
  • ルーチンタスクには、安価なモデルを使用した隔離された Cron を活用しましょう。
  • Heartbeat - Heartbeat の詳細設定
  • Cron jobs - Cron の CLI および API リファレンス
  • System - システムイベントと Heartbeat の制御

設定でお困りの場合は、AI Setup Assistant をぜひ活用してください。最適なスケジューリング構成の構築をお手伝いします。

OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。