Skip to main content
NEW · APP STORE Now on iOS · macOS · iPad Android & Windows soon GET IT
Prompts Issue Triage State Machine

agent operations skill risk: low

Issue Triage State Machine

Directs the model to triage project issues by applying one category role and one state role, following defined transitions, reproduction steps, grilling, and templates for agent br…

  • External action: high

SKILL 3 files

SKILL.md
---
name: triage
description: "Triage issues through a state machine driven by triage roles. Use when user wants to create an issue, triage issues, review incoming bugs or feature requests, prepare issues for an AFK agent, or manage issue workflow."
---
# Triage

Move issues on the project issue tracker through a small state machine of triage roles.

Every comment or issue posted to the issue tracker during triage **must** start with this disclaimer:

```
> *This was generated by AI during triage.*
```

## Reference docs

- [AGENT-BRIEF.md](AGENT-BRIEF.md) — how to write durable agent briefs
- [OUT-OF-SCOPE.md](OUT-OF-SCOPE.md) — how the `.out-of-scope/` knowledge base works

## Roles

Two **category** roles:

- `bug` — something is broken
- `enhancement` — new feature or improvement

Five **state** roles:

- `needs-triage` — maintainer needs to evaluate
- `needs-info` — waiting on reporter for more information
- `ready-for-agent` — fully specified, ready for an AFK agent
- `ready-for-human` — needs human implementation
- `wontfix` — will not be actioned

Every triaged issue should carry exactly one category role and one state role. If state roles conflict, flag it and ask the maintainer before doing anything else.

These are canonical role names — the actual label strings used in the issue tracker may differ. The mapping should have been provided to you - run `/setup-matt-pocock-skills` if not.

State transitions: an unlabeled issue normally goes to `needs-triage` first; from there it moves to `needs-info`, `ready-for-agent`, `ready-for-human`, or `wontfix`. `needs-info` returns to `needs-triage` once the reporter replies. The maintainer can override at any time — flag transitions that look unusual and ask before proceeding.

## Invocation

The maintainer invokes `/triage` and describes what they want in natural language. Interpret the request and act. Examples:

- "Show me anything that needs my attention"
- "Let's look at #42"
- "Move #42 to ready-for-agent"
- "What's ready for agents to pick up?"

## Show what needs attention

Query the issue tracker and present three buckets, oldest first:

1. **Unlabeled** — never triaged.
2. **`needs-triage`** — evaluation in progress.
3. **`needs-info` with reporter activity since the last triage notes** — needs re-evaluation.

Show counts and a one-line summary per issue. Let the maintainer pick.

## Triage a specific issue

1. **Gather context.** Read the full issue (body, comments, labels, reporter, dates). Parse any prior triage notes so you don't re-ask resolved questions. Explore the codebase using the project's domain glossary, respecting ADRs in the area. Read `.out-of-scope/*.md` and surface any prior rejection that resembles this issue.

2. **Recommend.** Tell the maintainer your category and state recommendation with reasoning, plus a brief codebase summary relevant to the issue. Wait for direction.

3. **Reproduce (bugs only).** Before any grilling, attempt reproduction: read the reporter's steps, trace the relevant code, run tests or commands. Report what happened — successful repro with code path, failed repro, or insufficient detail (a strong `needs-info` signal). A confirmed repro makes a much stronger agent brief.

4. **Grill (if needed).** If the issue needs fleshing out, run a `/grill-with-docs` session.

5. **Apply the outcome:**
   - `ready-for-agent` — post an agent brief comment ([AGENT-BRIEF.md](AGENT-BRIEF.md)).
   - `ready-for-human` — same structure as an agent brief, but note why it can't be delegated (judgment calls, external access, design decisions, manual testing).
   - `needs-info` — post triage notes (template below).
   - `wontfix` (bug) — polite explanation, then close.
   - `wontfix` (enhancement) — write to `.out-of-scope/`, link to it from a comment, then close ([OUT-OF-SCOPE.md](OUT-OF-SCOPE.md)).
   - `needs-triage` — apply the role. Optional comment if there's partial progress.

