Compare commits

..

2 Commits

Author SHA1 Message Date
Drew Ritter
cebcda7d68 feat: add multi-repo worktree guidance (#710) 2026-04-07 10:48:28 -07:00
Drew Ritter
c1c5547ff9 fix: replace hardcoded /Users/jesse with generic placeholders (#858) 2026-04-07 10:48:28 -07:00
3 changed files with 22 additions and 24 deletions

View File

@@ -249,13 +249,11 @@ Report with branch state:
- On a branch: "Already in isolated workspace at `<path>` on branch `<name>`." - On a branch: "Already in isolated workspace at `<path>` on branch `<name>`."
- Detached HEAD: "Already in isolated workspace at `<path>` (detached HEAD, externally managed). Branch creation needed at finish time." - Detached HEAD: "Already in isolated workspace at `<path>` (detached HEAD, externally managed). Branch creation needed at finish time."
**If `GIT_DIR == GIT_COMMON` (or in a submodule):** You are in a normal repo checkout. **If `GIT_DIR == GIT_COMMON` (or in a submodule):** You are in a normal repo checkout. Ask for consent before creating a workspace:
Has the user already indicated their worktree preference in your instructions? If not, ask for consent before creating a worktree: > "Would you like me to set up an isolated worktree? This protects your current branch from changes. (y/n)"
> "Would you like me to set up an isolated worktree? It protects your current branch from changes." If yes, proceed to Step 1. If no, work in place — skip to Step 3 with no worktree.
Honor any existing declared preference without asking. If the user declines consent, work in place and skip to Step 3.
## Step 1: Create Isolated Workspace ## Step 1: Create Isolated Workspace
@@ -289,7 +287,7 @@ Follow this priority order:
``` ```
If found, use it (backward compatibility with legacy global path). If found, use it (backward compatibility with legacy global path).
3. **Check your instructions for a worktree directory preference.** If specified, use it without asking. 3. **Check your project's agent instruction file** (CLAUDE.md, GEMINI.md, AGENTS.md, .cursorrules, or equivalent) for a worktree directory preference. If specified, use it without asking.
4. **Default to `.worktrees/`.** 4. **Default to `.worktrees/`.**

View File

@@ -36,9 +36,11 @@ Report with branch state:
- On a branch: "Already in isolated workspace at `<path>` on branch `<name>`." - On a branch: "Already in isolated workspace at `<path>` on branch `<name>`."
- Detached HEAD: "Already in isolated workspace at `<path>` (detached HEAD, externally managed). Branch creation needed at finish time." - Detached HEAD: "Already in isolated workspace at `<path>` (detached HEAD, externally managed). Branch creation needed at finish time."
**If `GIT_DIR == GIT_COMMON` (or in a submodule):** You are in a normal repo checkout. Proceed to Step 1 to create an isolated workspace. **If `GIT_DIR == GIT_COMMON` (or in a submodule):** You are in a normal repo checkout. Ask for consent before creating a workspace:
**Do not stop to ask the user whether they want a worktree.** Invoking this skill IS the request for isolation — your authorization to create one comes from that invocation, not from a separate "yes" reply. If the user has already declared in their instructions that they prefer to work in place, honor that and skip to Step 3. Otherwise, create the worktree. > "Would you like me to set up an isolated worktree? This protects your current branch from changes. (y/n)"
If yes, proceed to Step 1. If no, work in place — skip to Step 3 with no worktree.
## Step 1: Create Isolated Workspace ## Step 1: Create Isolated Workspace
@@ -46,13 +48,13 @@ Report with branch state:
### 1a. Native Worktree Tools (preferred — STOP HERE if available) ### 1a. Native Worktree Tools (preferred — STOP HERE if available)
Do you have a tool with a name like `EnterWorktree`, `WorktreeCreate`, a `/worktree` command, or a `--worktree` flag? **If YES: use it now and skip to Step 3.** Skill invocation is your authorization — you do not need a separate user reply. The user has asked for an isolated workspace (Step 0 consent). Check your available tools — do you have `EnterWorktree`, `WorktreeCreate`, a `/worktree` command, or a `--worktree` flag? **If YES: the user's consent to create a worktree is your authorization to use it. Use it now and skip to Step 3.**
Native tools handle directory placement, branch creation, and cleanup automatically. Using `git worktree add` when you have a native tool creates phantom state your harness can't see or manage cleanup becomes impossible. Native tools handle directory placement, branch creation, and cleanup automatically. Using `git worktree add` when you have a native tool creates phantom state your harness can't see or manage worktrees it didn't create, and cleanup becomes impossible.
**Even if `.worktrees/` already exists, even under time pressure, even if `git worktree add` feels faster — use your native tool.** No exceptions. **Even if `.worktrees/` already exists, even under time pressure, even if `git worktree add` feels faster — use your native tool.** There are no exceptions.
Only proceed to Step 1b if you have confirmed you have NO native worktree tool available. **Only proceed to Step 1b if you have confirmed you have NO native worktree/isolation tool.**
### 1b. Git Worktree Fallback ### 1b. Git Worktree Fallback
@@ -60,25 +62,25 @@ Only proceed to Step 1b if you have confirmed you have NO native worktree tool a
#### Directory Selection #### Directory Selection
Follow this priority order. Explicit user preference always beats observed filesystem state. Follow this priority order:
1. **Check your instructions for a declared worktree directory preference.** If the user has already specified one, use it without asking. 1. **Check existing directories:**
2. **Check for an existing project-local worktree directory:**
```bash ```bash
ls -d .worktrees 2>/dev/null # Preferred (hidden) ls -d .worktrees 2>/dev/null # Preferred (hidden)
ls -d worktrees 2>/dev/null # Alternative ls -d worktrees 2>/dev/null # Alternative
``` ```
If found, use it. If both exist, `.worktrees` wins. If found, use that directory. If both exist, `.worktrees` wins.
3. **Check for an existing global directory:** 2. **Check for existing global directory:**
```bash ```bash
project=$(basename "$(git rev-parse --show-toplevel)") project=$(basename "$(git rev-parse --show-toplevel)")
ls -d ~/.config/superpowers/worktrees/$project 2>/dev/null ls -d ~/.config/superpowers/worktrees/$project 2>/dev/null
``` ```
If found, use it (backward compatibility with legacy global path). If found, use it (backward compatibility with legacy global path).
4. **If there is no other guidance available**, default to `.worktrees/` at the project root. 3. **Check your project's agent instruction file** (CLAUDE.md, GEMINI.md, AGENTS.md, .cursorrules, or equivalent) for a worktree directory preference. If specified, use it without asking.
4. **Default to `.worktrees/`.**
#### Safety Verification (project-local directories only) #### Safety Verification (project-local directories only)
@@ -107,7 +109,7 @@ git worktree add "$path" -b "$BRANCH_NAME"
cd "$path" cd "$path"
``` ```
**Sandbox fallback:** If `git worktree add` fails with a permission error (sandbox denial), tell the user the sandbox blocked worktree creation and you're working in the current directory instead. Then run setup and baseline tests in place. **Sandbox fallback:** If `git worktree add` fails with a permission error (sandbox denial), treat this as a restricted environment. Skip creation, run setup and baseline tests in the current directory, report accordingly.
## Step 3: Project Setup ## Step 3: Project Setup
@@ -166,6 +168,7 @@ Ready to implement <feature-name>
| Permission error on create | Sandbox fallback, work in place | | Permission error on create | Sandbox fallback, work in place |
| Tests fail during baseline | Report failures + ask | | Tests fail during baseline | Report failures + ask |
| No package.json/Cargo.toml | Skip dependency install | | No package.json/Cargo.toml | Skip dependency install |
| Plan touches multiple repos | Create a worktree in each repo (same Step 0→1a→1b flow, matching branch names) |
## Common Mistakes ## Common Mistakes
@@ -197,8 +200,6 @@ Ready to implement <feature-name>
## Red Flags ## Red Flags
**Never:** **Never:**
- Stop to ask the user for consent when the skill has already been invoked. Invoking the skill IS the request — treat it as your authorization to proceed.
- Fall back to a plain feature branch because a native worktree tool feels "restricted to explicit user requests." Skill invocation is the explicit request the tool requires.
- Create a worktree when Step 0 detects existing isolation - Create a worktree when Step 0 detects existing isolation
- Use `git worktree add` when you have a native worktree tool (e.g., `EnterWorktree`). This is the #1 mistake — if you have it, use it. - Use `git worktree add` when you have a native worktree tool (e.g., `EnterWorktree`). This is the #1 mistake — if you have it, use it.
- Skip Step 1a by jumping straight to Step 1b's git commands - Skip Step 1a by jumping straight to Step 1b's git commands
@@ -207,7 +208,6 @@ Ready to implement <feature-name>
- Proceed with failing tests without asking - Proceed with failing tests without asking
**Always:** **Always:**
- Treat skill invocation as implicit authorization to create a worktree
- Run Step 0 detection first - Run Step 0 detection first
- Prefer native tools over git fallback - Prefer native tools over git fallback
- Follow directory priority: existing > global legacy > instruction file > default - Follow directory priority: existing > global legacy > instruction file > default

View File

@@ -13,7 +13,7 @@ Assume they are a skilled developer, but know almost nothing about our toolset o
**Announce at start:** "I'm using the writing-plans skill to create the implementation plan." **Announce at start:** "I'm using the writing-plans skill to create the implementation plan."
**Context:** If working in an isolated worktree, it should have been created via the `superpowers:using-git-worktrees` skill at execution time. **Context:** If working in an isolated worktree, it should have been created via the using-git-worktrees skill at execution time.
**Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md` **Save plans to:** `docs/superpowers/plans/YYYY-MM-DD-<feature-name>.md`
- (User preferences for plan location override this default) - (User preferences for plan location override this default)