Claude Codeの長いセッションで定期チェックを自動化したい人向け
Claude Codeのセッションを開きっぱなしで作業しているとき、CIの完了待ちやPRレビュー進捗を10分おきに見張りたい、30分後にリマインドしてほしい、といった『今のセッションが終わるまでだけ動けばいい短期見張り』を仕込みたい場面で、自然文(例:『10分おきにgh run listを見て』)で頼むかClaudeに3兄弟を呼んでもらう形で使う。
Claude Codeのセッションを長く開いたまま「10分ごとにCIの様子を見にいって、落ちてたら教えて」みたいな見張り役を仕込みたい場面で出てくる、3兄弟の道具です。CronCreate で見張りを仕込み、CronList で何を仕込んだかを確認し、CronDelete で取り消す。役割を3つに切ってあるだけで、やってることは「定期的にプロンプトを再投入する仕組み」の作成・確認・取り消しに対応しています。
普段はユーザーが直接これらの名前を叩くというより、「10分おきにビルドの状態をチェックして」みたいな自然文で頼んだとき、Claudeが裏でこの3つを呼びにいく形が多いです。ただ仕組みを知っておかないと「あれ、セッション閉じたら止まった」「7日経ったらいつのまにか消えてた」みたいな事故を起こします。
噛み砕くと
会議室にホワイトボードがあって、自分が今いる会議のあいだだけ有効な「リマインダー付箋」を貼れるイメージです。CronCreate は付箋を貼る、CronList は今貼ってある付箋を全部読み上げる、CronDelete は指定した付箋を剥がす。会議が終わると、付箋は基本的に全部捨てられます。
大事なのは「自分が部屋にいるあいだだけ」という縛りです。部屋を出てしまうと誰もリマインダーを読み上げてくれないし、付箋が勝手に動くこともありません。クラウド側でずっと動かしたいなら別の仕組みのほうの話になります。
大事な前提:このツール3つはセッションが開いてるあいだしか動かない
公式ドキュメントが太字で釘を刺している前提です。原文では「Tasks only fire while Claude Code is running and idle.」と書いてあって、要するに「Claude Codeが起動していて、かつ手が空いてるときだけ発火する」という意味です。ターミナルを閉じたら、すべての見張りはその瞬間に止まります。
夜中に走らせたい、PCがスリープしてても走らせたい、というニーズはこのツールでは満たせません。その場合は /schedule から使うRoutines、もしくはDesktop scheduled tasksに切り替える必要があります。前者はAnthropicのクラウド側で実行、後者は自分のPC上の常駐スケジューラとして動きます。
3兄弟の役割を1行ずつで言うと
CronCreate は「これから定期的に走らせたいプロンプトと、走らせるタイミングをcron式で渡す」やつです。1回だけ走らせる one-shot 指定もできます。返り値として8文字のIDを返します。
CronList は「いま仕掛けてある見張りを全部出す」やつ。IDとスケジュールとプロンプト本文が並びます。スケジュールはcron式の文字列がそのまま表示されます。
CronDelete は「指定したIDの見張りを取り消す」やつ。CronList で確認したIDをそのまま渡せばOKです。
「料理ブログのCIを10分ごとに見張る」を例に、実際の手順を見る
料理ブログをVercelにデプロイしていて、git push したあとビルドが通るかどうかを定期チェックしたい想定で進めます。Claude Codeのセッションは開きっぱなしの前提です。
ステップ1: 自然文で頼む
普段は CronCreate という名前を直接打たず、こう頼みます。
10分おきに、`gh run list --limit 1` を実行してCIが通ったか赤かを確認して、結果を1行で教えて
Claudeはこれを受けて、cron式 */10 * * * * と「prompt本文」と「recurring指定」を組み立てて CronCreate を呼びます。*/10 * * * * は10分おきという意味のcron式です。
ステップ2: 仕掛けたあとの応答を確認する
仕掛けが成功すると、Claudeは8文字のIDと「10分おきに動くよ」という確認を返します。ここでは仮にIDが a3f7c812 だったとして話を進めます。ここからは普通の会話を続けてOKです。バックグラウンドで10分待ちが始まります。
ステップ3: 待ってる間に別の作業をする
3兄弟の仕組みの面白いところで、「Claudeのターンとターンの合間」に発火します。Claudeが何か別の依頼で考え事をしてる最中には割り込まず、その依頼が一段落してから定期チェックのプロンプトが流れてくる、という挙動です。
ステップ4: 何を仕掛けたか忘れたとき
10分おきの見張りに加えて、別件で「30分後に休憩してねと教えて」みたいなone-shotリマインダーも追加していった結果、何を仕掛けたか分からなくなったらこう聞きます。
いま仕掛けてる定期タスクを全部教えて
Claudeは裏で CronList を叩き、IDとスケジュールとプロンプトの一覧を表で返してくれます。1つのセッションには最大50個まで仕掛けられます。
ステップ5: ここで初心者がよくやる勘違い
「10分おきにチェックして、と書いたから10:00, 10:10, 10:20...ちょうどに来るはず」と期待しがちですが、外れます。jitter(ジッター)という仕組みで、IDから計算される固定の遅延が乗ります。1時間おきの定期タスクなら最大30分遅れることもあります。
これは「全セッションが同時にAPIを叩かないようにする」ためのバラけ装置です。正確な時刻が大事なら、0 9 * * * の代わりに 3 9 * * * のように、:00 や :30 を避けたcron式にすると、one-shotならジッターが効かなくなります。前者は9時ちょうど狙い、後者は9時3分狙いの書き方です。
ステップ6: 用が済んだので取り消す
CIが無事通ったのを確認できたら、見張りはもう不要です。さっきメモしたID a3f7c812 を渡して取り消します。
a3f7c812 のタスクをキャンセルして
Claudeは CronDelete でそのIDを消します。残り49枠が空きます。
つまりこの3兄弟は何をしてくれるのか
- やってくれる: 開いてるセッション内で、cron式で指定したタイミングにプロンプトを自動で投げ直す。CI状態のポーリング・PRのコメント確認・「30分後にリマインドして」のような短期見張り役
- やってくれる:
--resumeや--continueでセッションを復帰させたとき、7日以内のrecurringタスクと未発火のone-shotタスクを自動的に復元してくれる - やってくれない: ターミナルを閉じたり、別のセッションを
claudeで新規に開いた状態では一切動かない。クラウド側で常駐させたいなら別の仕組みが要る - やってくれない: 「セッションがbusyだったから飛ばしたぶんを後でまとめて実行」のような catch-up はしない。1回逃すと、次にClaudeがアイドルになったとき1回だけ動く
- 意味が薄い場面: 「夜寝てる間に走らせたい」「PCを閉じても動いてほしい」用途。最短1時間間隔で済むならRoutines、1分間隔で常駐させたいならDesktop scheduled tasksの出番
使いどころ3シナリオ
シナリオ1: 料理ブログをデプロイした直後の「10分ポーリング」
ブログを git push してVercelのビルドが走り始めた。15分ぐらいかかる見込みだけど、その間Claudeと別の作業を進めたい。例えば過去記事のSEOチェックとか。CronCreate で「10分おきにCI状態を見て、緑か赤か1行で教えて」を仕掛けると、別作業の合間にスッと進捗が降ってきます。session-scopedなので、夕方PCを閉じれば自動で止まります。後始末いらず。
シナリオ2: 1時間後の「思い出させて」リマインダー
「14時にビルドの結果を見直して」「20分後にmerge前のレビュー1巡を頼む」みたいなone-shotのリマインダーは、自然文で頼むと裏で CronCreate が1回限りモードで仕掛けてくれます。発火後は自動で削除されるので、CronList を埋め尽くしません。料理ブログでいうと「30分後にSNSへ告知投稿しよう」みたいな自分向けのアラームに近いです。
シナリオ3: PRレビュー対応中の「進捗監視」
GitHubに上げたPRに対してレビューコメントが付いて、修正→push→CI待ち→次のコメント、というサイクルを回しているとき。「PRに新しいコメントが付いてないかと、CIの状態を15分おきに見て」を仕掛けておけば、別タブで設計書を読みながらでも進捗を逃しません。これも7日経ったら自動で消えるので、PR対応が長引いても暴走しません。
初心者が踏みやすい落とし穴
/schedule(Routines)と混同する。/scheduleはAnthropicのクラウドで動く別物で、セッションが開いてなくても走り続けます。Cron系の3兄弟はあくまでローカルのセッション内限定。「夜中も動かしたい」なら/schedule側に乗り換える- 7日expiryを忘れる。recurringタスクは作成から7日経つと最後に1回だけ発火して自動削除されます。「あれ、いつから動いてない?」と気付いたときには手遅れ。長期で走らせたいならRoutinesかDesktop scheduled tasksに移す
- 切りのいい時刻はジッターでズレる。
0 9 * * *は最大:30までずれることがあります。正確に出したいなら3 9 * * *のように:00:30を避けたcron式にする - 1セッション50タスクの上限がある。リマインダーを乱発すると埋まります。
CronListで時々棚卸しして、不要なものをCronDeleteで削る運用にする - Claudeがbusyだと発火が遅れる。10分おき指定でも、その瞬間Claudeが長いリクエストの最中なら、その応答が終わるまで待たされます。タイミングはアバウトに考えるのが正解
- 新しい会話を始めたら全部消える。
claudeを新規セッションで叩くと、前のセッションのCronタスクは全部リセットされます。続きをやりたいならclaude --resumeや--continueで前のセッションを復帰させる必要があります - 設定値
CLAUDE_CODE_DISABLE_CRON=1がセットされていると一切動かない。チーム全体でcron系を止めてるパソコンだと、エラーは出ないのに何も発火しない、という静かな不一致が起こります。動かないときはまずこの値を確認する - Background Bashやmonitorタスクは復元されない。
--resumeで復元されるのはCron系のスケジュールタスクだけ。裏で動かしていたBashプロセスや監視系は、セッション復帰時には全部リセットされている
書き方
CronCreate(cron式, prompt, 繰り返すか1回かの指定) / CronList() / CronDelete(8文字ID)
やってみるとこうなる
入力
10分おきに、gh run list --limit 1 を実行してCIが通ったか赤かを1行で教えて
出力例
Scheduled task a3f7c812 created.
Schedule: */10 * * * * (every 10 minutes, recurring)
Prompt: gh run list --limit 1 を実行してCIが通ったか赤かを1行で教えて
Expires: 2026-05-25 21:22 (7 days)
(10分後、Claudeのターン合間に自動発火)
→ CI状態: 緑(成功)。最新ラン: build-1284, completed 2分前。
このページに出てきた言葉
- セッション
- Claude Codeで <code>claude</code> を叩いてから、ターミナルを閉じる/<code>/exit</code>するまでの一連の会話のかたまり
- cron式
- 「いつ実行するか」を5つの数字で表す書式。「分 時 日 月 曜日」の順。例: <code>*/10 * * * *</code> は10分おき
- recurring
- 繰り返し実行される指定。最大7日間まで動き続けて、その後は自動で消える
- one-shot
- 1回だけ実行して自動的に消える指定。リマインダー用途で使う
- jitter(ジッター)
- 発火時刻にIDから計算される固定の遅延が乗る仕組み。1時間おきの定期タスクなら最大30分遅れることがある
- ターン
- ユーザーが頼んでClaudeが返事し終わるまでの1往復。次のターンが始まる合間に定期タスクが差し込まれる
- アイドル状態
- Claudeが今は何もしていない、ユーザーの次の指示待ちの状態。返事を考えてる最中はアイドルではない
- CI
- Continuous Integrationの略。GitHubにコードを送ったとき自動でテストやビルドを走らせる仕組み
- Routines
- <code>/schedule</code> で使えるクラウド側のスケジューラ。Anthropicのインフラで動くのでセッションを閉じても継続する。最短1時間間隔
- CLAUDE_CODE_DISABLE_CRON
- この値を <code>1</code> にしておくと、Cron系3兄弟と <code>/loop</code> がまるごと無効になる設定値。動かないときに最初に確認する場所