トリガー

トリガーは workflow がいつ発火するかを決めます。workflow は on: の下で宣言します。 1 つの workflow に複数持たせられ、それぞれをほかに触れずに個別に切れます。トリガーが 何であれ、workflow はいつでも手動で開始できます — アプリの ▶ 実行、または lk run <workflow>

トリガー発火のきっかけ必要なもの
schedulecron 式(分単位 — CI ではなく自分のマシン)
file-watch監視対象の glob 下でファイルが作成・変更・削除される
gitローカルリポジトリのイベント: commit、ブランチ作成git リポジトリ
run-completed別の workflow の完了(done または failed)
manualあなた自身。lk run またはデスクトップアプリから
GitHub イベントissue、pull request、その他リポジトリのイベントConsole
slack共有 Slack アプリへのメンションと DMConsole

schedule

on:
  schedule:
    - cron: "*/15 * * * *"

dailyhourlyweekly といったエイリアスも使えます。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 回動かすのは たいてい望むところではありません。トリガー種別ごとに既定があります:

トリガー既定理由
schedulelatest逃した cron の tick は 1 つにまとまる
file-watchlatest連続した保存は 1 つの変更
gitallcommit はそれぞれに意味がある
run-completedall一環を飛ばすと連鎖が壊れる

トリガーごとに coalesce: latest または coalesce: all で上書きします。まとめられた 発火は、何件のイベントが畳み込まれたかを記録します。

連鎖には深さの上限がある

run-completeddispatch-workflow の発火は、親 run の連鎖深さに 1 を足した値を 引き継ぎ、上限は 5 です。それより深い発火は拒否され、監査されます。これがループ防止の モデルのすべてです — 設定する DAG エンジンはなく、暴走する自己トリガーを止める 深さの上限だけです。

止める

1 つの workflow の自動トリガーは、その ワークフロー カードのスイッチで切り替えます。 プロジェクト設定 → すべてのトリガーを停止 は、ポリシー画面で再開するまで、1 つの project の自動発火を止めます。設定 → すべての自動化を一時停止 は、すべての project を 横断したグローバルな kill switch です。

どちらも今後の発火にだけ効きます。手動の run と、すでに実行中の run は動き続けます。 グローバルの pause は 信頼 とは独立で、どの workspace の信頼 状態にも触れません。