github-triage
Triages a repository's open GitHub issues and pull requests via the gh CLI.
Skill by trailofbits
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/trailofbits-github-triage
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/github-triage
Tools it pre-approves 6
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
BashReadGrepAgentAskUserQuestionWrite
What's inside
- Skill name
github-triage- Description
- Triages a repository's open GitHub issues and pull requests via the gh CLI. Optionally reviews and merges ready PRs — incrementally merging passing automated/bot PRs and maintainer-approved ones, and spawning review subagents for never-reviewed ones — then closes already-resolved issues with comments citing the resolving PR or commit, cross-links issues with their pending fix PRs, and assigns local-only priority and change-size estimates for everything outstanding. Use when triaging, grooming, or reviewing a repository's open issues and PRs.
- License
- CC-BY-SA-4.0
- Allowed tools
- Bash, Read, Grep, Agent, AskUserQuestion, Write
- Instructions
- 405 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Pre-approves any shell command
Files (5)
- recipe.py · .calcifier/
- SKILL.md
- openai.yaml · agents/
- trail-of-bits-mark.svg · assets/
- reviewing-prs.md · references/
SKILL.md (first lines)
# GitHub Triage Triage a repository's open GitHub issues and pull requests. Optionally clear ready PRs first (merge passing bot PRs and maintainer-approved PRs, review never-reviewed ones), then close issues that are already resolved (with a comment citing the PR or commit that resolved them), make sure issues and the pending PRs that fix them reference each other, and assign a **local-only** priority and change-size estimate to every issue that is still outstanding. ## When to Use - When the user runs `/github-triage` to groom or review a repository's open issues and pull requests. - When an issue backlog has drifted: resolved work left open, fixes landed without closing their issues, or PRs in flight that never linked their issue. - When ready PRs have piled up (passing dependency bumps, approved-and-green PRs) or PRs are sitting unreviewed. ## When NOT to Use - Do not invoke automatically. This skill performs irreversible GitHub writes (merging PRs, closing issues, posting comments) and runs only on explicit invocation. - Do not use to apply priority/effort *labels* on GitHub. Priority and size are presented locally only and are never posted (see Safety Rules). - Do not use as a substitute for a human's final merge decision — every merge is proposed for explicit approval, never performed autonomously. ## Core Principles 1. **Writes are gated.** Compute the full triage first, present every proposed write — merges included — for review, and execute nothing until the user approves. 2. **Evidence before closing.** Never close an issue without a concrete, cited reason (a merged PR or a commit on the default branch). When evidence is weak or ambiguous, leave the issue outstanding and flag it for review. 3. **Priority and size stay local.** They are an internal planning aid for the user, never written to GitHub. ## Workflow ### Phase 0: Select the target repository ```bash gh auth status # confirm gh is authenticated git rev-parse --is-inside-work-tree # is PWD a git repository? git remote -v # enumerate remotes ``` Determine the set of **distinct GitHub-hosted repositories** among the remotes. A remote is GitHub-hosted when its URL host is `github.com`, in any of these forms: - `https://github.com/OWNER/REPO(.git)` - `git@github.com:OWNER/REPO(.git)` - `ssh://git@github.com/OWNER/REPO(.git)` Normalize each to `OWNER/REPO` and de-duplicate (a fork setup may have `origin` and `upstream` pointing at different GitHub repos; multiple remotes pointing at the *same* `OWNER/REPO` count once). Selection rule: | Situation | Action | |-----------|--------| | Exactly one distinct GitHub repo | Use it as the default — do not prompt. | | Not a git repo, or zero GitHub remotes | Ask the user for the `OWNER/REPO` to triage. | | More than one distinct GitHub repo | Use **AskUserQuestion** to let the user pick which `OWNER/REPO`. | > GitHub Enterprise hosts cannot be auto-detected reliably. If the user works on a > GHE instance, ask for `OWNER/REPO` and have them set `GH_HOST` / use `gh`'s > configured host. Confirm the resolved repo back to the user before continuing. Store the result as `REPO="OWNER/REPO"` and pass `-R "$REPO"` to every `gh` call. Validate it against `^[A-Za-z0-9._-]+/[A-Za-z0-9._-]+$` before use, so a malformed or hostile remote URL never flows into a command. ### Phase 1: Gather issues and context ```bash # Open issues (gh issue list excludes PRs by default) gh issue list -R "$REPO" --state open --limit 1000 \ --json number,title,body,labels,assignees,comments,reactionGroups,createdAt,updatedAt,url # Open PRs — candidates for "pending fix" (issue phase) and PR triage (Phase 2) gh pr list -R "$REPO" --state open --limit 1000 \ --json number,title,body,author,isDraft,reviewDecision,latestReviews,\ mergeable,mergeStateStatus,statusCheckRollup,labels,createdAt,headRefName,url,closingIssuesReferences # Recently merged PRs — candidates for "already resolved" gh pr list -R "$REPO" --state merged --limit 300 \ --json number,title,body,mergedAt,url,closingIssuesReferences ``` `closingIssuesReferences` lists the issues a PR is linked to close — populated by any of GitHub's closing keywords (`close`/`closes`/`closed`, `fix`/`fixes`/`fixed`, `resolve`/`resolves`/`resolved`) in the PR body, or by a manual UI link. It is the strongest available signal. For issues it does not cover, also search commit messages on the default branch. Resolve the default branch authoritatively from the selected repo (not from local `origin/HEAD`, which may be unset or point at the wrong remote): ```bash default_branch=$(gh repo view "$REPO" --json defaultBranchRef --jq .defaultBranchRef.name) # Anchor the issue number so #12 does not match #120, #123, … git log --oneline "origin/$default_branch" \ | grep -iE "(close|fix|resolve)[sd]? +#<N>([^0-9]|$)" ``` ### Phase 2: Triage open pull requests (optional) Handle PRs **before** issues: merging ready PRs here means the "already resolved" check in the issue phase sees the work those merges just landed. If there are no open PRs, skip this phase. Otherwise summarize the open PRs and **ask the user whether to handle PRs now** (AskUserQuestion: handle PRs / skip to issues). If they skip, go straight to issue classification. Classify each open PR from its review, CI, and merge state. The field shapes below are what `gh pr ... --json` actually returns — rely on them, not on intuition: - **Ready to merge** = `mergeable == "MERGEABLE"` **and** `mergeStateStatus == "CLEAN"` **and** CI is not blocking (below). `CLEAN` is GitHub's server-side "no conflicts,
From trailofbits/skills, CC-BY-SA-4.0.
More from trailofbits/skills
- 0.767score
trailmark
trailofbits
Builds and queries multi-language source and binary code graphs for security analysis.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
mermaid-to-proverif
trailofbits
Translates Mermaid sequenceDiagrams describing cryptographic protocols into ProVerif formal verification models (.pv files).
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
semgrep
trailofbits
Runs a Semgrep security scan over a codebase: detects languages, selects rulesets, presents the plan for explicit approval, then runs every approved ruleset…
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
slicing-code-context
trailofbits
Selects bounded, graph-informed source slices with Trailmark and delegates focused code analysis or patch-proposal work to a smaller subagent.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
diagramming-code
trailofbits
Generates Mermaid diagrams from Trailmark code graphs.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
firebase-apk-scanner
trailofbits
Scans Android APKs for Firebase security misconfigurations including open databases, storage buckets, authentication issues, and exposed cloud functions.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
dimensional-analysis
trailofbits
Audits code for unit and decimal-scaling bugs and annotates it with dimensional comments recording the units of each value.
SkillAFreshness: A★ 7.8KClaude Code - 0.767score
let-fate-decide
trailofbits
Draws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
codeql
trailofbits
Scans a codebase for security vulnerabilities using CodeQL's interprocedural data flow and taint tracking analysis.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
interpreting-culture-index
trailofbits
Interprets Culture Index (CI) surveys, behavioral profiles, and personality assessment data.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
entry-point-analyzer
trailofbits
Analyzes smart contract codebases to identify state-changing entry points for security auditing.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
yara-rule-authoring
trailofbits
Guides authoring of high-quality YARA-X detection rules for malware identification.
SkillAFreshness: A★ 7.8KClaude Code +9
Signals
- Stars
- 7,783
- Forks
- 671
- Open issues
- 30
- Last commit (this folder)
- Oct 22, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- CC-BY-SA-4.0
- Repository
- github.com/trailofbits/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from trailofbits
- 0.767score
let-fate-decide
trailofbits
Draws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
entry-point-analyzer
trailofbits
Analyzes smart contract codebases to identify state-changing entry points for security auditing.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
interpreting-culture-index
trailofbits
Interprets Culture Index (CI) surveys, behavioral profiles, and personality assessment data.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
firebase-apk-scanner
trailofbits
Scans Android APKs for Firebase security misconfigurations including open databases, storage buckets, authentication issues, and exposed cloud functions.
SkillAFreshness: A★ 7.8KClaude Code +9 - 0.767score
dimensional-analysis
trailofbits
Audits code for unit and decimal-scaling bugs and annotates it with dimensional comments recording the units of each value.
SkillAFreshness: A★ 7.8KClaude Code - 0.767score
codeql
trailofbits
Scans a codebase for security vulnerabilities using CodeQL's interprocedural data flow and taint tracking analysis.
SkillAFreshness: A★ 7.8KClaude Code +9
Cite this page
github-triage skill. Agent Mart. https://agentmart.dev/skills/trailofbits-github-triage (last updated 2026-10-24)