Skip to content

Cronとトリガー

Triggerfishエージェントは反応的な質問応答に限定されません。Cronとトリガーシステムはプロアクティブな 動作を可能にします:スケジュールタスク、定期チェックイン、モーニングブリーフィング、バックグラウンド監視、 自律的なマルチステップワークフロー。

Cronジョブ

Cronジョブは固定の指示、配信チャンネル、分類の上限を持つスケジュールされたタスクです。 標準的なcron式の構文を使用します。

設定

triggerfish.yamlでcronジョブを定義するか、cronツールを通じてエージェントに実行時に管理させます:

yaml
scheduler:
  cron:
    jobs:
      - id: morning-briefing
        schedule: "0 7 * * *" # 毎日午前7時
        task: "カレンダー、未読メール、天気でモーニングブリーフィングを作成"
        channel: telegram # 配信先
        classification: INTERNAL # このジョブの最大taint

      - id: pipeline-check
        schedule: "0 */4 * * *" # 4時間ごと
        task: "Salesforceパイプラインの変更を確認"
        channel: slack
        classification: CONFIDENTIAL

仕組み

  1. CronManagerが標準cron式を解析し、再起動後も存続する永続的なジョブレジストリを管理します。
  2. ジョブが発火すると、OrchestratorFactoryがその実行のために分離されたオーケストレーターとセッションを作成します。
  3. ジョブは独自のtaintトラッキングを持つバックグラウンドセッションワークスペースで実行されます。
  4. 出力はそのチャンネルの分類ルールに従って設定されたチャンネルに配信されます。
  5. 実行履歴が監査のために記録されます。

エージェント管理Cron

エージェントはcronツールを通じて独自のcronジョブを作成および管理できます:

アクション説明セキュリティ
cron.listすべてのスケジュールジョブをリストオーナーのみ
cron.create新しいジョブをスケジュールオーナーのみ、分類上限が強制される
cron.deleteスケジュールジョブを削除オーナーのみ
cron.history過去の実行を表示監査証跡が保持される

cronジョブの作成にはオーナー認証が必要です。エージェントは外部ユーザーに代わってジョブを

スケジュールしたり、設定された分類の上限を超えたりすることができません。 :::

CLI Cron管理

Cronジョブはコマンドラインから直接管理することもできます:

bash
triggerfish cron add "0 9 * * *" morning briefing
triggerfish cron add "0 */4 * * *" check pipeline --classification=CONFIDENTIAL
triggerfish cron list
triggerfish cron history <job-id>
triggerfish cron delete <job-id>

--classificationフラグはジョブの分類の上限を設定します。有効なレベルはPUBLICINTERNALCONFIDENTIALRESTRICTEDです。省略した場合、デフォルトはINTERNALです。

トリガーシステム

トリガーはエージェントがプロアクティブなアクションが必要かどうかを評価するために起動する定期的な 「チェックインループ」です。固定タスクのcronジョブとは異なり、トリガーはエージェントに何が注意を 必要とするかを判断する裁量を与えます。

TRIGGER.md

TRIGGER.mdは各起動時にエージェントが確認すべきことを定義します。~/.triggerfish/config/TRIGGER.md に置かれ、監視の優先事項、エスカレーションルール、プロアクティブな動作を指定する自由形式のMarkdown ファイルです。

TRIGGER.mdが存在しない場合、エージェントは一般的な知識を使用して何に注意が必要かを判断します。

TRIGGER.mdの例:

markdown
# TRIGGER.md -- 各起動時に確認すること

## 優先確認

- 1時間以上経過した全チャンネルの未読メッセージ
- 次の24時間のカレンダーの競合
- LinearまたはJiraの期限切れタスク

## 監視

- GitHub:私のレビューを待っているPR
- Email:VIPの連絡先からのもの(即時通知のためにフラグ)
- Slack:#incidentsチャンネルでのメンション

## プロアクティブ

- 朝(7-9時)の場合、日次ブリーフィングを作成
- 金曜日の午後の場合、週次サマリーを下書き

トリガー設定

トリガーのタイミングと制約はtriggerfish.yamlで設定されます:

