Claude Code Desktopで定期実行タスクをスケジュールする
Claude Codeのスケジュールタスク(scheduled tasks)は、DesktopのRoutinesページで作る定期実行機能です。マシンが起動している間だけ動きます。設定項目・発火後の挙動・権限プロンプトの止め方を解説します。
Claude Codeのスケジュールタスク(英語名はscheduled tasks)は、Desktopアプリで作る定期実行の機能です。作る場所はCodeタブのサイドバーにあるRoutinesで、New routineからLocalを選びます。
Claude Code Desktopには、毎朝のコードレビューや依存関係チェックを自動で回すスケジュールタスクがあります。自分のマシンにあるファイルへ直接アクセスしながら、決めた時刻に新しいセッションを起動できる機能です。クラウドで動くRoutinesとは別物で、マシンの電源が入っていてアプリが開いている間だけ動きます。
ローカルで作るか、クラウドで作るか
DesktopアプリのCodeタブでサイドバーの「Routines」を開くと、作れるものは2種類あります。自分のマシンで動くローカルのスケジュールタスクと、Anthropicのクラウドで動くRoutinesです。入口の画面が同じなので、どちらを作っているのかを取り違えやすい設計です。
Routinesページで選べる2種類
ローカルのスケジュールタスク
自分のファイルとツールに直接アクセスできます。発火するのはアプリが開いていてコンピューターが起きている間だけで、最短間隔は1分です。MCPサーバーは設定ファイルとコネクタの両方が使えます。
クラウドのRoutines
マシンが完全にオフでも走り、APIコールやGitHubイベントでも発火できます。参照するのはリポジトリの新規クローンで、ローカルのファイルは見えません。最短間隔は1時間で、MCPはタスクごとにコネクタを設定します。
本記事が扱うのは前者です。ローカル側には、作る前に決めておきたい点がもう1つあります。既定では、タスクは指定した作業フォルダーの今の状態に対して動き、未コミットの変更も含まれます。作成時にWorktreeのトグルを有効にすると、実行ごとに隔離されたGit Worktreeが用意されます。普段作業しているフォルダーをそのまま指すなら、夜間のタスクと自分の編集が同じファイルに触れうる点を先に考えておきます。
タスクを作成する — 埋める項目は4つ
Codeタブでサイドバーの「Routines」(または「More」メニューの中)を開き、New routineからLocalを選ぶと作成画面が開きます。埋める項目は次の4つです。
| 項目 | 内容 |
|---|---|
| Name | 内容タスクの識別子。小文字ケバブケースに変換され、ディスク上のフォルダー名にもなる。自分のタスク内で一意である必要がある |
| Description | 内容タスク一覧に表示される短い説明 |
| Instructions | 内容タスク発火時にClaudeへ渡す指示。プロンプト欄にそのまま打つ感覚で書く。入力欄に権限モードとモデルの選択があり、その下で作業フォルダーと隔離Worktreeの有無を選ぶ |
| Schedule | 内容発火の頻度。次節のプリセットから選ぶ |
保存にはフォルダーの指定が必須です。まだ信頼していないフォルダーを選ぶと、保存前にDesktopが信頼確認を求めます。
画面で1つずつ埋める代わりに、どのDesktopセッションでも自然言語で頼めます。「毎朝9時に実行する日次コードレビューを設定して」と伝えれば繰り返しタスクが作成されます。「明日の15時にデプロイを確認するよう思い出させて」と伝えれば、1回発火して自動的に無効化される単発タスクになります。
依存関係の更新確認を毎週月曜9時に実行するタスクを作ってスケジュールは5つのプリセットから選ぶ
Schedule欄のプリセットは次の5種類です。
| プリセット | 挙動 |
|---|---|
| Manual | 挙動スケジュールなし。Run nowを押したときだけ実行される。プロンプトを保存しておき手動で起動したい場合に使う |
| Hourly | 挙動1時間ごとに実行 |
| Daily | 挙動時刻選択が表示され、指定した現地時刻に毎日実行される |
| Weekdays | 挙動Dailyと同じだが土日をスキップする |
| Weekly | 挙動時刻選択に加えて曜日選択が表示される |
「15分ごと」「毎月1日」「特定の未来の1回だけ」のようにピッカーに用意されていない間隔は、平易な言葉で頼めば設定されます。たとえば「6時間ごとに全テストを実行するタスクをスケジュールして」と伝えると、その間隔でスケジュールされます。
発火するとどうなるか — 通知とサイドバーへの表示
タスクが発火すると、デスクトップ通知が届き、サイドバーのScheduledセクションに新しいセッションが現れます。開けば、Claudeが何をしたかを確認し、変更をレビューし、権限プロンプトへ応答できます。2026年9月にはこの表示自体が消える・簡略化される不具合が報告されており、詳細はClaude Code Routineがサイドバーに表示されない不具合と対処法にまとめています。
Desktopはアプリが開いている間、1分おきにスケジュールを確認します。予定時刻から数分の遅延が加わるのは、APIトラフィックの集中を避けるためです。遅延は決定的で、同じタスクは毎回同じオフセットで起動します。
/loop側の事情と混ぜないでください。セッション内スケジューラーのジッターは、定期タスクで最大30分(1時間より短い間隔なら間隔の半分まで)と、別の規則で書かれています。:00や:30を避けて3 9 * * *のように分をずらす回避策も/loop向けです。効くのは単発タスクが最大90秒早まる挙動だけで、定期タスクの遅延は消えません。Desktopのタスクでは、遅延が数分と書かれているだけです。分をずらして遅延を消せるかは、公式に記述がありません。
発火したセッションは、自分で開始したセッションと同じようにファイルの編集・コマンドの実行・コミットの作成・プルリクエストの作成ができます。ただし、Desktopのセッション間メッセージは、スケジュールタスクのセッションでは送受信できません。
コンピューターが寝ていた分はどう補われるか
タスクはアプリが起動していてコンピューターが起きている間だけ動きます。予定時刻にスリープしていたその回は、スキップされます。スリープを防ぎたい場合は、Settings → This computer → SystemのKeep computer awakeを有効にします。ただし、ノートPCの蓋を閉じる操作は、この設定を有効にしていてもスリープを引き起こします。
アプリの起動時やコンピューターの復帰時、Desktopは各タスクが過去7日間に発生を逃した回がないかを確認します。日次タスクが6日間動かなかった場合の補われ方は次のとおりです。
日次タスクが6日間逃したあとの復帰
- 復帰した瞬間過去7日分を確認する
アプリの起動時またはコンピューターの復帰時に、逃した回があるかを調べます。
- その直後直近の1回だけを実行する
キャッチアップ実行が始まると、その旨の通知が表示されます。
- それ以前の5回破棄される
古い実行機会は実行されません。
この挙動はプロンプトの書き方に影響します。9時に予定したタスクが、コンピューターが1日中スリープしていたせいで夜11時に動くこともあり得ます。タイミングが重要なら、プロンプト自体にガードレールを書き込むのが確実です。「今日のコミットだけをレビューする。17時を過ぎていたらレビューは省略し、見落とした分の要約だけを投稿する」のような一文を添えておけば、深夜のキャッチアップ実行でも意図しない挙動を避けられます。日次の記録を1日も欠かさず残したい用途は、キャッチアップが1回分だけである以上、この機能の守備範囲を超えます。
予定どおりに動かなかった日は履歴で理由を見る
詳細ページのReview historyには、実行された回だけでなく、スキップされた回も並びます。スキップの項目にカーソルを重ねると、理由が表示されます。公式が挙げる理由は3つです。
- コンピューターがスリープしていた
- 前回の実行がまだ続いていた
- 他のスケジュールタスクがすでに実行中だった
1つ目は、先に書いたKeep computer awakeと蓋の問題です。2つ目は、タスクの所要時間が次の予定時刻までに収まっていないことを示します。指示を絞って所要時間を縮めるか、間隔を広げるかが選択肢になります。3つ目は、同じ時刻帯に複数のタスクを置いたときに起きます。時刻をずらせば重なりを避けられると考えられますが、同時実行の上限は公式に書かれていません。古い項目はShow moreで読み込めます。
権限プロンプトでタスクが止まらないようにする
各タスクは作成・編集時に個別の権限モードを持ちます。~/.claude/settings.jsonのAllowルールもスケジュールタスクのセッションに適用されます。Manual modeで動くタスクが権限を持たないツールを実行しようとすると、その回の実行は承認待ちで止まります。セッションはサイドバーに残ったままになるので、あとから承認できます。
止まりを避ける手順は、作った直後に1回だけ手動で走らせることです。
無人で回す前の仕込み
- 1
タスクを保存する
Instructionsに加えて、権限モードとフォルダーを決めて保存します。
- 2
Run nowで1回走らせる
次回の予定を待たずに、その場で実行します。
- 3
権限プロンプトに「常に許可」を選ぶ
出てくるプロンプトを1つずつ確認しながら選びます。同じツールは、以降の実行が同じ承認を再利用します。
- 4
許可の一覧を見直す
詳細ページのAlways allowedパネルから、いつでも確認・取り消しできます。
MCPツールにrequiresUserInteractionが設定されている場合は事情が違います。このツールは呼び出しのたびに確認を求め、常に許可のオプションを提供しません。こうしたツールを呼ぶ実行は、毎回止まることになります。完全に無人で回したいタスクを設計するときは、使う予定のMCPツールがこの属性を持っていないかを先に確かめておくと、やり直しが減ります。
タスクの管理・編集・削除でできること
Codeタブでタスクをクリックすると詳細ページが開き、次の操作ができます。
| 操作 | 内容 |
|---|---|
| Run now | 内容次回の予定を待たずに即座に実行 |
| Status | 内容Active / Pausedの切り替え。削除せずに一時停止・再開できる |
| Edit | 内容指示・スケジュール・フォルダーなどの設定変更 |
| Review history | 内容過去の全実行(スキップされた回を含む)を確認 |
| Review allowed permissions | 内容このタスクに保存された許可済みツールの一覧を確認・取り消し |
| Delete | 内容タスクを削除し、それが作った全セッションをアーカイブする |
タスクの一覧確認・作成・編集・一時停止も、どのDesktopセッションからでも自然言語で頼めます。「dependency-auditタスクを一時停止して」「今動いているスケジュールタスクを見せて」といった指示です。削除だけは詳細ページのDeleteボタンから行います。確認ダイアログにはAlso delete files on diskというチェックボックスがあります。チェックすると~/.claude/scheduled-tasks/配下のタスクのSKILL.mdファイルと関連データも消え、チェックしなければローカルのファイルはディスクに残ります。
タスクのプロンプトを直接編集したい場合は、~/.claude/scheduled-tasks/<タスク名>/SKILL.md(CLAUDE_CONFIG_DIRを設定している場合はその配下)を開きます。YAMLのfrontmatterにnameとdescriptionを持ち、本文がプロンプトそのものというファイル構造です。変更は次回の実行から反映されますが、スケジュール・フォルダー・モデル・有効状態はこのファイルには含まれず、Editフォームか自然言語での依頼でしか変更できません。
実行中にタスクが自分のスケジュールを書き換える仕組み
発火したセッションの内部からは、update_scheduled_taskというMCPツールでタスク自身のスケジュールやプロンプトを変更できます。たとえば、リリースブランチの作成を検知したときにコードレビューの実行時刻を早める、といった自己再スケジュールが組めます。実行結果に応じてタスクが自分の挙動を調整する、という使い方です。
Routinesや/loopとどう使い分けるか
同じ「定期実行」でも、動く場所と持続性が異なる仕組みがClaude Code Routinesと/loopの2つあります。Desktopのスケジュールタスクを含めた3つを、運用で効いてくる軸だけで並べます。
| 軸 | クラウドのRoutines | Desktop | /loop |
|---|---|---|---|
| セッションを開いておく必要 | クラウドのRoutinesなし | Desktopなし | /loopあり |
| 再起動後 | クラウドのRoutines続く | Desktop続く | /loop--resumeで復元(例外あり) |
| 権限プロンプト | クラウドのRoutinesなし(自律実行) | Desktopタスクごとに設定 | /loopセッションから継承 |
| 定期タスクの期限 | クラウドのRoutines明示なし(継続的なスケジュール向け) | Desktop明示なし(継続的なスケジュール向け) | /loop作成の7日後に最後の1回を発火して自動削除 |
/loopの7日期限は見落としやすい点です。長く回したい定期タスクは、作り直すかRoutines・Desktopのタスクに移します。ターミナルで試した範囲では(v2.1.287)、claude --helpのサブコマンド一覧にスケジュール用のものはなく、並ぶのはagentsやattachなどのバックグラウンドセッション管理でした。CLIから使うのは、セッション内の/loopと/scheduleです。隔離Worktreeに相当する-w, --worktree [name]オプションはCLIにもあります。
定期実行のスケジューラーそのものを止めたいときは、CLAUDE_CODE_DISABLE_CRONの環境変数があります。公式の説明は「/loopスキルとcronツールが使えなくなり、登録済みのタスクも発火しなくなる」というものです。セッションの途中で実行中のタスクも止まります。Desktopのスケジュールタスクが対象に含まれるかは、公式の説明に記述がありません。CIで回したい場合は、公式がClaude Code GitHub Actionsも別の選択肢として挙げています。
まとめ
ローカルのファイルを触る定期作業ならDesktopのスケジュールタスク、マシンを閉じても走らせたいならクラウドのRoutines、その場の短い繰り返しなら/loopです。Desktopのタスクを選んだら、発火時刻がずれることと、権限の承認を最初の1回で済ませておくことを前提に組みます。