OpenClawのタスク管理:HeartbeatとCronの使い分けガイド
定期的なタスクを自動化しようとするとき、「どの仕組みを使って実行するのが最適か」という問題に直面することがよくあります。単純なリマインダーから、複雑なデータの定期チェックまで、効率的でミスのない仕組みを作りたいですよね。
Heartbeat と Cron はどちらもスケジュールに従ってタスクを実行するためのものですが、それぞれ得意分野が異なります。このガイドでは、ユースケースに合わせて最適なメカニズムを選択する方法を解説します。
クイック決定ガイド
Section titled “クイック決定ガイド”| ユースケース | 推奨される方法 | 理由 |
|---|---|---|
| 30分ごとに受信トレイを確認する | Heartbeat | 他のチェックと一括処理でき、コンテキストを考慮できる |
| 毎日午前9時ちょうどにレポートを送信する | Cron (isolated) | 正確なタイミングが必要 |
| カレンダーで予定を監視する | Heartbeat | 定期的な状況把握に適している |
| 週に一度の深い分析を実行する | Cron (isolated) | 独立したタスクであり、別のモデルを使用できる |
| 20分後にリマインドする | Cron (main, --at) | 正確なタイミングでの単発実行 |
| プロジェクトのヘルスチェックをバックグラウンドで行う | Heartbeat | 既存のサイクルに相乗りできる |
Heartbeat:定期的な状況把握
Section titled “Heartbeat:定期的な状況把握”Heartbeat は、一定の間隔(デフォルトは30分)でメインセッション内で実行されます。これは、エージェントが状況を確認し、重要なことがあれば表面化させるために設計されています。
Heartbeat を使用する場合
Section titled “Heartbeat を使用する場合”- 複数の定期的なチェック: 受信トレイ、カレンダー、天気、通知、プロジェクトステータスを5つの別々の Cron ジョブで確認する代わりに、1つの Heartbeat でこれらすべてをまとめて処理できます。
- コンテキストを考慮した判断: エージェントはメインセッションの全コンテキストを持っているため、何が緊急で何を後回しにできるかを賢く判断できます。
- 会話の継続性: Heartbeat の実行は同じセッションを共有するため、エージェントは最近の会話を覚えており、自然にフォローアップできます。
- 低オーバーヘッドの監視: 1つの Heartbeat が多くの小さなポーリングタスクを置き換えます。
Heartbeat の利点
Section titled “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回のターンで処理します。
Heartbeat の設定
Section titled “Heartbeat の設定”{ 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:正確なスケジューリング
Section titled “Cron:正確なスケジューリング”Cron ジョブは正確な時間に実行され、メインのコンテキストに影響を与えずに隔離されたセッションで実行することもできます。 毎正時の定期的なスケジュールは、ジョブごとの決定論的なオフセットによって、0〜5分のウィンドウ内で自動的に分散されます。
Cron を使用する場合
Section titled “Cron を使用する場合”- 正確なタイミングが必要: 「毎週月曜日の午前9時00分に送信する」(「9時ごろ」ではなく)。
- スタンドアロンタスク: 会話のコンテキストを必要としないタスク。
- 異なるモデルや思考レベル: より強力なモデルを必要とする重い分析。
- 単発のリマインダー:
--atを使用した「20分後にリマインド」。 - 頻繁またはノイズの多いタスク: メインセッションの履歴を煩雑にする可能性のあるタスク。
- 外部トリガー: エージェントが他の活動をしているかどうかに関係なく実行すべきタスク。
Cron の利点
Section titled “Cron の利点”- 正確なタイミング: タイムゾーンをサポートした5フィールドまたは6フィールド(秒単位)の Cron 式。
- 負荷分散機能: 毎正時のスケジュールは、デフォルトで最大5分間ずらして実行されます。
- ジョブごとの制御:
--stagger <duration>で分散を上書きしたり、--exactで正確なタイミングを強制したりできます。 - セッションの隔離: メインの履歴を汚さずに
cron:<jobId>で実行されます。 - モデルの上書き: ジョブごとに安価なモデルや強力なモデルを使い分けることができます。
- 配信の制御: 隔離されたジョブはデフォルトで
announce(要約)になります。必要に応じてnoneを選択できます。 - 即時配信: Announce モードは Heartbeat を待たずに直接投稿されます。
- エージェントのコンテキスト不要: メインセッションがアイドル状態や圧縮された状態でも実行されます。
- 単発実行のサポート: 将来の正確なタイムスタンプを指定する
--at。
Cron の例:毎朝のブリーフィング
Section titled “Cron の例:毎朝のブリーフィング”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 に直接通知します。
Cron の例:単発のリマインダー
Section titled “Cron の例:単発のリマインダー”openclaw cron add \ --name "Meeting reminder" \ --at "20m" \ --session main \ --system-event "Reminder: standup meeting starts in 10 minutes." \ --wake now \ --delete-after-runCLI の詳細なリファレンスについては Cron jobs を参照してください。
意思決定フローチャート
Section titled “意思決定フローチャート”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両方の組み合わせ
Section titled “両方の組み合わせ”最も効率的なセットアップは、両方を組み合わせることです。
- Heartbeat は、30分ごとの一括処理でルーチンの監視(受信トレイ、カレンダー、通知)を担当します。
- 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+ hoursCron ジョブ(正確なタイミング):
# Daily morning briefing at 7amopenclaw cron add --name "Morning brief" --cron "0 7 * * *" --session isolated --message "..." --announce
# Weekly project review on Mondays at 9amopenclaw cron add --name "Weekly review" --cron "0 9 * * 1" --session isolated --message "..." --model opus
# One-shot reminderopenclaw cron add --name "Call back" --at "2h" --session main --system-event "Call back the client" --wake nowLobster:承認プロセスを伴う決定論的ワークフロー
Section titled “Lobster:承認プロセスを伴う決定論的ワークフロー”Lobster は、決定論的な実行と明示的な承認を必要とする多段階のツールパイプラインのためのワークフローランタイムです。 タスクが単一のエージェントのターン以上の内容であり、人間によるチェックポイントを設けて再開可能なワークフローにしたい場合に使用します。
Lobster が適している場合
Section titled “Lobster が適している場合”- 多段階の自動化: 単発のプロンプトではなく、固定されたツールコールのパイプラインが必要な場合。
- 承認ゲート: 外部への影響がある操作を、承認するまで一時停止し、その後再開させたい場合。
- 再開可能な実行: 一時停止したワークフローを、前のステップを再実行することなく続行したい場合。
Heartbeat や Cron との組み合わせ方
Section titled “Heartbeat や Cron との組み合わせ方”- Heartbeat/Cron が実行の「タイミング」を決定します。
- Lobster は、実行が開始された後の「ステップの内容」を定義します。
スケジュールされたワークフローの場合は、Cron または Heartbeat を使用して Lobster を呼び出すエージェントのターンをトリガーします。アドホックなワークフローの場合は、Lobster を直接呼び出します。
運用上の注意点(コードより)
Section titled “運用上の注意点(コードより)”- Lobster はツールモードでローカルサブプロセス(
lobsterCLI)として実行され、JSON エンベロープを返します。 - ツールが
needs_approvalを返した場合、resumeTokenとapproveフラグを使用して再開します。 - このツールはオプションのプラグインです。
tools.alsoAllow: ["lobster"]を介して追加的に有効にすることをお勧めします。 - Lobster は、
PATH上でlobsterCLI が利用可能であることを想定しています。
使用方法と例については Lobster を参照してください。
メインセッション vs 隔離セッション
Section titled “メインセッション vs 隔離セッション”Heartbeat と Cron はどちらもメインセッションとやり取りできますが、その方法は異なります。
| Heartbeat | Cron (main) | Cron (isolated) | |
|---|---|---|---|
| セッション | メイン | メイン (システムイベント経由) | cron:<jobId> |
| 履歴 | 共有される | 共有される | 実行ごとにフレッシュ |
| コンテキスト | フル | フル | なし (クリーンに開始) |
| モデル | メインセッションのモデル | メインセッションのモデル | 上書き可能 |
| 出力 | HEARTBEAT_OK 以外なら配信 | Heartbeat プロンプト + イベント | 要約を通知 (デフォルト) |
メインセッション Cron を使用する場合
Section titled “メインセッション Cron を使用する場合”以下のような場合には、--session main と --system-event を使用します。
- リマインダーやイベントをメインセッションのコンテキストに表示させたい。
- 次の Heartbeat 時にエージェントがフルコンテキストで処理することを望む。
- 別の隔離された実行を必要としない。
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 を使用します。
- 以前のコンテキストがないクリーンな状態で開始したい。
- 異なるモデルや思考設定を使用したい。
- 要約をチャンネルに直接通知したい。
- メインセッションの履歴を汚したくない。
openclaw cron add \ --name "Deep analysis" \ --cron "0 6 * * 0" \ --session isolated \ --message "Weekly codebase analysis..." \ --model opus \ --thinking high \ --announceコストに関する考慮事項
Section titled “コストに関する考慮事項”| メカニズム | コストのプロファイル |
|---|---|
| Heartbeat | N分ごとに1ターン。HEARTBEAT.md のサイズに応じて増加 |
| Cron (main) | 次の Heartbeat にイベントを追加 (独立したターンはなし) |
| Cron (isolated) | ジョブごとにフルエージェントターン。安価なモデルを使用可能 |
ヒント:
- トークンのオーバーヘッドを最小限に抑えるため、
HEARTBEAT.mdは小さく保ちましょう。 - 複数の Cron ジョブを作る代わりに、似たようなチェックは Heartbeat にまとめましょう。
- 内部処理のみを行いたい場合は、Heartbeat で
target: "none"を使用してください。 - ルーチンタスクには、安価なモデルを使用した隔離された Cron を活用しましょう。
関連ドキュメント
Section titled “関連ドキュメント”次のステップ
Section titled “次のステップ”設定でお困りの場合は、AI Setup Assistant をぜひ活用してください。最適なスケジューリング構成の構築をお手伝いします。
OpenClaw Expert
まだ解決しませんか?
このページで解決しない場合は、OpenClaw Expertに直接質問してください。