worktrunk(max-sixty/worktrunk・コマンド名 wt・GitHubスター7.5k・MIT OR Apache-2.0)は、git worktreeをブランチと同じ手軽さで扱うためのRust製CLIです。設計の出発点は「Claude CodeやCodexを5〜10本並列で走らせるなら、各エージェントに別の作業ディレクトリが要る」という一点で、READMEの冒頭にそう書いてあります。素のgitで同じことをすると git worktree add -b feat ../repo.feat && cd ../repo.feat のようにブランチ名を3回打つ羽目になる。worktrunkはそれを wt switch -c feat に畳み、一覧・マージ・削除・フック・LLMコミット・エージェントの稼働表示まで一式で面倒を見ます。
本記事では最新タグv0.77.0(2026-09-08)を実機でビルドし、使い捨てのgitリポジトリで核心コマンドを通しました。合わせて、10種のフック、LLMコミット生成、Claude Code/Codex/OpenCode/Pi/Gemini CLIとの連携の中身をドキュメントとCHANGELOGから整理します。
- ・正体:git worktreeをブランチ名だけで作成・切替・マージ・削除するRust製CLI。パスは設定テンプレートから自動計算
- ・何ができる:
wt switch / list / merge / removeの4コマンドに、10種のフック・LLMコミットメッセージ・CI状態表示・PRチェックアウト・ビルドキャッシュ共有 - ・何のため:Claude Code等のエージェントを並列で走らせるための土台。
wt switch -x claude -c feat -- '指示'でworktree作成とエージェント起動を1行で - ・実測:v0.77.0を
cargo build --releaseで3分36秒。wt switch --create0.04秒、wt merge0.16秒、wt remove0.06秒 - ・注意:
cdを効かせるにはwt config shell installが必須。プロジェクト側フックは初回承認制。Windowsはコマンド名がgit-wt
worktreeを使った並列開発は、当サイトのClaude Code|2026年版・インストールからCLAUDE.md・Hooks・本番運用までの実装手引きで扱うClaude Code運用の一部です。本記事はその「worktreeをどう回すか」の道具に絞ります。
worktrunkとは——worktreeを「ブランチ名」で扱うCLI
git worktreeは1つのリポジトリに複数の作業ディレクトリをぶら下げる標準機能で、AIエージェントを並列に走らせるときの定石です(Anthropicの公式ベストプラクティスにもworktreeパターンが載っています)。問題は操作の冗長さで、作成・移動・一覧・削除のどれもパスとブランチ名の両方を人間が管理しなければなりません。
worktrunkの答えは「worktreeはブランチ名で指す。パスはテンプレートで決める」です。既定のテンプレートでは repo の隣に repo.feat のようなディレクトリが作られ、以後は feat というブランチ名だけを打てばよい。ブランチ名を受け取るコマンドは、そのブランチがチェックアウトされているworktreeのパスも同じように受け付けます。
核心は4コマンドです。
| コマンド | やること | 素のgit相当 |
|---|---|---|
wt switch <branch> |
そのブランチのworktreeへ移動。-c で作成、-x <cmd> で移動後にコマンド実行 |
git worktree add -b … && cd … |
wt list |
全worktreeを、未コミット変更・mainとの差分・未push・(--full で)CI状態とLLM要約つきで一覧 |
git worktree list(パスのみ) |
wt merge [target] |
現在のブランチを対象へ取り込む。squash→rebase→フック→fast-forward→worktree削除 | 手作業で5〜6コマンド |
wt remove [branch] |
worktreeとブランチをまとめて削除 | git worktree remove … && git branch -d … |
READMEには「2026年初頭に公開し、最も使われているgit worktreeマネージャになった」と書かれています。これは作者自身の表現ですが、スター7.5k・コミット5,063件・CHANGELOG136版という数字は、少なくとも活発に使われ続けていることを示しています。
実機検証:v0.77.0をビルドしてswitch→list→merge→removeを通す
配布はHomebrew・Cargo・winget・pacman・condaと揃っていますが、本記事は読者がインストールするのと同じv0.77.0タグをソースからビルドしました(Linux・4コア・Rust 1.97.0)。
# Homebrew(macOS / Linux)
brew install worktrunk && wt config shell install
# Cargo
cargo install worktrunk && wt config shell install
# Windows:wt が Windows Terminal と衝突するため git-wt として入る
winget install max-sixty.worktrunk && git-wt config shell install
cargo build --release は3分36秒(user時間10分52秒)で完了し、wt バイナリは28.4MBでした。wt --version は wt v0.77.0 を返します。次に空のリポジトリで1サイクルを回しました。
$ wt switch --create feature-auth # 0.04秒。../repo.feature-auth が作られる
▲ Cannot change directory — shell integration not installed
↳ To enable automatic cd, run wt config shell install
$ wt list # コミット後
Branch Status HEAD± main↕ main…± Path Commit Age Message
@ feature-auth ↑ ↑1 +1 ../repo.feature-auth 780112b now Add authentication module
^ main ^ . b7b7341 now Initial commit
$ wt merge main # 0.16秒
◎ Merging 1 commit to main @ 780112b (no commit/squash/rebase needed)
✓ Merged to main (1 commit, 1 file, +1)
◎ Removing feature-auth worktree & branch in background (same commit as main, _)
| 操作 | 実測 | 結果 |
|---|---|---|
cargo build --release(v0.77.0) |
3分36秒 | wt 28.4MB |
wt switch --create feature-auth |
0.042秒 | worktree作成。シェル統合なしのため cd は案内のみ |
wt list |
即時 | @ 現在・^ main・↑1 先行コミット・+1 差分行を表示 |
wt merge main(コミット済み1件) |
0.158秒 | fast-forward。worktreeとブランチは背景で削除され git worktree list から消えた |
wt switch --create feature-b → wt remove feature-b |
0.056秒 | worktree・ブランチとも削除 |
wt list --format=json |
即時 | schema 2(repo.default_branch・items[]・collected)で出力 |
① 何ができる:worktreeの作成・移動・一覧・マージ・削除をブランチ名だけで行い、フック・LLMコミット・CI状態・エージェント稼働表示を足せる。② 何を解決する:並列エージェント運用でworktreeのパス管理と後片付けが人間に溜まる問題。③ 何を代替できる:
git worktree の手打ち手順と、それを包む自作シェル関数。gitそのものは置き換えない(内部でgitを呼ぶ)。
シェル統合について1点。wt は別プロセスなので、それ自身が親シェルのカレントディレクトリを変えることはできません。wt config shell install はbash/zsh/fish/nushell/PowerShell向けにラッパー関数と補完を書き込み、これがあって初めて wt switch の後に本当に移動します。wt config show を打つと、シェル統合の有無・検出したシェル・Claude Codeプラグインの有無・gitのバージョンまで一覧で診断してくれます。
worktrunkのwt mergeとフック——「Merge pull request」をローカルで再現する
wt merge は git merge と向きが逆です。現在のブランチを対象(既定はデフォルトブランチ)へ取り込むもので、公式ドキュメントは「GitHubのMerge pull requestボタンをローカルで押すようなもの」と説明しています。
未コミットの変更があればコミット(LLMメッセージ生成を設定していればそれを使う)、複数コミットなら1つにsquash、対象ブランチの先頭へrebase、pre-merge フックでテスト、fast-forwardで対象を進め、最後にworktreeとブランチを背景で削除します。本記事の検証ではコミット済みの1件だったため「no commit/squash/rebase needed」と表示され、fast-forwardと削除だけが走りました。
フックは5イベント×前後の10種です。
| イベント | pre-(ブロッキング) |
post-(バックグラウンド) |
|---|---|---|
| switch | pre-switch |
post-switch |
| create | pre-start:依存インストール・envファイル生成 |
post-start:開発サーバ・長いビルド・キャッシュコピー |
| commit | pre-commit:フォーマッタ・リンタ・型検査 |
post-commit:CI起動・通知 |
| merge | pre-merge:テスト・セキュリティスキャン |
post-merge:デプロイ・通知 |
| remove | pre-remove:成果物の退避 |
post-remove:開発サーバ停止・コンテナ削除 |
設定はTOMLで、プロジェクト側(.config/wt.toml)とユーザー側(~/.config/worktrunk/config.toml)に分かれます。プロジェクト側のフックは初回に承認が必要で、リポジトリをcloneしただけで任意コマンドが走る事故を防いでいます。LLMコミット生成も同じ設定ファイルです。
# ~/.config/worktrunk/config.toml
[commit.generation]
# 標準入力からプロンプトを読み、コミットメッセージを出力するコマンドなら何でもよい
command = "MAX_THINKING_TOKENS=0 claude -p --no-session-persistence --model=haiku --tools='' --safe-mode --setting-sources='user' --system-prompt=''"
# .config/wt.toml(プロジェクト側。初回に承認が求められる)
[hooks]
pre-merge = "cargo nextest run"
post-start = "npm install"
Claude Code側の --safe-mode は「フック・プラグイン・MCP・スキル・CLAUDE.mdを読まずに走る」ためのフラグで、コミットメッセージ生成を密閉するために使われています(Claude Code 2.1.169以上が必要、とドキュメントにあります)。wt list --full のLLM要約も同じコマンドを再利用し、ブランチの差分が変わるまでキャッシュされます。
Claude Code・Codex・Gemini CLIとの連携——🤖が動いているworktreeを一覧で見る
並列エージェント運用で本当に欲しいのは「どのworktreeでエージェントが動いていて、どれが入力待ちか」の一覧です。worktrunkは各エージェントCLI向けのプラグインで、wt list に🤖(稼働中)/💬(入力待ち)を出します。
| 機能 | Claude Code | Codex | OpenCode | Pi | Gemini CLI |
|---|---|---|---|---|---|
設定を手伝う /worktrunk スキル |
✓ | ✓ | ✓ | ||
活動追跡(wt list の🤖/💬) |
✓ | ✓ | ✓ | ✓ | ✓ |
| worktreeの隔離 | ✓ | ||||
/wt-switch-create コマンド |
✓ |
隔離と /wt-switch-create がClaude Code限定なのは、worktreeのライフサイクルフックとセッションの作業ディレクトリ切替という、Claude Code側にしか無いフックに依存するためです。他のエージェントでは人間が wt switch --create と wt remove を直接打ちます。Piの対応はv0.77.0で追加されたばかりで、CHANGELOGには依頼者への謝辞つきで記録されています。
Claude Code 🤖"] M -->|"wt switch -x claude -c feature-b -- 'ページングを修正'"| B["repo.feature-b
Claude Code 🤖"] M -->|"wt switch -x claude -c feature-c -- 'APIのテストを書く'"| C["repo.feature-c
Claude Code 💬 入力待ち"] A --> L["wt list
🤖/💬・HEAD±・main↕・CI を1画面"] B --> L C --> L L -->|"完成したものから"| MG["wt merge
squash → rebase → pre-merge → ff → 削除"] MG --> M
READMEはこの並列起動を3行の例で示しています。-x は「移動後に実行するコマンド」、-- 以降はそのコマンドへ渡す引数(ここではClaude Codeへの初期指示)です。post-start フックで依存インストールや開発サーバ起動を自動化し、hash_port テンプレートフィルタでworktreeごとに別ポートを割り当てる、という運用パターンも公式の「tips & patterns」にまとまっています。
Claude Codeプラグインは wt config plugins claude install(内部では claude plugin marketplace add max-sixty/worktrunk と claude plugin install worktrunk@worktrunk)で入ります。v0.77.0のCHANGELOGを読むと、プラグインの有無を installed_plugins.json の直読みではなく claude plugin list --json に問い合わせるよう改めた、という修正があり、Claude Code側のファイル配置変更に振り回されない方向へ手が入っていることが分かります。
並列エージェントを「エージェント側」から統治する製品は別にあり、当サイトではOrcaとは|Claude Code・Codexを並列実行するAIエージェントIDE(ADE)の使い方で扱いました。worktrunkはIDEではなく、その足元のgit操作だけを担う位置づけです。Claude Code自身の並列化手段(サブエージェント・agent view)はClaude Code サブエージェントとは?作り方・frontmatter全項目・呼び出し方まとめ【2026年版】とClaude Code agent view発表|全セッション一覧で並列エージェントを統治する新UIを参照してください。worktreeの使い方そのものはClaude Codeベストプラクティス2026|Boris直伝25 Tips・並列ワークツリー・–bare最適化にも整理があります。
細かいが効く機能——PRチェックアウト・キャッシュ共有・ピッカー・JSON
READMEの「quality-of-life」に列挙されている機能のうち、運用で差が出るものを挙げます。
・PR/MRのチェックアウト:wt switch pr:123 でGitHub/GitLabのPRブランチへ直接飛ぶ
・ビルドキャッシュの共有:wt step copy-ignored が target/ や node_modules/ を新しいworktreeへreflinkでコピーする。APFS・btrfs・XFSでは実体を複製せず、v0.77.0からは「reflinkできたか・実コピーだったか」を要約に出す
・対話ピッカー:wt switch を引数なしで打つと、差分とログのライブプレビューつきでworktreeを選べる
・CI状態:wt list --full でGitHub/GitLabのパイプライン結果をブランチごとに表示
・wt list --format=json:v0.77.0から既定がschema 2(リポジトリ情報つきのエンベロープ)に変わった。旧形式が必要なら [list] json-schema = 1。破壊的変更としてCHANGELOGに明記
・エイリアスとブランチ変数:wt <name> の自作コマンドと、フックテンプレートから参照できるブランチ単位の状態
wt list --format=json の既定がschema 2に ②wt config show が壊れた設定で終了コード1を返すように(以前は常に0)③wt config update --print が削除され --output <path> に ④Codex/Claude Codeプラグインのuninstallがマーケットプレイスまで削除するように。スクリプトから wt list のJSONを読んでいる場合は①の影響を受けます。
ライセンス・開発状況・注意点
ライセンスはMIT OR Apache-2.0(利用者がどちらかを選ぶRustの慣例形)です。Windows向けバイナリはSignPath Foundationの証明書で署名されており、そのポリシーも公開されています。
| 項目 | 実測(2026-09-14) |
|---|---|
| 初回コミット | 2025-10-16(cargo init) |
| 公開 | 2026年初頭(README記載) |
| コミット数 | 5,063件(作者4,085・ボット407・dependabot 240) |
| リリース | v0.72.0(08-07)→ 0.73(08-12)→ 0.74(08-14)→ 0.75(08-26)→ 0.76(09-01)→ v0.77.0(09-08) |
| CHANGELOGの版数 | 136(0.1.14〜0.77.0) |
| スター/フォーク/オープンIssue | 7.5k/269/29 |
| 要件 | Rust 1.97(ソースビルド時)。バイナリ配布はHomebrew・Cargo・winget・pacman・conda |
注意点は3つです。
・シェル統合が前提:wt config shell install を入れないと wt switch は移動しない。本記事の検証でもその案内が毎回出た
・プロジェクトフックの承認:.config/wt.toml のフックは初回に承認を求める。CIやコンテナで無人実行するなら、承認の扱いを先に確認する(wt config show が未承認コマンド数を出す)
・破壊的変更が続く0.x系:ほぼ週次のリリースで、0.77.0だけでも4件のBreakingがある。スクリプトから使うなら版を固定する
未検証として残したのは、Claude Codeプラグインの実動作(🤖/💬表示・隔離・/wt-switch-create)、LLMコミット生成、--full のCI表示です。いずれもClaude Codeのセッションや外部サービスへの接続が要るため、本記事の環境では動かしていません。
まとめ
git worktree に戻る理由は薄い。
・向く:Claude Code/Codexを複数同時に走らせる人、worktreeを既に使っていて手順を自作シェル関数で包んでいる人
・向かない:単一ブランチで順番に作業する人(素のgitで足りる)、0.x系の破壊的変更を追えない自動化環境
・次にやる:wt config shell install → wt config plugins claude install → .config/wt.toml に pre-merge のテストを1行
参照ソース
・max-sixty/worktrunk(公式リポジトリ・README・CHANGELOG) — 機能・インストール・破壊的変更の一次情報。v0.77.0タグを実機ビルド(2026-09-14)
・worktrunk.dev — Agent Integration / wt merge / wt hook / LLM Commit Messages — プラグイン対応表・マージ手順・フック10種・コミット生成設定(リポジトリ同梱の docs/public/*.md と同内容)
・Claude Code: Best practices for agentic coding(Anthropic) — worktreeパターンの出典
・実測:Linux(4コア・Rust 1.97.0)で cargo build --release 3分36秒/wt 28.4MB、wt switch --create 0.042秒/wt merge 0.158秒/wt remove 0.056秒(2026-09-14)