with one click
cyclus-triage
Multi-role consensus triage of an issue backlog.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Multi-role consensus triage of an issue backlog.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
TaskExecutionKind: execute a plan to completion with per-task verification
Design a well-formed Cyclus loop: RECOGNIZE→SPECIFY→DECOMPOSE via Planner+Architect+Critic consensus (≤3 rounds)
ConsensusKind: Planner+Architect+Critic deliberate to produce a verified implementation plan
pipeline: interview→plan→execute→QA→verify (idea→code)
Socratic reqs interview; clarify vague/ambiguous goals
parallel web research; subagents→synthesis→cite-verify
| name | cyclus-triage |
| description | Multi-role consensus triage of an issue backlog. |
| version | 0.1.0 |
| metadata | {"hermes":{"tags":["triage","multi-agent","consensus","backlog"],"category":"omh","requires_toolsets":["terminal","omh","delegation"]}} |
v0.1 status: This skill is deliberately small. It ships with two roles (Maintainer, Skeptic) and is being battle-tested before more roles are added. The full design hypothesis (Maintainer / Operator / Architect / Member-advocate / Skeptic) lives in witt3rd/hermes-cyclus#9. The next concrete milestone (Operator role for version-cut planning pressure) is tracked at witt3rd/hermes-cyclus#11. Roles will be added as lived rounds surface real tensions that the current set cannot represent. The discipline here is learn through use, then expand — the inverse of authoring all five roles up-front against imagined friction.
cyclus-interview then cyclus-plan)docs/triage/PROCESS.md if it has one)docs/triage/ for delta-since-last-pass framingdelegate_task tool must be availableBefore dispatching any roles, the orchestrator gathers:
gh issue list --state open --limit <N>. Note count, label distribution, age distribution.docs/triage/YYYY-MM-DD-*.md is delta-since-last-pass anchor.Phase 0's output is a ~500-word context package that all subagents will receive. Same shape as cyclus-plan Phase 0.
v0.1 ships two roles. Future versions will add Operator, Architect, Member-advocate.
# v18: load role prompt before delegating
triage_maintainer_prompt = skill_view(name="cyclus-triage", file_path="references/role-triage-maintainer.md")
delegate_task(
goal="Vet each issue in the attached inventory against current code. Produce a per-issue verdict (stale/recast/live/partial-stale/out-of-scope) with code-anchored reasoning. Repo HEAD: <ref>. Inventory: <list>",
context="## Role\n{triage_maintainer_prompt}\n\n# Project context\n\n<context-package>\n\n# Inventory\n\n<full issue bodies, not just titles>"
)
The Maintainer's pass is per-issue. Output is structured (one block per issue with verdict + anchor + reasoning + close-comment-or-recast-spec).
# v18: load role prompt before delegating
triage_skeptic_prompt = skill_view(name="cyclus-triage", file_path="references/role-triage-skeptic.md")
delegate_task(
goal="For each LIVE issue from the Maintainer pass, apply skeptical pressure: keep/drop/dedup/refile-smaller/wait-for-recurrence. Stale/out-of-scope issues do not need skeptical review.",
context="## Role\n{triage_skeptic_prompt}\n\n# Project context\n\n<context-package>\n\n# Maintainer verdicts\n\n<Maintainer's structured output>\n\n# Full inventory (for cross-reference)\n\n<full issue bodies>"
)
The Skeptic only reviews issues the Maintainer marked live or recast. Stale/out-of-scope are already moving to close; double-pressure on them wastes the role's attention.
The orchestrator combines Maintainer + Skeptic verdicts. The matrix below is authoritative — every Maintainer × Skeptic combination resolves to a specific disposition. Combinations not enumerated here are the only cases that escalate to user as a true conflict.
The Maintainer verdict partial-stale (issue contains multiple sub-claims; some stale, some live) is treated identically to recast for matrix purposes — both signal "body needs surgery, possibly extensive." Maintainer output should still distinguish them so the recast spec can name which sub-claims are stale vs live, but the disposition resolution is the same.
| Maintainer | Skeptic | Resolved disposition |
|---|---|---|
| stale | (not run) | close — Maintainer pointer-comment |
| out-of-scope | (not run) | close — refile-target named |
| recast / partial-stale | keep | recast body, keep open |
| recast / partial-stale | drop / wait-for-recurrence | close — Skeptic pointer-comment (the body needs work AND the underlying friction may not be load-bearing; combined verdict is "not worth the surgery") |
| recast / partial-stale | dedup | close + comment-on-covering-issue |
| recast / partial-stale | refile-smaller | close + reopen-as-smaller |
| live | keep | live |
| live | drop / wait-for-recurrence | close — Skeptic pointer-comment |
| live | dedup | close + comment-on-covering-issue |
| live | refile-smaller | close + reopen-as-smaller |
The matrix is exhaustive over the verdict types in this skill (v0.1). When future versions add roles or new verdict types, the matrix expands; conflicts surface only when a new combination doesn't have a resolution.
The escalation case (rare in v0.1): if a Skeptic returns needs lived signal (the role's escape hatch when verdict cannot be determined) — or any other unresolved value the role catalog doesn't enumerate — that's a true escalation. The orchestrator surfaces these to user as specific decision questions. The orchestrator's job is to distill, not to decide for the user when the matrix doesn't resolve.
The orchestrator produces:
docs/triage/YYYY-MM-DD-<descriptor>.md (in the host repo, not in this skill repo) using the host project's template. If no template exists, use the structure documented in references/triage-doc-template.md./tmp/closeN.md), recasts (with proposed body diffs), refile-smaller drafts.The orchestrator stages, does not execute by default. The user sign-off gate happens between Phase 2 and execution. See references/orchestrator-review-template.md.
After user approval:
| Role | Reference | Pressure |
|---|---|---|
| Triage Maintainer | references/role-triage-maintainer.md | Code-anchored ground truth: is the premise live? |
| Triage Skeptic | references/role-triage-skeptic.md | Pruning: does this earn its slot? |
Roles planned for v0.2+ (witt3rd/hermes-cyclus#9):
These will be added when lived rounds surface tensions the current two cannot represent. Resist authoring them ahead of evidence.
A run is done when:
Maintainer's job is to anchor against current code. If the orchestrator hasn't already mapped recent migrations/refactors, the Maintainer discovers them in-flight and wastes attention re-deriving what Phase 0 should have given.
Issues the Maintainer marked stale or out-of-scope are already moving to close. Sending them to Skeptic produces noise (Skeptic will say "drop" on stale issues, which adds nothing).
Triage closes are durable on the issue tracker. Always stage closures with body files at /tmp/closeN.md and let the user approve before executing the actual close commands. The skill that runs the close after approval should loop in shell with --comment "$(cat /tmp/closeN.md)" (multi-paragraph quoted bodies through terminal() from execute_code fail silently — lesson from janus round 1).
The verdict-combination matrix in Phase 1 Step 3 is authoritative — live + drop resolves to "close — Skeptic pointer-comment", not to "user conflict." The matrix encodes our considered judgment that "Maintainer says live, Skeptic says drop" means the issue is real but not worth the slot it consumes; closing with a clear pointer-comment that invites refile-on-recurrence is the correct disposition, not a user-decision question.
True escalations are: the Skeptic returns needs lived signal (escape hatch), the Maintainer returns needs investigation (escape hatch), or some future role's verdict produces a combination the matrix doesn't enumerate. These are rare in v0.1 and surface to user as specific decision questions, not as "there are some conflicts."
The dispatcher should also feel free to override the matrix for individual issues when their own bar applied to the verdict produces a different read — but that's a dispatcher-judgment call, not a matrix conflict. Note overrides explicitly in the orchestrator review (cyclus-plan-dispatcher P25 — skepticism over deference applies here too).
The triage doc under docs/triage/YYYY-MM-DD-*.md is the round's audit trail. It names what was decided, what was deferred, and what the round taught. A round without a doc didn't happen.
This skill is v0.1 deliberately. The OMH#9 design names five roles; only two ship today. Adding Operator / Architect / Member-advocate before lived rounds surface real tensions for them is the "imagined friction" failure mode. Wait for evidence.
| Trigger | What it means |
|---|---|
| About to cut vN+1 | Output targets version field. Maintainer dominates. |
| Just shipped major migration | Cleanup pass. Mostly closures. |
| Backlog feels heavy | Skeptic's pressure dominates. |
| Periodic hygiene | Low priority. Defer until a real trigger exists. |
The trigger shapes how you weight role outputs. Name it before dispatching.
Does the project have:
docs/triage/PROCESS.md (two-mode discipline: quick-file vs grooming)?If not, propose authoring these first — triage produces dated docs and board updates; without the infrastructure, output evaporates.
T1 — Skipping ground-truth pre-flight. Bad ground truth produces stale verdicts that look authoritative. Spend 10 minutes mapping recent migrations before dispatching.
T2 — Writing the triage doc before the run. Don't validate pre-decided verdicts. Write the doc from the run output.
T3 — Scope creep. If a role surfaces "we should redesign X" — that's a ralplan, not triage. Note in deferred section.
T4 — Rubber-stamping closures. Read every close comment. Ratify each verdict, don't rubber-stamp.
T5 — Vague conflict presentation. Frame conflicts as specific decision questions with your recommendation, not as "there's some disagreement."
T6 — Running too often. If dispatching weekly, the problem is upstream (filing discipline, backlog size), not triage frequency.
references/role-triage-maintainer.md — Maintainer role prompt (load via skill_view)references/role-triage-skeptic.md — Skeptic role promptreferences/triage-doc-template.md — Round doc structurereferences/orchestrator-review-template.md — Pre-execution review checklistwitt3rd/hermes-cyclus#9 — design tracking issue