diff --git a/agents/code-reviewer/AGENT.md b/agents/code-reviewer/AGENT.md index f14c462..f155d59 100644 --- a/agents/code-reviewer/AGENT.md +++ b/agents/code-reviewer/AGENT.md @@ -14,9 +14,15 @@ You are a code review specialist that provides immediate, structured feedback on ## When Invoked -You will receive a PR number to review. Follow this process: +You will receive a PR number to review. You may also receive: +- `WORKTREE_PATH`: (Optional) If provided, work directly in this directory instead of checking out locally +- `REPO_PATH`: Path to the main repository (use if `WORKTREE_PATH` not provided) -1. Fetch PR diff: checkout with `tea pulls checkout `, then `git diff main...HEAD` +Follow this process: + +1. Fetch PR diff: + - If `WORKTREE_PATH` provided: `cd ` and `git diff origin/main...HEAD` + - If `WORKTREE_PATH` not provided: `tea pulls checkout ` then `git diff main...HEAD` 2. Detect and run project linter (see Linter Detection below) 3. Analyze the diff for issues in these categories: - **Code Quality**: Readability, maintainability, complexity diff --git a/agents/issue-worker/agent.md b/agents/issue-worker/agent.md index fa05623..ed1a559 100644 --- a/agents/issue-worker/agent.md +++ b/agents/issue-worker/agent.md @@ -20,11 +20,19 @@ You will receive: - `ISSUE_NUMBER`: The issue number to work on - `REPO_PATH`: Absolute path to the main repository - `REPO_NAME`: Name of the repository (for worktree naming) +- `WORKTREE_PATH`: (Optional) Absolute path to pre-created worktree. If provided, agent works directly in this directory. If not provided, agent creates its own worktree as a sibling directory. ## Process ### 1. Setup Worktree +If `WORKTREE_PATH` was provided: +```bash +# Use the pre-created worktree +cd +``` + +If `WORKTREE_PATH` was NOT provided (backward compatibility): ```bash # Fetch latest from origin cd @@ -93,8 +101,15 @@ Capture the PR number from the output (e.g., "Pull Request #42 created"). ### 6. Cleanup Worktree -Always clean up, even if earlier steps failed: +If `WORKTREE_PATH` was provided: +```bash +# Orchestrator will handle cleanup - no action needed +# Just ensure git is clean +cd +git status +``` +If `WORKTREE_PATH` was NOT provided (backward compatibility): ```bash cd git worktree remove ../-issue- --force diff --git a/agents/pr-fixer/agent.md b/agents/pr-fixer/agent.md index 84d824b..f10eed3 100644 --- a/agents/pr-fixer/agent.md +++ b/agents/pr-fixer/agent.md @@ -20,11 +20,22 @@ You will receive: - `PR_NUMBER`: The PR number to fix - `REPO_PATH`: Absolute path to the main repository - `REPO_NAME`: Name of the repository (for worktree naming) +- `WORKTREE_PATH`: (Optional) Absolute path to pre-created worktree. If provided, agent works directly in this directory. If not provided, agent creates its own worktree as a sibling directory. ## Process -### 1. Get PR Details +### 1. Get PR Details and Setup Worktree +If `WORKTREE_PATH` was provided: +```bash +# Use the pre-created worktree +cd + +# Get PR info and review comments +tea pulls --comments +``` + +If `WORKTREE_PATH` was NOT provided (backward compatibility): ```bash cd git fetch origin @@ -34,15 +45,7 @@ tea pulls # Get review comments tea pulls --comments -``` -Extract: -- The PR branch name (e.g., `issue-42-add-feature`) -- All review comments and requested changes - -### 2. Setup Worktree - -```bash # Create worktree from the PR branch git worktree add ../-pr- origin/ @@ -53,6 +56,10 @@ cd ../-pr- git checkout ``` +Extract: +- The PR branch name (e.g., `issue-42-add-feature`) +- All review comments and requested changes + ### 3. Analyze Review Feedback Read all review comments and identify: @@ -105,8 +112,15 @@ Based on review feedback: ### 7. Cleanup Worktree -Always clean up, even if earlier steps failed: +If `WORKTREE_PATH` was provided: +```bash +# Orchestrator will handle cleanup - no action needed +# Just ensure git is clean +cd +git status +``` +If `WORKTREE_PATH` was NOT provided (backward compatibility): ```bash cd git worktree remove ../-pr- --force diff --git a/commands/spawn-issues.md b/commands/spawn-issues.md index fde6343..4c2a150 100644 --- a/commands/spawn-issues.md +++ b/commands/spawn-issues.md @@ -63,13 +63,34 @@ Usage: /spawn-issues [...] Example: /spawn-issues 42 43 44 ``` -### Step 2: Get Repository Info +### Step 2: Get Repository Info and Setup Worktrees ```bash REPO_PATH=$(pwd) -REPO_NAME=$(basename $REPO_PATH) +REPO_NAME=$(basename $REPO_NAME) + +# Create parent worktrees directory +mkdir -p "${REPO_PATH}/../worktrees" +WORKTREES_DIR="${REPO_PATH}/../worktrees" ``` +For each issue, create the worktree upfront: +```bash +# Fetch latest from origin +cd "${REPO_PATH}" +git fetch origin + +# Get issue details for branch naming +ISSUE_TITLE=$(tea issues | grep "TITLE" | head -1) +BRANCH_NAME="issue--" + +# Create worktree for this issue +git worktree add "${WORKTREES_DIR}/${REPO_NAME}-issue-" \ + -b "${BRANCH_NAME}" origin/main +``` + +Track the worktree path for each issue. + ### Step 3: Spawn All Issue Workers For each issue number, spawn a background issue-worker agent and track its task_id: @@ -106,12 +127,11 @@ Context: - Repository path: - Repository name: - Issue number: +- Worktree path: Process: 1. Setup worktree: - cd && git fetch origin - git worktree add ../-issue- -b issue-- origin/main - cd ../-issue- + cd 2. Get issue: tea issues --comments @@ -124,7 +144,7 @@ Process: 6. Create PR: tea pulls create --title "[Issue #] " --description "Closes #<NUMBER>\n\n..." Capture the PR number. -7. Cleanup: cd <REPO_PATH> && git worktree remove ../<REPO_NAME>-issue-<NUMBER> --force +7. Cleanup: No cleanup needed - orchestrator handles worktree removal 8. Output EXACTLY this format (orchestrator parses it): ISSUE_WORKER_RESULT @@ -182,8 +202,17 @@ implementing → (worker done) → reviewing → (approved) → DONE ### Step 5: Spawn Reviewers and Fixers -When spawning reviewers, pass the PR number AND branch name from the issue worker result. -Each reviewer/fixer uses its own worktree for isolation - this prevents parallel agents from interfering with each other. +When spawning reviewers/fixers, create worktrees for them and pass the path. + +For review, create a review worktree from the PR branch: +```bash +cd "${REPO_PATH}" +git fetch origin +git worktree add "${WORKTREES_DIR}/${REPO_NAME}-review-<PR_NUMBER>" \ + origin/<BRANCH_NAME> +``` + +Pass this worktree path to the reviewer/fixer agents. **Code Reviewer:** ``` @@ -199,15 +228,12 @@ You are a code-reviewer agent. Review PR #<PR_NUMBER> autonomously. Context: - Repository path: <REPO_PATH> -- Repository name: <REPO_NAME> - PR number: <PR_NUMBER> -- PR branch: <BRANCH_NAME> +- Worktree path: <WORKTREE_PATH> Process: -1. Setup worktree for isolated review: - cd <REPO_PATH> && git fetch origin - git worktree add ../<REPO_NAME>-review-<PR_NUMBER> origin/<BRANCH_NAME> - cd ../<REPO_NAME>-review-<PR_NUMBER> +1. Move to worktree: + cd <WORKTREE_PATH> 2. Get PR details: tea pulls <PR_NUMBER> --comments @@ -221,7 +247,7 @@ Process: 5. Post review comment: tea comment <PR_NUMBER> "<review summary>" -6. Cleanup: cd <REPO_PATH> && git worktree remove ../<REPO_NAME>-review-<PR_NUMBER> --force +6. Cleanup: No cleanup needed - orchestrator handles worktree removal 7. Output EXACTLY this format: REVIEW_RESULT @@ -267,17 +293,14 @@ You are a pr-fixer agent. Address review feedback on PR #<NUMBER>. Context: - Repository path: <REPO_PATH> -- Repository name: <REPO_NAME> - PR number: <NUMBER> +- Worktree path: <WORKTREE_PATH> Process: -1. Get feedback: tea pulls <NUMBER> --comments +1. Move to worktree: + cd <WORKTREE_PATH> -2. Setup worktree from PR branch: - cd <REPO_PATH> && git fetch origin - git worktree add ../<REPO_NAME>-pr-<NUMBER> origin/<branch-name> - cd ../<REPO_NAME>-pr-<NUMBER> - git checkout <branch-name> +2. Get feedback: tea pulls <NUMBER> --comments 3. Address each piece of feedback @@ -285,7 +308,7 @@ Process: git add -A && git commit -m "Address review feedback\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>" git push -5. Cleanup: cd <REPO_PATH> && git worktree remove ../<REPO_NAME>-pr-<NUMBER> --force +5. Cleanup: No cleanup needed - orchestrator handles worktree removal 6. Output EXACTLY: PR_FIXER_RESULT @@ -296,9 +319,29 @@ Process: Work autonomously. If feedback is unclear, make reasonable judgment calls. ``` +## Worktree Cleanup + +After all issues reach terminal state, clean up all worktrees: + +```bash +# Remove all worktrees created for this run +for worktree in "${WORKTREES_DIR}"/*; do + if [ -d "$worktree" ]; then + cd "${REPO_PATH}" + git worktree remove "$worktree" --force + fi +done + +# Remove worktrees directory if empty +rmdir "${WORKTREES_DIR}" 2>/dev/null || true +``` + +**Important:** Always clean up worktrees, even if the orchestration failed partway through. + ## Error Handling - If an issue-worker fails, continue with others - If a review fails, mark as "review-failed" and continue - If pr-fixer fails after 3 iterations, mark as "needs-manual-review" - Always report final status even if some items failed +- Always clean up all worktrees before exiting