Claude Codeのworktreeによる隔離、7月から8月にかけて4リリースで修正が入った
目次
TL;DR
現象 Claude Codeのisolation: "worktree"で分離したはずのサブエージェントから、親チェックアウトへ書き込めてしまう。同系統の修正が公式リリースノートに4回掲載された
修正 2.1.203、2.1.210、2.1.216、2.1.222の4リリースで、対象範囲を変えながら修正
ステータス 8月6日時点の公式CHANGELOGでは、2.1.222より後に同種の修正項目は確認できない
Claude Codeのisolation: "worktree"で分離したはずのサブエージェントから親チェックアウトへ書き込める問題が、2026年7月から8月にかけて公式リリースノートに載っただけで4回、対象範囲を変えながら修正されている。
isolation: "worktree"で起動したサブエージェントは独立したgit worktreeの中で作業する。並行して動く複数のサブエージェントが同じチェックアウトを取り合わないようにし、片方の変更がもう片方や呼び出し元のメインブランチへ漏れないようにするのが狙いだ。worktreeによる隔離は、git worktree addでメインリポジトリと同じ.gitを共有した別ディレクトリを作る仕組みなので、.gitの共有部分を経由すればメインのチェックアウトへ書き込める可能性が最初から残っている。
4リリースにわたる修正
公式のGitHub Releasesに、次の4件が載っている。
| バージョン | 公開日 | 内容 |
|---|---|---|
| 2.1.203 | 7月7日21:06 UTC(JSTでは7月8日06:06) | worktreeで隔離されたサブエージェントのシェルコマンドが、親チェックアウトで動いてしまう場合があった |
| 2.1.210 | 7月14日23:45 UTC(JSTでは7月15日08:45) | isolation: "worktree"のサブエージェントが、親チェックアウトへgitを変更するコマンドを実行できた |
| 2.1.216 | 7月20日(UTC。JSTでは7月21日) | git -C、--git-dir、GIT_DIR、GIT_WORK_TREEを使うと、共有チェックアウトへgit操作を向けられた |
| 2.1.222 | 8月4日22:39 UTC(JSTでは8月5日07:39) | worktreeで隔離されたセッション・サブエージェントから、親チェックアウトへ破壊的なgitコマンドを実行できた。ファイル編集だけでなくBashにも隔離を適用したと明記 |
4件とも、隔離されているはずのworktreeから親チェックアウトを操作できる、という同じ形の問題で、公式リリースノートの文言もほぼ共通の言い回しを使っている。
ただし、公式リリースノートの記述だけを確認しても、2.1.210はgitを変更するコマンド全般、2.1.216は-Cや環境変数で参照先を切り替える操作、2.1.222はBashから直接叩く破壊的コマンドと、書かれている対象範囲はそれぞれ違う。
一度直った箇所が形を変えて再発したのか、隔離の対象範囲が段階的に広がっていっただけなのかは、公開されているリリースノートとGitHub Releasesの文面だけでは判別できない。
4件のどの修正にひもづく実装PRも、この記事の執筆時点では見つけられなかった。CHANGELOGの更新コミットだけが公開されている状態で、内部の差分は追跡できなかった。同じ不具合が4回続いたとは言い切れない。公開文面上は対象範囲を変えながら4回に分けて修正が繰り返された、というのが公開資料から言えることだ。
なぜ何度も報告されるのか
同じ形の問題が繰り返し報告される背景を図にすると、次のようになる。
flowchart TD
A[git worktree add で分離ディレクトリを作成] --> B[.gitはメインリポジトリと共有]
B --> C[通常のファイル編集は分離ディレクトリ内に限られる]
B --> D[git -C や GIT_DIR で参照先を明示的に変更できる]
B --> E[Bashで直接gitコマンドを実行できる]
D --> F[共有された.git経由でメインworktreeを操作]
E --> F
F --> G[隔離のつもりが親チェックアウトへ書き込める・破壊的操作ができる]
git worktreeは複数の作業ディレクトリで.gitのオブジェクトデータベースと参照を共有する設計だ。ファイルシステム上のディレクトリが別でも、-CオプションやGIT_DIR・GIT_WORK_TREEのような環境変数、Bashで直接叩くgitコマンドは共有された.gitにアクセスできる。これらの操作を個別にどう塞いだのかは、公開資料からは判別できない。2.1.222のリリースノートは、修正後の隔離がファイル編集とBashの両方に適用されると明記しているが、修正前の実装がどう分かれていたのかまでは示していない。
リリースノート照合で確認できる範囲
隔離が機能するかどうかは、実際に動くgitリポジトリでサブエージェントに破壊的な操作をさせて確かめるしかない。試す途中でメインのチェックアウトを壊しかねない。使い捨てリポジトリで完結させることはできるが、4回分の修正それぞれに専用の再現環境がいるため、今回は公式リリースノートの記述を突き合わせる範囲にとどめた。
worktreeによる隔離を使っているなら、まずClaude Codeを2.1.222以降に更新する。isolation: "worktree"のサブエージェントに破壊的な操作をさせるフローがあれば、更新後も一度は無害なリポジトリで隔離が効いているか確かめる。worktreeで分離していても安全の保証にはならないので、本当に触られたくないリポジトリにはサブエージェントの権限設定やレビューを別途かける。
Claude Codeのバグは過去にも書いている。破壊的なgit操作まわりではClaude Codeが10分ごとにgit reset —hardを実行するバグ報告と、その誤報までの顛末、ツール呼び出しの不具合ではClaude Code(Opus 4.8)でcourtが出てツール呼び出しが止まるがある。