Claude Media
Claude DesktopのSSHタスクが切断後も続く条件と止まる条件

Claude DesktopのSSHタスクが切断後も続く条件と止まる条件

DesktopのSSHセッションで動かしたタスクは、スリープや回線断、Desktop終了後もリモート側で動き続けます。サインイン期限切れやKillUserProcessesなど止まる条件と、一晩走らせる前のテスト手順をまとめます。

Claude DesktopのSSHセッションで始めたタスクは、ノートPCがスリープしても、回線が切れても、Desktopを終了しても、リモートマシン側で動き続けます。ただし「必ず朝まで走る」わけではありません。Claudeアカウントのサインイン期限、リモート側のsystemd設定、Desktopの更新、30日の未接続が、それぞれタスクを止める原因になります。

この記事では、続く仕組み、止まる条件、一晩走らせる前に試すテストの順に説明します。この挙動はClaude Desktop v2.31226.0以降が前提です。

切断しても続くのは、リモート側のヘルパーが動かしているから

Claude Codeは、DesktopがSSH先に入れる常駐のヘルパーの下で、リモートマシンのプロセスとして動いています。SSH接続そのものに依存しないので、手元のPCが寝てもタスクは止まりません。

切断とみなされる操作は次のとおりです。

  • PCのスリープ(ノートのふたを閉じる操作を含む)
  • ネットワークの喪失
  • Desktopの終了
  • Desktopや、PC自体の再起動(更新によるものを含む)

再起動も「終了」と同じ扱いです。タスクは、完了するか、ユーザーの入力待ちになるか、後述の限界に当たるまで進みます。

ヘルパーとClaude Codeは、接続したユーザーのホームにある~/.claude/remote/に入ります。root権限は要りません。リモートで動いているか見るには、そのユーザーで次を実行します。

pgrep -fl "$HOME/.claude/remote/"

serverという名前のプロセスがヘルパーで、2.1.295-…のようにバージョン名のファイルから起動しているものがClaude Codeです。

一晩走らせる前に知っておく最大の落とし穴はサインイン期限

Claudeアカウントでサインインしているなら、公式は「一晩動くことを当てにしないように」と警告しています。タスクのサインインは、Desktopが起動して接続されている間だけ更新されるためです。切断した時点で残りが数分しかないこともあり、期限が切れるとタスクは認証エラーで止まります。

サードパーティープロバイダーの場合も、シングルサインオンや認証情報ヘルパーのように期限のある資格情報は同じ理由で切れます。

一晩走らせたいなら、手段は2つです。

  1. PCを起こしたままオンラインに保ち、ふたを開けてDesktopを動かし続ける
  2. PCが寝る、または電源を落とす前提なら、SSHではなくクラウドセッションを使う

1の「起こしたまま」には、設定画面の「Keep computer awake」(Settings > This computer > System)が使えます。ただしふたを閉じればスリープする点は変わりません。Macのスリープで止まる経路はClaude CodeでMacがスリープして止まる原因に詳しく書いています。

止まっても、それまでの作業はリモートに残ります。戻ってメッセージを送れば続きから進められます。

リモートマシンが止める3つのケース

認証が問題なくても、リモート側が自分のプロセスを終わらせることがあります。

止まる条件

リモート側で止まる原因

  • 再起動・SSH切断時のプロセス終了

    リモートマシンが再起動すると、動いていたタスクは終わります。再起動後にDesktopが切断中のまま、自動で起動し直すことはありません。LinuxでKillUserProcessesがyesでユーザーに適用されている場合も、SSH接続が閉じた時点でプロセスが終わります。管理者にKillExcludeUsersなどでそのユーザーを除外してもらうのが対処です。

  • アイドル端末のログアウト

    一部のLinuxは、一定時間入力のない端末をログアウトさせます(systemd-logindのStopIdleSessionSec)。MacまたはLinuxのDesktopでは、セッションのターミナルと!コマンドが既定でDesktopのSSH接続を共有します。そのためログアウトで接続が切れ、実行中のタスクも道連れになることがあります。ターミナルのペインを閉じても防げません。

  • Desktopの更新

    更新で新しいヘルパーが来ると、Desktopは次の接続時にリモートのヘルパーを入れ替えます。このとき、まだ動いているタスクが終わることがあります。