## Quick state override

If the maintainer says "move #42 to ready-for-agent", trust them and apply the role directly. Confirm what you're about to do (role changes, comment, close), then act. Skip grilling. If moving to `ready-for-agent` without a grilling session, ask whether they want to write an agent brief.

## Needs-info template

```markdown
## Triage Notes

**What we've established so far:**

- point 1
- point 2

**What we still need from you (@reporter):**

- question 1
- question 2
```

Capture everything resolved during grilling under "established so far" so the work isn't lost. Questions must be specific and actionable, not "please provide more info".

## Resuming a previous session

If prior triage notes exist on the issue, read them, check whether the reporter has answered any outstanding questions, and present an updated picture before continuing. Don't re-ask resolved questions.

REQUIRED CONTEXT

  • maintainer natural language request
  • issue tracker data (issue body, comments, labels)

OPTIONAL CONTEXT

  • codebase access
  • prior triage notes
  • reference docs (AGENT-BRIEF.md, OUT-OF-SCOPE.md)

ROLES & RULES

  1. Every comment or issue posted to the issue tracker during triage must start with the disclaimer
  2. Every triaged issue should carry exactly one category role and one state role
  3. If state roles conflict, flag it and ask the maintainer before doing anything else
  4. Flag transitions that look unusual and ask before proceeding
  5. Query the issue tracker and present three buckets oldest first when showing what needs attention
  6. Read the full issue, parse prior triage notes, explore the codebase, and read .out-of-scope/*.md before recommending
  7. Attempt reproduction before grilling on bugs
  8. Post an agent brief comment for ready-for-agent
  9. Write to .out-of-scope/ for wontfix enhancements
  10. Capture everything resolved during grilling under established so far in needs-info notes
  11. Read prior triage notes and check reporter answers before resuming

EXPECTED OUTPUT

Format
markdown
Schema
markdown_sections · Triage Notes, What we've established so far, What we still need from you (@reporter)
Constraints
  • always start comments with the AI triage disclaimer
  • use exact role names for labels
  • follow specified templates for triage notes and agent briefs

SUCCESS CRITERIA

  • Apply exactly one category and one state role
  • Follow documented state transitions
  • Use the required disclaimer on all triage output
  • Produce agent briefs or triage notes when appropriate

FAILURE MODES

  • May skip reproduction or grilling steps when moving directly to ready-for-agent
  • May fail to surface prior out-of-scope rejections

EXAMPLES

Includes four example maintainer invocations and a full needs-info markdown template.

CAVEATS

Dependencies
  • AGENT-BRIEF.md
  • OUT-OF-SCOPE.md
  • issue tracker labels mapping
  • /setup-matt-pocock-skills
Missing context
  • Issue tracker API or access method
  • Actual label name mappings for the target repository
  • Content of referenced docs (AGENT-BRIEF.md, OUT-OF-SCOPE.md)
Ambiguities
  • Canonical role names vs actual label strings: mapping assumed provided but no fallback procedure given.
  • "run /setup-matt-pocock-skills if not" ties the prompt to a specific non-generic command.

QUALITY

OVERALL
0.87
CLARITY
0.90
SPECIFICITY
0.92
REUSABILITY
0.78
COMPLETENESS
0.88

IMPROVEMENT SUGGESTIONS

  • Replace the hardcoded `/setup-matt-pocock-skills` with a generic placeholder such as `/setup-label-mapping`.
  • Add an explicit "Label mapping" section with a small table or JSON example the user can fill in.

USAGE

Copy the prompt above and paste it into your AI of choice — Claude, ChatGPT, Gemini, or anywhere else you're working. Replace any placeholder sections with your own context, then ask for the output.

MORE FOR AGENT