Use when an issue's checklist is fully complete — verifies tests, creates a PR, and optionally merges. Triggers on: 'review issue N', 'PR for issue N', 'merge issue N'.
Announce at start: "I'm using the review skill to create a PR for issue #N."
Core principle: The PR's Closes #N handles issue closure automatically. No manual label changes needed.
Before doing any work, run these checks in order:
detect_repo to set repo context. If the tool is not available, stop with: "The gh plugin is required. Install it from the backalley marketplace."issue_pull with the .issues/ directory path to sync all issues locally..issues/issue-{N}.md) and check its labels.in-progress label is NOT present, stop with: "Issue #{N} doesn't have the in-progress label. [If needs-spec: Run brainstorm first. If has-spec: Run plan first.]"- [ ]), stop with: "Issue #{N} has unchecked items. Run execute to complete them first."package.json (scripts.test), a Makefile (), or other common test runners. If tests fail, stop with: "Tests are failing. Run execute to fix them before creating a PR."make testDo not proceed past the entry gate unless all six checks pass.
Verify checklist — already confirmed complete in the entry gate. All items are checked (- [x]).
Verify tests — already confirmed passing in the entry gate.
Create the PR via pr_create:
Closes #{number} followed by a summary section listing the checklist items as bullet pointsissue-{number}mainExample PR body:
Closes #42
## Summary
- Added foo handler to src/handlers/foo.ts
- Updated tests in src/handlers/foo.test.ts
- Updated README with new usage
Present the user with two options:
pr_merge, issue closes automatically via Closes #NWait for the user's explicit choice before proceeding.
If user chooses merge:
pr_merge with squash strategy.Parent: #N line. If found, N is the umbrella issue number.Parent: line, call issue_search with body_contains: "#ISSUE_NUMBER" and state: open to find issues whose body references this issue and contains a GitHub tasklist (- [ ] or - [x] items).- [ ] #ISSUE_NUMBER to - [x] #ISSUE_NUMBER in the umbrella's body. Call issue_push with the .issues/ directory to sync all issues. Tell the user: "Checked off #ISSUE_NUMBER in umbrella issue #N."git worktree remove ../worktree-issue-{number}git checkout in the main worktree to do this. Use git branch -D issue-{number} from the main worktree (this deletes without switching branches) or from another worktree.If user chooses keep open:
../worktree-issue-{number} is still available."When the user says "check for feedback", "there are review comments", or similar:
git log -1 --format=%cI in the worktree directory. (Use last commit, not pulled_at, because the feedback is on the code diff, not the issue body.)issue_comments_list with issue_number and since set to that timestamp.process:receiving-review:
process:verify — run the command, read the output, then claim the result.git push from the worktree.Problem: Creating a PR without running tests. Fix: Always run tests in the entry gate. Broken PRs waste review time.
Problem: Manually closing the issue.
Fix: Let Closes #N in the PR body handle it. Manual closure skips the PR audit trail.
Problem: Forgetting to clean up the worktree after merge. Fix: Remove the worktree and delete the branch after a successful merge.
Never:
Closes #N handle it)git checkout or git switch in the main worktree (multiple sessions share it — switching branches breaks other running sessions)Always:
Closes #N in the PR bodyRequires: gh plugin (detect_repo, issue_pull, issue_push, issue_search, issue_comments_list, pr_create, pr_merge), git worktrees
Uses skills:
process:receiving-review — How to handle review feedback with technical rigorprocess:verify — Evidence before completion claimsPrevious skill: execute (completed all checklist items)
Label transition: Issue closed automatically via Closes #N when PR merges