ハンドオフ

プロジェクトを自分のマシンに送り、ノートPCを閉じたままエージェントに作業を続けさせ、スマートフォンから実行状況を確認し、Take back で成果を手元に戻します。

ハンドオフは、プロジェクトを自分のマシンの1台に移し、ノートPCを閉じている間もそこでエージェントに作業を続けさせる機能です。戻ってきたら Take back で、エージェントが作業を終えた状態のままプロジェクトを手元に戻せます。

これは、スマートフォンがこのデスクトップへの窓になる Remote Control とは異なります。ハンドオフでは別のマシン上で実行されるため、デスクトップが起動している必要はまったくありません。

初めてのハンドオフの前に

Settings → Machines を開き、マシンを選んで Handoff を選択します。シートがマシンを確認し、足りないものを一覧表示します。各項目の横に対処方法も表示されます。

必要なもの理由
git履歴とコミット前の作業内容を運びます。
rsyncプロジェクトを往復でコピーし、変更分だけを送ります。
node 18 or newerエージェントのコマンドラインツールを実行します。
systemd user servicesSSH セッションが終了しても実行が維持されます。
Stay running after logout無効のままだと、最後のセッションが終わった時点ですべて停止し、誰も再起動してくれません。
tmux (オプション)通常のシェルタブを維持します。エージェントは使用しません。

Install all missing で不足分をまとめてインストールするか、1つずつインストールできます。実行前にすべてのコマンドが全文表示され、自分のターミナルに貼り付けたい場合は Copy ボタンも使えます。

マシンへのハンドオフシート。空きメモリ、ディスク、コア数、負荷が表示され、Needs attention の下に node 18 と Stay running after logout が Install ボタンと Turn on ボタンとともに並んでいる

シートはマシンの余裕(空きメモリ、空きディスク、コア数、負荷)も計測し、余裕が少ない場合ははっきりと知らせます。後になって「なぜビルドが遅いのか」と悩まずに済みます。

エージェントへのサインインはあえて手動です

Claude や Codex へのログインは、マシン上の実際のターミナルで行います。1DevTool はこのコンピューターから認証情報をコピーしません。シートにも signed in on the machine, never copied from here(マシン上でサインインし、ここからはコピーしない)と明記されています。エージェントの設定は、ローカル専用のパスや MCP コマンドをそのマシン向けに書き換えたうえで送られます。

プロジェクトをハンドオフする

プロジェクトのサイドバーメニューから Hand off to a machine… を選びます。Settings → Machines のマシンの行や、ハンドオフのタスクビューからも実行できます。

シートでは次の4つを指定します。

  1. 実行するマシンとエージェント。
  2. 会話 — 既存の会話を続けるか、新しく始めます。エージェントは画面なしで動作するため、ログを読んで確認します。
  3. 次にやってほしいことを自分の言葉で入力します — 「マイグレーションを終わらせ、テストを実行して、失敗したものを直して」。
  4. このプロジェクトがここで何も実行されていないことの確認。編集の途中でコピーされないようにするためです。プロジェクトが離れている間、ローカルでの編集は一時停止されます。

承認する人が近くにいない場合は Run without asking にチェックを入れてください。チェックしないと、エージェントは最初のプロンプトで停止します。この設定はマシン側にのみ影響し、このコンピューターには影響しません。

ハンドオフを妨げている項目はチップとして一覧表示され、クリックすると該当のフィールドへ直接移動できます。

コピーされるもの

プロジェクト全体、Git の履歴、会話が rsync で運ばれます。

  • 追跡対象および未追跡のファイル
  • ステージ済みおよび未ステージの変更
  • 削除、実行ビット、シンボリックリンク
  • .git そのもの

そのため「先に GitHub へ push する」必要はありません。マシンはディスク上にあるそのままの状態、つまり作業途中の編集も含めて引き継ぎます。

Left out にはスキップされるパターンがチップとして表示され、チェックを外して対象に戻せます。Also leave out では追加の除外パターンを指定できます。build、dist、target という名前のフォルダーは、実際のソースを含むことが多いため、意図的に除外されません。

.env も一緒に送られます。stdin 経由で書き込まれ、chmod 600 が設定され、アトミックに置き換えられます。ファイル名と変数の名前は表示されますが、値はログに記録されません。

転送が完了すると、エージェントは systemd --user ユニットとして実行されます。これによりノートPCを閉じられます。

フォローアップはマシン上でキューに入ります

次の指示はいつでも入力できます。実行中でも問題ありません。マシンが指示を保持し、現在の実行が終わった瞬間に開始します。ノートPCを閉じていても、アプリを終了していても同様です。キューはアプリではなくマシン上にあります。

タスクビューにはマシンのログがストリーミングで表示されます。アシスタントのテキスト、ツール呼び出し、結果、終了ステータスが含まれ、各実行には番号が付きます。

スマートフォンで開く

Open on phone は、ハンドオフ成功画面、タスクビュー、マシンの行にあります。スマートフォンのカメラで QR コードを読み取ると、Safari または Chrome でページが開きます。アプリのインストールは不要です。ページはマシンから Cloudflare quick tunnel 経由で提供されるため、ノートPCを閉じていても動作し続けます。

スマートフォンからは次の操作ができます。

  • ライブログを確認 — デスクトップのタスクビューと同じエントリが表示されます。
  • 次の指示を送信 — 実行中ならキューに入り、そうでなければすぐに開始されます。
  • 現在の実行を停止。
  • シェルを開く。 6桁の Admin PIN で、スマートフォンのブラウザ上にマシンの tmux シェルが開きます。タブを閉じても維持され、画面サイズに合わせてリサイズされます。
  • 実行終了時にプッシュ通知を受け取る — 実行が終わるたびに1件、キューが次に進むときにも通知されます。現在は Android の Chrome に対応しています。iPhone では、先にページをホーム画面に追加してください。

スキャン画面には、開いているスマートフォンのセッションがすべて表示され、Sign out all でまとめてサインアウトできます。Turn off でリンク自体を完全に無効にします。New code は、既存のスマートフォンをサインアウトさせずに、新しい QR コードと PIN を発行します。マシン上の最後のハンドオフを Take back すると、スマートフォンからのアクセスも自動的にオフになります。

マシン上の cloudflared は、実行前に GitHub リリースのダイジェストと照合して検証されます。

Take back

Take back は、何も失われない順序で作業を戻します。

  1. マシンのキューを保留し、新しい実行が裏で始まらないようにします。
  2. 現在の実行を停止します。
  3. エージェントの変更を含めて、プロジェクトを rsync で手元に戻します。
  4. マシン上で作成されたユニットをクリーンアップします。

送り出すときに除外したパターンは戻すときにも再利用されるため、Take back で、そもそも送っていないものが削除されることはありません。