ce-worktree
everyinc/compound-engineering-plugin
隔離されたgit worktreesを設定する。隔離された作業を開始する場合、またはce-worktree/ce-code-reviewがworktreeオプションを提供する際に使用する。まず既存の隔離を検出する。
...すべて拡張しますce-worktree について
Worktree Isolation は、ユーザーのメインチェックアウトを混乱させることなく作業を進められるよう、分離された git worktree のセットアップを処理します。ほとんどのコーディングハネスはセッション開始時にすでに worktree を作成するため、このスキルの主な役割は、冗長なものを生成する前に既存の分離を検出することです。これは厳格な操作順序に従います:既存の分離を検出し、ネイティブな worktree ツールを優先し、どちらも適用できない場合にのみプレーンな git にフォールバックします。
検出は、解決された絶対 git ディレクトリと解決された共通 git ディレクトリを比較することで行われます。git は現在のディレクトリに応じて絶対パス形式と相対パス形式を混在させるため、このスキルは生の文字列比較(これでは誤って「すでに分離されている」という結果になる可能性があります)を行うのではなく、まず各パスを絶対パスに解決してから比較します。2つのパスが異なる場合、スーパープロジェクトのワーキングツリーチェックを使用して、リンクされた worktree とサブモジュールを区別し、すでに分離された worktree 内部にある場合はその場で動作します。ネイティブな worktree 原語が存在する場合(例えば EnterWorktree ツール、/worktree コマンド、または --worktree フラグなど)、それを使用して処理を終了します。なぜなら、ハネスが見えたりクリーンアップしたりできない「幻影の状態」を作成する behind-the-back git worktree add を避けるためです。
git フォールバックはリポジトリのルートから実行され、作業の説明から派生した意味のあるブランチ名を選択し、.worktrees/ が gitignore されていることを確認します(ディレクトリのみのルールが尊重されるよう、末尾にスラッシュを付けてチェックします)。ベースブランチのベストエフォートな非致命的フェッチを実行し、.worktrees/
FAQ
なぜスキルは worktree を作成する前に既存の分離をチェックするのか?
ほとんどのコーディングハネスは、セッション開始時にデフォルトで worktree を作成するため、一般的なケースでは分離はすでに存在しています。既存の worktree の内部から別の worktree を作成すると、間違ったツリーに移動し、現在の worktree を作成したハネスからは見えなくなります。
検出中に誤って「すでに分離されている」という結果を避けるにはどうするか?
git ディレクトリと共通 git ディレクトリの両方をまず絶対パスに解決し、それらを比較します。生の文字列比較を行うのではなく、git は現在のディレクトリに応じて絶対パス形式と相対パス形式を混在して返すため、これを行わないと誤検知(false positive)が生じます。
プレーンな git ではなくネイティブな worktree ツールを使用すべき時はいつか?
ハネスが EnterWorktree/WorktreeCreate ツール、/worktree コマンド、または --worktree フラグなどのネイティブな原語を提供する場合は、常にそれを使用し、処理を終了します。ネイティブツールは worktree の配置、追跡、クリーンアップを行うため、ハネスがそれを管理できます。一方、behind-the-back git worktree add は、ハネスが見ることのできない「幻影の状態」を作成します。
git worktree add が権限エラーまたはサンドボックスエラーで失敗した場合、どうなるか?
この失敗は、現在のチェックアウトに触れる前にブロックするユーザーの決定を必要とします。スキルはこれを報告し、プラットフォームの質問ツール(例えば Claude Code の AskUserQuestion など)を介して、現在のチェックアウトで作業するか、問題解決のために処理を停止するかのオプションを提供してユーザーに問い合わせ、明示的な確認がある場合にのみメインのチェックアウトで続行します。
スキルは worktree の内容がコミットされないようにどのように維持するか?
何かを作成する前に、git check-ignore を末尾にスラッシュを付けて実行し、.worktrees/ が gitignore されていることを確認します。これにより、ディレクトリが存在する以前から既存のディレクトリのみのルールが尊重され、必要に応じて .gitignore に .worktrees/ 行を追加します。
Ensure the current work happens in an isolated workspace, without disturbing the user's main checkout. Most coding harnesses now create a worktree by default at session start, so the common case is that isolation already exists.
Done when: the caller is working in an isolated tree — existing or newly created — and its path and branch have been reported, or a blocker has been reported instead.
Order of operations: detect existing isolation -> prefer a native worktree tool -> fall back to plain git. Never create a worktree the harness cannot see.
Two modes, set by the caller's need:
- New work (default). No ref named — create a fresh branch from a base (trunk). This is what
ce-workandce-code-reviewuse when the user picks the worktree option. - Isolate an existing ref. The caller names a PR head, branch, or commit — attach the worktree to that ref instead of creating a new branch. A branch can be checked out in only one worktree at a time. If the named ref is already checked out anywhere (most commonly as the primary checkout's current branch), do not create a second worktree — report that it is already checked out at
<path>and let the caller act (work there in place; or, only if a clean separate tree is essential, create a detached worktree at the same commit).
Step 0: Detect existing isolation
Compare the resolved absolute git dir against the resolved absolute common git dir. Git mixes absolute and relative forms depending on the current directory (from a subdirectory of a normal checkout, --git-dir comes back absolute while --git-common-dir may be relative), so a raw string compare yields a false "already isolated":
git rev-parse --absolute-git-dir # absolute git dir for this worktree(cd "$(git rev-parse --git-common-dir)" && pwd -P) # absolute shared (common) git dir
Equal -> normal checkout; continue to Step 1.
Different -> a linked worktree or a submodule. Distinguish with git rev-parse --show-superproject-working-tree:
- Non-empty -> submodule; treat it as a normal checkout and continue to Step 1.
- Empty -> already isolated. Report the worktree path (
git rev-parse --show-toplevel) and current branch, then work in place — a worktree-from-worktree lands in the wrong tree and is invisible to the harness that made the current one. In isolate-an-existing-ref mode, check that ref out here (unless it is already current) rather than nesting a worktree.
Step 1: Prefer the harness's native worktree tool
If the harness provides a native worktree primitive — for example an EnterWorktree / WorktreeCreate tool, a /worktree command, or a --worktree flag — use it and stop. Native tools place, track, and clean up the worktree so the harness can manage it. A behind-the-back git worktree add creates phantom state the harness cannot see, navigate to, or clean up.
Step 2: Git fallback
Only when there is no native tool and Step 0 found no existing isolation.
- Run from the repo root:
cd "$(git rev-parse --show-toplevel)". The paths below are repo-root-relative, but the skill runs from the user's current directory — without this,.worktrees/<branch>and the.gitignoreedit land in a subdirectory (e.g.src/.worktrees/...). - Choose a meaningful branch name from the work description (e.g.
feat/login,fix/email-validation) — never an opaque auto-generated one. Base: origin's default branch, elsemain. - Ensure
.worktrees/is gitignored before creating anything:git check-ignore -q .worktrees/— with the trailing slash, so an existing directory-only.worktrees/rule is honored even before the directory exists (without the slash the probe misses it and dirties a correctly-configured repo). Not ignored -> add a.worktrees/line to.gitignore. - Refresh the base with
git fetch origin <from-branch>. This is non-fatal — nooriginremote, a differently-named remote, or a local-only branch is not an abort; continue with the local ref. - Create the worktree, per mode:
- New work:
git worktree add -b <branch-name> .worktrees/<branch-name> origin/<from-branch>(use the local<from-branch>ref iforigin/<from-branch>does not exist). - Existing branch or tag:
git worktree add .worktrees/<slug> <target-ref>. - PR: check it out on a local branch —
git fetch origin pull/<n>/head:pr-<n>thengit worktree add .worktrees/pr-<n> pr-<n>. Never a detachedFETCH_HEAD: that orphans the fix loop's commits instead of updating the PR. (For push-tracking back to the PR, create it detached —git worktree add --detach .worktrees/pr-<n>— thencdin and rungh pr checkout <n>, which is fork-safe.) - If git reports the ref is already checked out elsewhere, apply the one-branch-one-worktree rule above — do not force a second worktree.
- New work:
cdinto it, then report the path and branch.
If git worktree add fails with a sandbox or permission error, the requested isolation does not exist. Do not proceed in the current checkout — the user chose isolation specifically to avoid it. Report the failure and ask, offering options such as "work in the current checkout" vs "stop and resolve the permission issue", using the platform's blocking question tool: AskUserQuestion in Claude Code (call ToolSearch with select:AskUserQuestion first if its schema isn't loaded), request_user_input in Codex, ask_question in Antigravity CLI (agy), ask_user in Pi (via the pi-ask-user extension). Only when no blocking tool exists in the harness or the call errors, present the numbered options in chat and wait for the reply. Never skip the confirmation, and do not retry alternative paths automatically.
すべてのファイル
0件のファイルce-worktreeをインストール
スキルファイルをダウンロードして .claude/skills/ ディレクトリに展開してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/EveryInc/compound-engineering-plugin/blob/main/skills/ce-worktree/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
コピー





家
