triage-issues
Skill2 starsChanged 4 days agoMITView on GitHub
Manually triage and groom a-novel/a-novel-kit issue boards: refine scope, priority, size, dates, and status. Use when asked to triage, groom, prioritize, or prepare planning.
16 other projects use a version of this.
Adopted by
Most recently taken up by
- Nexus-Mods/Vortextheir own version, first seen Nov 1, 2026
- jlu-lujing/TaskHuntertheir own version, first seen Oct 23, 2026
- TanKaizokuO/claude-skillstheir own version, first seen Oct 20, 2026
- webpro/skillstheir own version, first seen Oct 15, 2026
- AGGIB/Stroqtheir own version, first seen Oct 13, 2026
- agent-substrate/substratetheir own version, first seen Oct 8, 2026
Used with
Projects 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
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★ 13ksame name
- openchamber/openchamber★ 13ksame name
- agent-substrate/substrate★ 6.2ksame name
- kubernetes-sigs/agent-sandbox★ 4.5ksame name
- Nexus-Mods/Vortex★ 1.6ksame name
- allenhutchison/obsidian-gemini★ 534same name
- AGGIB/Stroq★ 213same 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.
In this repository40 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- attribute-ai-commitsSkill
- check-accessSkill
- choose-dependencySkill
- coordinate-landingSkill
- develop-featureSkill
- document-codeSkill
- git-conventionsSkill
- implement-featureSkill
- manage-versionsSkill
- monitor-ciSkill
- open-pull-requestSkill
- plan-client-server-boundarySkill
- plan-featureSkill
- plan-ui-designSkill
- prefer-small-solutionsSkill
- prepare-releaseSkill
- register-ai-agentSkill
- resolve-pr-feedbackSkill
- use-a-novel-cliSkill
- use-discordSkill
- write-bash-scriptsSkill
- write-design-systemSkill
- write-dockerfilesSkill
- write-frontendSkill
- write-frontend-testsSkill
- write-github-actionsSkill
- write-go-kitSkill
- write-go-serviceSkill
- write-goSkill
- write-go-testsSkill
- write-infraSkill
- write-js-packageSkill
- write-openapiSkill
- write-platformSkill
- write-project-docsSkill
- write-protoSkill
- write-sqlSkill
- write-svelteSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 1 is distinctive, and 3 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 76
Read the fields off that item node (ProjectV2ItemFieldSingleSelectValue).
- Very specific: line 84
Add it to the org board if it isn't already (gh project item-add).
- Very specific: line 104
Every actionable ticket gets a Size (XS–XL).
- Distinctive: line 118
Treat both as soft commitments that drive the _next_ pass — a slipped date is information, not a failure.
“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 & groom the issue set
Planning creates issues; triage keeps them honest. Over time priorities drift, scopes change,
drafts pile up, active work loses its due date, and the Triage status fills with un-assessed
reports. This is the recurring pass that fixes all of that — run manually, as a planning meeting
with the operator, not on a timer. A weekly cadence is recommended, but the human pulls the trigger.
plan-feature sets a ticket's fields at creation; this pass keeps them true over time.
Posture
- Scope to the work in hand. "Clean the board" means the milestone — or the single task — this session is already about, not every open item. Survey what that work touches, fix what drifted there, and leave the rest alone: an unrelated ticket belongs to someone else's pass, and reporting it is noise dressed as diligence. Sweep the whole board only when the operator asks for that explicitly.
- This is a planning conversation, not a batch job. Propose field values; the operator confirms —
especially due dates, which are commitments. Use the
resolve-pr-feedbackissue-comment loop to ask and record decisions where useful. - Lead with priority. Work the set in Priority order (P0 → P4). A pass outputs a clear "what's next": the P0/P1 items that aren't already moving.
- Keep the board honest. The invariants a pass enforces: every actionable ticket has a Type, a
Priority, and a Size; every item that belongs to a milestone actually carries it — boarding
an item (
--project) never sets its Milestone, so scan for a Stage-tagged item with an empty Milestone (the tell that--milestonewas forgotten at creation) and add it; no active issue lacks a due date; no items lingering inTriage; no rotting drafts.
The pass
1. Survey both boards
gh project item-list 7 --owner a-novel --format json --limit 200
gh project item-list 1 --owner a-novel-kit --format json --limit 200Both orgs, because one milestone's work is usually split across them. Then filter to the work in hand (see Posture). A milestone is per-repo, so its copies all share a title: selecting on that gathers every repo's share of it in one pass.
gh project item-list 7 --owner a-novel --format json --limit 200 \
--jq '.items[] | select(.milestone.title == "<the goal>")'gh's own --jq flag runs the expression, so this needs no external jq on the box.
Drop the filter only for a full sweep the operator has asked for.
For each item in scope read: Type, Priority, Size, Status, Target date, Milestone, linked PRs,
blocked-by, and sub-issue progress. The Triage queue is every board item sitting in the Triage
status, where an un-assessed incoming issue lands; filter the item-list above by
Status == Triage.
item-list is a scan, not evidence. It has returned a single item for a populated board even at
--limit 1200, which reads as "everything else was archived" when nothing was. Before concluding an
item is missing or archived, confirm against the issue itself:
gh api graphql -f query='query { repository(owner:"<org>", name:"<repo>") {
issue(number: <n>) { id projectItems(first:10, includeArchived:true) {
nodes { id isArchived project { number title } } } } } }'Read the fields off that item node (ProjectV2ItemFieldSingleSelectValue).
2. Drain the triage queue (un-assessed → assessed)
For each item in the Triage status, with the operator:
- Confirm or assign its Type (Epic / Feature / Task / Bug).
- Assign Priority and Size (weight).
- Add it to the org board if it isn't already (
gh project item-add). - Assess it and move its Status out of
Triage—Backlogfor a not-yet-ready draft,Readywhen it can be picked up (gh project item-edit). - An empty
Triagestatus is the goal of a full sweep — no item should linger un-assessed (the cli/cli "First Responder" model). In a scoped pass, drain only what belongs to the work in hand; an unrelated arrival is worth one line as a signal, not a detour. - Escalation tickets (label
escalation) are a distinct intake — the governance automation files them inTriagewhen something needs a human (a stale backport, a stale required check, a failed emergency path; seecoordinate-landing). Don't size them as planning work: act on the underlying condition, then let theescalateaction resolve the ticket (Status →Applied) as it self-heals, or close it once handled. A pile of openescalationtickets is an ops signal.
3. Prioritise
Order the actionable set by Priority and surface the P0/P1 items not yet In progress — the planning focus. Re-balance priorities with the operator where reality has drifted (a P2 now blocking a release becomes P1; a P1 nobody will touch becomes P3).
4. Weights
Every actionable ticket gets a Size (XS–XL). Assign where missing; re-estimate where the
scope changed since creation. A ticket whose size keeps growing should be split into sub-issues
(hand back to plan-feature).
5. Due dates — with the operator
- Active issues — those with an open linked PR — must have a Target date. Agree it with the operator. An active issue with no due date is the single thing this pass exists to catch.
Milestones get a due date too, set/adjusted to the release plan:
gh api repos/<owner>/<repo>/milestones/<number> -X PATCH -f due_on=2026-07-15T00:00:00Z- Treat both as soft commitments that drive the next pass — a slipped date is information, not a failure. Every in-flight thing needs a date to slip from.
6. Refine drafts nearing production
The Backlog drafts plan-feature stages ahead (future stages, blocked-by their predecessors) need
grooming as they approach activation:
- For a draft about to go active: firm up the body (is the approach still right?), set its Size/Priority, confirm its blocked-by is now satisfied, and move Backlog → Ready.
- Delete drafts the plan has overtaken (
gh issue delete <n> --yes) — a not-yet-started draft is cheap to discard, and a stale one is worse than none.
7. Status is single-writer
The board's bot derives Status from what happened to a Pull Request, so In progress, In review,
and Awaiting release are not yours to set: a manual edit will not stick. Your part is the
Triage → Ready move from the drain above, plus a meta task's final Applied, which has no Pull
Request to read from. Everything else follows the work.
Check for siblings before closing a child. Sub-issue progress of 1 of 1 is indistinguishable from
"all children done", so closing an Epic or Initiative's only sub-issue derives the parent as
complete: Status moves to Done, the auto-close workflow closes it, and it disappears from the board.
Either hold the child open until siblings exist, or expect the close and reopen the parent straight
after — gh issue reopen <parent>, then set its Status again by hand, since reopening does not
restore board fields the automation overwrote. A parent with several children is safe; this bites
only at the start of a plan, when the first child is the only child.
8. Keep the Stage field accurate (absolute scheme)
The Stage board field is absolute — Stage 1 … Stage N (six on the board today), plus
Unscheduled for work not yet placed in a stage. A staged milestone's epics and their child tasks
each carry their stage's number, set once at creation (per the plan-feature field habit) and
never shifted: an item at Stage 3 stays Stage 3 for good. "What's next" is a derivation, not
a label — the lowest-numbered stage not yet done. A finished stage keeps its number; its epic follows
the normal Done → archive lifecycle rather than being relabelled.
So this pass has nothing to shift. Check only that new items carry the right stage number — a human call about which stage the work belongs to — and that an epic and its tasks agree on it. No automation reads the field yet: you set it by hand at creation and read "what's next" off the numbers yourself.
9. Report
Close the pass with a tight summary for the operator, and end it with the session recap table
(memory session-recap-table): every issue that still needs the operator — decisions, due dates to
commit, promotions pending — as a row whose id is an inline link to the issue, so they can jump
straight there. Cover it in:
- The prioritised P0/P1 "what's next" list.
- What was triaged (queue drained), re-prioritised, and re-sized.
- Due dates set (issues + milestones) and any the operator still needs to commit.
- Drafts promoted (Ready) or deleted.
- Anything still needing the operator's decision.
gh quick reference
| Action | Command |
| List board items | gh project item-list <7|1> --owner <org> --format json --limit 200 |
| Find the triage queue | filter gh project item-list output to items with Status == Triage |
| Set Priority / Size / Status | gh project item-edit --id <item> --project-id <proj> --field-id <f> --single-select-option-id <o> |
| Set a due date (Target date) | gh project item-edit --id <item> --project-id <proj> --field-id <date-field> --date YYYY-MM-DD |
| Set a milestone due date | gh api repos/<o>/<r>/milestones/<n> -X PATCH -f due_on=<RFC3339> |
| Leave Triage (assess an item) | move Status Triage → Backlog/Ready via gh project item-edit |
| Promote a draft | move Status Backlog → Ready via gh project item-edit |
| Delete an overtaken draft | gh issue delete <n> --repo <o>/<r> --yes |
Field / option / item IDs come from gh project field-list <num> --owner <org> and
gh project item-list. Scopes: repo + project, on top of write on the board, which
check-access checks. On an authorization failure, follow plan-feature →
Token scopes: ask for a missing scope, report a missing role.
How this composes
plan-feature (creates issues, sets fields at creation)
│
▼
triage-issues (recurring manual pass: prioritise · weigh · due-date · refine drafts · drain triage)
│
├─ hands a near-ready draft back to plan-feature when it needs real (re)design
├─ uses resolve-pr-feedback's comment loop to ask/record operator decisions on an issue
└─ feeds the P0/P1 "what's next" into implement-feature / manage-versionsPrinciples
- Scope before sweep — the work the session is about; the whole board only on request.
- Lead with priority — a pass is judged by whether "what's next" is unambiguous afterwards.
- Honest invariants — Type + Priority + Size on every actionable ticket; active ⇒ a due date;
nothing lingering in
Triage. - Dates are for triage, not theatre — they make the next decision, and a slip is information.
- Drafts are living — refine the ones going active, delete the ones the plan has overtaken.
- Propose, the operator commits — especially dates; triage is a conversation, not an edict.
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.

