triage-issues
Skill534 starsChanged 36 days agoMITView on GitHub
Walk every open issue with no labels and apply appropriate labels via `gh`. Conservative — never closes, reassigns, or invents labels; only adds existing ones. Use when the user asks to "triage issues", "label issues", "do issue triage", "label the unlabeled issues", "clean up the issue tracker", or similar. Has direct GitHub side-effects (label mutations); the working tree is unaffected. Reports a structured summary so the `daily-update` meta-skill or a human caller can audit what was applied.
We split this skill into the rules it gives an agent
10 rules. 0 are common, 6 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
When the issue is ambiguous, it abstains rather than guess.
- Distinctive: line 43
If the result is empty, write a one-line "no unlabeled issues" report and stop.
- Distinctive: line 45
If the count is unusually large (>20 in a single run), still process them, but flag the pile-up in the report — it usually means triage …
- Distinctive: line 51
Read the title and body in full: Don't classify from the title alone — bug reports and feature requests can look identical at a glance.
- Distinctive: line 57
abstain: if the issue is too vague to classify (very short, no context, or genuinely ambiguous) — leave it unlabeled and surface in the …
- Distinctive: line 67
Hold the proposed labels in memory: Don't apply yet — apply in step 4 so the report reflects what was actually requested.
- Very specific: line 73
Don't reach for quick-win unless the issue is genuinely small.
- Very specific: line 89
If gh errors on a particular issue (rate limit, transient failure), capture the error, continue with the next issue, and surface the failed …
- Very specific: line 120
When invoked by daily-update, this report becomes the "triage-issues" line in the day's PR body — the meta-skill paraphrases the structured …
- Very specific: line 127
Don't invent labels: If the issue genuinely calls for a category that doesn't exist (mobile, windows, gemini-2.5), surface it in the …
“Common” is measured: kept by at least 6 in 10 of the 16 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.
Files
Triage open issues
obsidian-gemini's issue tracker accumulates issues from users, contributors, and the maintainer. Many land without labels, which makes filtering and reporting harder later. This skill works through the unlabeled backlog and applies labels from the repo's existing label vocabulary based on the issue's content.
This skill is deliberately conservative:
- It only applies labels — never closes, reassigns, links, or comments.
- It only uses labels that already exist in the repo.
- When the issue is ambiguous, it abstains rather than guess.
- It is safe to run repeatedly; previously-labeled issues are skipped automatically.
Workflow
1. Load the repo's label vocabulary
gh label list --repo allenhutchison/obsidian-gemini --limit 100 \
--json name,descriptionHold this list in working memory. Do not invent labels. If the issue genuinely needs a label that doesn't exist, flag it in the report and let the human decide whether to create it (label creation is out of scope for this skill).
The repo currently has two practical label families. Check the live list each run; the exact set drifts:
- General intent:
bug,enhancement,documentation,question,help wanted,good first issue,duplicate,invalid,wontfix - Area:
agent-config,architecture,chat-ux,file-context,tool-execution,models,quick-win,epic - Auto-applied (do not apply by hand):
codex,automated,dependencies,javascript,github_actions— these are set by automation and labelling them manually adds noise.
2. List unlabeled open issues
gh issue list --repo allenhutchison/obsidian-gemini \
--state open --search "no:label" \
--limit 100 \
--json number,title,body,author,createdAtIf the result is empty, write a one-line "no unlabeled issues" report and stop. This is the common case on a well-tended tracker.
If the count is unusually large (>20 in a single run), still process them, but flag the pile-up in the report — it usually means triage hasn't run recently, or new issues are arriving faster than expected.
3. Read and classify each issue
For each issue:
- Read the title and body in full. Don't classify from the title alone — bug reports and feature requests can look identical at a glance.
- Decide the intent label (exactly one):
bug— describes broken behavior, includes reproduction steps or "expected vs. actual"enhancement— proposes new functionality or an improvement to existing functionalitydocumentation— reports a doc problem or asks for documentationquestion— asks how to do something, or seeks clarification on existing behavior- abstain if the issue is too vague to classify (very short, no context, or genuinely ambiguous) — leave it unlabeled and surface in the report
- Decide area label(s) (zero or more, additive):
agent-config— agent prompts, system prompt, model selection, agent profiles, projectstool-execution— tool calls, tool registry, tool safety, loop detection, tool permission tiersfile-context— context system, file linking, attachment pipeline, drag-and-dropchat-ux— chat view UI, agent view UI, modals, status bar, ergonomicsarchitecture— plumbing, services, lifecycle, refactors, internal structuremodels— model availability, model migration, model-specific bugsquick-win— only if the issue is small and self-contained AND the maintainer would likely accept the change without further design discussionepic— only for explicit tracking issues that group multiple sub-issues together; very rarely the right call from triage
- Hold the proposed labels in memory. Don't apply yet — apply in step 4 so the report reflects what was actually requested.
Calibration:
- A bug can have an area label, and usually does.
- A
questionrarely needs an area label — it's usually best left as a single label until the user clarifies what they're asking about. - Don't reach for
quick-winunless the issue is genuinely small. The label exists to help contributors find approachable work; mislabelling it teaches contributors to ignore the label. documentationissues should also get an area label when the affected doc is area-specific (docs/guide/agent-mode.md→agent-config); skip it for cross-cutting doc changes.
4. Apply the labels
For each issue with at least one proposed label, apply them:
gh issue edit <NUMBER> --repo allenhutchison/obsidian-gemini \
--add-label "<label1>" --add-label "<label2>"gh issue edit --add-label is idempotent — re-running on an already-labeled issue is a no-op. The "no:label" filter in step 2 should already exclude these, but the idempotency is a useful safety net if a previous run was partial.
Capture each application as (issue_number, [labels_applied], one-line-rationale) for the report.
If gh errors on a particular issue (rate limit, transient failure), capture the error, continue with the next issue, and surface the failed issue in the report. A failed run partway through is worse than a complete-with-warnings run.
5. Report
Print a structured summary so the caller (a human, or the daily-update meta-skill) can audit:
Triage report — YYYY-MM-DD
Issues processed: N
Issues labeled: M
Issues abstained: K (left unlabeled, see below)
Errors: E
Labeled:
- #710 bug + tool-execution — "tool call hangs after model returns empty function-call array"
- #715 enhancement + agent-config — "let me share an agent profile via deep link"
- ...
Abstained (need human review):
- #720 — "this is great" (no actionable content)
- ...
Suggested new labels (issue mentioned a category that doesn't exist):
- "ios-mobile" suggested by 3 issues; not currently a label
- ...
Errors:
- #722 — gh returned 502; retry neededWhen invoked by daily-update, this report becomes the "triage-issues" line in the day's PR body — the meta-skill paraphrases the structured form into prose for the PR, but should preserve the issue numbers and applied labels verbatim so a reviewer can audit.
What not to do
- Don't close issues. Even obvious "no longer relevant" cases get a
wontfixlabel at most, and even then only if the maintainer has previously closed similar issues — not on this skill's first hunch. Closing is a maintainer call. - Don't reassign issues or set milestones. This skill is read-and-label only.
- Don't comment on issues. Triage labels are silent — they don't notify the reporter, which is the right behavior. A comment turns a quiet curation pass into noise in the reporter's notifications.
- Don't invent labels. If the issue genuinely calls for a category that doesn't exist (
mobile,windows,gemini-2.5), surface it in the "Suggested new labels" section of the report. Let the maintainer decide whether to create the label. - Don't reapply auto-labels.
codex,automated,dependencies,javascript,github_actionsare owned by automation. If they're missing from a bot-generated PR or issue, that's a CI bug, not a triage gap. - Don't process pull requests. This skill operates on issues only. PR labels are a different vocabulary (auto-applied by Dependabot, CodeRabbit, etc.) and editing them would interfere with that automation. If you accidentally pull PRs in the listing, filter them client-side (
gh issue listshould not include PRs, but verify the result shape). - Don't update the daily changelog or docs. This skill has GitHub side-effects, not working-tree side-effects. The
daily-updatemeta-skill includes the triage summary in the daily PR body even when the working tree is clean.
Calibrating scope
A healthy tracker accumulates 0–3 unlabeled issues per day. A run that processes that many is the steady state. A run that finds >10 means the backlog has grown — flag it so the maintainer knows to look. A run that finds 0 is a no-op; report and stop.
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- microsoft/fluentui★ 20ksame name
- googleapis/mcp-toolbox★ 17ksame name
- googleapis/genai-toolbox★ 17ksame name
- btriapitsyn/openchamber★ 12ksame name
- openchamber/openchamber★ 12ksame name
- agent-substrate/substrate★ 6ksame name
- kubernetes-sigs/agent-sandbox★ 4.5ksame name
- Nexus-Mods/Vortex★ 1.6ksame name
- AGGIB/Stroq★ 19same name
- webpro/skills★ 16same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use clack-cli-patterns, drag-to-reorder 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.
openchamberSkillclack-cli-patterns
Use when creating or modifying OpenChamber CLI commands, prompts, terminal output, non-TTY behavior, `--quiet`, or `--json` behavior.
Also in 3 projects that use this
openchamberSkilldrag-to-reorder
Use when implementing or modifying OpenChamber sortable or drag-to-reorder behavior, especially `@dnd-kit`, touch/mobile interactions, variable-width items, or wrapping layouts.
Also in 3 projects that use this
gabriellstSkilldesktop-shell
Work on the CODM desktop shell — the Tauri v2 host (packages/app/tauri), the react client-side services DI (packages/app/react/src/services — ports + platform services + Container/Token + ServicesProvider), sidecar supervision, or any OS-integration capability (folder picker, notifications, badge, secrets, autostart). Use whenever a task mentions Tauri, the desktop app, sidecars, or an OS capability the react console needs.
Also in 3 projects that use this
- +9 more from openchamber
In this repository8 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- eval-harnessSkill
- gemini-api-devSkill
- obsidian-cliSkill
- obsidian-plugin-developmentSkill
- plugin-testSkill
- ui-ux-guidelinesSkill
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
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.

