Claude Code Desktopで定期実行タスクをスケジュールする
Claude Code Desktopのローカルスケジュールタスクは、Routinesページから作成し自分のマシンが起動している間だけ動きます。設定項目・発火後の挙動・権限プロンプトの止め方をまとめます。
Claude Code Desktopには、毎朝のコードレビューや依存関係チェックを自動で回すスケジュールタスクがあります。自分のマシンにあるファイルへ直接アクセスしながら、決めた時刻に新しいセッションを起動できる機能です。クラウドで動くRoutinesとは別物で、マシンの電源が入っていてアプリが開いている間だけ動きます。
Routinesページはローカルとクラウド両方を作る
DesktopアプリのCodeタブでサイドバーの「Routines」を開くと、実は2種類のものを作れます。自分のマシンで動くローカルのスケジュールタスクと、Anthropicのクラウドで動くRoutinesです。どちらも同じ「Routines」という画面の入口から始まるため、混同しやすい設計になっています。
ローカルのスケジュールタスクは、自分のファイルとツールに直接アクセスできる代わりに、アプリが開いていてコンピューターが起きている間しか動きません。クラウドのRoutineはマシンが完全にオフでも走りますが、参照するのはリポジトリの新規クローンで、ローカルの未コミット変更は見えません。APIコールやGitHubイベントで発火させたい場合もクラウド側の役割です。本記事が扱うのは前者、ローカルのスケジュールタスクです。
タスクを作成する — 埋める項目は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 | 挙動時刻選択が表示される。既定は現地時刻9:00 |
| Weekdays | 挙動Dailyと同じだが土日をスキップする |
| Weekly | 挙動時刻選択に加えて曜日選択が表示される |
「15分ごと」「毎月1日」「特定の未来の1回だけ」のようにピッカーに用意されていない間隔は、平易な言葉で頼めば設定されます。たとえば「6時間ごとに全テストを実行するタスクをスケジュールして」と伝えると、その間隔でスケジュールされます。
発火するとどうなるか — 通知とサイドバーへの表示
タスクが発火すると、デスクトップ通知が届き、サイドバーのScheduledセクションに新しいセッションが現れます。開けば、Claudeが何をしたかを確認し、変更をレビューし、権限プロンプトへ応答できます。
Desktopはアプリが開いている間、1分おきにスケジュールを確認します。実際の起動時刻には数分の遅延が意図的に加えられ、APIトラフィックの集中を避けます。この遅延は決定的で、同じタスクは毎回同じオフセットで起動します。時刻ぴったりの発火を期待しないほうがよい理由がここにあります。
発火したセッションは、自分で開始したセッションと同じようにファイルの編集・コマンドの実行・コミットの作成・プルリクエストの作成ができます。ただし、他のDesktopセッションとの間でセッション間メッセージをやり取りすることはできません。誰も見ていないスケジュールタスクの実行から、他のセッションへメッセージを送ることも、受け取ることもできない設計です。
コンピューターが寝ていた分はどう補われるか
タスクはアプリが起動していてコンピューターが起きている間だけ動きます。予定時刻にスリープしていたその回は、スキップされます。スリープを防ぎたい場合は、Settings → Desktop app → GeneralのKeep computer awakeを有効にします。ただし、ノートPCの蓋を閉じる操作は、この設定を有効にしていてもスリープを引き起こします。
アプリの起動時やコンピューターの復帰時、Desktopは各タスクが過去7日間に発生を逃した回がないかを確認します。逃していれば、直近で逃した1回分だけをキャッチアップ実行し、それより古い分は破棄します。日次タスクが6日間動かなかった場合、復帰時に1回だけ実行される、という挙動です。キャッチアップ実行が始まると、その旨の通知が表示されます。
この挙動はプロンプトの書き方に影響します。9時に予定したタスクが、コンピューターが1日中スリープしていたせいで夜11時に動くこともあり得ます。タイミングが重要なら、プロンプト自体にガードレールを書き込むのが確実です。「今日のコミットだけをレビューする。17時を過ぎていたらレビューは省略し、見落とした分の要約だけを投稿する」のような一文を添えておけば、深夜のキャッチアップ実行でも意図しない挙動を避けられます。
権限プロンプトでタスクが止まらないようにする
各タスクは作成・編集時に個別の権限モードを持ちます。~/.claude/settings.jsonのAllowルールもスケジュールタスクのセッションに適用されます。Manual modeで動くタスクが権限を持たないツールを実行しようとすると、その回の実行は承認待ちで止まります。セッションはサイドバーに残ったままになるので、あとから承認できます。
止まりを避けるコツは、タスク作成直後にRun nowを押し、出てくる権限プロンプトを1つずつ確認しながら「常に許可」を選ぶことです。同じツールについては、以降の実行が同じ承認を再利用し、プロンプトなしで進みます。許可した内容はタスクの詳細ページからいつでも確認・取り消しできます。
MCPツールにrequiresUserInteractionが設定されている場合は事情が違います。このツールは呼び出しのたびに確認を求め、常に許可のオプションを提供しません。こうしたツールを呼ぶ実行は、毎回止まることになります。
タスクの管理・編集・削除でできること
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つあります。両記事に詳細な比較表があるため、ここでは要点だけ書きます。マシンを閉じていても確実に走らせたい定期タスクはクラウドのRoutinesが向き、ローカルファイルへの直接アクセスが要る作業はDesktopのスケジュールタスクか/loopが向きます。両者の違いは、/loopがターミナルのセッションを開いたままにする必要があるのに対し、Desktopのスケジュールタスクはアプリさえ開いていればセッションを維持しなくてよい点です。
すでにDesktopアプリでの作業が中心で、GUIから設定を完結させたい場合は、今回のスケジュールタスクが最も摩擦の少ない選択になります。
よくあるつまずき
「Keep computer awake」を有効にしても蓋を閉じれば寝る。ノートPCの蓋を閉じる操作は、Keep computer awakeの設定とは独立にスリープを引き起こします。外出前に蓋を閉じる前提の運用なら、スケジュール自体をキャッチアップ実行が許容できる時間帯に寄せておくほうが実用的です。
キャッチアップは直近1回分だけ。7日間で何回逃しても、復帰時に実行されるのは最も新しい1回分だけです。「6日間分をまとめて実行してくれる」わけではなく、古い実行機会はそのまま破棄されます。日次の記録を欠かさず残したい用途には向きません。
requiresUserInteraction付きのMCPツールは常に人の手を要求する。常に許可を選べる通常のツールとは違い、こうしたツールを呼ぶタスクは自動化としては完結しません。完全に無人で回したいタスクの設計段階で、使う予定のMCPツールがこの属性を持っていないか確認しておくとやり直しが減ります。
削除してもファイルは残ることがある。詳細ページのDeleteだけでは、タスクの表示上の削除とセッションのアーカイブしか行われません。ディスク上のSKILL.mdまで消したい場合は、確認ダイアログのAlso delete files on diskに必ずチェックを入れます。
まとめ
Claude Code Desktopのスケジュールタスクは、自分のマシンのファイルにアクセスしながら定期実行を組みたい場合の選択肢です。作成はDesktopの「Routines」ページから、Name・Description・Instructions・Scheduleの4項目を埋めるだけで完結します。動くのはアプリが開いてコンピューターが起きている間だけという制約があるため、確実性を優先するならクラウドのRoutines、ターミナルを開いたその場での一時的な繰り返しなら/loopと、用途に応じて使い分けます。権限モードをManualのまま放置すると承認待ちで止まる点と、スリープからの復帰時はキャッチアップが直近1回分に限られる点は、プロンプトの書き方や運用の前提に織り込んでおくと安心です。