トリガー
トリガーは workflow がいつ発火するかを決めます。workflow は on: の下で宣言します。
1 つの workflow に複数持たせられ、それぞれをほかに触れずに個別に切れます。トリガーが
何であれ、workflow はいつでも手動で開始できます — アプリの ▶ 実行、または
lk run <workflow>。
| トリガー | 発火のきっかけ | 必要なもの |
|---|---|---|
schedule | cron 式(分単位 — CI ではなく自分のマシン) | — |
file-watch | 監視対象の glob 下でファイルが作成・変更・削除される | — |
git | ローカルリポジトリのイベント: commit、ブランチ作成 | git リポジトリ |
run-completed | 別の workflow の完了(done または failed) | — |
manual | あなた自身。lk run またはデスクトップアプリから | — |
| GitHub イベント | issue、pull request、その他リポジトリのイベント | Console |
slack | 共有 Slack アプリへのメンションと DM | Console |
schedule
on:
schedule:
- cron: "*/15 * * * *"
daily、hourly、weekly といったエイリアスも使えます。GitHub Agentic Workflows に
合わせています。
file-watch
on:
file-watch:
paths: ["inbox/**/*.pdf"]
events: [create, modify] # create | modify | delete
debounce_ms: 2000 # 連続した保存を 1 回の発火にまとめる
min_size_kb: 1 # 空、または書き込み途中のファイルを弾く
git
on:
git:
events: [commit, branch-created]
branch: ["main", "release/*"] # glob
author_not: ["loopkeep[bot]"] # 自分の自動 commit で再発火しない
これらはローカルリポジトリのイベントです — forge も webhook もありません。
author_not は、workflow が自分の commit で自分自身をトリガーするのを防ぐ定番の
ガードです。
run-completed
on:
run-completed:
workflow: "test-fixer"
status: [failed] # done | failed
if: event.stats.attempts >= 3 # 任意の絞り込み
別の workflow の完了を購読します。上流の run の
構造化出力 は if: フィルタで event.output として使え、
新しい run のトリガー context に注入されます。
リモートトリガー(GitHub と Slack)
GitHub リポジトリのイベントと Slack のメンションは、Console 経由で wake signal として
あなたの daemon に届きます。signal は中身を運びません — daemon はあなたの認証情報で
GitHub・Slack API に対してイベントを検証し、そのうえで初めて発火するので、偽造した
signal では run を始められません。Slack のトリガーは既定で bot のメッセージを無視し
(from_not: ["*bot*"])、返信ループを防ぎます。設定は
Consoleとは にあります。
フィルタ
構造化フィルタ(上記のトリガーごとのキー)がほとんどの条件を扱います。残りには
if: があります。これは意図的に小さくした式言語で、event. のパス、比較
(== != > >= < <=)、contains、&& || !、そして括弧が使えます。
関数呼び出しもコード実行もありません — 評価は決定的です。フィルタで弾かれた発火も
記録され(filtered: true)、なぜ動かなかったのかを必ず確認できます。
集約
マシンが眠っている間に毎晩の発火を 3 回逃したとして、朝に溜まった分を 3 回動かすのは たいてい望むところではありません。トリガー種別ごとに既定があります:
| トリガー | 既定 | 理由 |
|---|---|---|
schedule | latest | 逃した cron の tick は 1 つにまとまる |
file-watch | latest | 連続した保存は 1 つの変更 |
git | all | commit はそれぞれに意味がある |
run-completed | all | 一環を飛ばすと連鎖が壊れる |
トリガーごとに coalesce: latest または coalesce: all で上書きします。まとめられた
発火は、何件のイベントが畳み込まれたかを記録します。
連鎖には深さの上限がある
run-completed と dispatch-workflow の発火は、親 run の連鎖深さに 1 を足した値を
引き継ぎ、上限は 5 です。それより深い発火は拒否され、監査されます。これがループ防止の
モデルのすべてです — 設定する DAG エンジンはなく、暴走する自己トリガーを止める
深さの上限だけです。
止める
1 つの workflow の自動トリガーは、その ワークフロー カードのスイッチで切り替えます。 プロジェクト設定 → すべてのトリガーを停止 は、ポリシー画面で再開するまで、1 つの project の自動発火を止めます。設定 → すべての自動化を一時停止 は、すべての project を 横断したグローバルな kill switch です。
どちらも今後の発火にだけ効きます。手動の run と、すでに実行中の run は動き続けます。 グローバルの pause は 信頼 とは独立で、どの workspace の信頼 状態にも触れません。