ce-worktree
everyinc/compound-engineering-plugin
Настройте изолированные git worktrees. Используйте при начале изолированной работы или когда ce-work/ce-code-review предлагает вариант worktree; сначала обнаружьте существующую изоляцию.
...Расширить всеО ce-worktree
Изоляция рабочих деревьев (Worktree Isolation) отвечает за настройку изолированных git-рабочих деревьев, чтобы работа могла продолжаться без вмешательства в основной каталог пользователя. Поскольку большинство инструментов разработки уже создают рабочее дерево при начале сессии, основная задача этого навыка — обнаружение существующей изоляции перед созданием чего-либо избыточного. Он следует строгому порядку действий: обнаружение существующей изоляции, предпочтение нативного инструмента для рабочих деревьев и использование обычного git только в том случае, если ни один из предыдущих вариантов не применим.
Обнаружение работает путем сравнения разрешенного абсолютного пути к каталогу git с разрешенным абсолютным путем к общему каталогу git. Поскольку git использует как абсолютные, так и относительные формы путей в зависимости от текущего каталога, навык сначала приводит каждый путь к абсолютному виду, а не выполняет простое строковое сравнение, которое в противном случае дало бы ложный результат «уже изолировано». Если эти два пути различаются, он отличает связанное рабочее дерево от подмодуля с помощью проверки рабочего дерева суперпроекта и работает в текущем каталоге, если уже находится внутри изолированного рабочего дерева. Если существует нативный примитив для рабочих деревьев (например, инструмент EnterWorktree, команда /worktree или флаг --worktree), он использует его и завершает работу, поскольку создание рабочего дерева через git «за кулисами» создает скрытое состояние, которое инструмент разработки не может увидеть или очистить.
Резервный вариант с git выполняется из корня репозитория, выбирает осмысленное имя ветки, полученное из описания задачи, гарантирует, что каталог .worktrees/ добавлен в gitignore (проверяя с завершающим слэшем, чтобы соблюдались правила только для каталогов), выполняет максимально возможную неблокирующую выборку базовой ветки, создает рабочее дерево в .worktrees/<имя-ветки> и переключается на него. Если создание завершается ошибкой из-за песочницы или прав доступа, навык рассматривает это как блокирующее решение и запрашивает пользователя через инструмент вопросов платформы, а не работает молча в основном каталоге. Он также документирует другие операции с рабочими деревьями (список, удаление, переключение) и интегрируется с потоками ce-work и ce-code-review, которые предлагают его в качестве опции рабочего дерева.</имя-ветки>
Часто задаваемые вопросы
Почему навык проверяет наличие существующей изоляции перед созданием рабочего дерева?
Большинство инструментов разработки по умолчанию создают рабочее дерево при начале сессии, поэтому в большинстве случаев изоляция уже существует. Создание другого рабочего дерева изнутри существующего приводит к попаданию в неправильное дерево и остается невидимым для инструмента разработки, который создал текущее.
Как избегается ложный результат «уже изолировано» при обнаружении?
Сначала оба пути — к каталогу git и к общему каталогу git — приводятся к абсолютным путям, и только затем они сравниваются, вместо простого строкового сравнения. Git возвращает смешанные абсолютные и относительные формы в зависимости от текущего каталога, что в противном случае привело бы к ложноположительному результату.
Когда следует использовать нативный инструмент для рабочих деревьев вместо обычного git?
Всегда, когда инструмент разработки предоставляет нативный примитив, такой как инструмент EnterWorktree/WorktreeCreate, команда /worktree или флаг --worktree, навык использует его и завершает работу. Нативные инструменты размещают, отслеживают и очищают рабочее дерево, чтобы инструмент разработки мог им управлять; создание рабочего дерева через git «за кулисами» создает скрытое состояние, которое инструмент разработки не может увидеть.
Что происходит, если команда git worktree add завершается ошибкой прав доступа или песочницы?
Ошибка требует блокирующего решения пользователя перед изменением текущего каталога. Навык сообщает об этом и запрашивает пользователя через инструмент вопросов платформы (например, AskUserQuestion в Claude Code), предлагая такие варианты, как работа в текущем каталоге или остановка для решения проблемы, и продолжает работу в основном каталоге только при явном подтверждении.
Как навык предотвращает коммитирование содержимого рабочего дерева?
Перед созданием чего-либо он проверяет, что каталог .worktrees/ добавлен в gitignore, запуская git check-ignore с завершающим слэшем, поэтому существующее правило только для каталогов соблюдается даже до создания самого каталога, и при необходимости добавляет строку .worktrees/ в .gitignore.
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
Копировать





Дом
