概要
/loop を使用すると、Qoder CLI で特定のプロンプトやスラッシュコマンドを繰り返し実行できます。ステータスのポーリング、継続的なチェック、定期的なアクションの繰り返しなどのシナリオに適しており、例えば「5分ごとにデプロイを確認する」「CI がグリーンになるまで見張る」といった用途に活用できます。
ペース配分には 2 つのモードがあり、間隔を指定するかどうかで決まります。
| モード | 選択方法 | タイミング |
|---|---|---|
| 固定間隔 | 間隔を指定する(/loop 5m …) | Qoder が間隔を対応する定期スケジュールに変換し、スケジュールタスクを作成します。 |
| 動的ペース配分 | 間隔を省略する(/loop monitor CI) | Qoder はまずタスクを実行し、その後、次の実行をいつ行う価値があるかを自ら判断します(60秒〜3600秒)。次の起動をスケジュールしなくなった時点でループは終了します。 |
コマンド形式
interval:オプションの時間間隔。指定すると固定間隔で実行され、省略すると Qoder が自らペースを決めます。flags:オプション。永続化(--durable、--permanent)と予算上限(--max-turns、--max-credits)があります。フラグは入力内のどこに書いても構わず、スケジュールされる前にプロンプトから取り除かれます。prompt:繰り返し実行するプロンプトまたはスラッシュコマンド。省略し、かつ.qoder/loop.mdが存在する場合は、Qoder はそのタスクリストを繰り返し実行します。
時間間隔の構文
時間間隔は数値と単位で構成され、4種類の単位がサポートされています。
| 単位 | 意味 | 例 |
|---|---|---|
s | 秒 | 30s |
m | 分 | 5m |
h | 時間 | 2h |
d | 日 | 1d |
30s は 1m として扱われ、Qoder は実際に切り上げられた後の間隔を通知します。
時間間隔から Cron への変換ルール:
| 間隔 | 対応するスケジュール | 説明 |
|---|---|---|
Nm(N ≤ 59) | N分ごと | |
Nm(N ≥ 60) | 時間に丸める | 24時間で割り切れる必要がある |
Nh(N ≤ 23) | N時間ごと | |
Nd | N日ごとの真夜中(ローカルタイムゾーン) | |
Ns | 分に切り上げ | 最小1分 |
間隔がその単位で割り切れない場合(例えば、7mは:56から:00までの間隔が不均等になり、90mは整数の時間で表現できません)、Qoder は最も近い均等な間隔を選択し、作成前にどのような値に丸められたかを通知します。
2つの記述方法
時間間隔は先頭に記述することも、末尾の every 句で表現することもできます。
- 先頭の時間間隔:
/loop 5m check the deploy→ 間隔5m、プロンプトcheck the deploy。 - 末尾の every 句:
/loop check the deploy every 20m→ 間隔20m、プロンプトcheck the deploy。every 5 minutesやevery 2 hoursといった自然な表現もサポートされています。
every は、その後に時間の表現が続く場合にのみ時間間隔として扱われる点に注意してください。例えば、/loop check every PR の every は時間の表現ではないため、プロンプトの一部として扱われ、このループは動的ペース配分モードで実行されます。
予算上限
ループは期限切れになるか停止させるまで動き続けるため、想定以上のコストがかかりやすくなります。2 つのフラグで上限を設けられます。
| フラグ | 意味 |
|---|---|
--max-turns N | N 回実行したら停止します。N は整数です。 |
--max-credits N | 累計 N クレジットを消費したら停止します。1 回の実行が 1 クレジットに満たないことも多いため、小数も指定できます。 |
--max-turns=6)も使用できます。指定できるのは正の数のみです。上限が 0 の場合、ループは最初の実行前に取り消されてしまいます。
上限の挙動:
- 両方を指定した場合、先に到達した方がループを停止します。
- 実行回数はセッション単位ではなく、タスクの全期間で累計されます。 Qoder CLI を再起動してもカウントはリセットされないため、再起動で上限を回避することはできません。
- 実行回数は各実行の前に判定されます。 そのため
--max-turns 2はちょうど 2 回トリガーされ、3 回目はありません。 - クレジットは 1 回の実行が終わってから計上されます。 そのため最後の実行は上限を少し超えて終わることがあります(例:上限
3に対して3.2)。すでに費用が発生した作業を破棄することになるため、Qoder は実行途中で打ち切りません。 - 上限に到達するとループは完全に停止します。 タスクは削除され、
Scheduled task a1b2c3d4 stopped: it used 2 of 2 turns.のようなメッセージが表示されます。Qoder にも同じ通知が届くため、「ループはまだ動いている」という前提で推論を続けることはなく、停止をそのまま報告します。続行したい場合は、新しい上限でループを作り直してください。 - 動的ペース配分モードでは、上限はループに固定されます。 ループを開始する
/loopで一度指定すれば、以降のすべての起動で有効です。ループを停止すると上限と使用量の両方がクリアされ、次の/loopはゼロから始まります。
使用量の確認と変更
/crontab でスケジュールタスクパネルを開くと、USAGE 列に各ループの消費量が表示されます。
t キーで実行回数の上限、b キーでクレジットの上限を編集し、空の値を入力するとその上限は解除されます。
永続化・自動失効・キャンセル
既定では /loop で作成したタスクは現在のセッションにのみ存在します。Qoder CLI の実行中はスケジュールどおりにトリガーされ、プロセス終了とともに消えます。定期タスクは作成後 7日 で自動的に失効します。
2 つのフラグでこの挙動を変更できます。
| フラグ | 効果 |
|---|---|
--durable | タスクをディスクに保存し、再起動後も維持します。自動失効はしません。 |
--durable 30d | タスクをディスクに保存し、30 日後に失効させます。 |
/crontab パネルから削除するか、動的ペース配分モードであれば Qoder にループの停止を指示してください。
完全なパラメータ、デフォルト値、および失効ルールについては、Loop コマンドリファレンスを参照してください。