Создаёт изолированные git worktrees с систематическими проверками безопасности и автонастройкой проекта. Умная приоритизация директорий по CLAUDE.md.
npx -y skills add obra/superpowers --skill using-git-worktrees --agent claude-codeОбеспечьте, чтобы работа шла в изолированном рабочем пространстве. Предпочитайте нативные инструменты worktree вашей платформы. Откатывайтесь на ручные git worktree только когда нативного инструмента нет.
Главный принцип: сначала обнаружьте существующую изоляцию. Затем используйте нативные инструменты. Затем откат на git. Никогда не боритесь с обвязкой (harness).
Объявите в начале: «Я использую скилл using-git-worktrees, чтобы настроить изолированное рабочее пространство.»
Прежде чем что-либо создавать, проверьте, не находитесь ли вы уже в изолированном рабочем пространстве.
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
Защита от сабмодулей: GIT_DIR != GIT_COMMON верно и внутри git-сабмодулей. Прежде чем заключать «уже в worktree», убедитесь, что вы не в сабмодуле:
# Если вернулся путь — вы в сабмодуле, а не в worktree — считайте обычным репозиторием
git rev-parse --show-superproject-working-tree 2>/dev/null
Если GIT_DIR != GIT_COMMON (и это не сабмодуль): вы уже в связанном worktree. Переходите к Шагу 2 (настройка проекта). НЕ создавайте ещё один worktree.
Отчитайтесь о состоянии ветки:
<path> на ветке <name>.»<path> (detached HEAD, управляется извне). Создание ветки понадобится на этапе завершения.»Если GIT_DIR == GIT_COMMON (или вы в сабмодуле): вы в обычной выписке репозитория.
Указал ли пользователь предпочтение по worktree в инструкциях? Если нет, спросите согласие перед созданием worktree:
«Настроить изолированный worktree? Он защитит вашу текущую ветку от изменений.»
Уважайте любое уже заявленное предпочтение без вопросов. Если пользователь отказывается — работайте на месте и переходите к Шагу 2.
У вас есть два механизма. Пробуйте в этом порядке.
Пользователь запросил изолированное пространство (согласие из Шага 0). Есть ли у вас уже способ создать worktree? Это может быть инструмент с именем вроде EnterWorktree, WorktreeCreate, команда /worktree или флаг --worktree. Если есть — используйте его и переходите к Шагу 2.
Нативные инструменты сами обрабатывают размещение каталога, создание ветки и очистку. Использование git worktree add при наличии нативного инструмента создаёт «фантомное» состояние, которое ваша обвязка не видит и не может контролировать.
Переходите к Шагу 1b только если нативного инструмента worktree нет.
Используйте, только если Шаг 1a неприменим — нативного инструмента нет. Создайте worktree вручную через git.
Следуйте этому порядку приоритета. Явное предпочтение пользователя всегда побеждает наблюдаемое состояние файловой системы.
ls -d .worktrees 2>/dev/null # Предпочтительно (скрытый)
ls -d worktrees 2>/dev/null # Альтернатива
Если найден — используйте. Если есть оба — побеждает .worktrees..worktrees/ в корне проекта.ОБЯЗАТЕЛЬНО убедитесь, что каталог игнорируется, перед созданием worktree:
git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees 2>/dev/null
Если НЕ игнорируется: добавьте в .gitignore, закоммитьте изменение, затем продолжайте.
Почему критично: предотвращает случайный коммит содержимого worktree в репозиторий.
# Определите путь по выбранному расположению
path="$LOCATION/$BRANCH_NAME"
git worktree add "$path" -b "$BRANCH_NAME"
cd "$path"
Откат для песочницы: если git worktree add падает с ошибкой прав (отказ песочницы), сообщите пользователю, что песочница заблокировала создание worktree и вы работаете в текущем каталоге. Затем запустите настройку и базовые тесты на месте.
Автоопределение и запуск подходящей настройки:
# Node.js
if [ -f package.json ]; then npm install; fi
# Rust
if [ -f Cargo.toml ]; then cargo build; fi
# Python
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
if [ -f pyproject.toml ]; then poetry install; fi
# Go
if [ -f go.mod ]; then go mod download; fi
Запустите тесты, чтобы убедиться, что пространство стартует чистым:
# Используйте команду, подходящую проекту
npm test / cargo test / pytest / go test ./...
Если тесты падают: сообщите о провалах, спросите — продолжать или разбираться. Если проходят: доложите о готовности.
Worktree ready at <full-path>
Tests passing (<N> tests, 0 failures)
Ready to implement <feature-name>
| Ситуация | Действие |
|---|---|
| Уже в связанном worktree | Пропустить создание (Шаг 0) |
| В сабмодуле | Считать обычным репозиторием (защита Шага 0) |
| Доступен нативный инструмент worktree | Использовать его (Шаг 1a) |
| Нативного нет | Запасной git worktree (Шаг 1b) |
.worktrees/ существует | Использовать (проверить, что игнорируется) |
worktrees/ существует | Использовать (проверить, что игнорируется) |
| Существуют оба | Использовать .worktrees/ |
| Нет ни одного | Проверить файл инструкций, затем по умолчанию .worktrees/ |
| Каталог не игнорируется | Добавить в .gitignore + закоммитить |
| Ошибка прав при создании | Откат песочницы, работать на месте |
| Тесты падают на базовой точке | Сообщить о провалах + спросить |
| Нет package.json/Cargo.toml | Пропустить установку зависимостей |
git worktree add, когда платформа уже даёт изоляциюgit check-ignore перед созданием проектного worktreeНикогда:
git worktree add при наличии нативного инструмента (напр. EnterWorktree). Это ошибка №1 — если он есть, используйте его.Всегда: