worktree
v2.12.2Git worktreeのセットアップとクリーンアップ。hooks: WorktreeCreate で worktree 作成そのものを置き換え、作成と同時に wt-setup(.claude/ symlink + .worktreeinclude コピー)まで済ませる。`--worktree` / Agent の isolation:"worktree" / background session が対象で、並列サブエージェントが worktree で走る場合も取りこぼさない。既定の配置規約(.claude/worktrees/<name>・branch worktree-<name>・locked)は踏襲する。SessionStart(wt-setup-guard)は手で `git worktree add` した worktree の取りこぼしを初回だけ拾い、済みマーカー(<gitdir>/wt-setup-done)以降とメインリポ・git 外では完全に無出力。wt-setup: .claude/ symlink、.worktreeinclude生成、envコピー、引数で後続作業指示を受け取り可能。`--with-pr` で空 commit → push → Draft PR を自動作成し marketplace 自動更新による worktree 消失に備える運用に切替可能。wt-setup の .worktreeinclude は既定パターンをスクリプトが出力し(`--print-default-worktreeinclude`)、バックアップ・エディタ残骸(*.bak / *.bak-* / *.old / *.orig / *~ 等)を常に除外、`.vercel` は既定に含めずオプトイン、コピー対象に本番値(sk_live_ / service_role / 本番 DB ホスト / AWS キー)を検出したら値を出さずに警告して続行する(issue #55)。wt-setup の .worktreeinclude 探索は `/` を含まないパターンをリポジトリ直下限定(-maxdepth 1)にし、`/` を含むパターンでも `*/.claude/worktrees`(入れ子 worktree・作成中の worktree 自身)と .git / node_modules を prune する(flatmate#320: find -path のグロブが `/` にも一致して入れ子 worktree 残骸をリポ全体から再帰コピーし、自己増殖で WorktreeCreate hook がタイムアウトしていた事故の対策)。wt-clean: 対象を確定してからノンブロッキング自動処理する 2 パスフロー。`wt-clean <path|branch>` で特定 worktree だけにスコープ(複数可)、引数なし(または対象を定めないオプションのみ)なら全 worktree を確認なしで対象にする(対象選択の質問はしない)。Step 0でorigin/<main>を同期 → Pass 1 で各対象を i/N 進捗で診断(🟢🟡🔴)し 🟢→確認なしで削除/再利用・🟡(LLMのみ)→LLM退避検証→確認なしで削除を自動実行。🔴 と dirty は Pass 2 の判断バッチでまとめて マージ/スキップ/破棄 を対話。`AHEAD_COUNT>0`でも squash マージ済み(実ツリー差分空 / cherry / gh pr で検証)なら 🟡 にフォールバックし誤判定を防ぐ。実ツリー差分は**全 tracked ファイル対象**(パスフィルタ禁止 — かつて JS/TS 前提のフィルタを掛けていたため Markdown/シェル中心のリポで差分が常に空になり、PR が OPEN の未マージブランチまで「squash 済み」と誤判定した)。3 検証が割れたら**未マージ側に倒し**、OPEN な PR がある対象はツリー一致でもマージ済み扱いにしない。配下で claude 等の非シェルプロセスが稼働中、`~/.claude/projects/<slug>/` に 24 時間以内更新の .jsonl がある、または `git worktree lock` されている worktree は、git がマージ済み & クリーンでも 🟢 にせず Pass 2 の判断バッチへ回す(issue #77: 壁打ちセッションの worktree を 🟢 Safe と誤判定して削除しプロセスまで停止した事故の再発防止。検出は kill_devserver_under と同一の除外基準)ただし親セッションが消えて init に引き取られた居残りプロセス(プロセスツリー最上位が PPID=1)は、worktree 配下の更新も対応するセッションログの更新も 24 時間以上前であることを**併せて**満たす場合に限り稼働シグナルから外し、除外根拠(PID・コマンド名・親セッション消滅・痕跡なし)を Pass 1 / Pass 2 / 完了レポートに表示する(issue #98: 孤児プロセスを稼働シグナルと誤検出し、11 件中 Pass 1 の自動処理が 0 件になった事象。2 条件の AND は緩めず、判定材料が欠けたら稼働扱いに倒す fail-closed)。ロック解除(`git worktree unlock`)は Pass 2 でユーザーが削除を選んだ対象のみ。パス正規化は GNU 専用の `realpath -m`(macOS で必ず失敗しプロセス検出が silent no-op 化する)を廃し `abs_path` に統一。`git worktree remove` を呼ぶ全分岐(🟢/🟡/Pass 2)は削除前に対象パス配下の devサーバープロセスを `lsof +D` で検出し SIGTERM→SIGKILL で停止する(issue #39: 削除後も残留した next dev が再ビルドループでCPU/メモリを圧迫したインシデント対策)。マージは都度サニティチェック。`--keep` で再利用可能化、`--no-sync` で同期スキップ。dirty破棄・🔴破棄・マージは AskUserQuestion 回答到着後の別ターンで実行する絶対禁則を維持(データロス防止)。 `--unattended` で Pass 2 の AskUserQuestion を呼ばず残件(番号・パス・ブランチ名・分類・理由)を報告して終了する無人モードを持ち、cron からの定期実行に載せられる(Pass 1 の判定基準と絶対禁則は一切緩めず、禁則対象の分岐に入らないルートを足す形)。`--repo <path>` で cwd 以外のリポジトリを対象にでき(worktree のパスを渡してもメイン worktree に正規化、全 git 呼び出しは `git -C "$MAIN_REPO"` 経由)、未指定時は現行どおり cwd。dirty の内訳が lockfile(package-lock.json / yarn.lock / pnpm-lock.yaml / Cargo.lock / poetry.lock)のみなら 🟢 相当として自動処理し、根拠 `dirty=lockfileのみ` を削除直前に表示する(1 ファイルでも他が混ざれば従来どおり判断バッチ行き)。 配下プロセスのコマンド名は `ps -o comm=` の先頭 `-` を落としてから basename 相当で切り出す(macOS の ps は argv[0] を返すためログインシェルが `-/bin/zsh` になり、外部 `basename` がハイフンをオプション扱いして失敗 → comm が空文字に潰れ、シェル除外リストに一致せず削除対象 worktree に cd しているだけのターミナルのタブを SIGKILL していた。2026-08-27 実例。検出側・停止側の取り出しは完全に同一に保ち、実プロセスで除外が効くことを回帰テストで固定した — ただし `ps -o comm=` が argv[0] を返すのは BSD だけなので、実プロセスを立てる 1 件は macOS 実行時のみ走り CI(ubuntu)では skip される)。
By OrattaLicense: MIT0 GitHub starsUpdated 3 hours ago
Directory evidence
- Runtimes
- Claude Code
- Parsed components
- 2 skill or MCP entries
- Source updated
- Aug 28, 2026
- Manifest status
- Canonical path parsed
The directory validates manifest shape and source location. It does not execute the plugin or provide a security endorsement. Review the indexing methodology →
Install plugin
claude plugin marketplace add IchenDEV/agent-plugin-mkt
claude plugin marketplace update agent-plugin-marketplace
claude plugin install worktree@agent-plugin-marketplacePaste and run these commands in a terminal with Claude Code. They add and refresh the PluginsMP catalog, then install this plugin.
The installer fetches third-party code from the source repository shown on this page. This directory validates manifest structure and source location, but does not perform a security audit; review the manifest, components, and source before installing.
Get the source manually
git clone https://github.com/oratta/claude-harnessClone the source repository, then follow its setup instructions to add the plugin to a compatible client. The plugin root is plugins/worktree/.
Plugin files
├── .claude-plugin/plugin.json├── skills/wt-clean/SKILL.md└── skills/wt-setup/SKILL.md
Included Skills2
Git worktree の安全なクリーンアップ(自動処理 → 判断バッチのみ対話の 2 パス)。削除前に対象パス配下の devサーバープロセスを停止する。配下で claude 等の非シェルプロセスが稼働中/当日のセッションログがある/git worktree lock されている worktree は git がクリーンでも自動削除せず判断バッチに回す。ただし「親セッションが消えて init に引き取られた(PPID=1)」かつ「worktree の更新もセッションログの更新も 24 時間以上前」の両方を満たす居残りプロセスは稼働シグナルから外し、根拠を表示する。`wt-clean [<path|branch>…] [--keep] [--no-sync] [--unattended] [--repo <path>]`、引数なしは全 worktree を対象。`--unattended` で Pass 2 を対話せず報告のみにして cron から無人実行、`--repo` で cwd 以外のリポジトリを対象にできる。「worktree整理」「ワークツリークリーン」「worktree削除」「worktree再利用」「PRマージ後の整理」「プルリク後の片付け」「未マージworktreeのマージ」「worktree消したのにdevサーバーが残っている」「worktreeが溜まっている」「worktreeの定期掃除」で起動。
Git worktree の開発環境セットアップ。worktree 作成後に実行する。「worktreeセットアップ」「ワークツリー初期化」で起動。引数で後続作業指示を渡せる。`--with-pr` で Draft PR 常時バックアップ運用(プラグイン自体の repo 向け)。
Plugin manifests1
{
"name": "worktree",
"version": "2.12.2",
"description": "Git worktreeのセットアップとクリーンアップ。hooks: WorktreeCreate で worktree 作成そのものを置き換え、作成と同時に wt-setup(.claude/ symlink + .worktreeinclude コピー)まで済ませる。`--worktree` / Agent の isolation:\"worktree\" / background session が対象で、並列サブエージェントが worktree で走る場合も取りこぼさない。既定の配置規約(.claude/worktrees/<name>・branch worktree-<name>・locked)は踏襲する。SessionStart(wt-setup-guard)は手で `git worktree add` した worktree の取りこぼしを初回だけ拾い、済みマーカー(<gitdir>/wt-setup-done)以降とメインリポ・git 外では完全に無出力。wt-setup: .claude/ symlink、.worktreeinclude生成、envコピー、引数で後続作業指示を受け取り可能。`--with-pr` で空 commit → push → Draft PR を自動作成し marketplace 自動更新による worktree 消失に備える運用に切替可能。wt-setup の .worktreeinclude は既定パターンをスクリプトが出力し(`--print-default-worktreeinclude`)、バックアップ・エディタ残骸(*.bak / *.bak-* / *.old / *.orig / *~ 等)を常に除外、`.vercel` は既定に含めずオプトイン、コピー対象に本番値(sk_live_ / service_role / 本番 DB ホスト / AWS キー)を検出したら値を出さずに警告して続行する(issue #55)。wt-setup の .worktreeinclude 探索は `/` を含まないパターンをリポジトリ直下限定(-maxdepth 1)にし、`/` を含むパターンでも `*/.claude/worktrees`(入れ子 worktree・作成中の worktree 自身)と .git / node_modules を prune する(flatmate#320: find -path のグロブが `/` にも一致して入れ子 worktree 残骸をリポ全体から再帰コピーし、自己増殖で WorktreeCreate hook がタイムアウトしていた事故の対策)。wt-clean: 対象を確定してからノンブロッキング自動処理する 2 パスフロー。`wt-clean <path|branch>` で特定 worktree だけにスコープ(複数可)、引数なし(または対象を定めないオプションのみ)なら全 worktree を確認なしで対象にする(対象選択の質問はしない)。Step 0でorigin/<main>を同期 → Pass 1 で各対象を i/N 進捗で診断(🟢🟡🔴)し 🟢→確認なしで削除/再利用・🟡(LLMのみ)→LLM退避検証→確認なしで削除を自動実行。🔴 と dirty は Pass 2 の判断バッチでまとめて マージ/スキップ/破棄 を対話。`AHEAD_COUNT>0`でも squash マージ済み(実ツリー差分空 / cherry / gh pr で検証)なら 🟡 にフォールバックし誤判定を防ぐ。実ツリー差分は**全 tracked ファイル対象**(パスフィルタ禁止 — かつて JS/TS 前提のフィルタを掛けていたため Markdown/シェル中心のリポで差分が常に空になり、PR が OPEN の未マージブランチまで「squash 済み」と誤判定した)。3 検証が割れたら**未マージ側に倒し**、OPEN な PR がある対象はツリー一致でもマージ済み扱いにしない。配下で claude 等の非シェルプロセスが稼働中、`~/.claude/projects/<slug>/` に 24 時間以内更新の .jsonl がある、または `git worktree lock` されている worktree は、git がマージ済み & クリーンでも 🟢 にせず Pass 2 の判断バッチへ回す(issue #77: 壁打ちセッションの worktree を 🟢 Safe と誤判定して削除しプロセスまで停止した事故の再発防止。検出は kill_devserver_under と同一の除外基準)ただし親セッションが消えて init に引き取られた居残りプロセス(プロセスツリー最上位が PPID=1)は、worktree 配下の更新も対応するセッションログの更新も 24 時間以上前であることを**併せて**満たす場合に限り稼働シグナルから外し、除外根拠(PID・コマンド名・親セッション消滅・痕跡なし)を Pass 1 / Pass 2 / 完了レポートに表示する(issue #98: 孤児プロセスを稼働シグナルと誤検出し、11 件中 Pass 1 の自動処理が 0 件になった事象。2 条件の AND は緩めず、判定材料が欠けたら稼働扱いに倒す fail-closed)。ロック解除(`git worktree unlock`)は Pass 2 でユーザーが削除を選んだ対象のみ。パス正規化は GNU 専用の `realpath -m`(macOS で必ず失敗しプロセス検出が silent no-op 化する)を廃し `abs_path` に統一。`git worktree remove` を呼ぶ全分岐(🟢/🟡/Pass 2)は削除前に対象パス配下の devサーバープロセスを `lsof +D` で検出し SIGTERM→SIGKILL で停止する(issue #39: 削除後も残留した next dev が再ビルドループでCPU/メモリを圧迫したインシデント対策)。マージは都度サニティチェック。`--keep` で再利用可能化、`--no-sync` で同期スキップ。dirty破棄・🔴破棄・マージは AskUserQuestion 回答到着後の別ターンで実行する絶対禁則を維持(データロス防止)。 `--unattended` で Pass 2 の AskUserQuestion を呼ばず残件(番号・パス・ブランチ名・分類・理由)を報告して終了する無人モードを持ち、cron からの定期実行に載せられる(Pass 1 の判定基準と絶対禁則は一切緩めず、禁則対象の分岐に入らないルートを足す形)。`--repo <path>` で cwd 以外のリポジトリを対象にでき(worktree のパスを渡してもメイン worktree に正規化、全 git 呼び出しは `git -C \"$MAIN_REPO\"` 経由)、未指定時は現行どおり cwd。dirty の内訳が lockfile(package-lock.json / yarn.lock / pnpm-lock.yaml / Cargo.lock / poetry.lock)のみなら 🟢 相当として自動処理し、根拠 `dirty=lockfileのみ` を削除直前に表示する(1 ファイルでも他が混ざれば従来どおり判断バッチ行き)。 配下プロセスのコマンド名は `ps -o comm=` の先頭 `-` を落としてから basename 相当で切り出す(macOS の ps は argv[0] を返すためログインシェルが `-/bin/zsh` になり、外部 `basename` がハイフンをオプション扱いして失敗 → comm が空文字に潰れ、シェル除外リストに一致せず削除対象 worktree に cd しているだけのターミナルのタブを SIGKILL していた。2026-08-27 実例。検出側・停止側の取り出しは完全に同一に保ち、実プロセスで除外が効くことを回帰テストで固定した — ただし `ps -o comm=` が argv[0] を返すのは BSD だけなので、実プロセスを立てる 1 件は macOS 実行時のみ走り CI(ubuntu)では skip される)。",
"author": {
"name": "Oratta"
},
"license": "MIT",
"keywords": [
"worktree",
"git",
"setup",
"cleanup",
"symlink"
],
"skills": [
"./skills/wt-setup",
"./skills/wt-clean"
]
}For maintainers
If you maintain this plugin, link to this source-backed listing from your README so users can review its manifest and indexed components.
[worktree on Agent Plugins Marketplace](https://pluginsmp.com/plugins/worktree)