triggerは時計または署名です。実行主体、内容、セッションの行き先など、それ以外はどちらも同じ設定です。
秒、分、時、日、月、曜日の6フィールドcron式を、任意のIANA timezoneで指定します。または、一度だけ実行して静かになるrun_at timestampも使えます。
外部サービスがtrigger URLにPOSTします。Kortixが署名を確認し、payloadをpromptに展開してセッションを開始します。フィルターに合わないpayloadは受け付けられますが、無視されます。
プロジェクト内のすべてのtriggerは1行で表示されます。名前、起動時刻、timezone、実行agent、その起動先セッションが確認できます。クリックしないと分からない隠れた状態はありません。
| Trigger | Cron | Timezone | Agent | Session |
|---|---|---|---|---|
| daily-digest | 0 0 9 * * 1-5平日09:00 | America/Los_Angeles | kortix | fresh |
| invoice-sweep | 0 30 6 1 * *毎月1日06:30 | Europe/Berlin | finance | reuse |
| oncall-handoff | 0 0 17 * * 5金曜17:00 | UTC | support | fresh |
| roadmap-review | 0 0 8 * * 1月曜08:00 | America/New_York | planner | pinned |
triggerはagentやsandbox imageと並んでkortix.yamlに保存されます。それぞれにagent、スケジュールまたはsecret、セッションの最初のメッセージになるprompt templateが指定されます。
# fires on the clocktriggers: - slug: daily-digest type: cron agent: kortix cron: "0 0 9 * * 1-5" timezone: America/Los_Angeles session_mode: fresh prompt: | Summarize yesterday’s commits. Open a change request against main. # fires on an event - slug: new-lead type: webhook agent: sales secret_env: WEBHOOK_SECRET prompt: >- A new lead arrived: {{ body.name }} ({{ body.email }}). Add it to the CRM.# add it, ship it, and the schedule is live$ kortix triggers add daily-digest --type cron \ --cron "0 0 9 * * 1-5" \ --timezone America/Los_Angeles \ --prompt "Summarize yesterday. Open a CR."$ kortix ship→ kortix.yaml pushed. daily-digest is scheduled. # see every trigger and when it last fired$ kortix triggers ls # do not wait for 09:00 to find out$ kortix triggers fire daily-digest→ session startedpromptは、起動元payloadに対して{{ token.dotted.path }}を展開します。webhookでは{{ body.* }}とリクエストヘッダー、cronでは{{ cron.schedule }}、{{ cron.timezone }}、{{ cron.scheduled_for }}を取得します。存在しない値は何も表示されず、エラーもagentが読むメッセージ内の残った括弧もありません。
すべてのwebhook triggerには、署名に使うproject secretが指定されます。指定がないtriggerは検証時に拒否されるため、後からロックダウンし忘れる未認証webhookはありません。
POST /v1/webhooks/projects/{projectId}/{slug}
X-Kortix-Signature: sha256=<hmac>
raw request bodyに対するHMAC-SHA256をconstant timeで比較します。GitHub互換のX-Hub-Signature-256 headerにも対応しているため、repo webhookにadapterは不要です。
フィルターは、プロンプトが参照するものと同じペイロードに対して照合するドット区切りのパスです。ループを防ぐために使います。会話の双方を報告するソースでは、これがないとエージェント自身の返信で再実行されます。
デフォルトでは、実行ごとにまっさらな状態から始まります。新しい作業ではなく継続中のスレッドの場合、トリガーは所有済みのセッションに再プロンプトできます。Kortixはモードを順番に試し、失敗時は次に進むため、実行が単に消えることはありません。
IDで指定した1つのセッションに再プロンプトします。そのセッションがなくなっているか失敗している場合は、次に進みます。
ペイロードからキーを生成し、そのキーに完全一致する、直近の正常なセッションに再プロンプトします。顧客ごとに1スレッドです。別のキーのセッションにフォールスルーすることはありません。
このトリガーが作成した、直近の正常なセッションに再プロンプトします。固定されたトリガーは、さらに先へ進む前にここへフォールバックします。
新しいブランチを切り、新しいクラウドコンピューターを起動します。これがデフォルトであり、他のすべてのモードの最後の手段です。
トリガーで起動されたセッションは、設定したユーザーだけでなくプロジェクト全体から見えます。アイドル状態が5分続くと自動停止するため、午前3時に実行した自動化が朝までマシン料金を発生させ続けることはありません。
自動化に、人が持たない権限を与えることはありません。同じ分離、同じ範囲指定、そしてmainへ戻る道は1つだけです。