用語集
ワークツリー分離とは?
TL;DR
ワークツリー分離とは、AIエージェントごとに、専用のブランチと専用のフォルダにあるコードのコピーを渡すことです。エージェントは同じファイルを同時に編集しても、互いに上書きしません。メインのチェックアウトは、マージするまで手つかずのままです。Paneは、すべてのpaneでこれを自動的に用意します。
ワークツリー分離とは、AIエージェントごとに、専用のブランチと専用のフォルダにあるコードのコピーで作業させることです。複数のエージェントが同じファイルを同時に変更しても、互いに上書きしません。メインのチェックアウトは、マージするまで手つかずのままです。
問題
1つのフォルダを共有するエージェントは、いずれ互いに上書きします。
エージェントAにログインページの書き直しを、エージェントBに登録フローの追加を頼みます。どちらもauth.tsを変更する必要があります。1つの共有フォルダで作業すると、エージェントBが自分の版を保存し、エージェントAの編集を黙って置き換えます。どちらのエージェントも気づかず、あなたが知るのは後になってからです。
だから、1つのディレクトリで複数のエージェントを動かすのは賭けです。2つのエージェントが同じファイルに触れるまではうまくいきますが、触れた瞬間に誰かの作業が失われます。
解決方法
エージェントごとに1つのワークツリー。ファイルとブランチは別々、履歴は共通です。
各エージェントに専用のGitワークツリーを渡します。同じ履歴を共有する、別のブランチを持つ別のフォルダです。エージェントAは一方で、エージェントBはもう一方で作業します。別々のコピーを編集しているので、どちらもauth.tsを編集できます。
my-project/ ← main branch, untouched
my-project/worktrees/
├─ login-rewrite/ ← agent A, branch login-rewrite
└─ signup-flow/ ← agent B, branch signup-flow分離されるもの
ファイル、ブランチ、シェルは別々です。履歴、リモート、Gitオブジェクトは共有されます。
| 分離 | 共有 |
|---|---|
| ファイルとcommit前の変更 | Git履歴とcommit |
| ブランチ | リモート(origin) |
| シェルの状態と環境変数 | Git設定 |
| 作業ディレクトリ | オブジェクトストア(ディスク容量を節約) |
Paneでの仕組み
Paneは、すべてのpaneでワークツリーの用意と片付けを自動で行います。
paneを作ると、Paneは事前に用意しておいたワークツリーを渡し、新しいブランチを作り、.envファイル、エージェントの設定、node_modulesをコピーして、そこでエージェントを起動します。paneをアーカイブすると、Paneは保存されていない作業がないか確認してから、ワークツリーを削除します。自分でgit worktree addを打つ必要はありません。
分離で守られないもの
ワークツリーはエージェントのファイルを分けます。エージェントにできることを制限するサンドボックスではありません。
ワークツリーはフォルダであって、サンドボックスではありません。エージェントは今もあなたのユーザー権限で動きます。そのため、パスを指定して別のワークツリーのファイルを読んだり、ネットワークにアクセスしたり、リポジトリの外を変更したりできます。実際には、エージェントは自分の作業フォルダの中にとどまります。それでも厳密な制限が必要なら、コンテナかVMで動かしてください。
Gitの外で共有されるものもあります。アプリが使うデータベース、開発サーバーのポート、グローバルなパッケージキャッシュなどです。Paneは各paneにPANE_PORTで専用のポート範囲を割り当てます。データベースについては、セットアップスクリプトか、ワークツリーごとにデータベースを作るツールを使ってください。
関連ページ
出典
- 訂正
- 間違っている点や古くなっている点があれば、教えてください。修正して、ページ上部の日付を更新します。 GitHubでissueを作成
- 出典
よくある質問
著者 Parsa Khazaeepoul、Paneの共同創業者。 .