SOPファンイン: Cron
接続済み。 Cron トリガーは定期的な SOP メンテナンスティックによってディスパッチされるため、スケジュールごとのタイマーではなくポーラーです。発火にはそのティックが必要であり、このティックは、
agent-runtime機能を有効にしてビルドされ、sop.sops_dirに空でない値が設定され(デフォルトでは未設定で、SOP ランタイムはオフのままです。文書化された値はshared/sopsです)、sop.maintenance_interval_secsがゼロ以外(デフォルトは60)である場合に、zeroclaw daemonまたはzeroclaw channel startのスーパーバイザーが生成します。スタンドアロンのzeroclaw gateway startはメンテナンスティックを 生成しない ため、Cron トリガーを発火させません。一方、デーモン内でホストされるゲートウェイは発火させます。これはデーモンがティックを生成するためです。スケジュールは起動時に一度だけ解析されるため、デーモンの実行中に追加された SOP で Cron トリガーを有効にするには、リロードが必要です。
cron トリガーは、cron 式で記述された時間枠で発火します。無効な式は、パースとキャッシュのビルド中にフェイルクローズします。
トリガー
時間ベースの発火。ライブ: SOP メンテナンスティック(デーモン / チャネル開始パス)によってディスパッチされます。
| フィールド | 型 | default | 意味 |
|---|---|---|---|
expression* | string | — | 実行ウィンドウにわたって評価される Cron 式。 |
SOP を読み込んで検証する:
定義
Syntax の説明に従って、cron トリガー付きで SOP を作成します。上記のトリガーフィールドはサポートされているキーです。ページではファイル全体を説明します。
検証
zeroclaw sop validate
検査
zeroclaw sop list
zeroclaw sop show <name>
実行
cron で開始された実行は、エージェントループを接続せずに完了まで駆動されます。メンテナンスティックは、開始された各 ExecuteStep をヘッドレス実行ドライバーに渡します。ドライバーはステップ本体をエージェントのターンとして実行し、実行を次に進めます。DeterministicStep のアクションは、代わりにエンジンの決定的ドライバーを経由します。承認ゲートやチェックポイントに到達した実行は、ライブエージェントの場合と同様にそこで停止します。
step turn に適用される制約は2つあり、どちらもフェイルクローズです:
- SOP は所有エージェントを明記する必要があり、そのエージェントは有効でなければなりません。
SOP.tomlのagent(または個別ステップのagent。こちらが優先されます)に、設定済みのエージェントエイリアスを指定してください。cron 実行には、ID を引き継ぐ対話的なエージェントターンが存在しないため、所有者のない手順は作成時に拒否されます。また、ドライバーは別の設定済みエージェントとして実行するのではなく、そのステップの実行を拒否します。未設定のエイリアス、またはenabled = falseで設定されたエイリアスも同様に拒否されます。エージェントを無効化すると、無人実行からも除外されるためです。ステップは、そのエージェントのプロバイダー、ワークスペース、ツール、リスクプロファイルを使って実行されます。 - ステップのツールスコープは、子実行を含めて強制されます。 SOP制御ツール(
sop_execute、sop_advance、sop_approve)は、ステップのターンから常に除外されるため、自動実行が自分自身を進めることはできません。sop.step_scope_enforceが設定されている場合、ステップで宣言されたscopeによって、利用可能なツールの範囲がさらに絞り込まれます。ステップが生成する子エージェントは同じ除外設定を引き継ぐため、子エージェントを生成しても、ステップの境界を回避することはできません。
実行中の cron ドライバーは、それを開始したデーモン世代に属します。リロード時、デーモンはメンテナンス tick を停止し、実行中のドライバーが開始時の設定のまま完了するのを最大 30 秒間待ちます。その後、残ったドライバーを中止し、停止するまでさらに最大 5 秒間待ちます。そのため通常の場合、どのステップも二つの設定にまたがることはありません。
キャンセルは協調的に行われます。タスクは次の await で停止し、その猶予時間内にどの await にも到達しないタスクは実行を続けます。リロードはそれを待つことなく、次の世代が並行して起動されます。ドライバーは、そのタスクが yield するまで古い設定とエンジンを使い続けます。このようなドライバーは (still_running) としてログに記録され、切り離されるのではなく次の世代に引き継がれるため、追跡が続けられ、終了するまでリロードのたびに再確認されます。still_running のエントリが繰り返し出力される場合は、ある処理がyieldせずにブロックしていることのシグナルとして扱ってください。