スケジュール済みタスク(Cron)
CronはGatewayに組み込まれたスケジューラです。ジョブを永続化し、適切なタイミングでエージェントを起動し、出力をチャットチャンネルやWebhookエンドポイントに返送できます。クイックスタート
cronの仕組み
- CronはGatewayプロセス内で実行されます(モデル内ではありません)。
- ジョブは
~/.openclaw/cron/jobs.jsonに永続化されるため、再起動してもスケジュールは失われません。 - すべてのcron実行ではバックグラウンドタスクレコードが作成されます。
- 1回限りのジョブ(
--at)は、デフォルトで成功後に自動削除されます。 - 分離されたcron実行では、実行完了時にその
cron:<jobId>セッション用に追跡されているブラウザータブやプロセスをベストエフォートで閉じるため、切り離されたブラウザー自動化によって孤立プロセスが残ることを防ぎます。 - 分離されたcron実行では、古い確認応答の返信も防ぎます。最初の結果が単なる中間ステータス更新(
on it、pulling everything together、および類似のヒント)であり、最終回答を担当する子孫subagent実行がまだ存在しない場合、OpenClawは配信前に実際の結果を得るためにもう一度プロンプトを送ります。
lostとしてマークされる場合があります。
スケジュールの種類
| 種類 | CLIフラグ | 説明 |
|---|---|---|
at | --at | 1回限りのタイムスタンプ(ISO 8601、または20mのような相対指定) |
every | --every | 固定間隔 |
cron | --cron | オプションの--tz付き5フィールドまたは6フィールドのcron式 |
--tz America/New_Yorkを追加してください。
毎時ちょうどに実行される定期式は、負荷の急増を減らすために最大5分まで自動的にずらされます。正確なタイミングを強制するには--exactを、明示的なウィンドウを指定するには--stagger 30sを使用してください。
実行スタイル
| スタイル | --session値 | 実行場所 | 最適な用途 |
|---|---|---|---|
| メインセッション | main | 次のheartbeatターン | リマインダー、システムイベント |
| 分離 | isolated | 専用のcron:<jobId> | レポート、バックグラウンド作業 |
| 現在のセッション | current | 作成時にバインド | コンテキストを意識した定期作業 |
| カスタムセッション | session:custom-id | 永続的な名前付きセッション | 履歴を活用するワークフロー |
--wake nowまたは--wake next-heartbeat)。分離ジョブは新しいセッションで専用のエージェントターンを実行します。カスタムセッション(session:xxx)は実行間でコンテキストを保持するため、以前の要約をもとに構築する日次スタンドアップのようなワークフローを実現できます。
分離ジョブでは、ランタイムのティアダウンにそのcronセッションのベストエフォートなブラウザークリーンアップが含まれるようになりました。クリーンアップ失敗は無視されるため、実際のcron結果が優先されます。
分離されたcron実行でsubagentをオーケストレーションする場合、配信では古い親の中間テキストよりも最終的な子孫出力が優先されます。子孫がまだ実行中の場合、OpenClawはその部分的な親更新を通知せず抑制します。
分離ジョブのペイロードオプション
--message: プロンプトテキスト(分離では必須)--model/--thinking: モデルおよび思考レベルのオーバーライド--light-context: ワークスペースのブートストラップファイル注入をスキップ--tools exec,read: ジョブで使用できるツールを制限
--modelは、そのジョブに対して選択された許可済みモデルを使用します。要求されたモデルが許可されていない場合、cronは警告を記録し、代わりにジョブのagent/defaultモデル選択にフォールバックします。設定済みのフォールバックチェーンは引き続き適用されますが、明示的なジョブ単位のフォールバックリストがない単純なモデルオーバーライドでは、agent primaryが隠れた追加再試行先として付加されなくなりました。
分離ジョブのモデル選択優先順位は次のとおりです。
- Gmailフックのモデルオーバーライド(実行がGmail由来で、そのオーバーライドが許可されている場合)
- ジョブ単位ペイロードの
model - 保存済みcronセッションのモデルオーバーライド
- Agent/defaultモデル選択
params.fastModeがある場合、分離cronはデフォルトでそれを使用します。保存済みセッションのfastModeオーバーライドは、どちらの方向でも設定より優先されます。
分離実行がライブのモデル切り替えハンドオフに遭遇した場合、cronは切り替え後のprovider/modelで再試行し、そのライブ選択を再試行前に永続化します。切り替えに新しい認証プロファイルも含まれる場合、cronはその認証プロファイルのオーバーライドも永続化します。再試行回数には上限があります。初回試行に加えて切り替え再試行を2回行った後は、無限ループを避けるためcronは中止します。
配信と出力
| モード | 動作 |
|---|---|
announce | ターゲットチャンネルに要約を配信(分離のデフォルト) |
webhook | 完了イベントのペイロードをURLにPOST |
none | 内部のみ、配信なし |
--announce --channel telegram --to "-1001234567890"を使用します。Telegramフォーラムトピックでは-1001234567890:topic:123を使用してください。Slack/Discord/Mattermostターゲットでは明示的なプレフィックス(channel:<id>、user:<id>)を使用する必要があります。
cronが所有する分離ジョブでは、runnerが最終配信経路を管理します。agentにはプレーンテキストの要約を返すようプロンプトが与えられ、その要約がannounce、webhookを通じて送信されるか、noneの場合は内部に保持されます。--no-deliverは配信をagentに戻しません。実行を内部のみのままにします。
元のタスクで明示的に外部の受信者へメッセージ送信するよう指定されている場合、agentは直接送信を試みるのではなく、そのメッセージを誰に/どこへ送るべきかを出力内に記す必要があります。
失敗通知は別の宛先経路に従います。
cron.failureDestinationは失敗通知のグローバルデフォルトを設定します。job.delivery.failureDestinationはジョブ単位でそれを上書きします。- どちらも設定されておらず、かつジョブがすでに
announceで配信している場合、失敗通知はそのプライマリのannounceターゲットにフォールバックするようになりました。 delivery.failureDestinationは、プライマリ配信モードがwebhookでない限り、sessionTarget="isolated"ジョブでのみサポートされます。
CLIの例
1回限りのリマインダー(メインセッション):Webhook
Gatewayは外部トリガー向けにHTTP Webhookエンドポイントを公開できます。configで有効にします。認証
すべてのリクエストには、ヘッダー経由でフックトークンを含める必要があります。Authorization: Bearer <token>(推奨)x-openclaw-token: <token>
POST /hooks/wake
メインセッション向けにシステムイベントをキューに追加します。text(必須): イベントの説明mode(任意):now(デフォルト)またはnext-heartbeat
POST /hooks/agent
分離されたagentターンを実行します。message(必須)、name、agentId、wakeMode、deliver、channel、to、model、thinking、timeoutSeconds。
マップされたフック(POST /hooks/<name>)
カスタムフック名は、config内のhooks.mappingsによって解決されます。マッピングはテンプレートやコード変換を使って、任意のペイロードをwakeまたはagentアクションに変換できます。
セキュリティ
- フックエンドポイントはloopback、tailnet、または信頼できるリバースプロキシの背後に置いてください。
- 専用のフックトークンを使用し、Gateway認証トークンを再利用しないでください。
hooks.pathは専用のサブパスにしてください。/は拒否されます。- 明示的な
agentIdルーティングを制限するにはhooks.allowedAgentIdsを設定してください。 - 呼び出し元がセッションを選択する必要がない限り、
hooks.allowRequestSessionKey=falseのままにしてください。 hooks.allowRequestSessionKeyを有効にする場合は、許可されるセッションキー形状を制約するためにhooks.allowedSessionKeyPrefixesも設定してください。- フックペイロードはデフォルトで安全境界でラップされます。
Gmail PubSub統合
Google PubSubを通じてGmail受信トリガーをOpenClawに接続します。 前提条件:gcloud CLI、gog(gogcli)、OpenClaw hooksが有効、公開HTTPSエンドポイント用のTailscale。
ウィザードセットアップ(推奨)
hooks.gmail configが書き込まれ、Gmailプリセットが有効化され、プッシュエンドポイントにはTailscale Funnelが使用されます。
Gateway自動起動
hooks.enabled=trueかつhooks.gmail.accountが設定されている場合、Gatewayは起動時にgog gmail watch serveを開始し、watchを自動更新します。無効にするにはOPENCLAW_SKIP_GMAIL_WATCHER=1を設定してください。
手動による1回限りのセットアップ
gogで使用されるOAuthクライアントを所有するGCPプロジェクトを選択します。
- トピックを作成し、Gmailのpushアクセス権を付与します。
- watchを開始します。
Gmailモデルオーバーライド
ジョブの管理
openclaw cron add|edit --model ...はジョブの選択モデルを変更します。- モデルが許可されている場合、その正確なprovider/modelが分離agent実行に渡されます。
- 許可されていない場合、cronは警告を出し、ジョブのagent/defaultモデル選択にフォールバックします。
- 設定済みのフォールバックチェーンは引き続き適用されますが、明示的なジョブ単位のフォールバックリストがない単純な
--modelオーバーライドでは、agent primaryに暗黙の追加再試行先としてフォールスルーしなくなりました。
設定
cron.enabled: falseまたはOPENCLAW_SKIP_CRON=1。
1回限りの再試行: 一時的なエラー(レート制限、過負荷、ネットワーク、サーバーエラー)は指数バックオフで最大3回まで再試行されます。永続的なエラーは即座に無効化されます。
定期実行の再試行: 再試行間には指数バックオフ(30秒〜60分)が適用されます。次に成功した実行の後でバックオフはリセットされます。
メンテナンス: cron.sessionRetention(デフォルト24h)は分離実行セッションエントリーを剪定します。cron.runLog.maxBytes / cron.runLog.keepLinesは実行ログファイルを自動的に剪定します。
トラブルシューティング
コマンド一覧
cronが実行されない
cron.enabledとOPENCLAW_SKIP_CRON環境変数を確認してください。- Gatewayが継続的に実行中であることを確認してください。
cronスケジュールでは、タイムゾーン(--tz)とホストのタイムゾーンの違いを確認してください。- 実行出力の
reason: not-dueは、手動実行がopenclaw cron run <jobId> --dueで確認され、そのジョブがまだ期限前だったことを意味します。
cronは実行されたが配信されない
- 配信モードが
noneの場合、外部メッセージは送信されません。 - 配信ターゲットが欠落または無効(
channel/to)な場合、送信はスキップされます。 - チャンネル認証エラー(
unauthorized、Forbidden)は、認証情報によって配信がブロックされたことを意味します。 - 分離実行がサイレントトークン(
NO_REPLY/no_reply)のみを返した場合、OpenClawは直接の外向き配信を抑制し、フォールバックのキュー要約経路も抑制するため、チャットには何も投稿されません。 - cronが所有する分離ジョブでは、agentがフォールバックとしてmessageツールを使うことは想定しないでください。runnerが最終配信を管理します。
--no-deliverは直接送信を許可するのではなく、内部のまま保持します。
タイムゾーンの注意点
--tzなしのcronはGatewayホストのタイムゾーンを使用します。- タイムゾーンなしの
atスケジュールはUTCとして扱われます。 - Heartbeatの
activeHoursは設定済みタイムゾーン解決を使用します。
関連
- Automation & Tasks — すべての自動化メカニズムの概要
- Background Tasks — cron実行のタスク台帳
- Heartbeat — 定期的なメインセッションターン
- Timezone — タイムゾーン設定