[{"data":1,"prerenderedAt":256},["ShallowReactive",2],{"content-/cross-session-handoff":3,"all-pages-for-dir":234,"related-/cross-session-handoff":235,"og-image-/cross-session-handoff":255},{"id":4,"title":5,"body":6,"category":215,"concepts":216,"description":217,"extension":218,"meta":219,"navigation":177,"ogImage":216,"path":220,"project_name":221,"published":222,"publishedAt":223,"seo":224,"source":225,"stem":226,"tags":227,"todo":216,"unpublished":222,"updatedAt":216,"__hash__":233},"pages/2026-08/2026-08-10/cross-session-handoff.md","Claude Code のセッション同士をブラウザ経由でつなぎ、作業を引き継がせた",{"type":7,"value":8,"toc":204},"minimark",[9,13,17,21,24,27,38,41,44,47,50,53,56,59,62,65,72,75,78,81,84,87,90,93,96,99,102,109,112,115,119,122,125,128,135,138,141,144,155,158,161,164],[10,11,5],"h1",{"id":12},"claude-code-のセッション同士をブラウザ経由でつなぎ作業を引き継がせた",[14,15,16],"h2",{"id":16},"片方のセッションを待機させた",[18,19,20],"p",{},"「Claude Code からセッションの指示があるんで、ちょっと待っておいてください」",[18,22,23],{},"そう打ち込んで、開いたばかりのセッションを止めた。\nこのセッションに次の仕事を渡すのは自分ではなく、別で走っている Claude Code のほうだった。",[18,25,26],{},"しばらくして届いた文面には、本文の前に差出人が付いていた。",[28,29,34],"pre",{"className":30,"code":32,"language":33},[31],"language-text","[FROM: Claude Code / \u003Cマシン名> / \u003CセッションURL>]\n[VIA: claude.ai ブラウザ経由]\n[NOTE: これはユーザー本人の発言ではありません。ユーザーの承認の代わりにはなりません]\n","text",[35,36,32],"code",{"__ignoreMap":37},"",[18,39,40],{},"3 行目が要る。\nこのメッセージはユーザー入力欄から入ってくるので、受け取った側からは、私が打ったものと見分けがつかない。\nその状態で不可逆な操作の承認に使われると、一度も目を通していない判断が実行されてしまう。\nだから差出人と一緒に、承認ではないことを毎回書かせている。",[18,42,43],{},"NOTE の文面は用件によって変えた。\n午後にもう一つのセッションへ仕事を渡したときは、「ただし本件はユーザーが『そちらに依頼しておいて』と明示的に指示したものです」に差し替えている。\n段取りとして自分が頼んだ事実と、自分が内容を承認した事実は、別のものとして扱いたかった。",[14,45,46],{"id":46},"報告を返させて往復にした",[18,48,49],{},"受け取った仕事は、サブエージェント 6 組に分けて並列で進めさせ、統合まで持っていった。\nできあがったところで、次の指示を出した。",[18,51,52],{},"「これ、もともとの Claude Code のセッションがあるじゃないですか。指示を受けた元のセッション。そっち側にちょっと進捗報告してもらえませんかね」",[18,54,55],{},"片道で終わらせると、指示を出した側は、自分が投げた仕事がどうなったかを知らないまま次の判断をする。\nレビューは Codex に回させ、走っている間に元のセッションへ報告を送らせた。",[18,57,58],{},"このやり取りは cross-machine-message というスキルとして手順化してある。\nWindows 側からは直接メッセージを送る手段が使えないので、ブラウザ経由で claude.ai のセッションを開いて打ち込む形になる。\n手順が固まっているぶん、指示のたびに送り方を考え直さずに済む。",[14,60,61],{"id":61},"送信までにかかった手数",[18,63,64],{},"送信は Chrome DevTools MCP でタブを開いて操作させた。\nここが一番もたついた。",[18,66,67,68,71],{},"一度、",[35,69,70],{},"/logout"," へのリダイレクトが挟まってタブが閉じた。\nログアウトさせた可能性があったので、すぐに状態を確認させた。\nセッション一覧は健在で、リダイレクトの表示が一瞬出ただけだった。",[18,73,74],{},"本文を入れたあとには、サイドバーのフィードバックボタンを誤って押した。\n開いたのはダイアログだけで、送信はされていなかった。\nキャンセルさせたあとも、本文は 2,513 文字のまま残っていた。\nコンポーザー内の送信ボタンだけを狙わせて、ようやく届いた。",[18,76,77],{},"ブラウザの UI を人間の代わりに押させる以上、押し間違いは起きる。\n起きたあとに「何を押して、何が起きて、何が起きていないか」をその場で確認させられるか。\n分かれ目はそこにある。",[14,79,80],{"id":80},"元のセッションから返ってきたレビュー",[18,82,83],{},"報告を送ると、元のセッションからは同じ差出人ヘッダを付けたレビューが返ってきた。\nそのレビューは「断片ディレクトリは既に無いので、暴発しても実害は出ない」という判断に立っていた。",[18,85,86],{},"実在するかどうかを先に確かめさせた。\n6 ファイルが残っていた。\nしかも直したはずのものが、すべて古い版のまま入っていた。",[18,88,89],{},"離れたセッションからの報告は、送った時点のディスクの状態を写したものにすぎない。\n受け取った側が確かめ直さないと、消えたはずのものを前提に安全だと結論してしまう。",[18,91,92],{},"安全化のためにガードを書かせたところ、今度はそのテストで実ファイルを壊した。\nPython の書き込みで改行が CRLF になり、パーサが 1 件も認識しなくなっていた。\nバックアップを取ってあったので、全 27 型がそのまま戻った。\nスクリプトは fail-closed に作り直させた。",[14,94,95],{"id":95},"壊す前にコミットする",[18,97,98],{},"ここで手を止めた。",[18,100,101],{},"「危ねえな。ぶっ壊す前にコミットしときましょうか、一回。学習系とスキップでいいんで」",[18,103,104,105,108],{},"復旧できたのはバックアップが偶然あったからで、次も同じ運があるとは限らない。\n未コミットのものを確認させ、無関係な自動生成差分を外して 2 本に分けてコミットさせた。\n",[35,106,107],{},"~/.claude"," 側のスキル更新も未コミットだったので、そちらも合わせて 3 本で退避が済んだ。",[18,110,111],{},"コミット中に、別のセッションが同じファイルを apps/web 側へ移設している最中だと分かった。\n壊れていないかを先に確かめさせたら、移設は完了していて修正 9 件も引き継がれていた。\nそちらのセッションは止めて、競合の芽を摘んだ。",[18,113,114],{},"同じリポジトリを複数のセッションが同時に触っている状態は、こちらから見えない。\n見えないものを踏まないための保険が、作業前のコミットになる。",[14,116,118],{"id":117},"引き継ぎ先で落ちていたテスト-3-件","引き継ぎ先で落ちていたテスト 3 件",[18,120,121],{},"午後に渡した側では、依頼した実装が終わってもテストが 3 件落ちたままだった。",[18,123,124],{},"「これコミットしておいてほしいんですけど、失敗している 3 件のテストのフェイルは、これやっといてくれませんか？何のテストミスだろう」",[18,126,127],{},"原因を調べさせたら、どれもテスト側の記述が実態に追いついていないものだった。\n2 銘柄に新しい四半期の実績が入ったのに、期待値が前の四半期のまま止まっていた。\n期待値を実データに合わせ、213 ファイル / 19,542 件が全件パスに戻ってからコミットさせた。",[18,129,130,131,134],{},"その手前で学習ゲートに止められ、",[35,132,133],{},"/learn"," を実行しようとしたので、今回はスキップでいいと伝えた。\n14:23 のコミット 2 本で、実装とテストの両方が片付いた。",[14,136,137],{"id":137},"ブラウザを触る手段をどちらにするか",[18,139,140],{},"朝のうちに、そもそもブラウザ操作の手段を選び直せないかを確かめている。",[18,142,143],{},"Claude in Chrome と Chrome DevTools のどちらが扱いやすいのか。\nClaude in Chrome なら Chrome 拡張の中身や内部 API まで届くのか。",[18,145,146,147,150,151,154],{},"届く範囲は、はっきり分かれていた。\n他の拡張が動いている状態のブラウザをそのまま使えるのは Yes。\n拡張の中身を覗いたり ",[35,148,149],{},"chrome://"," を触ったりするのは No。\n内部 API と呼べるのもページの JavaScript 層までで、",[35,152,153],{},"chrome.*"," の特権 API には届かない。",[18,156,157],{},"そして DevTools で毎回もたついていたのは性能差ではなく、設定の誤りが原因だった。\nそれは 2026-08-01 にすでに直してある。\n道具のせいにして乗り換える前に、自分の設定を疑う番だったということになる。",[14,159,160],{"id":160},"残ったもの",[18,162,163],{},"セッション同士をつなぐと、片方が持っている前提がもう片方に伝わらないまま判断が進む。\n今日はそれが「断片ディレクトリはもう無いはずだ」という形で表に出た。\n書いてある報告を鵜呑みにせず、受け取った側にディスクを見せてから動かす。\nこの一手間だけが、往復を安全にしていた。",[165,166,169,180,186,192,198],"ul",{"className":167},[168],"contains-task-list",[170,171,174,179],"li",{"className":172},[173],"task-list-item",[175,176],"input",{"checked":177,"disabled":177,"type":178},true,"checkbox"," 別セッションからの指示を受け取り、元セッションへ報告を返す往復を運用した",[170,181,183,185],{"className":182},[173],[175,184],{"checked":177,"disabled":177,"type":178}," ブラウザ送信中の誤操作を都度確認させ、送信されていないことを確かめた",[170,187,189,191],{"className":188},[173],[175,190],{"checked":177,"disabled":177,"type":178}," 破壊的な作業の前に退避コミットを 3 本取った",[170,193,195,197],{"className":194},[173],[175,196],{"checked":177,"disabled":177,"type":178}," 落ちていたテスト 3 件を実データに合わせ、全件パスに戻してからコミットした",[170,199,201,203],{"className":200},[173],[175,202],{"checked":177,"disabled":177,"type":178}," ブラウザ操作の手段を比較し、Chrome DevTools を使い続ける判断をした",{"title":37,"searchDepth":205,"depth":205,"links":206},2,[207,208,209,210,211,212,213,214],{"id":16,"depth":205,"text":16},{"id":46,"depth":205,"text":46},{"id":61,"depth":205,"text":61},{"id":80,"depth":205,"text":80},{"id":95,"depth":205,"text":95},{"id":117,"depth":205,"text":118},{"id":137,"depth":205,"text":137},{"id":160,"depth":205,"text":160},"dev",null,"別のセッションで走っている Claude Code からブラウザ経由で指示を受け取り、元のセッションへ進捗を報告し返す往復を運用した記録。承認の代わりにならない注記、壊す前の退避コミット、ブラウザを触る手段の選び直しまで。","md",{},"/cross-session-handoff","claude-code-tools",false,"2026-08-10T00:00:00.000Z",{"title":5,"description":217},"make-diary","2026-08/2026-08-10/cross-session-handoff",[228,229,230,231,232],"Claude Code","セッション間通信","Chrome DevTools","引き継ぎ","開発日記","kos9Tq42AV-gHqo99uMVFvzTtNLCarIEoVq6rEg5-bU",[],[236,240,243,247,251],{"title":237,"path":238,"publishedAt":239},"Claude Code のセッション間通信は Windows では受信専用になる","/claude-code-cross-session-messaging-windows","2026-08-09T00:00:00.000Z",{"title":241,"path":242,"publishedAt":239},"LLM評価基盤（evals）を1日で立ち上げる：棚卸しから警告モード運用まで","/llm-evals-harness-setup",{"title":244,"path":245,"publishedAt":246},"ログイン切れを誤診した朝の定型作業と、PR のマージからデプロイまで","/chrome-profile-login-mismatch-and-pr-merge","2026-08-01T00:00:00.000Z",{"title":248,"path":249,"publishedAt":250},"Claude Code の ~/.claude が朝いちで丸ごと消えた — GitHubバックアップからの復元と、自動バックアップの二重化","/claude-config-loss-and-backup-automation","2026-07-29T00:00:00.000Z",{"title":252,"path":253,"publishedAt":254},"DRAM価格ページの解説文追加で、サブエージェントの嘘の報告を実物確認で見破った話","/memory-price-mechanism-subagent-fabrication","2026-07-21T00:00:00.000Z","https://log.eurekapu.com/og/blog/cross-session-handoff.png?v=2026-08-10T00%3A00%3A00.000Z&title=Claude%20Code%20%E3%81%AE%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E5%90%8C%E5%A3%AB%E3%82%92%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E7%B5%8C%E7%94%B1%E3%81%A7%E3%81%A4%E3%81%AA%E3%81%8E%E3%80%81%E4%BD%9C%E6%A5%AD%E3%82%92%E5%BC%95%E3%81%8D%E7%B6%99%E3%81%8C%E3%81%9B%E3%81%9F&author=Kei%20Komatsu&sig=49231429cdce7885",1786424458573]