アイドルログアウトへの対策は、自分のコマンドをDesktopのターミナルではなく、Desktopの外のSSHログインから打つことです。

30日つながらないとヘルパーが全プロセスを止める

LinuxまたはmacOSのリモートマシンでは、Desktopが30日間接続しないと、ヘルパーが止まり、その下のClaude Codeプロセスもすべて終わります。長期のタスクを放置するなら、その前に一度つなぐ必要があります。

Windowsのリモートマシンは事情が異なります。Windows側では、ヘルパーは自分では止まらないと書かれているため、セッションが終わったあとにClaude Codeが起動したプログラムが残っていないか確認する運用になります。また、SSHサーバーが接続より長く生きるプログラムを許すかどうかに依存するので、後述のテストで確かめます。

切断中は一部の機能が使えない

タスクのプロセスが生きていても、Desktopを経由する機能は切断中に失敗します。

機能切断中の挙動
worktree付きセッションのファイル編集切断中の挙動Desktopが編集前に確認するため、約30秒待って失敗。シェルコマンドは動く
組織のフォルダー制限切断中の挙動読み取り・検索・編集の各操作が最大10分待って失敗
コネクター切断中の挙動呼び出しが約30秒後に失敗
新しいワークフロー切断中の挙動開始前の確認で最大10分待って失敗

worktreeの編集は、LinuxまたはmacOSのリモートではDesktopを経由せず、切断中も動き続けます(v2.37337.0より前は、動くのはLinuxだけ)。ただし内蔵SSHクライアントを使う場合や、リポジトリがホームやその上位にある場合などは、やはり失敗します。判断がつかないなら、worktreeなしでセッションを始めるのが安全です。置き場所の設定はClaude DesktopのSSHでWorktreeの置き場所を決める設定で扱っています。

MCPサーバーは、リモート上のClaude Codeが起動する~/.claude.jsonや.mcp.jsonのものなら切断中も呼べます。claude_desktop_config.jsonのサーバーは、Desktopが内蔵SSHクライアントを使わない場合に限って呼べます。Windowsの一部のリモートでは、そうしたサーバーを呼べません。

承認待ちは時間制限なしでリモートに残る

Claudeが承認や質問を求めると、リモート側で待ちます。待ち時間に上限はありません。Desktopが戻ってプロセスにつなぎ直せば、画面に要求が出ます。Desktopが新しいプロセスを起動した場合は、その要求は失われます。

朝に承認待ちで止まっていた、という事態を減らすには、離席前に次を設定します。

  • Autoモード、またはリモートの~/.claude/settings.jsonに許可ルールを足す
  • PermissionRequestフックで、自分の代わりに許可・拒否する
  • Notificationフック(permission_promptマッチャー)で、待ちが出たら通知する
  • Stopフックで完了を知らせる。APIエラーで終わるターンにはStopFailureフックを使う

リモートの~/.claude/settings.jsonに、通知を送るStopフックを置く例は次の形です(書式の詳細は公式のhooksドキュメントを参照してください)。

{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "~/bin/notify-done.sh" }] }
    ]
  }
}

~/bin/notify-done.shは自分で用意するスクリプトです。ここでは通知先(チャットのWebhookなど)は決めていません。

戻ったときに何が起きているか

戻ってタスクが終わっていなければ、次の順に見ます。

切り分け

戻ってタスクが終わっていないとき

  1. Qセッションに「再接続できない」と出ているか
    答えがいいえのとき

    Desktopがログインのプロンプトを必要としている可能性があります。通知をクリックするか、セッションにメッセージを送ると、プロンプトが表示されます。

    答えがはい
  2. Q認証エラーが出ているか
    答えがいいえのとき

    サインインのトークンか資格情報が切れています。Claudeアカウントなら、メッセージを送って続けます。

    答えがはい
  3. Q承認や質問が待っているか
    答えがいいえのとき

    その要求に答えます。要求が消えていたら、メッセージを送って続けます。

    答えがはい

