Claude-code-skills ln-911-github-triager

Produces prioritized triage report from open GitHub issues, PRs, and discussions. Use when reviewing community backlog.

install
source · Clone the upstream repo
git clone https://github.com/levnikolaevich/claude-code-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/levnikolaevich/claude-code-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills-catalog/ln-911-github-triager" ~/.claude/skills/levnikolaevich-claude-code-skills-ln-911-github-triager && rm -rf "$T"
manifest: skills-catalog/ln-911-github-triager/SKILL.md
source content

Paths: File paths (

shared/
,
references/
,
../ln-*
) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root. If
shared/
is missing, fetch files via WebFetch from
https://raw.githubusercontent.com/levnikolaevich/claude-code-skills/master/skills/{path}
.

ln-911-github-triager

Type: L3 Worker (standalone) Category: 9XX Community Engagement Invocation: Standalone or as part of a broader community triage workflow

Scans all open issues, PRs, and discussions in the current repository. Categorizes by urgency. Produces an actionable triage report.


Arguments

$ARGUMENTS
controls scope and staleness threshold:

TokenEffectDefault
issues
Scan issues onlyAll three
prs
Scan PRs onlyAll three
discussions
Scan discussions onlyAll three
Number (e.g.,
14
)
Staleness threshold in days7
issues 30
Combine: scope + threshold--
summary
Compact output for coordinator: skip Phase 4 preview, return red flags + priority counts + metrics onlyFull interactive report

Parse

$ARGUMENTS
: extract scope tokens (
issues
,
prs
,
discussions
), numeric threshold, and
summary
flag. If no scope tokens, scan all three. If no number, default to 7 days.


Phase 0: GitHub Discovery

MANDATORY READ: Load

shared/references/community_github_discovery.md

Execute the discovery protocol. Extract:

  • {owner}/{repo}
    for
    --repo
    flag and URLs
  • maintainer
    login (authenticated user) for maintainer detection
  • Verify
    gh
    is authenticated

Load strategy: check

docs/community_engagement_strategy.md
in target project, fallback to
shared/references/community_strategy_template.md
. Extract Section 5 (Engagement Metrics) for targets and red flags.


Phase 1: Fetch Data

Run these

gh
commands based on scope. Execute all applicable fetches in parallel.

1a. Issues

gh issue list --repo {owner}/{repo} --state open --limit 100 --json number,title,labels,createdAt,updatedAt,author,comments,assignees

1b. Pull Requests

gh pr list --repo {owner}/{repo} --state open --limit 100 --json number,title,labels,createdAt,updatedAt,author,reviewDecision,reviewRequests,isDraft,comments,assignees

1c. Discussions (GraphQL)

gh api graphql -f query='
  query($owner: String!, $name: String!) {
    repository(owner: $owner, name: $name) {
      discussions(first: 100, states: OPEN) {
        nodes {
          number
          title
          category { name }
          createdAt
          updatedAt
          author { login }
          answerChosenAt
          labels(first: 5) { nodes { name } }
          comments(first: 20) {
            totalCount
            nodes {
              author { login }
              createdAt
            }
          }
        }
      }
    }
  }
' -f owner="{owner}" -f name="{repo}"

Gate: If all sources return zero items, report "No open items. Triage complete." and stop.


Phase 2: Classify Each Item

For every fetched item, evaluate these conditions. An item can match multiple -- use highest priority.

Priority Matrix

PriorityConditionApplies to
P0 CriticalLabel contains
bug
AND no assignee
Issues
P0 CriticalLabel contains
breaking
Issues, PRs
P1 UrgentAuthor != maintainer AND zero comments from maintainerIssues, Discussions
P1 UrgentQ&A discussion with
answerChosenAt
is null AND author != maintainer
Discussions
P1 Urgent
reviewDecision
is null or
REVIEW_REQUIRED
PRs
P2 StaleNo activity for > threshold days (
updatedAt
older than threshold)
All
P3 MonitorPR marked as draft (
isDraft
is true)
PRs
P3 MonitorAuthor == maintainer AND 0 community repliesDiscussions
P4 InfoItems not matching any above conditionAll

Maintainer Detection

The maintainer login comes from Phase 0 discovery (

viewer.login
). An item "has maintainer reply" if any comment's
author.login
equals the maintainer login.

For issues: check

comments
array authors. For discussions: check
comments.nodes[].author.login
.

Staleness Calculation

