Claude
Skills
Sign in
Back

github-triage

Included with Lifetime
$97 forever

Triage GitHub issues through a configurable label-based state machine. Use when user wants to triage incoming issues, prepare issues for an autonomous agent, or move an issue between workflow states. Repo inferred from `git remote`; all GitHub calls go through `gh`.

AI Agents

What this skill does


State-machine triage over GitHub issues. Every comment posted carries an AI disclaimer. Label names are configurable; state semantics are not.

## AI disclaimer (mandatory)

Every comment or new issue body posted during triage MUST begin with:

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

No exceptions.

## Label map (configure per project)

Bind ODIN's abstract state tokens to your repo's actual label names. Edit this block before first use; defaults match Matt Pocock's upstream convention.

```
category:
  bug:        "bug"             # something is broken
  enhancement:"enhancement"     # new feature or improvement
state:
  triage_pending:   "needs-triage"     # maintainer must evaluate
  awaiting_info:    "needs-info"       # waiting on reporter
  ready_for_agent:  "ready-for-agent"  # fully specified, autonomous-agent-suitable
  ready_for_human:  "ready-for-human"  # requires human judgment
  wont_fix:         "wontfix"          # closed, not actioned
```

Body uses the abstract tokens (`triage_pending`, `ready_for_agent`, etc.). Replace with your repo's labels at apply time.

## Invariants

- Every issue carries exactly one `category` label and one `state` label.
- Conflicting state labels = halt and ask the maintainer which is correct.
- Maintainer can override any state directly; flag unusual transitions.

## State machine

| From            | To                | Trigger             | Effect                                                                   |
| --------------- | ----------------- | ------------------- | ------------------------------------------------------------------------ |
| unlabeled       | triage_pending    | skill (first look)  | applies label after presenting recommendation                            |
| unlabeled       | ready_for_agent   | maintainer          | post agent brief, apply label                                            |
| unlabeled       | ready_for_human   | maintainer          | post task summary, apply label                                           |
| unlabeled       | wont_fix          | maintainer          | comment + close                                                          |
| triage_pending  | awaiting_info     | maintainer          | post triage notes capturing progress + reporter questions                |
| triage_pending  | ready_for_agent   | maintainer          | grilling complete; agent brief; apply label                              |
| triage_pending  | ready_for_human   | maintainer          | grilling complete; task summary; apply label                             |
| triage_pending  | wont_fix          | maintainer          | comment + close                                                          |
| awaiting_info   | triage_pending    | skill (reply seen)  | reporter replied; surface for re-evaluation                              |

## Workflows

### Overview ("what needs my attention")

Group open issues into three buckets and display oldest-first:

1. Unlabeled — never triaged.
2. `triage_pending` — needs evaluation or continuation.
3. `awaiting_info` with new activity since the last triage-notes comment.

### Triage a specific issue

1. Dispatch Explore agent to read full issue + all comments + related code paths.
2. Present category and state recommendations with reasoning.
3. For bugs: attempt reproduction. Run repo tests, trace logic.
4. If underspecified, run a `/domain-model` session.
5. Apply outcome per state.

## `awaiting_info` comment template

```markdown
## Triage Notes

**Established so far:**
- point 1
- point 2

**Need from you (@reporter):**
- specific question 1
- specific question 2
```

Reporter questions must be specific and actionable.

## Parallel examples

**TypeScript repo:** label-map binds `ready_for_agent → "agent-ready"`, `awaiting_info → "blocked-on-reporter"`. State machine and prose unchanged.

**Rust repo:** label-map binds `triage_pending → "S-needs-triage"`, `wont_fix → "C-wont-fix"` per Rust-project conventions. State machine and prose unchanged.

Related in AI Agents