skills/pr-review/SKILL.md
Review a pull request or analyze local changes before submitting. Auto-activates when user mentions reviewing a PR, asks for code review, wants to analyze their changes before submitting, or mentions "pr-review self". Invoke when user provides a PR number to review or says "review self", "review my changes", or "pr review". Supports focus areas: code, security, breaking, testing, size, performance.
npx skillsauth add kanopi/cms-cultivator pr-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review a pull request or analyze your local changes before submitting. The main session runs this skill directly — no orchestrator agent is involved.
Review someone else's PR:
Self-review your own changes before creating a PR:
Focus options: code, security, breaking, testing, size, performance (or all for a comprehensive review).
PR #123, pr-review 456) → review that PR.For PR review (Tier 2 with gh available):
Run in parallel:
gh pr view <number> --json title,body,baseRefName,headRefName,author,additions,deletions,changedFilesgh pr diff <number>gh pr checks <number> (if CI status matters)For self-review:
Determine the default branch (gh repo view --json defaultBranchRef --jq .defaultBranchRef.name) — usually main or 1.x. Then run in parallel:
git branch --show-currentgit log --oneline <default>..HEADgit diff --stat <default>...HEADgit diff <default>...HEADFor portable environments (no gh):
Ask the user to share the PR description, the diff, or the file list. Do as much analysis as the provided context allows; note what would have been checked with full access.
| Size | Lines changed | |------|---------------| | XS | < 10 | | S | 10–100 | | M | 100–400 | | L | 400–1,000 | | XL | > 1,000 — recommend splitting |
Complexity is a judgment call: low for isolated changes, high for cross-cutting refactors or unfamiliar areas.
Use Read, Grep, and Bash directly. Spawn no agents — the skill performs the analysis itself.
code)security)$_GET/$_POST, request params used directly in queries or output$wpdb->prepare, db_select placeholders)esc_html/esc_attr/esc_url/Html::escape/Xss::filtercurrent_user_can), missing nonce verification (wp_verify_nonce), missing Drupal access checksunserialize on user inputbreaking)composer.json/package.jsontesting)size)performance)Drupal:
config/sync/ changes match code changesdb_query/db_select with placeholders*.services.yml properly wiredWordPress:
$wpdb->prepare() on all dynamic queriescurrent_user_can) before admin actionssanitize_text_field, wp_kses)esc_html, esc_attr, esc_url)acf-json/block.json correct, attributes typed# 🤖 AI Code Review — PR #<number>
**Size:** <XS/S/M/L/XL> (<N> files, +<X>/-<Y> lines)
**Complexity:** <Low/Medium/High>
## Summary
<2–4 sentence overall assessment>
## Required Changes
### Critical Issues
- [ ] **<issue>** (`<file>:<line>`) — <problem and recommended fix>
### Security Concerns
- [ ] **<issue>** (`<file>:<line>`) — <risk and fix>
## Suggestions
### Performance
- <bullet>
### Code Quality
- <bullet>
### Testing Gaps
- <bullet>
## Test Plan
- <specific test case>
- <specific test case>
## Overall Recommendation
- [ ] Approve
- [ ] Request Changes
- [ ] Comment
Each finding should be specific (auth.php:42, not "authentication code"), include why it matters, and suggest a fix. Avoid generic checklist output.
If reviewing a PR (not self-review) and the user wants the review posted:
gh pr review <number> --<action> --body "$(cat <<'EOF'\n<review>\nEOF\n)".Self-reviews stay local — they're not posted anywhere.
When invoked via a subagent prompt (e.g. from the code-review routine), behave non-interactively:
The parent is responsible for posting to Teamwork/GitHub/Slack and for any notification rules.
When deciding whether to recommend "approve" vs. "request changes," apply the 5 Cs from the strategic-thinking skill:
Use these to provide a recommendation with reasoning, not just a verdict.
tools
Strategist-focused site audit for discovery and pre-discovery. Given a site URL and optional qualitative research data, navigates the site via CoWork, audits against all 21 UX Laws from lawsofux.com, reviews content hierarchy, synthesises qualitative data, runs Lighthouse, and produces two deliverables — a Project Knowledge Summary (Markdown for Claude Desktop Projects) and a polished, iterable HTML Artifact for client sharing. Use when a strategist, UX lead, or PM asks for a discovery audit, UX laws audit, content hierarchy review, pre-discovery site review, "audit this site for strategy", "strategist audit", "UX audit", or pastes a site URL with discovery context. Not for developer audits — use accessibility-audit, performance-audit, or live-site-audit for those.
development
Provide story point estimation guidance with hour calculations for software development tasks. Uses Fibonacci sequence (1, 2, 3, 5, 8, 13, 21, 34+) and converts story points to hours. Includes platform-specific adjustments and velocity calculations.
tools
Perform a full QA review of a Teamwork task by reading the task and all its comments for context, extracting the multi-dev URL, generating dynamic validation steps tailored to the task type, and using CoWork browser automation to execute those steps on the multi-dev environment. Produces a structured validation report with pass/fail per step, screenshots, internal notes, and a client-facing summary — all shown in chat. Use this skill whenever the user asks to QA, test, validate, or review a Teamwork task or multi-dev environment — even if they just say "can you QA this?" or paste a Teamwork link. Also triggers for phrases like "run QA on", "check the multi-dev", "validate this task", "test the dev link", or "review the ticket". Works across Drupal/CMS updates, WordPress/plugin updates, bug fixes, new feature development, and general web development tasks.
tools
Generate a client-facing project heartbeat / status update message for a Kanopi project, ready to be posted as a Teamwork message. Use this skill whenever the user asks to write, draft, generate, or send a project update, heartbeat, status update, or progress report to a client. Also triggers when the user says things like "time for a project update", "draft the heartbeat", "write up the update for [project]", or "it's been two weeks, let's send an update". Always use this skill — even if the user doesn't say "heartbeat" — whenever the intent is to summarise recent project activity for a client audience.