どれでもない

メッセージを送って続けます。

出力の欠落にも注意が要ります。切断中、ヘルパーは各セッションの直近のClaude Code出力を16 MiBのバッファに持ち、古い分は捨てます。再接続後に「Some output produced while you were disconnected may be missing here.」の行が出ても、タスクが止まったという意味ではありません。

プロセスが消えていた場合(リモートの再起動など)、Desktopは保存済みの会話履歴から新しいプロセスを起動し、続きを指示できます。続かなければメッセージを送ります。サードパーティープロバイダーでは、Desktop v2.42304.0より前のバージョンは自動では続けません。

プロセスがまだ動いている会話に、リモートでclaude --resumeを実行してはいけません。Claude Codeは止めないので、2つのプロセスが同じ会話に書き込みます。迷ったら--fork-sessionを付けます(同じファイルを触る点は変わりません)。

Desktopを終了したあとにタスクを取り戻せる条件

終了後もタスクは動きますが、セッションを開き直したときにDesktopがそのプロセスへ再合流できなければ、タスクは止まります。

環境終了後に取り戻せるか
Windows版Desktop終了後に取り戻せるか取り戻せない(終了後は再合流しない)
サードパーティープロバイダーで、v2.42304.0より前に始めたタスク終了後に取り戻せるかmacOS・Linuxでも取り戻せない
それ以外のmacOS・Linux版Desktop終了後に取り戻せるか再合流できれば続く。Desktopの更新後など、できない場合もある

Windowsでは、開き直すのはタスクが終わっているはずの時刻にします。セッションが起動と同時に開くことがあるためです。

一晩走らせる前のチェックリスト

長いタスクを任せる前に、次を済ませます。

  1. Desktopを更新する。MacとWindowsでは、更新を済ませたDesktopが自動で再起動することがあります。Claudeが作業中のSSHタスクがあるあいだ、その再起動は待ちますが、Claudeアカウントのmacなら既定で72時間待ったあとは進みます
  2. Windows、またはサードパーティープロバイダーでv2.42304.0より前なら、Desktopを終了せず開いたままにする
  3. 承認待ちを減らす設定とフックを入れる
  4. 踏み台サーバーがスマホへのプッシュ承認を求めるなら、プロンプトなしで通るログイン(SSHエージェントが持つ鍵)に切り替える。そうしないと再接続のたびにプッシュが飛ぶ
  5. リモートマシンで実際に試す(次節)

短いタスクでテストする

公式が勧める確認は、短いタスクを始め、タスクが動いているうちにDesktopを終了し、完了しているはずの時間をだいぶ過ぎてからセッションを開き直す、という手順です。タスクが終わっておらず、認証エラーも出ていなければ、リモートマシンが止めています。KillUserProcesses、StopIdleSessionSec、再起動のログを疑います。

テストは、本番と同じ接続、同じユーザー、同じ時間帯で行います。サインイン期限は短いテストでは表に出にくいので、Claudeアカウントでは一晩の放置を前提にしないでください。

Desktopのスケジュールタスクは別の仕組みで、PCが起きてDesktopが動いている間だけ実行されます。比べたい場合はClaude Code Desktopで定期実行タスクをスケジュールするを参照してください。Coworkで閉じたときの挙動はCoworkでデスクトップを閉じると止まる?スリープ時の挙動にあります。

よくある質問

ヘルパーを消すにはどうしますか。

接続元のDesktopをすべて終了し、そのユーザーでClaude Codeのプロセスを先に、serverプロセスを後にkillします。そのあと~/.claude/remote/を削除します。serverを先に終わらせると、Claude Codeが実行中のコマンドが残ることがあります。次の接続時に、Desktopは再びインストールします。

この記事を共有:XはてブLinkedIn