Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/iliaal/whetstoneWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/iliaal/whetstone/triage-prs)<a href="https://agentmods.dev/commands/iliaal/whetstone/triage-prs"><img src="https://agentmods.dev/badge/commands/iliaal/whetstone/triage-prs/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/iliaal/whetstone/triage-prs"><img src="https://agentmods.dev/badge/commands/iliaal/whetstone/triage-prs.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00024 | $0.01762 |
| Opus 5 | $0.00012 | $0.00881 |
| Sonnet 5 | $0.00005 | $0.00352 |
| Haiku 4.5 | $0.00002 | $0.00176 |
Grade A, and why
triage-prs scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
This is a copy
91% identical to triage-prs — 18 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 202 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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" - Default branch: !
gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null || echo "unknown"
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:
-
List all open PRs:
gh pr list --repo OWNER/REPO --state open --limit 50 -
List all open issues:
gh issue list --repo OWNER/REPO --state open --limit 50 -
List existing labels:
gh label list --repo OWNER/REPO --limit 50 -
Check recent merges (to detect duplicate/superseded PRs). Resolve the default branch first — do not assume
main:DEFAULT_BRANCH=$(gh repo view --repo OWNER/REPO --json defaultBranchRef -q .defaultBranchRef.name)Only when the current working directory is a local clone of OWNER/REPO, read from local git:
git log --oneline -20 "$DEFAULT_BRANCH"Otherwise (cwd is not that clone), pull recent commits from the API instead:
gh api "repos/OWNER/REPO/commits?per_page=20" --jq '.[].commit.message | split("\n")[0]'
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)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 202 lines · 24 tokens per session scan A 9b0aa5f5d779
triage-prs is a command published in the GitHub repository iliaal/whetstone (33 stars, last pushed yesterday), licensed MIT. It adds 24 tokens to every session and 1,762 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. It is 91% identical to triage-prs, differing in 18 lines, and is treated as a copy.
Other commands, from other repositories
triage
Triages a PR comment — from a bot (Copilot, CI) or a human reviewer. Fetches the comment and diff via gh CLI, classifies it, applies the fix directly to the file if valid, posts a reply on the thread, and resolves it. Run from inside the repo.
open-pr
Create a pull request for the current branch following the the team's standard PR template.
release
Release manager for frontend and mobile. Writes App Store notes, user-facing changelog, flags stale docs and landing copy. Actions: notes | changelog | docs | sync.
pr
Prepare and open a pull request the senior way: gate, template, scrubbed, everything visible.
git
The pre-finish status: branch, hygiene findings, message checks, workflow lint, template state.
status
The state of play, computed fresh: branch, dirty files, the active sprint, open work, index freshness.