Claude Codeで一回きりのリマインダーを設定する
Claude Codeに自然言語で頼むだけで一回だけ発火するリマインダーを設定できます。/loopとの違い、ジッター、セッションが消えたときの挙動をまとめます。
Claude Codeに一回きりのリマインダーを頼む方法
/loopのようなコマンドは特に要りません。やりたいことを自然言語でそのまま伝えるだけで、Claude Codeは一回発火して自動的に消えるタスクを登録します。
remind me at 3pm to push the release branchin 45 minutes, check whether the integration tests passed時刻を指定するか、経過時間を指定するかは自由です。Claudeは頼んだ内容を1回だけ実行するタスクとして解釈し、発火時刻を確認メッセージで返します。
頼んでから消えるまで
- 1
自然言語で頼む
時刻か経過時間と、そのとき実行してほしい内容を書きます。内容は発火時にそのままプロンプトとして送られます。
- 2
cron式で発火時刻が固定される
Claudeが
CronCreateツールで、分と時まで固定した一回きりのタスクを登録します。 - 3
ターンの合間に発火する
スケジューラは毎秒、期限の来たタスクを探して低優先度でキューに入れます。Claudeが応答している最中なら、今のターンが終わるまで待ちます。
- 4
実行後に自動で消える
タスクは自分で削除され、
CronListの一覧からも消えるので、後始末は要りません。
こんな場面で使う
答えを待つ間、別の作業に頭を切り替えたいときに向いています。
- デプロイやビルドが終わるタイミングで、結果だけ後から知りたい
- 会議の15分前に、前提の資料を読み返すよう促してほしい
- 長時間かかるバックグラウンド処理を仕掛けたあと、区切りのいい時間に様子を見たい
- 退勤前の決まった時刻に、その日の未処理タスクをまとめて確認したい
いずれも「毎回同じことを繰り返したい」のではなく「一度だけ、決まったタイミングで思い出させてほしい」という頼み方です。この境界線が/loopとの使い分けの基準になります。併用もできます。長時間のビルドは/loopで数分おきに見ながら、「17時になったら今日の未処理タスクを教えて」と一回きりのリマインダーを重ねる、という組み合わせです。
繰り返したいなら/loop、止めずに続けたいなら/goal
同じ「あとで確認してほしい」でも、繰り返すかどうか、マシンやセッションを開いておけるかで選ぶ仕組みが変わります。
| やりたいこと | 向く仕組み | 補足 |
|---|---|---|
| 1回だけ、特定の時刻か経過時間後に確認したい | 向く仕組み自然言語のリマインダー | 補足発火後に自動で消える |
| 一定間隔で繰り返し様子を見たい | 向く仕組み/loop 5m ... | 補足最小間隔は1分 |
| 状況に応じて間隔を変えながら見張りたい | 向く仕組み/loop(間隔省略) | 補足1分〜1時間の範囲でClaudeが毎回決める |
| セッションを閉じても動かしたい | 向く仕組みRoutines | 補足クラウドで実行され、最小間隔は1時間 |
| マシンは起動しておくが、セッションは開かなくてよい | 向く仕組みDesktopのスケジュールタスク | 補足ローカルのファイルも使える。最小間隔は1分 |
公式の比較表では、権限確認の扱いとローカルファイルへのアクセスが仕組みごとに違います。Routinesは新しいクローンの上で権限確認なしに自律実行し、MCPサーバーはタスクごとに設定したコネクタを使います。Desktopのタスクは権限確認をタスクごとに設定でき、ローカルのファイルと設定ファイル上のMCPサーバーに触れます。/loopはセッションの権限設定とMCPサーバーを引き継ぎます。
Routinesの作成はCLIの/schedule(別名/routines)から、会話形式で進められます。/loopには/proactiveという別名もあります。
/loopは/loop 20m /review-pr 1234のようにスキルの呼び出しも繰り返せます。ただしスケジュールで発火した時点では、/permissionsや/clearのような組み込みコマンドと、disable-model-invocation: trueのスキルは実行されず、ただの文字列として届きます。
時刻ではなく「終わるまで」で区切りたい場合は、条件を満たすまでターンを重ねる/goalの領分です。リマインダーは時刻で発火するだけで、条件の達成は見ません。/loopとの細かな違いはClaude Codeの/loop、マシンを閉じても動かし続ける定期実行はClaude Code Routinesにあります。ローカルで常駐させる方法はDesktopのスケジュールタスクの記事が詳しいです。
リマインダーを確認・キャンセルする
登録したリマインダーも、自然言語でそのまま扱えます。
what scheduled tasks do I have?cancel the deploy check job裏側ではCronListがID・スケジュール・プロンプトの一覧を返し、CronDeleteがIDを指定してタスクを取り消します。IDは8文字で、同じセッションに複数のリマインダーを重ねても一覧で見分けられます。置ける数は1セッションあたり50件までで、/loopのタスクとの合計です。
Escでは止まらない点に注意してください。Escが効くのは待機中の自己ペースの/loopだけで、自然言語で頼んだタスクは削除するまで残ります。
発火のタイミングで気をつけること
CronCreateが受け取るのは分・時・日・月・曜日の5フィールドなので、発火の精度は分単位です。時刻はすべてローカルのタイムゾーンで解釈されます。0 9 * * *なら、UTCではなく実行している場所の午前9時です。
ちょうど毎時00分・30分に指定したリマインダーは、最大90秒前倒しで発火することがあります。同時刻に多数のセッションがAPIへ一斉アクセスしないための調整で、タスクIDから決まる固定のずれです。厳密な時刻にこだわるなら00分・30分以外の分を指定すると、このずれは掛かりません。3 9 * * *と0 9 * * *なら前者です。繰り返しタスク側のジッターの仕組みや、cron式そのものの書き方はClaude Code cron式リファレンスにあります。
見逃した回の埋め合わせは行われません。長い応答の間に予定時刻を過ぎても、アイドルに戻った時点で1回だけ実行されます。
7日で自動失効するのは繰り返しタスクです。作成から7日後に最後の1回を発火して自分で削除されます。長く続けたい場合は、期限前に作り直すか、RoutinesやDesktopのタスクを使います。
時刻を決めない「あとで見て」は自己ペースの/loopに向く
一回きりのリマインダーは、頼んだ時点で発火時刻が決まります。「ビルドが終わるころに見て」のように終わる時刻が読めない待ちは、間隔を省いた/loopが向いています。毎回の終わりにClaudeが1分から1時間先の次回を選び直し、待ちが長引けば間隔も伸びます。
一覧には一回きりのタスクと同じように載り、CronDeleteで消せます。ジッターは掛かりませんが、7日の自動失効は掛かります。作業が終われば、ClaudeがScheduleWakeupにstop: trueを渡して自分で止めます。次回の予約も停止もせずに終えた場合は、約20分後に予備の起床が1回入り、それでも再予約されなければ止まります。
時刻で見に行くのではなく、終わった瞬間に知りたい場合は別の手段があります。Monitorツールが使えるセッションでは、Claudeがバックグラウンドのスクリプトを走らせ、出力の各行をそのままセッションへ流します。ポーリングを挟まないので、プロンプトを間隔で繰り返すよりトークン効率と反応の速さで有利になることが多いとされています。CIの失敗をセッションに直接押し込みたい場合は、Channelsが用意されています。
セッションを閉じる・開き直すとどうなるか
一回きりのリマインダーはセッションスコープなので、--resumeや--continueで戻らない限り引き継がれません。元のセッションに戻ったときの扱いは、次のとおり分かれます。
--resume / --continue で戻ったとき
復元されるもの
CronCreateで登録したタスクのうち、期限が切れていない繰り返しタスクと、予定時刻がまだ来ていない一回きりのタスクです。
復元されないもの
予定時刻を過ぎた一回きりのタスク、期限切れの繰り返しタスク、自己ペースの/loop、バックグラウンドのBashとモニタータスクです。
セッションに戻るためのオプションは、v2.1.287のclaude --helpでは次のように載っています。
claude --version
claude --help2.1.287 (Claude Code)
-c, --continue Continue the most recent conversation in
the current directory
-r, --resume [value]
Resume a conversation by session ID, or
open interactive picker with optional search term--continueは現在のディレクトリの直近の会話に戻り、--resumeはIDか選択画面で会話を選びます。
ターミナルを閉じるとセッションごと止まります。セッションをバックグラウンドに退避した場合は、/loopで作ったタスクが退避先のセッションに引き継がれて動き続けます。退避は新しい会話を始める操作とは別で、止めたいときは環境変数CLAUDE_DISABLE_ADOPT=1を設定します。
退避のオプションも--helpに載っています。
--bg, --background Start the session in the background and
return immediately. Prints the id that
`claude attach`, `logs`, `stop` and `rm`
take; `claude agents` lists them.agent viewでは、スリープ中の/loopセッションが実行回数とカウントダウン付きの行で並びます。スケジュールで動くセッションからの通知は、入力が必要になったときだけです。
機能フラグの取得をオフにした環境では、セッションをまたいで残したいタスクがプロジェクトの.claude/scheduled_tasks.jsonに保存されます。.claudeディレクトリやこのファイルがシンボリックリンクだと、登録はエラーで終わります。保存したタスクが動くのは作成したフォルダだけです。ファイルを新しいワークツリーへコピーしても、一覧には出ますが発火しないので、そのフォルダで作り直します。
取得がオフになるのは、DISABLE_GROWTHBOOK・DISABLE_TELEMETRY・DO_NOT_TRACK・CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICのいずれかを設定したセッション、サードパーティープロバイダー経由のセッション、Claude appsゲートウェイのセッションです。
hooksからは一回きりのリマインダーを見分けられる
セッションの状態をStop hookで監視しているなら、入力JSONのsession_crons配列に、予定されているタスクが1件ずつ入ります。recurringがfalseのエントリが一回きりのタスクで、scheduleには発火時刻1回分を表す式が入ります。promptは1,000文字で切られます。下の例の30 14 15 3 *は、3月15日の14時30分に1回だけ発火する式です。idにはタスクのIDが入ります。
{
"session_crons": [
{
"id": "cron-001",
"schedule": "30 14 15 3 *",
"recurring": false,
"prompt": "check the build"
}
]
}同じ入力のbackground_tasksと合わせると、「セッションは完了したのか、バックグラウンドの作業や予定された発火を待って止まっているだけか」をhooksの側で見分けられます。CronCreateのほかScheduleWakeupや/loopのタスクも同じ配列に載り、予定も実行中の作業も無ければどちらも空です。SubagentStopも同じ2つの配列を受け取りますが、中身はサブエージェントではなく親セッションの分です。
スケジューラ自体を止める
環境変数CLAUDE_CODE_DISABLE_CRON=1を設定すると、スケジューラ全体が無効になります。cronツールと/loopが使えなくなり、登録済みのタスクも発火しなくなります。
CLAUDE_CODE_DISABLE_CRON=1 claude症状から原因を探す
| 症状 | 原因 | 対処 |
|---|---|---|
--resumeせずに開き直したら消えていた | 原因セッションスコープの仕様 | 対処続けたいなら--resumeで戻る |
| 発火しなかった | 原因ターミナルを閉じた / 戻る前に予定時刻が過ぎた | 対処時刻の過ぎた一回きりは復元されないので頼み直す |
| 思ったより早く鳴った | 原因00分・30分指定のジッター | 対処00分・30分以外の分にする |
| 登録できなくなった | 原因1セッション50件の上限 | 対処不要なものを自然言語で削除する |
まとめ
数分から数時間後に一度だけ思い出したいなら、自然言語で頼むのが最短です。セッションを閉じても動かしたい予定はRoutinesかDesktopのスケジュールタスクに回します。