課題:金曜の夕方に 18 本、どれを消していいか分からない
AI エージェントに並列で作業させると、タスクごとに git worktree を切ることになります。作る側は 1 クリックなので、
fix-login
add-search
1026-fix-header
refactor-auth
try-vitest
…
という具合に、1 週間で 18 本くらい溜まります。全部自分で作ったはずなのに、どれが片付いていて、どれがまだコミットしていない変更を抱えているかは思い出せません。
worktree を消すと、未コミットの変更も agent/ ブランチもまとめて消えます。git にコミットしていない変更は履歴のどこにも残らないので、戻す手段がありません。
厄介なのは、自分が見ていない 30 秒のあいだに AI が変更を生んでいることです。並列で動かしているので、それがそもそも狙いです。18 本を 1 本ずつ開いて git status を打って、未コミットの変更を目視で確かめる作業は、途中で面倒になります。面倒になったあとが危ない。
既存のやり方:「本当に削除しますか」は何も言っていない
普通の確認ダイアログは「本当に削除しますか」としか聞きません。これは押す前と押したあとの差を教えてくれないので、読んでも判断が進みません。結果として、読まずに押す癖が付きます。癖が付いたあとは、確認があることが害になります。
手で片付ける場合はこうなります。
cd ~/.mulmoterminal/worktrees/myapp-a1b2c3d4/fix-login
git status # 未コミットの変更があるか見る
git log main..HEAD --oneline # push していないコミットがあるか見る
cd -
git worktree remove ~/.mulmoterminal/worktrees/myapp-a1b2c3d4/fix-login
git branch -D agent/fix-login
これを 18 本に対して繰り返します。確かめる手間が、消す作業そのものより高くつきます。
MulmoTerminal の解決:消えるものの数をボタンに書く
worktree セルを閉じると、残すか消すかを先に聞きます。消えるものが無いときと、あるときで、出る文もボタンの文字も変わります。

- 未コミット・未 push が 無いとき → 「残すか、消すか」。ボタンは Keep worktree / Remove worktree
- 未コミット・未 push が あるとき →
2 unpushed commits + 5 uncommitted changes will be discarded。ボタンは Keep worktree / Discard & remove
押す前に、その箱に何が入っているかが読めます。18 本のうち、Discard & remove と出たフォルダだけ中を開いて確かめればいい。残りはそのまま消していい。18 本を 1 本ずつ git status で開く作業が、ボタンの文字を読むだけになります。
Remove worktree を選ぶと、worktree とその agent/ ブランチが一緒に消えます。あとから git branch -D して回る必要はありません。
詳細・gotcha
確認を出す瞬間に数え直す
マスのヘッダーに出る差分バッジ (+2 ●5) は、数秒前の値かもしれません。AI が 5 秒前にファイルを書いたばかりだと、バッジは 0 のままで、実際には変更があります。そのまま閉じると、直前に生まれた変更を見落としたまま消えます。
MulmoTerminal は確認ダイアログを出す瞬間に数え直します。そのあいだボタンは Checking… の表示になります。数え直しは git status --porcelain と git rev-list base..HEAD で、ステージ済み・未ステージ・未追跡・未 push コミットをすべて拾います。
AI が並列で動いているあいだは、見ていない 5 秒でファイルが書かれるのが普通です。だから最後の瞬間に数え直すのが、この機能の中心です。
管理下の外は消せない
削除の対象は、このアプリが ~/.mulmoterminal/worktrees/ の下に作ったフォルダだけです。管理下の外を指す削除は、サーバ側で拒否します。
ブラウザ側のチェックではないので、パスの書き方を変えたり、別のリクエストを組み立てたりしてもすり抜けません。AI の道具が暴走して別のフォルダを削除する、という形の事故は、「気をつけているところ」ではなく「届かない場所」で止めています。
.gitignore に 1 行足しておく
一つだけ、先にやっておくことがあります。
# .gitignore
.mulmoterminal.local.json
worktree には、プロジェクトの色や名前を引き継ぐための小さな JSON が置かれます。これが .gitignore に入っていないと、git から見て未追跡ファイルとして出ます。
すると「未保存の変更がある worktree」と判定されるので、削除が毎回 Discard & remove になります。実際には捨てるものが何もないのに、毎回それを押すことになる。毎回押していると、本当に捨てるときも同じ見た目になる。ボタンの文字が持っていた情報が、1 行入れ忘れただけで全部無効になります。
残す選択肢も残してある
未コミットの変更があっても、Keep worktree を選べば worktree は残ります。あとで一覧の行から開き直せます。
AI の作業は 1 時間放置してから戻ってくることがあります。「あとで確認したいけどいまは閉じたい」という判断は、確認ダイアログの中で終わらせています。
使ってみる
MulmoTerminal の使い方は MulmoTerminal 完全ガイド にまとまっています。worktree 片付けは追加設定なしに動きます。
動作確認の最小シナリオ
- 空いているセルで git プロジェクトを WORKING DIRECTORY に指定し、OR ISOLATE IN A WORKTREE にタスク名を入れて
+ New worktree - そのセルで AI に何か 1 ファイル編集させる
- セルを閉じる →
X uncommitted changes will be discardedと出て、ボタンがDiscard & removeになれば成功 - 別のセルで同じことをし、何も編集しないまま閉じる → 消えるものの文言が出ず、ボタンが
Remove worktreeのままなら成功
まとめ
- AI 並列化のあとの片付けは、「どれに未保存の変更があるか」を見ないと決められない
- 「本当に削除しますか」は差を言わないので、読まずに押す癖になる
- MulmoTerminal は消えるコミットと変更の数をダイアログに出し、ボタンの文字を
Keep/Discard & removeに切り替える - 数え直すのは確認を出す瞬間。見ていない 5 秒で生まれた変更も拾う
- 管理下の外はサーバ側で削除拒否。
.gitignoreに.mulmoterminal.local.jsonを 1 行足せば完成
関連: MulmoTerminal 公式ガイドの worktree ページ / MulmoTerminal の git worktree 隔離 / Cursor の代替としての MulmoTerminal / tmux で Claude Code を並列に走らせる限界


