# chrome-useのマルチエージェント隔離

chrome-useの{売り|うり}は、agentにあなたの**この1つ**の{本物|ほんもの}のブラウザを{使わせる|つかわせる}ことです。ただし、この{売り|うり}には{厄介|やっかい}な{問題|もんだい}もついてきます。{新しい|あたらしい}ブラウザを{開く|ひらく}ツールなら、タスクごとに{独立|どくりつ}したブラウザがあり、もともと{互い|たがい}に{干渉|かんしょう}しません。chrome-useはその{逆|ぎゃく}で、いくつものagentにあなた{本人|ほんにん}まで{加わって|くわわって}、**同じChrome**の中で{同時|どうじ}に{操作|そうさ}することがあります。誰が誰のタブをクリックしたのか、誰が誰のページを別の場所へ{移動|いどう}させたのか。この{問題|もんだい}を{解決|かいけつ}しなければ、「あなたのブラウザを{使う|つかう}」は{災難|さいなん}になってしまいます。

![1つのChromeウィンドウの中に3つの色付きタブグループがある:agent A、agent Bがそれぞれ1グループ、あなた自身のタブが別グループ;2つの小さな黒いagentがそれぞれ自分のグループだけをクリックし、あなたのタブには触れない](https://img.leeguoo.com/media/721ff51d-d314-405f-ad58-1b81b0a6a831/multiagent-hero.webp)

## {問題|もんだい}は{想像|そうぞう}より{具体的|ぐたいてき}

たとえば、あなたがChromeでドキュメントを{読んで|よんで}いて、{裏|うら}では2つのagentが{動いて|うごいて}いるとします。1つはSlackメッセージを{確認|かくにん}し、もう1つはどこかの{管理画面|かんりがめん}のデータを{取って|とって}います。{三者|さんしゃ}とも、この1つのブラウザの中にいます。

もしそれぞれが{区別|くべつ}なく「{現在|げんざい}のタブ」を{操作|そうさ}したら、すぐに{混乱|こんらん}します。agent Aが{開いた|ひらいた}ログインページを、agent Bが自分の{対象|たいしょう}だと{思って|おもって}クリックしてしまう。あなたが{読んで|よんで}いるタブが、どこかのagentによって別の場所へ{移動|いどう}させられてしまう。{新しい|あたらしい}ブラウザを{開く|ひらく}{方式|ほうしき}には、この{問題|もんだい}はありません。それぞれが別々のプロセスを{持って|もって}いるからです。chrome-useが「1つの{本物|ほんもの}のブラウザを{共有|きょうゆう}する」という{前提|ぜんてい}で同じような{非干渉|ひかんしょう}を{得る|える}には、別の{仕組み|しくみ}が{必要|ひつよう}です。

## {解決策|かいけつさく}:「誰が{開いた|ひらいた}か」で{隔離|かくり}する

chrome-useは、agentごとにブラウザを1つ{渡す|わたす}のではありません。同じChromeの中で、{所属|しょぞく}によって{切り分けます|きりわけます}。各`--session <名前>`には3つのものが{与えられます|あたえられます}。**色付きタブグループ**、つまりChrome上でどのグループがどのagentのものか一目でわかるもの、{専用|せんよう}のバックグラウンドdaemon、そして「**自分が作成したタブだけを操作する**」という{鉄則|てっそく}です。

こうして{三者|さんしゃ}は、それぞれ自分の{領域|りょういき}で{動きます|うごきます}。agent AのページはAのタブグループに、agent BのページはBのグループに入り、あなた自身のタブには誰も{触れません|ふれません}。agentごとに{名前|なまえ}を{付ける|つける}{必要|ひつよう}すらありません。{指定|してい}しなければ、agentに{基づいて|もとづいて}{安定|あんてい}したsession名が{自動的|じどうてき}に{派生|はせい}されます。session内のタブには{安定|あんてい}したid（`t1`、`t2`…、一度{使った|つかった}ものは{再利用|さいりよう}しない）があります。そのため、「さっきのタブに{戻って|もどって}」のような{操作|そうさ}も{確定的|かくていてき}で、{番号|ばんごう}が{混ざりません|まざりません}。{使い終わったら|つかいおわったら}`chrome-use close`（または`close --all`）でそのsessionのタブを{片付けられ|かたづけられ}、あなたの他のタブには{触れません|ふれません}。

## 書いておかないとつまずくトレードオフ

ここには{重要|じゅうよう}な{細部|さいぶ}があります。{公式|こうしき}ドキュメントでは一言{触れられて|ふれられて}いますが、{見落とされ|みおとされ}がちです。**このsession単位の{隔離|かくり}は、「拡張機能接続」の経路でのみ成立します。生の`--cdp <ポート>`で直接つなぐ場合は、隔離されません。**

{理由|りゆう}は、{隔離|かくり}がブラウザ{拡張機能|かくちょうきのう}によってタブグループと{所属|しょぞく}を{管理|かんり}しているからです。生のCDPポート接続にはこの層がなく、複数の接続からは同じタブの{集合|しゅうごう}が見え、誰でも誰のタブでもクリックできます。この点は、以前{書いた|かいた}Electronの記事の{裏側|うらがわ}にもつながります。Electronアプリでは`--remote-debugging-port`を{使う|つかう}しかなく（拡張機能を入れられない）、そのためElectron上では、この複数agentの{隔離|かくり}は**手に入りません**。そもそもその経路には、拡張機能による{下支え|したざさえ}がないのです。

これは同時に、chrome-useがブラウザの{場面|ばめん}で、手軽だからとデバッグポートへ直接つなぐのではなく、拡張機能とnative messagingを{通す|とおす}ことにこだわる{理由|りゆう}も{説明|せつめい}しています。「リモートデバッグを{許可|きょか}しますか」という{確認|かくにん}を出さないことは表面的な{利点|りてん}にすぎません。より{実質的|じっしつてき}なのは、拡張機能という経路だからこそ、「1つの{本物|ほんもの}のブラウザ上で複数のagentがそれぞれ{独立|どくりつ}して{動く|うごく}」ことを{支えられる|ささえられる}、という点です。

## ついでにもう一層:ページ内でも{隔離|かくり}

{隔離|かくり}はタブのレベルだけではありません。chrome-useがページに{注入|ちゅうにゅう}する{操作|そうさ}は、**隔離された世界**（isolated world）の中で{実行|じっこう}されます。ページのDOMは{読めます|よめます}が、ページ自身のJSグローバル{変数|へんすう}には{触れられません|ふれられません}。{利点|りてん}は{双方向|そうほうこう}です。あなたの{自動化|じどうか}ロジックがページスクリプトのグローバルを{誤って|あやまって}{踏む|ふむ}ことがなく、ページスクリプト側も、あなたが何を{注入|ちゅうにゅう}したのかを{検知|けんち}できません。これは「アンチスクレイピングに{識別|しきべつ}されない」ことと同じ{線上|せんじょう}にあります。{痕跡|こんせき}は少ないほどよいのです。

## いつ{必要|ひつよう}になるのか

agentが1つ、タスクも1つなら、実はこうしたことを{考える|かんがえる}{必要|ひつよう}はありません。デフォルトの{自動|じどう}session名で{十分|じゅうぶん}です。本当に{意識|いしき}すべきなのは、複数のagentを**{並行|へいこう}**して{走らせ|はしらせ}始め、しかもそれらがログイン{済み|ずみ}のあなたの1つのブラウザを{共有|きょうゆう}するときです。たとえば、常駐アシスタントがメッセージを{送受信|そうじゅしん}しているところへ、あなたが一時的に別のagentへ{調査|ちょうさ}を{頼む|たのむ}ような場合です。このとき、それぞれに`--session`を{分けて|わけて}おけば、{三者|さんしゃ}（2つのagentとあなた）が同じChrome内で同時に{作業|さぎょう}しても{衝突|しょうとつ}しません。

結局のところ、{新しい|あたらしい}ブラウザを{開く|ひらく}ツールは、「ブラウザをいくつも{起動|きどう}する」ことで{隔離|かくり}を{得て|えて}います。chrome-useは、「あなたのこの1つの{本物|ほんもの}のブラウザを{使う|つかう}」ことを{維持|いじ}しながら、{所属|しょぞく}とタブグループによって{隔離|かくり}を{組み込んで|くみこんで}います。前者は手軽です。後者が{得る|える}ものは、あなたのログイン{状態|じょうたい}一式を、複数のagentがそのまま{使える|つかえる}ことです。それぞれがログインし直す{必要|ひつよう}はありません。

関連ドキュメント（英語）：[chrome-use · Agents & Sessions](https://chrome-use.leeguoo.com/en/sessions.html)、[インストール](https://chrome-use.leeguoo.com/en/install.html)。
