Triages PR feedback by acting on important issues and dismissing trivial comments. Focuses on fixes over conversation.

Install

mkdir -p .claude/skills/pr-triage && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/9065" && unzip -o skill.zip -d .claude/skills/pr-triage && rm skill.zip

Installs to .claude/skills/pr-triage

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Context-efficient PR comment triage. Evaluate, decide, act. Fix important issues, resolve the rest silently.
108 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Fetch unreplied PR comments
  • Evaluate PR comments for security and correctness
  • Implement fixes for identified issues
  • Resolve non-essential threads silently

How it works

It retrieves PR comment metadata, filters for unreplied threads, evaluates their importance, and either applies a fix or resolves the thread silently.

Inputs & outputs

You give it
GitHub repository and PR number
You get back
Resolved PR threads and applied code fixes

When to use pr-triage

  • Resolving high-volume PR feedback
  • Automating triage of style-only comments
  • Prioritizing security bugs in PRs

About this skill

PR Comment Triage - Evaluate → Decide → Act

Philosophy

Replies are SECONDARY to addressing concerns.

  • Important issue? FIX IT → reply with commit ref → resolve
  • Not important? RESOLVE SILENTLY → no reply needed
  • Don't reply to every comment - that's noise

The Workflow

┌─────────────────────────────────────────────┐
│         EVALUATE → DECIDE → ACT             │
├─────────────────────────────────────────────┤
│                                             │
│  1. FETCH UNREPLIED (metadata only)         │
│     → Get root comments without replies     │
│     → ~100 bytes/comment, paginated         │
│                                             │
│  2. EVALUATE each comment                   │
│     → Fetch body only if path looks important│
│     → Skip: metadata files, style nits      │
│     → Check: security, correctness, tests   │
│                                             │
│  3. DECIDE action                           │
│     → FIX: implement change, reply, resolve │
│     → RESOLVE: close silently, no reply     │
│     → DEFER: create cell, resolve           │
│                                             │
│  4. ACT                                     │
│     → Fix issues in code                    │
│     → Resolve threads (not reply)           │
│     → Reply ONLY when you fixed something   │
│                                             │
└─────────────────────────────────────────────┘

Decision Matrix

Comment TypeActionReply?
Security/correctness bugFIX → reply with commit✅ Yes
Valid improvement, in scopeFIX → reply with commit✅ Yes
Valid but out of scopeCreate cell → resolve❌ No
Style/formatting nitResolve silently❌ No
Metadata file (.jsonl, etc)Resolve silently❌ No
Already fixedReply with commit → resolve✅ Yes
Disagree with suggestionResolve silently❌ No

SDK Commands

# Get unreplied root comments (start here)
bun run scripts/pr-comments.ts unreplied owner/repo 42

# Evaluate: fetch body for specific comment
bun run scripts/pr-comments.ts expand owner/repo 123456

# Act: resolve without reply (preferred)
bun run scripts/pr-comments.ts resolve owner/repo 42 123456

# Act: reply then resolve (only when you fixed something)
bun run scripts/pr-comments.ts reply owner/repo 42 123456 "✅ Fixed in abc123"

# Helpers
bun run scripts/pr-comments.ts summary owner/repo 42   # File-level overview
bun run scripts/pr-comments.ts list owner/repo 42      # All metadata

Quick Triage Pattern

import { fetchMetadata, fetchBody, resolveThread, reply, getThreadId } from "./scripts/pr-comments.ts";

const comments = await fetchMetadata("owner/repo", 42);

// Find unreplied root comments
const repliedTo = new Set(comments.filter(c => c.inReplyToId).map(c => c.inReplyToId));
const unreplied = comments.filter(c => !c.inReplyToId && !repliedTo.has(c.id));

for (const c of unreplied) {
  // Skip metadata files - resolve silently
  if (c.path.endsWith('.jsonl') || c.path.includes('.hive/')) {
    const threadId = await getThreadId("owner/repo", 42, c.id);
    if (threadId) await resolveThread("owner/repo", threadId);
    continue;
  }

  // Evaluate important files
  const full = await fetchBody("owner/repo", c.id);
  
  if (full.body.includes('Critical') || full.body.includes('security')) {
    // FIX IT, then reply
    // ... implement fix ...
    await reply("owner/repo", 42, c.id, "✅ Fixed in abc123");
  }
  
  // Resolve either way
  const threadId = await getThreadId("owner/repo", 42, c.id);
  if (threadId) await resolveThread("owner/repo", threadId);
}

