Triaging Issues
pytorch/pytorch
Triages GitHub issues by routing to oncall teams, applying labels, and closing questions.
Adopt the per-issue model-selection convention in a repo — tier every open issue, apply the model: labels, board field, and callouts behind an approval gate.
$ npx skills add joshukraine/dotfiles --skill model-triage -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install joshukraine/dotfiles model-triage --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude/.claude/skills/model-triage .claude/skills/model-triage && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .claude/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triageType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add joshukraine/dotfiles --skill model-triage -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install joshukraine/dotfiles model-triage --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .agents/skills && cp -r skills-src/claude/.claude/skills/model-triage .agents/skills/model-triage && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .agents/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joshukraine/dotfiles --skill model-triage -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install joshukraine/dotfiles model-triage --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/claude/.claude/skills/model-triage .cursor/skills/model-triage && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .cursor/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/joshukraine/dotfiles.git --path claude/.claude/skills/model-triage--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add joshukraine/dotfiles --skill model-triage -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install joshukraine/dotfiles model-triage --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/claude/.claude/skills/model-triage .gemini/skills/model-triage && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .gemini/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install joshukraine/dotfiles model-triageInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add joshukraine/dotfiles --skill model-triage -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .github/skills && cp -r skills-src/claude/.claude/skills/model-triage .github/skills/model-triage && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .github/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joshukraine/dotfiles --skill model-triage -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install joshukraine/dotfiles model-triage --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joshukraine/dotfiles.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/claude/.claude/skills/model-triage .opencode/skills/model-triage && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "model-triage" agent skill from https://github.com/joshukraine/dotfiles/tree/master/claude/.claude/skills/model-triage into .opencode/skills/model-triage/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "model-triage", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
model-triageAdopt the per-issue model-selection convention in a repo — tier every open issue, apply the model: labels, board field, and callouts behind an approval gate.
Model Triage is an agent skill from joshukraine/dotfiles. Adopt the per-issue model-selection convention in a repo — tier every open issue, apply the model: labels, board field, and callouts behind an approval gate. Also runs in maintenance mode to sweep up unlabeled issues and label/field drift.
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: :roundpushpin: My dotfiles for macOS using Neovim, Zsh, and Ghostty + Tmux. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b59ad5b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Model Triage loads about 2.8k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,303 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from joshukraine/dotfiles at commit b59ad5b, republished under its MIT licence (© joshukraine). 1,303 words, ~2,776 tokens.
.claude/skills/model-triage/SKILL.md (or your agent's skills folder).Roll the per-issue model-selection convention into a repository: tier each open issue, then apply the model: labels, the board's Model field, and any body callouts — all behind a single approval gate. The convention, its heuristic, and the manual runbook this encodes live in ~/.claude/docs/model-selection-strategy.md; the label vocabulary lives in ~/.claude/docs/label-taxonomy.md.
This is a rollout tool, not a routine one. Model labels are assigned at issue creation alongside the type label. Run this skill once when adopting the convention in a repo that already has open issues, and after that only in maintenance mode when drift has accumulated.
From the target repository's checkout — you need the issues and the code, because tiering an issue means judging what a fix would actually touch. If you must run from elsewhere, every gh issue call needs --repo <owner>/<name>; without it the command silently targets whatever repo you are standing in.
--maintenance — sweep mode: tier only issues missing a label, reconcile label ↔ board-field drift, and refresh stale label descriptions. Leaves existing label assignments alone unless an issue's scope has visibly changed.Assign a tier by asking what a wrong answer costs and how far the reasoning reaches. Full treatment in the strategy doc; the working summary:
Lean one tier down for docs/tests, one tier up for anything touching data integrity.
Calibration: ComixDistro's settled pass was 4 Fable / 32 Opus / 25 Sonnet across 61 issues — roughly 6% flagship — but that pass was tiered under the older two-clause flagship bar. Under the tightened bar expect ~2–3%. Either way, a pass landing far above is not discriminating, it is just burning limit headroom. Check the two calibration references in the strategy doc — and the note on which rules they were measured under — before presenting.
Some issues have nothing to build directly, and a tier on them is noise:
qa reports — the tech issue derived via /qa-triage carries the tierCall these out explicitly as deliberate exclusions rather than silently skipping them; an unexplained gap looks identical to an oversight.
Establish that everything the apply step needs exists, and stop early if it doesn't:
Token scope — gh auth status must list project in the token scopes. If it's missing, stop: the user must run gh auth refresh -s project interactively. You cannot grant it for them.
Locate the board — gh project list --owner <OWNER>; capture the project number and node ID (PVT_…). If the repo has no board, the label pass can still proceed — say so and skip the field work rather than stopping.
Labels exist — gh label list. Create any missing ones from the taxonomy, exactly as specified there:
gh label create "model: fable" --color B60205 --description "Recommended model: Fable 5 (reserve for silent-data-corruption stakes)"
gh label create "model: opus" --color FBCA04 --description "Recommended model: Opus 5 (well-scoped features, refactors)"
gh label create "model: sonnet" --color 0E8A16 --description "Recommended model: Sonnet (docs, single tests, mechanical edits)"Also check the descriptions of labels that already exist. A description names the model current at the time the label was created, so a repo adopted before a model release carries a stale one indefinitely — gh label create won't touch it and no other step will either. Compare against the strings above and repair any mismatch:
gh label list --json name,description --jq '.[] | select(.name | startswith("model: ")) | "\(.name)\t\(.description)"'
gh label edit "model: opus" --description "Recommended model: Opus 5 (well-scoped features, refactors)"Report each repair as drift fixed, not as a label created.
Model field exists — gh project field-list <N> --owner <OWNER> --format json. If absent, create it once:
gh project field-create <N> --owner <OWNER> \
--name "Model" --data-type SINGLE_SELECT --single-select-options "Fable,Opus,Sonnet"Board membership — gh project item-list <N> --owner <OWNER> --limit 200 --format json. Diff against the open-issue list; an issue not on the board cannot receive a field value. Note the strays now so the apply step can gh project item-add them first. Trust item-list over any claim an issue body makes about its own board membership.
Report the preflight result compactly: what existed, what you created, what needs adding to the board.
gh issue list --state open --limit 200 --json number,title,labels,body.--maintenance mode, narrow to issues with no model: label — plus any whose scope has visibly changed since labeling.Read each issue's body and, where scope is unclear, the code a fix would touch. For each, decide:
Note anything else the pass turns up — duplicates, already-shipped work, issues whose spec has drifted from the code. A careful read of every open issue surfaces this whether you want it or not, and it is worth more than the tiering.
Present the full mapping before touching anything:
Tiering — 23 issues (2 Fable / 12 Opus / 9 Sonnet)
#58 Fable chord_only_line? has four dependents; a miss silently corrupts song files
#49 Opus --transpose; test scaffold exists, contained. Watch: enharmonic spelling
#50 Sonnet docs over a settled pipeline, no correctness stakes
…
Excluded (no tier, deliberate):
#12 epic — children carry the tiers
#77 qa report — derived tech issue carries the tier
Proposed callouts (3):
#49 "Opus, but escalate the enharmonic-spelling logic to Fable if it proves gnarly"
…
Also noticed:
#61 appears to duplicate #44
#83 spec references a helper that no longer exists
Board: 2 open issues are not board items (#71, #84) — will add before the field pass.STOP for explicit approval. Nothing is labeled, no field is set, and no body is edited before the user says go. They may retier anything, drop callouts, or expand the exclusions. This gate is the whole safety model of the skill: it writes to every open issue in the repo, and a bad pass is tedious to unwind.
Only after approval, in this order:
Board strays first — gh project item-add <N> --owner <OWNER> --url <issue-url> for each, or their field values silently no-op.
Labels — gh issue edit <n> --add-label "model: <tier>".
Field values — collect the field ID and option IDs (gh project field-list … --format json) and the item IDs (gh project item-list … --format json), then per issue:
gh project item-edit --id <ITEM_ID> --project-id <PROJECT_NODE_ID> \
--field-id <MODEL_FIELD_ID> --single-select-option-id <OPTION_ID>Callouts — round-trip the body, never retype it. Fetch, prepend, write back:
gh issue view <n> --json body --jq .body > /tmp/body.md
# build /tmp/head.md: the callout blockquote, a blank line, ---, a blank line
cat /tmp/head.md /tmp/body.md > /tmp/final.md
gh issue edit <n> --body-file /tmp/final.mdCallout template:
> **🤖 Recommended model: <Model>.** <One sentence: why this tier, and the single watch-item or escalation trigger if any.>Board README — if the board's README has no "Model = recommended build tier" section, append it. The settled wording lives in the ComixDistro board #11 README; the template board carries it for new projects.
Run the drift check and confirm the only issues returned are the approved exclusions:
gh issue list --state open --limit 200 --json number,labels --jq '[.[] | {n: .number, m: [.labels[].name | select(startswith("model"))]}] | map(select(.m | length != 1)) | map(.n)'Spot-check a few board cards against their labels, and one edited body to confirm the callout landed with the original text intact below it.
Report the final distribution (N Fable / N Opus / N Sonnet, flagship share) and how it compares to the calibration references.
--body-file. Retyping loses content, and the loss is silent.© joshukraine, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in claude/.claude/skills/model-triage of joshukraine/dotfiles.
Open the folder on GitHubat commit b59ad5b
Model Triage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Model Triage this skilljoshukraine/dotfiles | 429 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Triaging Issuespytorch/pytorch | 104k | — | ~4.2k | Automated safety check: Pass | Custom licence | |
| Issue Triagepaperclipai/paperclip | 99k | — | ~1k | Automated safety check: Pass | MIT | |
| Triagepnpm/pnpm | 37k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Herdr Issue Triageherdrdev/herdr | 43k | — | ~517 | Automated safety check: Pass | Apache-2.0 | |
| RTK Combined Issue and PR Triagertk-ai/rtk | 83k | — | ~1.6k | Automated safety check: Notes | Apache-2.0 |
pytorch/pytorch
Triages GitHub issues by routing to oncall teams, applying labels, and closing questions.
paperclipai/paperclip
Triage Paperclip inbox issues that are stale, blocked, in-review, or assigned-but-not-progressing, and decide a single next action per issue (resume, reassign, unblock, escalate, or close).
pnpm/pnpm
Triage an incoming GitHub issue against the pnpm codebase and related open issues, then apply exactly one implementation-readiness label using pnpm's state: taxonomy.
herdrdev/herdr
Triages open herdr GitHub issues into a short decision-first Markdown table with a priority light, recommendation, age, reactions and a reason for each.
rtk-ai/rtk
Runs issue triage and PR triage in parallel, then cross-analyzes the results to flag duplicate coverage, security gaps, P0 issues with no PR, and PR conflicts.
TalAter/annyang
Triage and close GitHub issues on TalAter/annyang. An agent skill from TalAter/annyang.
joshukraine/dotfiles
Manage Todoist tasks, projects, labels, filters, sections, comments, reminders, and workspaces via the td CLI.
joshukraine/dotfiles
Vet open issues for autonomous resolution and queue the qualifying ones with the autopilot-queued label — the start-of-day "fill the queue" half of the triage → run split.
joshukraine/dotfiles
Quick 2-minute status update on current phase, completed work, blockers, and health check.
joshukraine/dotfiles
Create a pull request with auto-generated description, issue linking, ROADMAP updates, and PR-metadata validation.
joshukraine/dotfiles
Detailed technical walkthrough covering architecture, test coverage, product tour, and key design decisions.
joshukraine/dotfiles
Pre-PR advisory check for deviations from the project spec. An agent skill from joshukraine/dotfiles.
Adopt the per-issue model-selection convention in a repo — tier every open issue, apply the model: labels, board field, and callouts behind an approval gate. Model Triage is an agent skill from joshukraine/dotfiles. Adopt the per-issue model-selection convention in a repo — tier every open issue, apply the model: labels, board field, and callouts behind an approval gate.
Run `npx skills add joshukraine/dotfiles --skill model-triage -a claude-code`. Or copy the skill folder (claude/.claude/skills/model-triage in joshukraine/dotfiles) into .claude/skills/model-triage in your project. Claude Code loads it when a task matches its description.
Run `npx skills add joshukraine/dotfiles --skill model-triage -a codex`. Or copy the skill folder (claude/.claude/skills/model-triage in joshukraine/dotfiles) into .agents/skills/model-triage in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add joshukraine/dotfiles --skill model-triage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/model-triage, .gemini/skills/model-triage, .github/skills/model-triage and .opencode/skills/model-triage in your project.
Going by SKILL.md and its folder, Model Triage needs the command-line tools its instructions call (gh).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Model Triage is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Model Triage: Triaging Issues (pytorch/pytorch, 104k stars), Issue Triage (paperclipai/paperclip, 99k stars), Triage (pnpm/pnpm, 37k stars) and Herdr Issue Triage (herdrdev/herdr, 43k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
joshukraine (a GitHub user) maintains it in joshukraine/dotfiles, which has 429 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 6, 2026.
Source: joshukraine/dotfiles on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.