Daemon と設定

loopkeepd はすべてをこなす常駐プロセスです。トリガーを監視し、run を実行し、policy を 評価し、イベントログを書き、通知を配信します。CLI とデスクトップアプリはクライアントで、 閉じても実行中のものは何も変わりません。

1 つの daemon が登録済みのすべての workspace を提供します。各 workspace はそれぞれ 独立した context を持ちます。自分のイベントログ、policy、信頼状態、workflow です。

制御

lk start      # 別名: up
lk stop       # 別名: down — 実行中の run は次の起動時に interrupted として復元
lk restart
lk status

クライアントは daemon とローカルの socket、既定では /tmp/loopkeepd.sock で話します (LOOPKEEP_SOCKET で上書き — daemon とクライアントの両方に設定してください)。 ネットワークポートは開きません。ペアリングした場合の Console 接続は、外向きの WebSocket 1 本です。

ディスク上のファイル

グローバルは ~/.config/loopkeep/ の下(XDG_CONFIG_HOME を尊重。 LOOPKEEP_CONFIG は設定ファイルのパスを上書き):

~/.config/loopkeep/
├── config.yaml       # daemon の設定(並列数の上限、retention)
└── policy.yaml       # あなたの home policy layer

workspace ごとは <workspace>/.loopkeep/ の下:

.loopkeep/
├── policy.yaml           # project policy(これは commit する)
├── policy.local.yaml     # あなた個人の上書き(これは gitignore する)
├── workflows/            # workflow の定義
├── secrets               # secret の名前だけ — 値は OS の keychain にある
├── events.db             # append-only のイベントログ(SQLite)
└── worktrees/<run_id>/   # 各 run の隔離された git worktree

config.yaml

concurrency:
  global_max: 4 # 全 workspace を通じた実行中の run
retention:
  worktree_days: 14 # 完了した run の worktree を保持する期間。省略すると永久保持

どちらも CLI(lk global-maxlk retention)とデスクトップアプリから管理でき、編集は どちらの経路でもこのファイルに書き戻されます。

イベントログ

システムがすることはすべて — トリガーの発火、状態の変化、提案されたアクション、 あなたの決定 — が events.db の中の不変の記録で、workspace ごとです。受信箱、run の 一覧、監査証跡はすべてこのログから派生したビューで、ずれる第二の帳簿はありません。 記録が更新・削除されることはありません — 訂正は新しいイベントです。ファイルは 読み取り専用の証跡として扱ってください。起動時に永続化できなければ、daemon は履歴を 静かに失うのではなく起動を拒否します。

監督の証跡もここから来ます。誰が、いつ、どのルールが有効なもとで、何を承認したかは、 再構成ではなくクエリです。

workspace レジストリ

lk workspaces                          # 一覧
lk workspaces add <path> [--name <n>]
lk workspaces remove <id>              # home は削除できない

.loopkeep/ を含む未登録のパスに対するコマンドは、その場で登録します。

トラブルシュート

症状考えられる原因
CLI が daemon は動いていないと言うlk start。カスタムの LOOPKEEP_SOCKET を使うなら、daemon と CLI が一致していることを確認する。
workflow が自動で発火しないworkspace が信頼されていない(lk trust)、workflow が disable(lk enable <workflow>)、またはグローバル pause が on(lk resume --all)。
run が waiting のままあなたを待っている — lk inbox を確認し、lk approve <seq> で決める。
再起動後に run が interrupted になる想定どおり: lk stop は実行中の run を次の起動時にそう復元する。lk rerun する。
run_* の worktree が溜まるretention が off か長い — lk retention <days>、または lk cleanup で今すぐ一掃する。