メインコンテンツへスキップ
Heartbeat と cron ジョブは、どちらもスケジュールに沿ってタスクを実行できます。このガイドでは、用途ごとにどちらを選ぶべきかを整理します。

まずはこれで判断する

Heartbeat: 定期的な状況確認

Heartbeat は一定間隔(デフォルト: 30 分)でメインセッション内で実行されます。エージェントが状況を確認し、重要なものだけを表に出すための仕組みです。

Heartbeat が向いている場面

  • 複数の定期チェック: 受信トレイ、カレンダー、天気、通知、プロジェクト状況を 5 つの別々の cron ジョブで監視する代わりに、1 つの heartbeat でまとめて処理できます。
  • コンテキストを踏まえた判断: エージェントはメインセッションの完全なコンテキストを持っているため、何が急ぎで何が後回しでよいかを賢く判断できます。
  • 会話の連続性: Heartbeat 実行は同じセッションを共有するため、エージェントは最近の会話を覚えており、自然にフォローアップできます。
  • 低オーバーヘッドな監視: 1 つの heartbeat で、多数の小さなポーリングタスクを置き換えられます。

Heartbeat の利点

  • 複数チェックをまとめて実行: 1 回のエージェントターンで、受信トレイ、カレンダー、通知をまとめて確認できます。
  • API 呼び出しを削減: heartbeat 1 回の方が、独立した cron ジョブを 5 本動かすより安価です。
  • コンテキストを考慮できる: いま何に取り組んでいるかをエージェントが理解しており、優先度を判断できます。
  • 賢い抑制: 注意すべきことが何もなければ、エージェントは HEARTBEAT_OK を返し、メッセージは配信されません。
  • 自然なタイミング: キューの負荷に応じて多少ずれますが、多くの監視用途では問題ありません。

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

エージェントは heartbeat のたびにこれを読み、すべての項目を 1 ターンで処理します。

Heartbeat の設定例

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

Cron: 正確な時刻での実行

Cron ジョブは正確な時刻に実行され、メインコンテキストに影響を与えない独立セッションでも実行できます。 毎時ちょうどの繰り返しスケジュールは、自動的にジョブごとの決定論的なオフセットで 0〜5 分の範囲に分散されます。

Cron が向いている場面

  • 正確な時刻が必要: 「毎週月曜の午前 9:00 に送る」のように、「9 時前後」でなく正確な実行時刻が必要な場合。
  • 単独タスク: 会話コンテキストを必要としないタスク。
  • 異なるモデル / thinking: より高性能なモデルを使う価値がある重い分析。
  • ワンショットのリマインダー: --at を使った「20 分後に知らせて」。
  • 頻繁でノイズが多いタスク: メインセッションの履歴を散らかしたくないタスク。
  • 外部トリガー: エージェントがほかに動いているかどうかに関係なく、独立して実行されるべきタスク。

Cron の利点

  • 正確な時刻指定: タイムゾーン対応の 5 フィールドまたは 6 フィールド(秒付き)の cron 式を使えます。
  • 負荷分散を内蔵: 毎時ちょうどの繰り返しスケジュールは、デフォルトで最大 5 分ずらして実行されます。
  • ジョブ単位の制御: --stagger <duration> で分散を上書きするか、--exact で厳密な時刻実行を強制できます。
  • セッション分離: cron:<jobId> で実行され、メイン履歴を汚しません。
  • モデルの上書き: ジョブごとに、より安価なモデルや高性能なモデルを指定できます。
  • 配信制御: 独立ジョブのデフォルトは announce(要約配信)で、必要に応じて none も選べます。
  • 即時配信: announce モードでは heartbeat を待たずに直接投稿されます。
  • エージェントのコンテキストが不要: メインセッションがアイドル状態でも compact 済みでも実行できます。
  • ワンショット対応: --at で将来の正確な時刻を指定できます。

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

これはニューヨーク時間の午前 7:00 ちょうどに実行され、品質重視で Opus を使い、要約を WhatsApp に直接配信します。

Cron の例: ワンショットのリマインダー

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

判断フローチャート

両方を組み合わせる

最も効率的な構成は、両方を併用することです。
  1. Heartbeat は、受信トレイ、カレンダー、通知などの日常的な監視を、30 分ごとに 1 回のバッチ処理で行います。
  2. Cron は、毎日のレポートや週次レビューのような正確なスケジュールと、ワンショットのリマインダーを担当します。

例: 効率的な自動化構成

HEARTBEAT.md(30 分ごとに確認):
Cron jobs(正確なタイミング):

Lobster: 承認付きの決定論的ワークフロー

Lobster は、決定論的な実行と明示的な承認が必要な複数ステップのツールパイプライン向けのワークフローランタイムです。 タスクが単一のエージェントターンで終わらず、人間のチェックポイントを挟める再開可能なワークフローが必要な場合に使います。

Lobster が適している場面

  • 複数ステップの自動化: 単発プロンプトではなく、ツール呼び出しの固定パイプラインが必要。
  • 承認ゲート: 副作用を伴う処理を一時停止し、承認後に再開したい。
  • 再開可能な実行: 以前のステップをやり直さず、一時停止したワークフローを続行したい。

Heartbeat / cron との関係

  • Heartbeat / cron は、実行が いつ 起きるかを決めます。
  • Lobster は、実行開始後に どの手順 を踏むかを定義します。
スケジュール実行のワークフローでは、cron または heartbeat で Lobster を呼び出すエージェントターンを起動します。 アドホックなワークフローでは、Lobster を直接呼び出します。

運用上のメモ(コードベース準拠)

  • Lobster はツールモードでローカルサブプロセスlobster CLI)として実行され、JSON エンベロープを返します。
  • ツールが needs_approval を返した場合は、resumeTokenapprove フラグを使って再開します。
  • このツールはオプションのプラグインであり、tools.alsoAllow: ["lobster"] で追加的に有効化します(推奨)。
  • Lobster を使うには、lobster CLI が PATH 上に存在している必要があります。
使い方と例の詳細は Lobster を参照してください。

メインセッションと独立セッション

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

メインセッション cron を使う場面

次のような場合は、--session main--system-event を使います。
  • リマインダーやイベントをメインセッションのコンテキストに表示したい
  • エージェントに次の heartbeat で完全なコンテキストを使って処理させたい
  • 別の独立実行は不要

独立 cron を使う場面

次のような場合は、--session isolated を使います。
  • 事前コンテキストなしのクリーンな状態で始めたい
  • 異なるモデルや thinking 設定を使いたい
  • 要約をチャンネルに直接 announce したい
  • メインセッションを履歴で埋めたくない

コストに関する考慮点

ヒント:
  • トークンオーバーヘッドを抑えるため、HEARTBEAT.md は小さく保ってください。
  • 似たチェックは複数の cron ジョブに分けず、heartbeat にまとめてください。
  • 内部処理だけが必要なら、heartbeat で target: "none" を使ってください。
  • 定常タスクには、より安価なモデルを指定した独立 cron を使ってください。

関連

  • Heartbeat - heartbeat 設定の詳細
  • Cron jobs - cron CLI / API リファレンスの詳細
  • System - system event と heartbeat 制御