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`.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add OutlineDriven/odin-codex-plugin --skill github-triage --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Github Triage?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/outlinedriven-github-triage-odin-codex-plugin)More formats (shields.io, HTML) on the badges page.
---
name: github-triage
description: 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`.
---
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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!