[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KX3E7FZ2YCKW567RFP82SB":3,"skill-same:01M6KX3E7FZ2YCKW567RFP82SB":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6KX3E7FZ2YCKW567RFP82SB","triage",null,"Move incoming issues (and optionally external PRs) through triage states to agent-ready briefs.","dougborg\u002Fharness-kit","dougborg","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1261222?v=4","01M6KWS4PB51EYD4ZDJJSGNGB2","Doug Borg","01M6KWS4T8ZZW6SX5QZS9B5BN2",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fproject-management\u002Ftriage\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"write","prs","number","you","states","move","git log","log","ready","edit","read","grep","gh","gh pr","Bash","api","gh issue","issues","pr","2026-11-10 10:12:30",false,"---\nname: triage\ndescription: Move incoming issues (and optionally external PRs) through triage states to agent-ready briefs.\nargument-hint: \"[issue or PR number, or what you want to see]\"\nallowed-tools: Read, Grep, Glob, Write, Edit, Bash(gh issue *), Bash(gh pr *), Bash(gh label *), Bash(gh api *), Bash(git log *)\n---\n\n# Triage\n\nMove issues that arrived raw (bug reports, feature requests, anything you\ndidn't write yourself) through a small state machine, ending in an\n**agent brief** an implementer can work from. Tickets that the to-tickets\nskill produced are agent-ready already; they skip triage.\n\nEvery comment triage posts starts with:\n\n```text\n> *This was generated by AI during triage.*\n```\n\n## Roles\n\nEach triaged issue carries one **category** and one **state**:\n\n- Category: `bug` (something is broken) or `enhancement` (new or better\n  behaviour).\n- State: `needs-triage` (to evaluate), `needs-info` (waiting on the reporter),\n  `ready-for-agent` (fully specified, an agent can take it), `ready-for-human`\n  (needs a person: judgement calls, external access, manual testing), or\n  `wontfix`.\n\nThese are role names. Map each to the repo's real label (`gh label list`); if a\nrole has no label, offer to create it and wait for the user's yes before\nrunning `gh label create`. Flag an issue carrying two state labels and ask\nbefore changing it.\n\nNormal flow: unlabelled → `needs-triage` → `needs-info`, `ready-for-agent`,\n`ready-for-human`, or `wontfix`; `needs-info` returns to `needs-triage` when the\nreporter replies. The user can override any step.\n\n**External PRs.** When the user wants contributors' PRs triaged too, a PR is\nan issue with code attached: the same roles and states, with\n`ready-for-agent` meaning \"an agent should finish or fix this diff\" and\n`ready-for-human` meaning \"ready for a person to merge\". Discover only PRs\nfrom authors who aren't owners, members, or collaborators; an explicitly\nnamed PR is triaged whoever wrote it.\n\n## Show what needs attention\n\nWhen the user asks what's waiting, list three buckets, oldest first, with a\ncount and a one-line summary per item: unlabelled; `needs-triage`; and\n`needs-info` where the reporter has replied since the last triage note. Let\nthe user pick.\n\n## Triage one issue\n\n1. **Gather context.** Read the body, comments, labels, author, and dates (for\n   a PR, the diff too), and any earlier triage notes so you don't re-ask what\n   was answered. Explore the code in the project's `GLOSSARY.md` terms. Check\n   two things: whether the requested behaviour **already exists** (search by\n   concept, not just the issue's wording, and say where you looked), and\n   whether `.out-of-scope\u002F` holds a **prior rejection** of the same idea\n   ([OUT-OF-SCOPE.md](OUT-OF-SCOPE.md)). Done when you can say whether it is\n   already built and whether it was rejected before.\n2. **Recommend** a category and state, with your reasoning and a short summary\n   of the relevant code. Done when the user has given direction.\n3. **Verify the claim.** For a bug, reproduce it from the reporter's steps;\n   when it resists, call the Skill tool with \"diagnosing-bugs\". For a PR, check it out\n   and run what it claims to fix. Report: confirmed (with the code path),\n   failed, or not enough detail, which points to `needs-info`. Done when one\n   of those three is reported.\n4. **Grill if needed.** If the request needs shaping, call the Skill tool\n   twice, for \"grilling\" and \"domain-modeling\". Done when the open questions\n   the brief needs are answered.\n5. **Apply the outcome**, after showing the user what you'll post:\n   - `ready-for-agent`: post an agent brief ([AGENT-BRIEF.md](AGENT-BRIEF.md)).\n   - `ready-for-human`: the same structure, plus why it can't be delegated.\n   - `needs-info`: post triage notes (template below).\n   - `wontfix`, already implemented: point to where it lives and close; this is\n     not a rejection, so nothing goes in `.out-of-scope\u002F`.\n   - `wontfix`, rejected enhancement: record it in `.out-of-scope\u002F`, link that\n     from the closing comment, and close.\n   - `wontfix`, rejected bug: explain politely and close.\n\n   To close, call the Skill tool with \"issue-close\". Done when the labels, the comment, and\n   (for `wontfix`) the closure are all in place.\n\nWhen the user says \"move #42 to ready-for-agent\", trust them: confirm what\nyou'll change, apply it, and ask whether they want a brief written.\n\n## Needs-info notes\n\n```markdown\n## Triage notes\n\n**What we've established so far:**\n\n- point 1\n\n**What we still need from you (@reporter):**\n\n- a specific, answerable question\n```\n\nRecord everything settled so far, so the work isn't lost while waiting.\n","# Triage\n\nMove issues that arrived raw (bug reports, feature requests, anything you\ndidn't write yourself) through a small state machine, ending in an\n**agent brief** an implementer can work from. Tickets that the to-tickets\nskill produced are agent-ready already; they skip triage.\n\nEvery comment triage posts starts with:\n\n```text\n> *This was generated by AI during triage.*\n```\n\n## Roles\n\nEach triaged issue carries one **category** and one **state**:\n\n- Category: `bug` (something is broken) or `enhancement` (new or better\n  behaviour).\n- State: `needs-triage` (to evaluate), `needs-info` (waiting on the reporter),\n  `ready-for-agent` (fully specified, an agent can take it), `ready-for-human`\n  (needs a person: judgement calls, external access, manual testing), or\n  `wontfix`.\n\nThese are role names. Map each to the repo's real label (`gh label list`); if a\nrole has no label, offer to create it and wait for the user's yes before\nrunning `gh label create`. Flag an issue carrying two state labels and ask\nbefore changing it.\n\nNormal flow: unlabelled → `needs-triage` → `needs-info`, `ready-for-agent`,\n`ready-for-human`, or `wontfix`; `needs-info` returns to `needs-triage` when the\nreporter replies. The user can override any step.\n\n**External PRs.** When the user wants contributors' PRs triaged too, a PR is\nan issue with code attached: the same roles and states, with\n`ready-for-agent` meaning \"an agent should finish or fix this diff\" and\n`ready-for-human` meaning \"ready for a person to merge\". Discover only PRs\nfrom authors who aren't owners, members, or collaborators; an explicitly\nnamed PR is triaged whoever wrote it.\n\n## Show what needs attention\n\nWhen the user asks what's waiting, list three buckets, oldest first, with a\ncount and a one-line summary per item: unlabelled; `needs-triage`; and\n`needs-info` where the reporter has replied since the last triage note. Let\nthe user pick.\n\n## Triage one issue\n\n1. **Gather context.** Read the body, comments, labels, author, and dates (for\n   a PR, the diff too), and any earlier triage notes so you don't re-ask what\n   was answered. Explore the code in the project's `GLOSSARY.md` terms. Check\n   two things: whether the requested behaviour **already exists** (search by\n   concept, not just the issue's wording, and say where you looked), and\n   whether `.out-of-scope\u002F` holds a **prior rejection** of the same idea\n   ([OUT-OF-SCOPE.md](OUT-OF-SCOPE.md)). Done when you can say whether it is\n   already built and whether it was rejected before.\n2. **Recommend** a category and state, with your reasoning and a short summary\n   of the relevant code. Done when the user has given direction.\n3. **Verify the claim.** For a bug, reproduce it from the reporter's steps;\n   when it resists, call the Skill tool with \"diagnosing-bugs\". For a PR, check it out\n   and run what it claims to fix. Report: confirmed (with the code path),\n   failed, or not enough detail, which points to `needs-info`. Done when one\n   of those three is reported.\n4. **Grill if needed.** If the request needs shaping, call the Skill tool\n   twice, for \"grilling\" and \"domain-modeling\". Done when the open questions\n   the brief needs are answered.\n5. **Apply the outcome**, after showing the user what you'll post:\n   - `ready-for-agent`: post an agent brief ([AGENT-BRIEF.md](AGENT-BRIEF.md)).\n   - `ready-for-human`: the same structure, plus why it can't be delegated.\n   - `needs-info`: post triage notes (template below).\n   - `wontfix`, already implemented: point to where it lives and close; this is\n     not a rejection, so nothing goes in `.out-of-scope\u002F`.\n   - `wontfix`, rejected enhancement: record it in `.out-of-scope\u002F`, link that\n     from the closing comment, and close.\n   - `wontfix`, rejected bug: explain politely and close.\n\n   To close, call the Skill tool with \"issue-close\". Done when the labels, the comment, and\n   (for `wontfix`) the closure are all in place.\n\nWhen the user says \"move #42 to ready-for-agent\", trust them: confirm what\nyou'll change, apply it, and ask whether they want a brief written.\n\n## Needs-info notes\n\n```markdown\n## Triage notes\n\n**What we've established so far:**\n\n- point 1\n\n**What we still need from you (@reporter):**\n\n- a specific, answerable question\n```\n\nRecord everything settled so far, so the work isn't lost while waiting.\n",{"name":5,"description":7,"allowed-tools":43,"argument-hint":44},"Read, Grep, Glob, Write, Edit, Bash(gh issue *), Bash(gh pr *), Bash(gh label *), Bash(gh api *), Bash(git log *)","[issue or PR number, or what you want to see]","main","023b01bfb4a86fbf1e38a749f1044cce3e5da67d","skills\u002Fproject-management\u002Ftriage",1,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit","https:\u002F\u002Fgithub.com\u002Fdougborg","http:\u002F\u002Fdougborg.org","Platforms and Infrastructure Software Engineer","2026-10-19 05:43:53",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add dougborg\u002Fharness-kit --skill triage",{"tool":60,"command":61},"bunx","bunx skills add dougborg\u002Fharness-kit --skill triage",{"tool":63,"command":64},"pnpm","pnpm dlx skills add dougborg\u002Fharness-kit --skill triage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fproject-management\u002Ftriage\u002FSKILL.md",true,[68,74,78],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"AGENT-BRIEF.md","REFERENCE","参考文档",2539,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fproject-management\u002Ftriage\u002FAGENT-BRIEF.md",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"agents\u002Fopenai.yaml",168,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fproject-management\u002Ftriage\u002Fagents\u002Fopenai.yaml",{"path":79,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":80,"sourceHtmlUrl":81},"OUT-OF-SCOPE.md",1877,"https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fproject-management\u002Ftriage\u002FOUT-OF-SCOPE.md",[83,101,120,153,177,194],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":38},"01M6KX4J65S5FZKMSN5DQNPSZM","teach","Teach yourself a topic over several sessions, with lessons, references, and a record of what you've learned.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fteach\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[85,95,22,96,97,98,99,100],"lessons","with","learned","record","references","sessions",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":112,"publishedAt":38},"01M6KX4FSSG7MHF00JDT5QT0BQ","svg-logo-designer","Generate SVG logos with multiple concepts, layouts, and color variations.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fsvg-logo-designer\u002FSKILL.md",[107],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[113,114,115,116,117,118,96,19,29,119],"logo","designer","svg logo designer","SVG","color","concepts","generate",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":132,"publishedAt":38},"01M6KX4BD3J9MZPPSH4MENH7FP","documentation-writer","Writes and revises human-facing documentation — READMEs, contributor and setup guides, reference pages, architecture notes, CLAUDE.md, and changelog entries. Covers picking the right document type for the question being asked, structuring for skimming, writing examples that actually run, and keeping docs from going stale. Use when creating or rewriting docs, when a README has drifted from the code, or when deciding where a piece of information belongs. For SKILL.md and agent files, use \u002Fskill-writer instead.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fdocumentation-writer\u002FSKILL.md",[126,129],{"categoryNo":127,"categoryName":128,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":130,"categoryName":131,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000036","内容创作者",[133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152],"writer","documentation writer","documentation","entries","changelog","architecture","document","files","use","question","README","notes","code","examples","pages","for","information","guides","type","writing",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":38},"01M6KX47ZJ4ZWHDN3MY8SYAWZZ","adhd-mode","Shapes every response for a reader with ADHD: the next action first, numbered steps, progress restated each turn, tangents held back, concrete time estimates, wins made visible. Stays on for the rest of the session until the reader says \"stop adhd mode\". On Claude Code, the harness-kit:adhd output style does the same without invoking this skill.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fwriting\u002Fadhd-mode\u002FSKILL.md",[],[160,161,162,163,148,164,165,96,166,167,168,169,170,171,172,173,174,175,176,145],"adhd","mode","adhd mode","next","action","kit","output","style","progress","time","back","stop","session","reader","first","REST","harness",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":38},"01M6KX463Z6E18EPDW873GDHKB","wait-what","That last message didn't land: re-explain it with the missing context.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fwait-what\u002FSKILL.md",[],[184,185,186,96,187,188,189,190,191,192,193],"wait","wait what","re","it","missing","message","context","explain","land","last",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":38},"01M6KX43NE1NB0Y2HECY515730","to-questionnaire","Turn a decision you can't make alone into a questionnaire for the one person who can answer it, filled in async or together in a meeting.","https:\u002F\u002Fgithub.com\u002Fdougborg\u002Fharness-kit\u002Fblob\u002Fmain\u002Fskills\u002Fthinking\u002Fto-questionnaire\u002FSKILL.md",[],[201,202,148,203,204,205,206,22,207,187,208,209],"to questionnaire","questionnaire","person","can","answer","meeting","make","async","decision"]