Claude Code(2026-11-03 時点)では、自然言語で依頼すると Claude が cron 式を組み立て、セッション内のスケジュール済みタスクとして登録します。本稿は公式ドキュメント [1](2026-11-03 取得、ページ最終更新 2026-10-22)の記述をもとに、依頼してから実際に発火するまでの間に入る差を「寿命・時刻・発火条件・権限」の 4 つに分けます。そのうえで、抜けを検出するための台帳・心拍・帯域外検査の構成を示します。
寿命:作成から 7 日で失効し、1 セッション 50 件まで
セッションスコープの定期タスクは、作成から 7 日後に自動で失効します(2026-11-03 時点)[1]。
Recurring tasks automatically expire 7 days after creation.
失効するタスクは最後に 1 回発火し、そのあと自身を削除します [1]。1 セッションが同時に持てるスケジュール済みタスクは最大 50 件です(2026-11-03 時点)[1]。どちらの値も依頼時の会話には出てこないため、本稿の実装では作成日時と件数を台帳に記録して管理します。
時刻:遅延・前倒し・ローカルタイムゾーン
5 分間隔以外の定期タスクは、各回の開始が「次回までの間隔の半分」まで、かつ最大 30 分遅れます(2026-11-03 時点)[1]。毎時、またはそれより低頻度(毎日など)のタスクでは 0〜30 分の遅れです [1]。10 分間隔で最大 5 分、30 分間隔で最大 15 分という値は、この式から本稿が計算したものです。遅延を入れる理由について docs は、全セッションのタスクが予定どおりに動くと多数のセッションが同時に API を呼ぶことになるため、と説明しています [1]。
5 分間隔のタスクは逆に、各回が 15 秒早く始まります。前回の 5 分後ちょうどに始めると、5 分のプロンプトキャッシュが切れた後になるためです [1]。
one-shot タスクは、:00 または :30 を指定すると最大 90 秒早く実行されます [1]。それ以外の分を指定したタスクはずらされないため、時刻が問題になる場合は正時と半時を避けるよう docs は案内しています [1]。cron 式の時刻は UTC ではなく、Claude Code を実行しているローカルタイムゾーンで解釈されます [1]。
発火条件:起動中かつアイドルのときだけ
タスクが発火するのは、Claude Code が起動していてアイドルの間だけです [1]。スケジュールされたプロンプトはターンとターンの合間に発火し、Claude の応答中には発火しません [1]。
it fires once when Claude becomes idle, not once per missed interval.
長いリクエストの最中に予定時刻を過ぎた場合、逃した回数分は補われず、アイドルになった時点で 1 回だけ発火します [1]。--resume / --continue で復元した定期タスクも、停止中に逃した回は発火しません [1]。間隔を省略した自己ペースの /loop は復元されないため、/loop を再実行して再開します [1]。セッション終了時に動いていたバックグラウンドの Bash コマンドと monitor も、再起動されません [1]。自己ペースのループは、次の wakeup の時刻にセッションのプロセスが動いていなければ停止します [1]。
自己ペースの場合、Claude は各反復のあとに 1 分〜1 時間の範囲で待ち時間を選びます [1]。反復が再スケジュールも停止もせずに終わると、約 20 分後に fallback の wakeup が 1 回だけ設定され、そこでも再スケジュールされなければループは終了します [1]。
/loop で秒を指定すると、cron の粒度が 1 分であるため分に切り上げられます [1]。cron のステップで表せない間隔(7m、90m など)は表せる間隔のうち最も近いものに丸められ、どの値を選んだかを Claude が伝えます [1]。
依頼内容と cron 式の対応
自然言語の one-shot リマインダーでは、Claude が cron 式で発火時刻を特定の分・時に固定し、いつ発火するかを確認として返します [1]。CronCreate では MON や JAN のような名前エイリアスは使えません [1]。日(day-of-month)と曜日(day-of-week)の両方を指定すると、どちらか一方が一致した日が一致とみなされます [1]。CronList / CronCreate の行に次回実行時刻を表示するには、Claude Code v2.1.299 以降が必要です [1]。
権限と停止
スケジュール発火で実行されるのは、Claude が自分の判断で呼び出してよい skill だけです [1]。組み込みのメンテナンスプロンプトでは、push や削除のような不可逆な操作は、transcript ですでに承認された作業の続きである場合に限って実行されます [1]。
固定間隔のループ(/loop 5m など)と、Claude に直接頼んで作ったタスクは、Esc や Ctrl+C では止まりません [1]。ループを止めずに Ctrl+C でデタッチするには、Claude Code v2.1.295 以降が必要です [1]。環境変数 CLAUDE_CODE_DISABLE_CRON=1 を設定すると、スケジューラ全体を無効にできます [1]。
確実性が必要な処理の置き場所
どのセッションにも依存しないスケジュールが必要な場合、docs は cloud scheduled task の作成を挙げています [1]。
Use cloud tasks for work that should run reliably without your machine.
保存されたタスクは、それを作ったプロジェクトフォルダの中でだけ実行されます(2026-11-03 時点の記述)[1]。
本稿の実装の要点(設計上の意見)
ここからは docs の記述ではなく、本稿の設計です。
- 台帳には依頼文ではなく、Claude が確認として返した cron 式と間隔を記録する。
- スケジュールされるプロンプトの先頭で、時刻を 1 行追記する「心拍」コマンドを実行させる。
- 検査は OS の cron から回し、Claude Code のスケジューラには載せない。スケジューラが止まると、同じスケジューラに載せた検査も止まるため。
- 許容する間隔は「間隔 + 上記の遅れの上限 + 独自の余裕 10 分」とし、7 日失効の 24 時間前から更新を促す。