Days since last activity:

(today - updatedAt)
in days. Compare against threshold (default 7, or from
$ARGUMENTS
).

Label Urgency Signals

Labels that elevate priority:

bug
,
breaking
,
security
,
urgent
.

Labels that signal engagement opportunity (not urgency):

help wanted
,
good first issue
.


Phase 3: Engagement Metrics

Calculate aggregate metrics per strategy Section 5:

MetricCalculationTargetRed Flag
Time to First ResponseAvg(first maintainer comment - item created) for items WITH reply<24h>72h
Unanswered discussionsCount where author != maintainer AND no maintainer comment AND age > threshold0Any >7 days
Community-to-maintainer ratioNon-maintainer comments / maintainer comments across all items>0.30
New discussions this monthDiscussions created in last 30 days>20
Zero-engagement itemsItems with 0 comments total----

Phase 4: Preview Table

If

$ARGUMENTS
contains
summary
→ skip this phase entirely. Output compact summary (red flags, priority counts per category, health metrics table) and stop. Do NOT compose the full Phase 5 report.

Otherwise (standalone mode): present a compact summary table of ALL classified items for user review. Wait for user approval before proceeding to Phase 5.

### Triage Preview -- {total count} items found

| # | Type | Title | Priority | Age | Key Signal |
|---|------|-------|----------|-----|------------|
| {number} | {Issue/PR/Discussion} | {title (truncated to 50 chars)} | {P0/P1/P2/P3/P4} | {days}d | {short reason} |

Sort by priority (P0 first), then by age (oldest first) within each priority group.

After presenting, ask the user:

  • Confirm priorities look correct
  • Whether to exclude any items from the full report
  • Whether to adjust the staleness threshold

Proceed to Phase 5 only after user confirms.


Phase 5: Compose Report

Present the full triage report in this format:

## GitHub Triage Report -- {YYYY-MM-DD}

**Scope:** {issues/PRs/discussions or "all"} | **Threshold:** {N} days | **Open items:** {total count}

Red Flag Alerts

If any red flags from Phase 3 are triggered, add BEFORE Health Metrics:

> [!WARNING]
> **Red flags detected:**
> - {description, e.g., "2 unanswered discussions older than 7 days"}

Health Metrics Table

| Metric | Value | Target | Status |
|--------|-------|--------|--------|
| Unanswered (>{N}d) | {count} | 0 | {OK / RED FLAG} |
| Avg first response | {hours}h | <24h | {OK / RED FLAG} |
| Community:maintainer ratio | {ratio} | >0.3 | {OK / RED FLAG} |
| New discussions (30d) | {count} | >2 | {OK / RED FLAG} |
| Zero-engagement items | {count} | -- | {count} |

Priority Tables

For each priority P0..P3, show header with count. If count is 0, show header

(0)
and skip table.

P0 Critical:

#TypeTitleLabelsAgeAction Needed

P1 Urgent:

#TypeTitleAuthorAgeWhy

P2 Stale:

#TypeTitleLast ActivityDays Stale

P3 Monitor:

#TypeTitleNote

P4 Info: Do NOT list individually -- only include in total count.

Recommended Actions

### Recommended Actions

1. **Respond:** {items needing maintainer reply, with GitHub URLs}
2. **Review:** {PRs needing review, with GitHub URLs}
3. **Close or bump:** {stale items -- suggest close if resolved, bump if relevant}
4. **Engage:** {items that could benefit from community call-to-action}

Formatting Rules

  • Sort items within each priority group by age (oldest first)
  • URL format:
    https://github.com/{owner}/{repo}/{issues|discussions|pull}/{number}
  • Dates in
    YYYY-MM-DD
    , ages in days
  • All items in Recommended Actions must have direct GitHub URLs

Rules

  • Read-only: this skill fetches and reports -- never create, modify, or close any GitHub item
  • No publishing: do not create issues, comments, labels, or any other GitHub state change
  • Maintainer login: from Phase 0 discovery (authenticated user)
  • Default threshold: 7 days (per strategy Section 5)
  • Rate limits: if GraphQL rate limit hit, report partial results with a warning

Definition of Done

  • GitHub data fetched for all scoped item types (issues/PRs/discussions)
  • Every item classified by priority (P0-P4)
  • Engagement metrics calculated per strategy targets
  • Report composed (full interactive report OR compact summary for coordinator)

Version: 1.0.0 Last Updated: 2026-03-13