From creview
Triage and estimate the cost of review findings, then persist the triage / estimate metadata into the review document (no source fixes)
How this skill is triggered — by the user, by Claude, or both
Slash command
/creview:triageThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You act as the **triage leader**: process the review document, delegate the initial triage to a separate sub-agent, have specialist sub-agents estimate the Will Fix findings, produce an integrated summary, and persist the `triage` / `estimate` metadata into the review document via `render-review.py`.
You act as the triage leader: process the review document, delegate the initial triage to a separate sub-agent, have specialist sub-agents estimate the Will Fix findings, produce an integrated summary, and persist the triage / estimate metadata into the review document via render-review.py.
The triage leader does not perform triage or estimate work themselves; the leader orchestrates the process and aggregates / decides on its outcomes. Triage and estimate work is delegated entirely to sub-agents.
The fix phase is a separate skill (/creview:respond). This skill stops after the triage / estimate decisions are persisted into the document, so the user can review them before fixing.
The user supplies a path to a review document (markdown). When the argument is $ARGUMENTS, interpret it as the path to the review document.
The review document is generated by /creview:start and contains a metadata marker (<!-- METADATA({finding-id}) --> … <!-- /METADATA({finding-id}) -->) for each finding:
### {finding-id} — `{location}`
- **Reviewer:** {reviewer name}
**Finding:**
{description of the issue}
<!-- METADATA({finding-id}) -->
<!-- /METADATA({finding-id}) -->
---
This skill appends the following fields between the markers:
triage (Step 1) — Value format: 🔧 Will Fix (assignee: {specialist}) — {reason} / 🚫 Won't Fix — {reason no action is needed}.estimate (Step 2) — Value format: ▶️ Maintain — Cost: {S/M/L}, Future: {S/M/L}, Signals: {none\|a,b,c,d,e,f} / 🔻 Downgrade — Cost: ..., Future: ..., Signals: ... — {downgrade reason} / 🚧 Alternative — Cost: ..., Future: ..., Signals: ... — FIXME insertion: {direction}.status (set by /creview:respond) and verification (set by /creview:resolve) are out of this skill's scope.
triage / Will Fix → 🔧 (confirmed as a target for fixing)triage / Won't Fix → 🚫 (confirmed as not requiring action)estimate / Maintain → ▶️ (uphold the triage decision and proceed with the fix)estimate / Downgrade → 🔻 (overturn the triage decision and do not fix; no alternative)estimate / Alternative → 🚧 (overturn the triage decision but substitute with a lighter measure such as adding a FIXME comment)For the common prohibitions, see ${CLAUDE_PLUGIN_ROOT}/rules/sub-agent.md. The body of the prompt for each sub-agent is stored in external templates under templates/*.md (each carries a template_id in its frontmatter). When launching via the Agent tool, the leader sends a launch prompt that tells the sub-agent to "Read the template and follow its instructions" with the variable values filled in. The sub-agent includes template_id in its return value. The leader checks that the returned template_id matches the UUID specified for that step (hardcoded per step, see below); on mismatch, relaunch that sub-agent.
For launch-prompt-completeness rules, see ${CLAUDE_PLUGIN_ROOT}/rules/sub-agent.md § Launch prompt completeness.
This skill does not bundle specialist reviewer / fixer agents. The triage sub-agent enumerates the destination project's .claude/agents/*.md (relative to the working directory), reads each agent's frontmatter name / description, and assigns the most suitable agent per finding. When no suitable agent exists (or .claude/agents/ is absent), the assignee is general-purpose. The leader passes the resolved assignee names through to Step 2's subagent_type verbatim.
Each decision is written to an intermediate file, and the aggregator sub-agent compiles them. The leader (you) does not load the body of any decision into context.
{tmp_dir} = .claude/tmp/creview-triage-{timestamp}/
{tmp_dir}/triage.json ← output of the triage sub-agent
{tmp_dir}/estimates/{id}.json ← output of the estimate sub-agents (one file per finding)
{tmp_dir}/events.jsonl ← output of the aggregator sub-agent (input to render-review.py)
Each sub-agent obtains finding-body information such as description / location / existing metadata directly by Read-ing around the METADATA marker in the review document, keyed by id.
The markdown reflection uses {tmp_dir}/events.jsonl, generated by the aggregator sub-agent in one pass. Format:
{"id":"C-1","field":"triage","value":"🔧 Will Fix (assignee: cpp-sensei) — reason"}
{"id":"C-1","field":"estimate","value":"▶️ Maintain — Cost: M, Future: S, Signals: b,d"}
Use the Write tool for the output. Bash cat heredoc is unusable because apostrophes inside values (e.g. Won't Fix) break the outer quoting.
At the start of Step 1, the leader (you) creates {tmp_dir} with mkdir -p {tmp_dir}/estimates and passes {tmp_dir} to each sub-agent.
Delegate triage to a single sub-agent that is separate from the specialist agents who will perform the fixes (to isolate bias). The triage Sub reads the review document directly, extracts findings, and performs stage classification and triage decisions in a single pass. Make it Write the result to a file; do not load the decision body into the leader's context.
Agent(subagent_type="general-purpose", prompt=...). Do not specify the model. Task-specific instructions are stored in the templates/triage.md external template. Example launch prompt:As your first action, you MUST Read `${CLAUDE_PLUGIN_ROOT}/skills/triage/templates/triage.md`. Do not perform any other judgment, action, or tool call before the Read completes. After reading, follow its instructions.
Variables (substitute into the template's {{...}} placeholders):
- plugin_root: ${CLAUDE_PLUGIN_ROOT}
- document_path: {document_path}
- tmp_dir: {tmp_dir}
- previous_round_doc_paths: {previous_round_doc_paths} (in the standard flow, "(none)"; non-empty only when an upstream flow such as /creview:rounds passes a list of past rounds' doc_paths)
Round-specific overrides (apply after following the template's instructions):
- (none)
Include `template_id` (Read from the template's frontmatter) in the return value.
{path, will_fix_count, wontfix_count, by_stage, by_assignee, template_id}). Do not load the triage body.template_id matches 1e9c4f7a-5b82-4d63-a1c8-3f7d2e9b4a15. On mismatch, relaunch the sub-agent.When will_fix_count == 0, skip Step 2 and proceed to Step 3 (compile; persists Won't Fix triage values only).
Loop over the by_assignee array received in Step 1. For each {assignee, ids}, launch a specialist sub-agent in parallel via Agent(subagent_type=assignee, prompt=...). Each sub-agent estimates its assigned ids in a batch and Writes {tmp_dir}/estimates/{id}.json per id.
templates/estimate.md external template:As your first action, you MUST Read `${CLAUDE_PLUGIN_ROOT}/skills/triage/templates/estimate.md`. Do not perform any other judgment, action, or tool call before the Read completes. After reading, follow its instructions.
Variables (substitute into the template's {{...}} placeholders):
- plugin_root: ${CLAUDE_PLUGIN_ROOT}
- ids: {ids}
- document_path: {document_path}
- tmp_dir: {tmp_dir}
Round-specific overrides (apply after following the template's instructions):
- (none)
Include `template_id` (Read from the template's frontmatter) in the return value.
Receive the return value from every estimate agent ({items: [{id, verdict}, ...], template_id}). Verify that each agent's template_id matches 8b2d5f1c-7a93-4e64-b8d1-2c5e9a3f7b48; on mismatch, relaunch that agent. Do not load the estimate body.
Launch the aggregator sub-agent via Agent(subagent_type="review-helper", prompt=...) to generate the estimate result summary (a single table merging review + triage + estimate, plus a link to the review document).
As your first action, you MUST Read `${CLAUDE_PLUGIN_ROOT}/skills/triage/templates/estimate-summary.md`. Do not perform any other judgment, action, or tool call before the Read completes. After reading, follow its instructions.
Variables (substitute into the template's {{...}} placeholders):
- plugin_root: ${CLAUDE_PLUGIN_ROOT}
- tmp_dir: {tmp_dir}
- document_path: {document_path}
Round-specific overrides (apply after following the template's instructions):
- (none)
Include `template_id` (Read from the template's frontmatter) in the return value.
Receive the return value ({summary_path, summary_line, maintain_count, downgrade_count, alternative_count, template_id}). Verify that template_id matches 5c1e9b7a-3d48-4a96-b8e2-7f3c5a1d4b29; on mismatch, relaunch the sub-agent. The leader keeps only summary_line in context and does not load the table body.
The leader (you) does not load decision bodies into context.
Agent(subagent_type="review-helper", prompt=...). Task-specific instructions are stored in the templates/compile.md external template:As your first action, you MUST Read `${CLAUDE_PLUGIN_ROOT}/skills/triage/templates/compile.md`. Do not perform any other judgment, action, or tool call before the Read completes. After reading, follow its instructions.
Variables (substitute into the template's {{...}} placeholders):
- plugin_root: ${CLAUDE_PLUGIN_ROOT}
- tmp_dir: {tmp_dir}
- document_path: {document_path}
Round-specific overrides (apply after following the template's instructions):
- (none)
Include `template_id` (Read from the template's frontmatter) in the return value.
Receive the return value ({fixed_count, code_changed, summary_line, template_id}). Verify that template_id matches 3b7f1c5d-8a29-4e63-b1c8-9d3a7f5e2b41; on mismatch, relaunch the sub-agent. fixed_count is 0 here (no statuses written by this skill); only triage / estimate fields are reflected.
The leader removes {tmp_dir} in one shot:
${CLAUDE_PLUGIN_ROOT}/scripts/rm-tmp.sh {tmp_dir}
The leader prints the summary_line received from the estimate aggregator sub-agent to the console, followed by: "Triage / estimate persisted to {document_path}. Run /creview:respond {document_path} to fix the Maintain / Alternative findings." Only when a detailed table is needed, Read summary_path (available before {tmp_dir} is removed).
npx claudepluginhub opensphere-inc/claude-plugin-marketplace --plugin creviewGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.