yaml
scheduler:
  trigger:
    enabled: true # falseでトリガーを無効化(デフォルト:true)
    interval_minutes: 30 # 30分ごとにチェック(デフォルト:30)
    # 設定を削除せずにトリガーを無効化するには0に設定
    classification_ceiling: CONFIDENTIAL # 最大taint上限(デフォルト:CONFIDENTIAL)
    quiet_hours:
      start: 22 # 午後10時から...
      end: 7    # ...午前7時まで起動しない
設定説明
enabled定期トリガーの起動が有効かどうか。falseで無効化。
interval_minutesエージェントがトリガーを確認するために起動する頻度(分単位)。デフォルト:30。設定ブロックを削除せずに無効化するには0に設定。
classification_ceilingトリガーセッションが到達できる最大分類レベル。デフォルト:CONFIDENTIAL
quiet_hours.start / quiet_hours.endトリガーが抑制される時間範囲(24時間時計)。

トリガーを一時的に無効化するには、interval_minutes: 0を設定します。これはenabled: false

と同等で、再度有効化しやすいように他のトリガー設定をそのまま保持できます。 :::

トリガーの実行

各トリガー起動は以下のシーケンスに従います:

  1. スケジューラーが設定された間隔で発火します。
  2. PUBLIC taintで新しいバックグラウンドセッションが生成されます。
  3. エージェントは監視指示のためにTRIGGER.mdを読みます。
  4. エージェントは利用可能なツールとMCPサーバーを使用して各確認を評価します。
  5. アクションが必要な場合、エージェントが行動します — 通知を送信し、タスクを作成し、サマリーを配信します。
  6. セッションのtaintは分類データにアクセスするにつれてエスカレートする場合がありますが、設定された上限を超えることはできません。
  7. セッションは完了後にアーカイブされます。

トリガーとcronジョブは互いに補完します。正確な時刻に条件に関係なく実行すべきタスクにはcronを

使用します(午前7時のモーニングブリーフィング)。判断が必要な監視にはトリガーを使用します(30分ごとに 注意が必要なことがあるかどうかを確認)。 :::

トリガーコンテキストツール

エージェントはtrigger_add_to_contextツールを使用して、トリガー結果を現在の会話にロードできます。 これはユーザーが最後のトリガー起動中に確認されたことについて質問する場合に有用です。

使用方法

パラメーターデフォルト説明
source"trigger"ロードするトリガー出力:"trigger"(定期)、"cron:<job-id>"、または"webhook:<source>"

ツールは指定されたソースの最新の実行結果をロードし、会話コンテキストに追加します。

ライトダウン禁止強制

トリガーコンテキストの注入はライトダウン禁止ルールを尊重します:

  • トリガーの分類がセッションtaintを超える場合、セッションtaintはエスカレートして一致します
  • セッションtaintがトリガーの分類を超える場合、注入は許可されます — より低い分類のデータは常により高い分類のセッションに流れることができます(通常のcanFlowTo動作)。セッションtaintは変更されません。

セキュリティ統合

すべてのスケジュール実行はコアセキュリティモデルと統合されています:

  • 分離されたセッション — 各cronジョブとトリガーの起動は独自の生成されたセッションで独立したtaint トラッキングと共に実行されます。
  • 分類の上限 — バックグラウンドタスクは、呼び出すツールがより高く分類されたデータを返す場合でも、 設定された分類レベルを超えることができません。
  • ポリシーフック — スケジュールタスク内のすべてのアクションは、インタラクティブセッションと同じ 強制フック(PRE_TOOL_CALL、POST_TOOL_RESPONSE、PRE_OUTPUT)を通過します。
  • チャンネル分類 — 出力配信はターゲットチャンネルの分類レベルを尊重します。CONFIDENTIALの 結果はPUBLICチャンネルに送信できません。
  • 監査証跡 — すべてのスケジュール実行は完全なコンテキストでログに記録されます:ジョブID、 セッションID、taint履歴、実行されたアクション、配信ステータス。
  • 永続性 — CronジョブはStorageProvider(名前空間:cron:)を通じて保存され、Gateway の再起動後も存続します。