kata-review-pull-requests
Comprehensive PR Review
Run a comprehensive pull request review by spawning general-purpose subagents with inlined reference instructions. Each subagent gets a fresh context window with its specialized review instructions, the diff, and project context.
Review Aspects (optional): "$ARGUMENTS"
1. Determine Review Scope
- Check git status to identify changed files
- Parse arguments to see if user requested specific review aspects
- Default: Run all applicable reviews
2. Available Review Aspects
| Aspect | Reference File | Purpose |
|---|---|---|
| code | code-reviewer-instructions.md | General code review for project guidelines |
| tests | pr-test-analyzer-instructions.md | Test coverage quality and completeness |
| comments | comment-analyzer-instructions.md | Code comment accuracy and maintainability |
| errors | failure-finder-instructions.md | Silent failures and error handling |
| types | type-design-analyzer-instructions.md | Type design and invariants |
| simplify | code-simplifier-instructions.md | Code clarity and maintainability |
| all | (all applicable) | Run all reviews (default) |
3. Identify Changed Files
- Run
git diff --name-onlyto see modified files - Check if PR already exists:
gh pr view - Identify file types and what reviews apply
Error handling:
- If
git difffails (not a git repo): Report error clearly and stop - If
gh pr viewfails with "no PR found": Expected for pre-PR reviews, continue with git diff - If
gh pr viewfails with auth error: Note that GitHub CLI authentication is needed - If no changed files found: Report "No changes detected" and stop
4. Determine Applicable Reviews
Based on changes:
- Always applicable: code (general quality)
- If test files changed: tests
- If comments/docs added: comments
- If error handling changed: errors
- If types added/modified: types
- After passing review: simplify (polish and refine)
5. Read Reference Instructions
Read each applicable reference file into a variable for inlining into subagent prompts:
code_instructions = Read("./references/code-reviewer-instructions.md")
test_instructions = Read("./references/pr-test-analyzer-instructions.md")
comment_instructions = Read("./references/comment-analyzer-instructions.md")
errors_instructions = Read("./references/failure-finder-instructions.md")
types_instructions = Read("./references/type-design-analyzer-instructions.md")
simplify_instructions = Read("./references/code-simplifier-instructions.md")
Only read files for applicable review aspects. Also read:
git diffoutput intodiff_contentCLAUDE.md(if exists) intoproject_context
6. Resolve Model Profile
MODEL_PROFILE=$(node scripts/kata-lib.cjs read-config "model_profile" "balanced")
WORKTREE_ENABLED=$(node scripts/kata-lib.cjs read-config "worktree.enabled" "false")
Default to "balanced" if not set.
Model lookup table:
| Agent | quality | balanced | budget |
|---|---|---|---|
| code-reviewer | opus | sonnet | sonnet |
| test-analyzer | sonnet | sonnet | haiku |
| comment-analyzer | sonnet | sonnet | haiku |
| failure-hunter | sonnet | sonnet | haiku |
| type-analyzer | sonnet | sonnet | haiku |
| code-simplifier | sonnet | sonnet | haiku |
7. Launch Review Agents
Spawn general-purpose subagents via parallel Task calls. Each agent receives its reference instructions inlined as <agent-instructions>, the diff, and project context.
Task call pattern:
Task(
prompt="<agent-instructions>\n{instructions_content}\n</agent-instructions>\n\nReview the following changes:\n\n<diff>\n{diff_content}\n</diff>\n\n<project-context>\n{project_context}\n</project-context>",
subagent_type="general-purpose",
model="{resolved_model}",
description="PR review: {aspect}"
)
Example parallel launch (3 agents):
Task(prompt="<agent-instructions>\n{code_instructions}\n</agent-instructions>\n\nReview these changes:\n<diff>\n{diff_content}\n</diff>\n<project-context>\n{project_context}\n</project-context>", subagent_type="general-purpose", model="{code_model}", description="PR review: code")
Task(prompt="<agent-instructions>\n{test_instructions}\n</agent-instructions>\n\nReview these changes:\n<diff>\n{diff_content}\n</diff>\n<project-context>\n{project_context}\n</project-context>", subagent_type="general-purpose", model="{test_model}", description="PR review: tests")
Task(prompt="<agent-instructions>\n{errors_instructions}\n</agent-instructions>\n\nReview these changes:\n<diff>\n{diff_content}\n</diff>\n<project-context>\n{project_context}\n</project-context>", subagent_type="general-purpose", model="{errors_model}", description="PR review: errors")
All run in parallel. Task tool blocks until all complete.
Agent failure handling:
- If agent completes: Include results in aggregation
- If agent times out: Report "[aspect] review timed out - consider running independently"
- If agent fails: Report "[aspect] review failed: [error reason]"
- If one agent fails, STILL proceed with remaining agents
- Never silently skip a failed agent - always report its status
8. Aggregate Results
After agents complete, summarize:
- Critical Issues (must fix before merge)
- Important Issues (should fix)
- Suggestions (nice to have)
- Positive Observations (what's good)
Edge cases:
- If no issues found: "All Checks Passed" summary
- If agents conflict: Note the disagreement and let user decide
- If agent output malformed: Note "[aspect] output could not be parsed"
- Always include count of agents completed vs failed
9. Provide Action Plan
Organize findings:
# PR Review Summary
## Critical Issues (X found)
- [aspect]: Issue description [file:line]
## Important Issues (X found)
- [aspect]: Issue description [file:line]
## Suggestions (X found)
- [aspect]: Suggestion [file:line]
## Strengths
- What's well-done in this PR
## Recommended Action
1. Fix critical and important issues
2. Consider suggestions
3. Re-run review after fixes
10. Handle Review Findings
Route based on review results:
| Findings | Route |
|---|---|
| Critical issues found | Route A (must address) |
| Important issues, no critical | Route B (should address) |
| Suggestions only | Route C (optional) |
| No issues | Route D (clean) → step 11 |
Route A: Critical issues found
Use AskUserQuestion:
- header: "Critical Issues"
- question: "{N} critical issues found. How do you want to handle them?"
- options:
- "Fix all issues" — fix critical, important, and suggestions
- "Fix critical only" — fix critical, add rest to backlog
- "Add all to backlog" — create issues for everything, fix nothing now
- "Skip" — continue without addressing
Route B: Important issues, no critical
Use AskUserQuestion:
- header: "Review Findings"
- question: "{N} important issues found. How do you want to handle them?"
- options:
- "Fix all issues" — fix important and suggestions
- "Fix important only" — fix important, add suggestions to backlog
- "Add to backlog" — create issues, fix nothing now
- "Skip" — continue without addressing
Route C: Suggestions only
Use AskUserQuestion:
- header: "Suggestions"
- question: "{N} suggestions found. Address them?"
- options:
- "Fix suggestions" — apply suggested improvements
- "Add to backlog" — create issues for later
- "Skip" — continue without addressing
Handling "Fix" paths:
- Apply fixes to the identified files
- Stage and commit:
fix: address PR review findings - If PR exists, push to branch
Handling "Add to backlog":
- Create GitHub issues for each finding via
gh issue create - Store TODOS_CREATED count for output
After handling (or Route D): Proceed to step 11.
11. Offer Next Actions
Resolve phase context for next-up routing:
# Current phase from STATE.md
CURRENT_PHASE=$(grep -oP 'Current Phase:\s*\K\d+' .planning/STATE.md 2>/dev/null || echo "")
NEXT_PHASE=$((CURRENT_PHASE + 1))
# Check if more phases remain
TOTAL_PHASES=$(grep -c '^## Phase' .planning/ROADMAP.md 2>/dev/null || echo "0")
{If PR exists from step 3:}
Use AskUserQuestion:
- header: "Next Step"
- question: "Review complete. What next?"
- options:
- "Merge PR" — merge and clean up branch
- "Verify work" — conversational acceptance testing
- "Done" — stop here
{If no PR exists:}
Use AskUserQuestion:
- header: "Next Step"
- question: "Review complete. What next?"
- options:
- "Verify work" — conversational acceptance testing
- "Done" — stop here
If user chose "Merge PR":
gh pr merge "$PR_NUMBER" --merge
Then update local state:
if [ "$WORKTREE_ENABLED" = "true" ]; then
# Bare repo layout: update main/ worktree, reset workspace/ to workspace-base
git -C main pull
bash "scripts/manage-worktree.sh" cleanup-phase workspace "$PHASE_BRANCH"
else
git checkout main && git pull
fi
{If TODOS_CREATED: Backlog: {N} issues created from review findings}
Show: PR: #{pr_number} — merged ✓
Then show post-merge next up:
───────────────────────────────────────────────────────────────
▶ Next Up
{If NEXT_PHASE <= TOTAL_PHASES:}
Phase {Z+1}: {Name} — {Goal from ROADMAP.md}
/kata-discuss-phase {Z+1} — gather context and clarify approach
/clear first → fresh context window
───────────────────────────────────────────────────────────────
Also available:
/kata-plan-phase {Z+1}— skip discussion, plan directly/kata-execute-phase {Z+1}— skip to execution (if already planned)
{If last phase (NEXT_PHASE > TOTAL_PHASES):}
Audit milestone — verify requirements, cross-phase integration
/kata-audit-milestone
/clear first → fresh context window
───────────────────────────────────────────────────────────────
Also available:
/kata-complete-milestone— skip audit, archive directly
{If no phase context:}
Walk through deliverables — conversational acceptance testing
/kata-verify-work
/clear first → fresh context window
───────────────────────────────────────────────────────────────
If user chose "Verify work":
{If TODOS_CREATED: Backlog: {N} issues created from review findings}
───────────────────────────────────────────────────────────────
▶ Next Up
Walk through deliverables — conversational acceptance testing
/kata-verify-work {Z}
/clear first → fresh context window
───────────────────────────────────────────────────────────────
If user chose "Done": Stop.
{If TODOS_CREATED: Backlog: {N} issues created from review findings}
More from gannonh/kata-skills
kata-resume-work
Resume work from a previous session, restoring context after a break, continuing work after /clear, or picking up where you left off. Triggers include "resume work", "continue work", "pick up where I left off", "restore context", and "resume session".
23kata-set-profile
Switch model profile for kata agents (quality/balanced/budget). Triggers include "set profile", "set profile".
22kata-list-phase-assumptions
Surface Claude's assumptions about a phase approach before planning, checking what Claude thinks, or validating understanding before planning. Triggers include "list assumptions", "what are you thinking", "show assumptions", "phase assumptions", and "what's the plan".
20kata-track-progress
Check project progress, show context, and route to next action (execute or plan). Triggers include "progress".
20kata-debug
Systematically debug issues, investigating bugs, troubleshooting problems, or tracking down errors with persistent state across context resets. Triggers include "debug", "investigate bug", "troubleshoot", "find the problem", "why isn't this working", and "debug session".
20kata-map-codebase
Analyze an existing codebase with parallel mapper agents, creating codebase documentation, understanding brownfield projects, or mapping code structure. Triggers include "map codebase", "analyze codebase", "create project context", "document codebase", "understand code", and "codebase map".
20