From 4f4873f8c066044117df70cfba11dc967309b53e Mon Sep 17 00:00:00 2001 From: Kieran Klaassen Date: Sun, 8 Feb 2026 14:39:02 -0800 Subject: [PATCH] Update create-agent-skills to match 2026 official docs, add /triage-prs command - Rewrite SKILL.md to document that commands and skills are now merged - Add new frontmatter fields: disable-model-invocation, user-invocable, context, agent - Add invocation control table and dynamic context injection docs - Fix skill-structure.md: was incorrectly recommending XML tags over markdown headings - Update official-spec.md with complete 2026 specification - Add local /triage-prs command for PR triage workflow - Add PR triage plan document Co-Authored-By: Claude Opus 4.6 --- .claude/commands/triage-prs.md | 193 ++++++++ ...026-02-08-feat-pr-triage-and-merge-plan.md | 128 +++++ .../skills/create-agent-skills/SKILL.md | 378 +++++++-------- .../references/official-spec.md | 205 ++++---- .../references/skill-structure.md | 436 +++++------------- 5 files changed, 683 insertions(+), 657 deletions(-) create mode 100644 .claude/commands/triage-prs.md create mode 100644 docs/plans/2026-02-08-feat-pr-triage-and-merge-plan.md diff --git a/.claude/commands/triage-prs.md b/.claude/commands/triage-prs.md new file mode 100644 index 0000000..45e9717 --- /dev/null +++ b/.claude/commands/triage-prs.md @@ -0,0 +1,193 @@ +--- +name: triage-prs +description: Triage all open PRs with parallel agents, label, group, and review one-by-one +argument-hint: "[optional: repo owner/name or GitHub PRs URL]" +disable-model-invocation: true +allowed-tools: Bash(gh *), Bash(git log *) +--- + +# Triage Open Pull Requests + +Review, label, and act on all open PRs for a repository using parallel review agents. Produces a grouped triage report, applies labels, cross-references with issues, and walks through each PR for merge/comment decisions. + +## Step 0: Detect Repository + +Detect repo context: +- Current repo: !`gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || echo "no repo detected"` +- Current branch: !`git branch --show-current 2>/dev/null` + +If `$ARGUMENTS` contains a GitHub URL or `owner/repo`, use that instead. Confirm the repo with the user if ambiguous. + +## Step 1: Gather Context (Parallel) + +Run these in parallel: + +1. **List all open PRs:** + ```bash + gh pr list --repo OWNER/REPO --state open --limit 50 + ``` + +2. **List all open issues:** + ```bash + gh issue list --repo OWNER/REPO --state open --limit 50 + ``` + +3. **List existing labels:** + ```bash + gh label list --repo OWNER/REPO --limit 50 + ``` + +4. **Check recent merges** (to detect duplicate/superseded PRs): + ```bash + git log --oneline -20 main + ``` + +## Step 2: Batch PRs by Theme + +Group PRs into review batches of 4-6 based on apparent type: + +- **Bug fixes** - titles with `fix`, `bug`, error descriptions +- **Features** - titles with `feat`, `add`, new functionality +- **Documentation** - titles with `docs`, `readme`, terminology +- **Configuration/Setup** - titles with `config`, `setup`, `install` +- **Stale/Old** - PRs older than 30 days + +## Step 3: Parallel Review (Team of Agents) + +Spawn one review agent per batch using the Task tool. Each agent should: + +For each PR in their batch: +1. Run `gh pr view --repo OWNER/REPO --json title,body,files,additions,deletions,author,createdAt` +2. Run `gh pr diff --repo OWNER/REPO ` (pipe to `head -200` for large diffs) +3. Determine: + - **Description:** 1-2 sentence summary of the change + - **Label:** Which existing repo label fits best + - **Action:** merge / request changes / close / needs discussion + - **Related PRs:** Any PRs in this or other batches that touch the same files or feature + - **Quality notes:** Code quality, test coverage, staleness concerns + +Instruct each agent to: +- Flag PRs that touch the same files (potential merge conflicts) +- Flag PRs that duplicate recently merged work +- Flag PRs that are part of a group solving the same problem differently +- Report findings as a markdown table +- Send findings back via message when done + +## Step 4: Cross-Reference Issues + +After all agents report, match issues to PRs: + +- Check if any PR title/body mentions `Fixes #X` or `Closes #X` +- Check if any issue title matches a PR's topic +- Look for duplicate issues (same bug reported twice) + +Build a mapping table: +``` +| Issue | PR | Relationship | +|-------|-----|--------------| +| #158 | #159 | PR fixes issue | +``` + +## Step 5: Identify Themes + +Group all issues into themes (3-6 themes): +- Count issues per theme +- Note which themes have PRs addressing them and which don't +- Flag themes with competing/overlapping PRs + +## Step 6: Compile Triage Report + +Present a single report with: + +1. **Summary stats:** X open PRs, Y open issues, Z themes +2. **PR groups** with recommended actions: + - Group name and related PRs + - Per-PR: #, title, author, description, label, action +3. **Issue-to-PR mapping** +4. **Themes across issues** +5. **Suggested cleanup:** spam issues, duplicates, stale items + +## Step 7: Apply Labels + +After presenting the report, ask user: + +> "Apply these labels to all PRs on GitHub?" + +If yes, run `gh pr edit --repo OWNER/REPO --add-label "