{"slug": "the-triage-skill", "title": "The /triage Skill", "summary": "Matt Pocock released a new AI skill called /triage that automates issue triage on project trackers by categorizing issues, verifying claims, and moving them through a state machine. The skill requires prior setup of a tracker and label mapping, and it waits for user direction before acting. It aims to keep the issue queue sorted and produce verified briefs for agents or humans.", "body_md": "# The /triage Skill\n\nQuickstart:\n\n```\nnpx skills add mattpocock/skills --skill=triage\nnpx skills update triage\n```\n\n[What it does](#what-it-does)\n\n`triage`\n\nmoves issues on your project's tracker through a small **state machine** of triage roles — categorise them, verify the claim, grill them into shape if needed, and leave a ready-for-agent brief.\n\nIt never labels blind. Every triaged item carries exactly one **category** role (`bug`\n\n/ `enhancement`\n\n) and one **state** role (`needs-triage`\n\n, `needs-info`\n\n, `ready-for-agent`\n\n, `ready-for-human`\n\n, `wontfix`\n\n), and it *recommends and waits* — it tells you its category and state call with reasoning, then acts only on your direction. Before anything is promoted to `ready-for-agent`\n\n, it verifies the claim first: a bug gets reproduced, a PR gets checked out and run.\n\n[When to reach for it](#when-to-reach-for-it)\n\nYou invoke this by typing `/triage`\n\nand describing what you want in natural language — the agent won't reach for it on its own. \"Show me anything that needs my attention\", \"let's look at #42\", \"move #42 to ready-for-agent\".\n\nReach for it when your issue tracker has raw, unevaluated reports and you want them sorted, verified, and turned into work an agent or human can pick up. To turn a settled conversation into a fresh spec instead, use [to-spec](https://aihero.dev/skills-to-spec); to split an existing spec into tickets, use [to-tickets](https://aihero.dev/skills-to-tickets). `triage`\n\nis the reverse direction — it processes what's *already* landed in the tracker.\n\n[Prerequisites](#prerequisites)\n\n`triage`\n\nreads and writes your issue tracker, so [setup-matt-pocock-skills](https://aihero.dev/skills-setup-matt-pocock-skills) must have configured the tracker and the label mapping first. The role names above are **canonical** — the actual label strings in your tracker may differ, and that mapping is what setup provides. The config also decides whether external PRs count as a request surface, and who counts as external.\n\n[A PR is an issue with attached code](#a-pr-is-an-issue-with-attached-code)\n\nWhere the tracker treats external pull requests as a request surface, `triage`\n\nruns them through the *same* machine: same category roles, same states, same transitions — the states just read against the diff instead of a report. `ready-for-agent`\n\nmeans a brief is attached and an agent should take the next step on the code; `ready-for-human`\n\nmeans it's ready to merge. Discovery surfaces only external PRs, but an explicitly named PR is always triaged regardless of author.\n\n[Verify before you brief](#verify-before-you-brief)\n\nThe step that separates `triage`\n\nfrom ad-hoc labelling is verification. It reproduces the bug from the reporter's steps, or checks out the PR and runs the tests, and reports back: confirmed with a code path, failed, or insufficient detail (which is itself a strong `needs-info`\n\nsignal). It also runs two codebase checks — **redundancy** (is this already implemented? then it's a `wontfix`\n\n) and **prior rejection** (does `.out-of-scope/`\n\nalready say no?). A confirmed verification makes a far stronger agent brief; guessing does not.\n\n[It's working if](#its-working-if)\n\n- Every item it touches ends with exactly one category role and one state role — never zero, never two conflicting states.\n- It hands you a recommendation with reasoning and waits, rather than relabelling on its own.\n- Bugs get reproduced and PRs get run before anything reaches\n`ready-for-agent`\n\n. - Every comment it posts to the tracker opens with the\n`> *This was generated by AI during triage.*`\n\ndisclaimer.\n\n[Where it fits](#where-it-fits)\n\n`triage`\n\nis the **periodic maintenance** pass over your issue tracker — run it whenever reports pile up, to keep the queue sorted and the `ready-for-agent`\n\ncolumn trustworthy. It sits at the front of the tracker, upstream of the build chain: the briefs it writes are what [tdd](https://aihero.dev/skills-tdd) later picks up to implement. When a request needs sharpening it leans on [grilling](https://aihero.dev/skills-grilling) and [domain-modeling](https://aihero.dev/skills-domain-modeling) to grill it into shape one question at a time. Its close neighbour is [to-spec](https://aihero.dev/skills-to-spec), which populates the tracker from a fresh conversation where `triage`\n\nprocesses what's already there. When you're unsure which skill or flow fits, [ask-matt](https://aihero.dev/skills-ask-matt) routes you.\n\n## Join over 70,000 Developers Becoming AI Heroes\n\n### Engineering fundamentals are your biggest advantage. Learn how to leverage them and leave vibe coding behind.\n\nI respect your privacy. Unsubscribe at any time.\n\n**Share**", "url": "https://wpnews.pro/news/the-triage-skill", "canonical_source": "https://www.aihero.dev/skills-triage", "published_at": "2026-07-08 15:28:44+00:00", "updated_at": "2026-07-09 05:52:40.118128+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["Matt Pocock", "triage", "aihero.dev"], "alternates": {"html": "https://wpnews.pro/news/the-triage-skill", "markdown": "https://wpnews.pro/news/the-triage-skill.md", "text": "https://wpnews.pro/news/the-triage-skill.txt", "jsonld": "https://wpnews.pro/news/the-triage-skill.jsonld"}}