agentleFS
mazze93mazze93/claude-code-skills/skills/pr-triage/SKILL.md

pr-triage

Skill1 starsChanged 12 days agoMITView on GitHub

Triage open GitHub pull requests across one or all mazze93 repos by *what kind of stuck* they are (merge conflict, failing CI, changes requested, awaiting review, abandoned, ready-to-merge, healthy) rather than just sorting by age. Use when asked to "triage PRs", "what PRs need attention", "find stuck/stale/abandoned PRs", "which PRs are ready to merge", or to generate a PR status report for terminal, Slack, or a GitHub comment/markdown file.

21 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use aeon-update, auto-workflow and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • aaronjmarsSkill

    aeon-update

    Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.

    Also in 4 projects that use this

  • aaronjmarsSkill

    auto-workflow

    Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.

    Also in 4 projects that use this

  • +10 more from aaronjmars

The file

We split this skill into the rules it gives an agent

1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 18 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Every PR gets exactly one StuckType (see classify.py for the precedence order — conflict and CI blockers are checked before review state):

    line 43

“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

pr-triage

What this is

run-pr-triage.sh discovers every mazze93 repo with at least one open PR, classifies each PR by why it's stuck (not just how old it is), and prints a report. The point is actor-oriented triage: every stuck PR is tagged with who needs to act next (author, reviewer, ci, or nobody/unknown), so the output is a to-do list, not just a status board.

Usage

skills/pr-triage/run-pr-triage.sh                     # terminal report (default)
skills/pr-triage/run-pr-triage.sh --render slack       # Slack Block Kit JSON — pipe to a webhook
skills/pr-triage/run-pr-triage.sh --render github       # GitHub-flavored markdown — post as a PR comment
skills/pr-triage/run-pr-triage.sh --output report.md    # write to a file instead of stdout

Requires gh (authenticated) and python3 on PATH — both are checked up front and the script fails fast with an install/auth hint if either is missing.

run-pr-triage.sh auto-discovers repos: it lists every repo under mazze93, keeps only the ones with open PRs, and builds a temp config on the fly — no setup needed for the common case. To scope a run to specific repos instead, invoke the Python entry point directly with your own config:

PYTHONPATH=skills/pr-triage python3 skills/pr-triage/pr_triage.py --config path/to/config.json --render terminal

Config JSON shape (repos is the only required field):

{
  "repos": ["mazze93/some-repo", "mazze93/another-repo"],
  "reviewer_response_hours": 48,
  "abandon_days": 5,
  "staleness_warning_days": 3,
  "render": "terminal"
}

Classification taxonomy

Every PR gets exactly one StuckType (see classify.py for the precedence order — conflict and CI blockers are checked before review state):

StuckTypeMeaningWho acts
ABANDONEDNo activity for abandon_days (default 5)unclear — triage ownership first
BLOCKED_ON_CONFLICTMerge conflictsauthor (rebase)
BLOCKED_ON_CIFailing checksauthor (investigate)
BLOCKED_ON_AUTHORChanges requested, no new commits sinceauthor
BLOCKED_ON_REVIEWERAwaiting review past reviewer_response_hours (default 48h)reviewer (ping)
READY_TO_MERGEApproved, CI green, no conflictsnobody — merge it
HEALTHYActive, no blockers yetnobody

Severity (HIGH/MEDIUM) escalates once a PR has been stuck past staleness_warning_days (default 3). The terminal report's "Needs Action" section surfaces HIGH-severity PRs first.

Architecture

  • fetch.py — talks to GitHub via gh pr list (parallel across repos, ThreadPoolExecutor), normalizes into PRData. No classification logic here.
  • classify.py — pure functions, no I/O: PRData + TriageConfig in, PRClassification out. This is where the taxonomy above is actually implemented; extend it here if you need a new stuck type.
  • render.py — three renderers (render_terminal, render_slack, render_github) over the same PRClassification list; presentation only, never re-derives classification.
  • pr_triage.py — CLI entry point: config loading, preflight (gh/python3/auth checks), orchestration, output delivery.
  • run-pr-triage.sh — the actual entry point for day-to-day use; wraps pr_triage.py with automatic repo discovery so there's no config file to maintain.

Partial failures are non-fatal: if gh pr list fails for one repo, fetch_all logs a warning and continues with the rest.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.