CLAUDE_CODE_DISABLE_CRONとは — スケジュール実行を止める環境変数
CLAUDE_CODE_DISABLE_CRONは、Claude Codeの/loopスケジュールとCron系ツールを止める環境変数です。止まる範囲、設定方法、似た変数との違いをまとめます。
CLAUDE_CODE_DISABLE_CRONは、Claude Codeの/loopスケジュール実行とCron系ツールをまとめて止める環境変数です。値を1にすると/loopスキルとスケジュール管理ツールが使えなくなり、登録済みのタスクも発火しなくなります。セッション途中で動いているタスクも例外ではありません。定期実行で外部APIの取得を回す例はClaude CodeのSearch Console API活用にあります。
/loopが使えなくなったとき、この変数が原因かを切り分ける
/loopが候補に出ない、CronCreateを呼んでもらえない。そうなったときの原因は、この変数のほかにもあります。見分ける材料は次のとおりです。
/loopが消える2つの原因
CLAUDE_CODE_DISABLE_CRONが有効
/loopとCron系ツールが使えなくなります。ほかの同梱Skillや/initのような組み込みコマンドは、そのまま使えます。
CLAUDE_CODE_DISABLE_BUNDLED_SKILLSが有効
/loopは同梱Skillなので、道連れで消えます。ほかの同梱SkillやWorkflowも一緒に除去されるので、症状が/loopだけにとどまりません。
設定の出どころを探すときは、シェルの環境変数だけでなくsettings.jsonのenvブロックも見ます。envに書いた値は、シェルでexportした同名の変数を上書きするためです。
env | grep CLAUDE_CODE_DISABLE
grep -n "CLAUDE_CODE_DISABLE" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json組織が管理設定で配っている場合は、手元のファイルに何も書かれていなくても有効になります。管理設定のenvは、起動時にも保存で変更が入ったときにも適用されます。
CLAUDE_CODE_DISABLE_CRONが止めるのは/loopとCron系ツール
環境変数リファレンスの説明文は次のとおりです。
CLAUDE_CODE_DISABLE_CRON: Set to 1 to disable scheduled tasks.
The /loop skill and cron tools become unavailable and any
already-scheduled tasks stop firing, including tasks that are
already running mid-session.止まる対象は3つあります。1つ目は/loopです。セッションを開いたまま同じプロンプトを繰り返すバンドル済みSkillで、モデルから見えなくなります。2つ目はCronCreate・CronList・CronDeleteの3ツールで、cron式で間隔を決めた繰り返しタスクの登録・一覧・取消を担います。3つ目は登録済みのタスクそのものです。設定した瞬間に新規登録が止まるだけでなく、既存の繰り返しタスクも発火しなくなります。
固定間隔でも自己ペースでも影響は同じ
/loopには間隔を自分で決める固定モードと、Claudeが次の実行時刻を選ぶ自己ペースモードがあります。自己ペースでは各回の末尾でScheduleWakeupツールを呼び、次の起動を1分から1時間の範囲で予約し直します。ScheduleWakeupは自己ペースの/loopが呼ぶツールなので、/loopが使えなければ自己ペースの再予約は行われません。
再開で復元されるタスクも対象
CronCreateで登録したタスクはセッションに紐づき、--resumeや--continueで再開すると、期限切れでないものが復元されます。復元されるのも登録済みタスクなので、この変数が有効なままでは動きません。再開後に動いているつもりの繰り返しタスクが、一度も発火しないまま終わる事態になります。
一方、自己ペースの/loopは再開しても復元されません。もともと/loopを打ち直す前提の機能です。
有効にする3つの方法
置き場所は、シェルの環境変数、settings.jsonのenv、管理設定のenvの3つです。まずシェルから渡す方法です。
export CLAUDE_CODE_DISABLE_CRON=1
claudeexportした値は、そのシェルから起動したclaudeだけに効きます。固定したいならsettings.jsonのenvキーに書きます。~/.claude/settings.jsonなら全プロジェクト、.claude/settings.jsonならそのプロジェクトだけが対象です。
{
"env": {
"CLAUDE_CODE_DISABLE_CRON": "1"
}
}オンオフを切り替える変数に使える値は、1・true・yes・on(有効)と0・false・no・off(無効)で、大文字小文字は問いません。変数そのものを消しても無効に戻ります。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICのように空でない値なら何でも効く変数もあり、この変数はそれとは違います。
CLAUDE_CODE_DISABLE_BUNDLED_SKILLSとCLAUDE_CODE_DISABLE_WORKFLOWSには、設定キーのdisableBundledSkills・disableWorkflowsが対応します。CLAUDE_CODE_DISABLE_CRONには対応するキーがなく、環境変数(シェルまたはenvブロック)でだけ制御します。
設定を書き換えたとき、起動中のセッションに効くか
envの値が読まれるタイミングは、置き場所で変わります。ユーザー設定・--settings・管理設定の値は、起動時に読まれ、保存でenvの内容が変わると起動中のセッションにも反映されます。プロジェクト設定とローカル設定の値は、ワークスペースを信頼したあとに読まれ、こちらも保存の変更で再反映されます。
シェルでexportした値は、claudeを起動した時点で決まります。起動済みのセッションの環境は書き換えられません。
設定した後に何が起きるか
デプロイ完了待ちや長時間ビルドの監視のように、/loopを前提にした運用フローは、この変数を有効にすると動かなくなります。
この変数を設定しない場合でも、繰り返しタスクには寿命があります。作成の7日後に最後の1回を発火して自動で削除され、1セッションで持てるタスクは50件までです。発火するのはClaude Codeが起動していて手が空いているときだけで、ターミナルを閉じると止まります。長い処理の最中に時刻が過ぎたタスクは、手が空いた時点で1回だけ発火し、見逃した回数ぶんは追いかけません。
発火時刻にはずれもあります。APIへの集中を避けるため、繰り返しタスクは予定時刻から最大30分(1時間より短い間隔なら間隔の半分まで)遅れて動きます。毎時0分に設定した作業が30分近く後に始まることもあります。時刻が重要なら、3 9 * * *のように0分・30分を外した分を指定します。
プロンプトを省いた/loopは、組み込みの保守用プロンプトで動きます。続きの作業、現在のブランチのプルリクエスト対応(レビューコメント、失敗したCI、マージ競合)、保留がなければ不具合探しなどの整理がその中身で、この変数が有効だとこれも呼べなくなります。
止まるもの・止まらないもの
名前が近い変数や、同じ「自動で繰り返す」系の機能と混同しやすいので、並べて確かめます。
| 対象 | CLAUDE_CODE_DISABLE_CRONで止まるか |
|---|---|
/loop(セッション内の繰り返し実行) | CLAUDE_CODE_DISABLE_CRONで止まるか止まる |
| Cron系ツール(CronCreate/CronList/CronDelete) | CLAUDE_CODE_DISABLE_CRONで止まるか止まる |
| 登録済み・実行中のタスク | CLAUDE_CODE_DISABLE_CRONで止まるか止まる(セッション途中も含む) |
/schedule・/routines(クラウドで動くRoutine) | CLAUDE_CODE_DISABLE_CRONで止まるか止まらない |
バックグラウンド実行(run_in_background・Ctrl+B) | CLAUDE_CODE_DISABLE_CRONで止まるか止まらない |
/schedule(エイリアス/routines)はクラウド上でルーティンを作り、実行する別機能です。CronCreateが登録するのは現在のセッション内のタスクです。クラウド側のRoutinesは止まりません。「自動実行を全部止めたい」という意図でこの変数だけを設定しても、Routineは残ります。
セッションに依存しない定期実行には、RoutineのほかにDesktopのスケジュールタスクやGitHub Actionsもあります。これらは/loopやCron系ツールとは別の仕組みです。
バックグラウンド実行は、Bashやサブエージェントをrun_in_backgroundやCtrl+Bで裏に回す機能です。時間指定の繰り返しとは別物で、止めるのはCLAUDE_CODE_DISABLE_BACKGROUND_TASKSです。Claude Codeでは、「バックグラウンド」と「スケジュール」を別の変数が受け持っています。
同じDISABLE系でも範囲と設定手段が違う
| 環境変数 | 止める範囲 | settings.json相当キー |
|---|---|---|
CLAUDE_CODE_DISABLE_CRON | 止める範囲/loopとCron系ツール、登録済みタスクの発火 | settings.json相当キーなし(環境変数のみ) |
CLAUDE_CODE_DISABLE_BUNDLED_SKILLS | 止める範囲/loopを含む同梱Skill・Workflow全体 | settings.json相当キーdisableBundledSkills |
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS | 止める範囲Bash・サブエージェントのバックグラウンド実行とCtrl+B | settings.json相当キーなし |
CLAUDE_CODE_DISABLE_WORKFLOWS | 止める範囲Workflowの実行 | settings.json相当キーdisableWorkflows |
スケジュール実行だけを止めるならCLAUDE_CODE_DISABLE_CRON、同梱Skill全体を外すならCLAUDE_CODE_DISABLE_BUNDLED_SKILLSです。
機能フラグの取得とは無関係な点も違いです。DISABLE_GROWTHBOOK・DISABLE_TELEMETRY・DO_NOT_TRACK・CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICのどれかを設定すると、Anthropicからの機能フラグ取得がスキップされます。すると/auto-mode-setupやRemote Controlなどが使えなくなります。CLAUDE_CODE_DISABLE_CRONはこの一覧に入っておらず、フラグ取得には影響しません。
組織全体で一括適用する
スケジュール実行そのものを組織で禁止したいときは、管理者が配る管理設定のenvに書きます。
{
"env": {
"CLAUDE_CODE_DISABLE_CRON": "1"
}
}envは複数の管理ソースにまたがって変数ごとに統合され、ユーザー設定やプロジェクト設定で同じ変数を別の値にしても、より優先度の高い側が使われます。無人の繰り返し実行を許可しない方針なら、開発者ごとの設定に任せるより取りこぼしが少なくなります。一部のチームだけ/loopを使いたい場合は、組織全体ではなくプロジェクトの.claude/settings.jsonに限って設定します。
よくある質問
完了通知のPushNotificationも使えなくなりますか
PushNotificationツール自体は止まりません。長時間タスクやスケジュールタスクの完了を、デスクトップ通知やRemote Control経由のスマホ通知で知らせる機能で、/loopやCron系ツールとは別物です。ただし通知を送るはずだった繰り返しタスクが発火しなくなるため、「スケジュール完了時の通知」という使い方は成り立ちません。
サードパーティプロバイダーで、セッションをまたぐタスクはどう保存されますか
Amazon Bedrock・Claude Platform on AWS・Google CloudのAgent Platform・Microsoft Foundryといったサードパーティプロバイダーでは、機能フラグの取得がスキップされます。この状態で、セッションをまたいで残したいタスクを頼むと、プロジェクトの.claude/scheduled_tasks.jsonに保存されます。
このファイルのタスクが動くのは、作成したプロジェクトのフォルダーだけです。新しいワークツリーなど別のフォルダーにコピーすると、一覧には出ても実行されないので、そこで作り直します。.claudeディレクトリやこのファイルがシンボリックリンクだと、タスクは登録されず、エラーが返ります。
まとめ
この変数はスケジュール実行だけを止めるので、クラウドのRoutineやバックグラウンド実行まで止めたい場合は、ほかの手段を別に選ぶ必要があります。/loopが突然消えたときは、シェルとsettings.json、管理設定のどこで有効になっているかを探します。ほかの変数との一覧はClaude Code環境変数リファレンスにあります。