Skip These (Resolve Silently)

  • .hive/issues.jsonl - auto-generated metadata
  • .hive/memories.jsonl - auto-generated metadata
  • Changeset formatting suggestions
  • Import ordering nits
  • "Add tracking issue" for intentional skips
  • Style preferences you disagree with

Fix These (Reply + Resolve)

  • Security vulnerabilities
  • Correctness bugs
  • Missing error handling
  • Test coverage gaps (if valid)
  • Type safety issues

Context Budget

ActionContext Cost
unreplied~100 bytes/comment
expand (1 comment)~5KB
resolve0 (GraphQL mutation)
reply~200 bytes

Rule: Fetch <10 bodies per triage session.

References

  • scripts/pr-comments.ts - Full SDK with Zod schemas
  • references/gh-api-patterns.md - Raw jq patterns, GraphQL, pagination

When not to use it

  • Replying to every single comment
  • Triage sessions involving more than 10 comment bodies

Limitations

  • Limited to 10 comment bodies per triage session to manage context costs

How it compares

It prioritizes fixing actual issues over engaging in discussion, automating the resolution of style nitpicks and metadata comments.

Compared to similar skills

pr-triage side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
pr-triage (this skill)17moReviewIntermediate
resolve-conflicts818moReviewIntermediate
claude-automation-recommender472moReviewBeginner
codex-skill125moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

More by joelhooks

View all by joelhooks

cli-builder

joelhooks

Guide for building TypeScript CLIs with Bun. Use when creating command-line tools, adding subcommands to existing CLIs, or building developer tooling. Covers argument parsing, subcommand patterns, output formatting, and distribution.

530

gh-issue-triage

joelhooks

GitHub issue triage workflow with contributor profile extraction. Analyze → clarify → file cells → tag → implement → credit. Captures Twitter handles for changeset acknowledgments.

13

hive-workflow

joelhooks

Issue tracking and task management using the hive system. Use when creating, updating, or managing work items. Use when you need to track bugs, features, tasks, or epics. Do NOT use for simple one-off questions or explorations.

12

learning-systems

joelhooks

Implicit feedback scoring, confidence decay, and anti-pattern detection. Use when understanding how the swarm plugin learns from outcomes, implementing learning loops, or debugging why patterns are being promoted or deprecated. Unique to opencode-swarm-plugin.

14

publish-package-cicd

joelhooks

CI/CD publishing workflow for npm packages using Changesets + npm Trusted Publishers (OIDC). Use when setting up automated npm publishing for monorepos, configuring GitHub Actions for releases, troubleshooting workspace:* protocol resolution issues, fixing "Cannot find module" errors in published packages, or debugging npm OIDC authentication. Covers Bun + Turborepo + Changesets + npm Trusted Publishers with workspace protocol resolution.

14

always-on-guidance

joelhooks

Always-on rule-oriented guidance for claude-plugin agents. Use to align behavior, tool usage, and model-specific defaults (GPT-5.2-code vs Opus 4.5) while avoiding deprecated bd/cass references.

05

You might also like

resolve-conflicts

antinomyhq

Use this skill immediately when the user mentions merge conflicts that need to be resolved. Do not attempt to resolve conflicts directly - invoke this skill first. This skill specializes in providing a structured framework for merging imports, tests, lock files (regeneration), configuration files, and handling deleted-but-modified files with backup and analysis.

81334

claude-automation-recommender

anthropics

Analyze a codebase and recommend Claude Code automations (hooks, subagents, skills, plugins, MCP servers). Use when user asks for automation recommendations, wants to optimize their Claude Code setup, mentions improving Claude Code workflows, asks how to first set up Claude Code for a project, or wants to know what Claude Code features they should use.

47140

codex-skill

feiskyer

Use when user asks to leverage codex, gpt-5, or gpt-5.1 to implement something (usually implement a plan or feature designed by Claude). Provides non-interactive automation mode for hands-off task execution without approval prompts.

12110

git-advanced-workflows

wshobson

Master advanced Git workflows including rebasing, cherry-picking, bisect, worktrees, and reflog to maintain clean history and recover from any situation. Use when managing complex Git histories, collaborating on feature branches, or troubleshooting repository issues.

1197

subagent-driven-development

davila7

Use when executing implementation plans with independent tasks in the current session

1493

validate-openapi-specs

epieczko

Validates and registers hook manifest files (YAML) in the Hook Registry for versioned hook management.

594

Search skills

Search the agent skills registry