triage
Skill2 starsChanged 4 months agoMITView on GitHub
Backlog hygiene sweep - stale items, duplicate pairs, missing acceptance criteria, unblocked-but-unassigned work, and milestone burn, delivered as a report first with only user-approved actions applied. Works on GitHub Issues in tickets mode and on PLAN.md checkboxes in document mode. Use when the user asks to triage, groom, or clean up the backlog or the plan's open tasks.
189 other projects use a version of this.
Adopted by
Most recently taken up by
- udecode/platetheir own version, first seen Nov 8, 2026
- vercel-labs/add-skilltheir own version, first seen Nov 8, 2026
- chrysogonus/power-agentstheir own version, first seen Nov 8, 2026
- ishandutta2007/Awesome-Claude-Skillstheir own version, first seen Nov 8, 2026
- Adelie-Squad/solosquadtheir own version, first seen Nov 8, 2026
- cloudflare/vinexttheir own version, first seen Nov 8, 2026
Used with
Projects with it also use writing-beats, setup-matt-pocock-skills 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.
LesaniSkillwriting-beats
Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.
Also in 66 projects that use this
GoogleSkillsetup-matt-pocock-skills
Configure this repo for the engineering skills — set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
Also in 167 projects that use this
liufeng1976Skillsetup-ts-deep-modules
Wire dependency-cruiser into a TypeScript repo so each package is a deep module — implementation hidden in subfolders, reachable only through its entry-point files. User-invoked.
Also in 42 projects that use this
SethGammonSkillascii-diagram
Generate perfectly aligned ASCII diagrams — architecture, flow, sequence, box-and-arrow. Uses a programmatic character-grid approach so alignment is guaranteed by math, not token prediction. Includes post-render verification.
Also in 4 projects that use this
simo97Skillmigrate-to-shoehorn
Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.
Also in 68 projects that use this
LesaniSkillwriting-shape
Take a markdown file of raw material and shape it into an article through a conversational session — drafting candidate openings, growing the piece paragraph by paragraph, arguing about format (lists, tables, callouts, quotes) at each step. Use when the user has a pile of notes, fragments, or a rough draft and wants help turning it into something publishable.
Also in 63 projects that use this
- +1 more from Lesani
Other versions189 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 189
- mattpocock/skills★ 309ksame name
- withastro/astro★ 64ksame name
- vectorize-io/hindsight★ 60ksame name
- ogulcancelik/herdr★ 47ksame name
- herdrdev/herdr★ 47ksame name
- colinhacks/zod★ 44ksame name
- QuivrHQ/quivr★ 40ksame name
- The-Vibe-Company/quivr★ 40ksame name
- vercel-labs/add-skill★ 39ksame name
- vercel-labs/skills★ 39ksame name
179 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.
In this repository27 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- auditSkill
- challengeSkill
- contract-checkSkill
- depsSkill
- design-auditSkill
- designSkill
- doSkill
- eval-runSkill
- eval-specSkill
- healthSkill
- investigateSkill
- journalSkill
- learnSkill
- migrate-checkSkill
- plan-reviewSkill
- planSkill
- qaSkill
- refactorSkill
- resumeSkill
- retroSkill
- secureSkill
- shipSkill
- ticketSkill
- verifySkill
- whySkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 5 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 176 edited versions we read keep these.
5
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
- Distinctive: line 18
Run before the skill's steps — per invocation, not per session (4.36).
- Very specific: line 36
Never delete a decision. Supersede it: ~~old~~ → Verdict (YYYY-MM-DD): new call — reason.
- Distinctive: line 37
Never fix, tune, or delete a test or eval case to raise a score.
- Distinctive: line 91
Every sweep above is a local comparison — this item against that item, this box against its acceptance.
- Distinctive: line 96
Run it last, over the whole backlog at once, after the local sweeps have already removed the noise.
- Distinctive: line 134
Never a parent that merely renames the group.
“Common” is measured: kept by at least 6 in 10 of the 176 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 — keep the backlog honest
A backlog rots in specific, findable ways. This skill finds them, reports them with evidence, and applies exactly the actions the user approves — nothing more, and nothing silently.
Adjacent skills: /audit docs (read-only drift report; /triage proposes
and applies tracker/plan actions) · /ticket (files one new item; /triage
grooms the many existing ones).
<!-- acstack:runtime -->Run before the skill's steps — per invocation, not per session (4.36); failures degrade to markdown:
link="$(readlink "$HOME/.claude/skills/health" 2>/dev/null || true)" # empty = not symlinked
pack="$(dirname "$(dirname "$link")")" # NEVER trust this unless $link was non-empty
if [ "${link#/}" != "$link" ] && [ -x "$pack/bin/acstack-config" ] && ! "$pack/bin/acstack-config" runtime | grep -q '=off'; then
"$pack/bin/acstack-config" || true # resolved keys, with sources
"$pack/bin/acstack-update-check" || true # ≤1 fetch/day; silent ONLY if already checked today
"$pack/bin/acstack-recall" || true # LEARNINGS.md + bug-class names, capped 3KB
else
echo "runtime off — proceeding without recall/update-check"
fi<!-- /acstack:runtime --><!-- acstack:principles -->Operating principles
- Be direct. Push back in writing when the plan or the user is wrong. No sycophancy.
- Never delete a decision. Supersede it:
~~old~~ → **Verdict (YYYY-MM-DD):** new call — reason. - Never fix, tune, or delete a test or eval case to raise a score. Log the miss honestly and leave the case unchanged.
- Name exact things: regex patterns, function signatures, model names, before → after numbers. Never "fixed bugs".
- Attribution: follow the project's
attributionsetting (defaultnone) — no AI-tool mentions in generated docs, no attribution trailers in commits or PRs. Commit with explicit-m/-Fmessages only. - Config: read
.claude/acstack.mdat the project root (fall back to~/.claude/acstack.md) before acting.## Settingskeys override pack defaults; a## <skill-name>section overrides both. Unknown keys and sections are ignored. - Docs: BRIEF.md (frozen seed) / PLAN.md (living plan) / JOURNAL.md (rolling journal). If the repo uses legacy names (PLANNING_PROMPT.md / PLANNING.md / STATUS.md), use those instead — never create both.
- Recall: if
LEARNINGS.mdexists at the project root, read it before starting. - Conduct: follow the
acstack-conductblock in this repo's AGENTS.md — the word is the mode; the user sets the pace. - Hackathon lane: if the project's AGENTS.md carries the
acstack:hackathon-laneblock, only/dochanges the repository during the event. Any other skill that would write a tracked file, commit or push says what it would have done and stops; a change that is not a task goes through the lane's operator route.
<!-- /acstack:principles -->One document set. Resolve exactly ONE BRIEF/PLAN/JOURNAL set and name
its path in the report's scope line. If more than one candidate set exists
— a monorepo, nested products, an apps/* tree each with its own docs —
list the candidates and STOP. Never pick one silently: a confident answer
about the wrong product is worse than no answer (conduct rule 8).
Stance: report, then apply
The report opens with a one-line verdict — backlog healthy or
<N> findings across <M> categories — before any finding. Then the
numbered findings, each with its evidence and its proposed action.
Then the user picks; only approved actions are executed, and the
report closes with the applied-actions list — each action confirmed
by name.
Nothing is ever silently deleted or closed: every close carries a written
reason. Supersede-don't-delete applies to backlogs exactly as it applies
to decisions.
Applied actions edit the plan in place, so they collide with other sessions. Closing or reopening a box changes any count derived from those boxes; two sessions closing different items both hand-write the same new total, and git auto-merges the identical edit with no conflict — measured 2026-09-14, leaving the number one out. So: apply the box changes, and re-derive any stored total with the project's own tool rather than editing the digit. State in the applied-actions list that the post-merge total belongs to whoever integrates, since this branch cannot see what another session closed.
Config: stale-days from a ## triage section in .claude/acstack.md
(default 30).
Mode: the sweep itself
The sweeps are mode-specific and mutually exclusive — read exactly one,
chosen by the resolved tracking config, and not the other:
tracking: tickets→references/tickets-mode.mdtracking: document(the default) →references/document-mode.md
Root-cause clustering below runs in BOTH modes, after whichever sweep you read.
Root-cause clustering (both modes)
Every sweep above is a local comparison — this item against that item, this box against its acceptance. Clustering is the global one: twelve items that are all one cause is a finding no pairwise duplicate check can see, because no two of them are duplicates.
Run it last, over the whole backlog at once, after the local sweeps have already removed the noise.
A cluster needs a stated cause, not a shared topic. "These five all mention the parser" is a tag. "These five all fail because the tokenizer drops the final field when the input has no trailing newline" is a cause. The test is one sentence: would fixing the named cause close every item in the cluster? If some would survive it, the cluster is wrong — split it or drop it.
The bar, all three required:
- Three or more items to propose a PARENT. A parent over two items is
more structure than it earns.
But a same-cause pair is still named, never dropped. Two items sharing
a cause are not a duplicate pair — the duplicate sweep keys on overlapping
text and will not see them, so a pair that falls below this bar would
otherwise vanish between the two sweeps. Report it under
Related pairs: the cause, both items, and the evidence, with no parent proposed. Found by shakedown 7, where two items sharing a UTC-boundary cause were invisible to both passes. - A cause written as a sentence, naming the mechanism — not a component, a label, or a theme.
- Evidence per member: the quoted line, error, or acceptance that ties that specific item to that cause. An item nobody can tie to the cause is not in the cluster.
Propose nothing when the backlog is genuinely independent. This is the half that keeps the pass honest: a backlog of unrelated work is the normal, healthy state, and a clustering step that always finds clusters is astrology. Say plainly that no root-cause groups were found and move on — that is a real result, not a failed sweep. Never widen a cause until items fit it; a cause broad enough to cover everything explains nothing.
What the report proposes, per cluster:
- A parent — in tickets mode a new issue titled by the CAUSE; in document mode a parent task in PLAN.md with the children as its subtasks. Never a parent that merely renames the group.
- The children redirected, each with the same standardized line so the
tree stays navigable:
rolled up into <parent> — same cause: <cause>. - What stays independent, listed. An item that resisted clustering is information, not a leftover.
Approval-gated exactly like the rest of this skill: the clusters are proposed with their evidence, and nothing is filed, edited, or closed until the user says so. Getting a cluster wrong reshapes someone's whole backlog, so this is the sweep where a wrong proposal costs the most.
Hard rules
- Findings without evidence (the quoted text, the failing command, the date arithmetic) don't make the report.
- The report states what was NOT swept (e.g. acceptance commands too expensive to run) — a sweep that implies totality it didn't do is drift about drift.
- Applied actions are listed at the end exactly as executed — issue numbers, label names, PLAN.md lines — so the JOURNAL entry can cite them.
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.

