โ† Back to list
joelhooks

gh-issue-triage

by joelhooks

๐Ÿ Multi-agent swarm coordination for OpenCode with learning capabilities, agent issue tracking, and management

โญ 347๐Ÿด 30๐Ÿ“… Jan 23, 2026

SKILL.md


name: gh-issue-triage description: GitHub issue triage workflow with contributor profile extraction. Analyze โ†’ clarify โ†’ file cells โ†’ tag โ†’ implement โ†’ credit. Captures Twitter handles for changeset acknowledgments. tags:

  • github
  • issues
  • triage
  • contributors
  • twitter
  • credits


name: gh-issue-triage description: GitHub issue triage workflow with contributor profile extraction. Analyze โ†’ clarify โ†’ file cells โ†’ tag โ†’ implement โ†’ credit. Captures Twitter handles for changeset acknowledgments. tags:

  • github
  • issues
  • triage
  • contributors
  • twitter
  • credits

GitHub Issue Triage - Analyze โ†’ Clarify โ†’ File โ†’ Tag โ†’ Implement โ†’ Credit

Philosophy

Issues are conversations, not tickets. Treat contributors with respect - they took time to file the issue. Extract their profile info so changesets can properly credit them when fixes ship.

  • Good issue? CLARIFY โ†’ file cell โ†’ acknowledge โ†’ implement โ†’ credit in changeset
  • Bug report? REPRODUCE โ†’ confirm โ†’ file cell โ†’ fix โ†’ credit
  • Feature request? VALIDATE โ†’ check scope โ†’ defer or implement โ†’ credit
  • Duplicate? LINK โ†’ close gently โ†’ no cell needed
  • Not a bug? EXPLAIN โ†’ close kindly โ†’ no cell needed

The Workflow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   ANALYZE โ†’ CLARIFY โ†’ FILE โ†’ IMPLEMENT     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                             โ”‚
โ”‚  1. FETCH ISSUE                             โ”‚
โ”‚     gh issue view <number> --json ...       โ”‚
โ”‚     โ†’ Get title, body, author, state        โ”‚
โ”‚                                             โ”‚
โ”‚  2. GET CONTRIBUTOR PROFILE                 โ”‚
โ”‚     gh api users/<login>                    โ”‚
โ”‚     โ†’ twitter_username, blog, bio, name     โ”‚
โ”‚     โ†’ Store in semantic-memory for credits  โ”‚
โ”‚     semantic-memory_store(                  โ”‚
โ”‚       information="Contributor @{login}:    โ”‚
โ”‚         {name} (@{twitter} on Twitter).     โ”‚
โ”‚         Filed issue #{number}. Bio: {bio}", โ”‚
โ”‚       tags="contributor,{login},issue-{#}"  โ”‚
โ”‚     )                                       โ”‚
โ”‚                                             โ”‚
โ”‚  3. ANALYZE                                 โ”‚
โ”‚     โ†’ Is it a bug? Feature? Question?       โ”‚
โ”‚     โ†’ Can you reproduce?                    โ”‚
โ”‚     โ†’ Is it in scope?                       โ”‚
โ”‚                                             โ”‚
โ”‚  4. CLARIFY (if needed)                     โ”‚
โ”‚     โ†’ Ask for repro steps                   โ”‚
โ”‚     โ†’ Request context/versions              โ”‚
โ”‚     โ†’ Genuine questions, not interrogation  โ”‚
โ”‚                                             โ”‚
โ”‚  5. FILE CELL                               โ”‚
โ”‚     hive_create(                            โ”‚
โ”‚       title="Issue #N: <summary>",          โ”‚
โ”‚       type="bug|feature",                   โ”‚
โ”‚       description="<link + contributor>"    โ”‚
โ”‚     )                                       โ”‚
โ”‚                                             โ”‚
โ”‚  6. TAG ISSUE                               โ”‚
โ”‚     gh issue edit <number> --add-label bug  โ”‚
โ”‚                                             โ”‚
โ”‚  7. IMPLEMENT                               โ”‚
โ”‚     โ†’ Fix the issue                         โ”‚
โ”‚     โ†’ Write tests                           โ”‚
โ”‚     โ†’ Close cell                            โ”‚
โ”‚                                             โ”‚
โ”‚  8. CREDIT IN CHANGESET                     โ”‚
โ”‚     โ†’ Add "Thanks @twitter" or              โ”‚
โ”‚       "Thanks <name> (<blog>)"              โ”‚
โ”‚                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Decision Matrix

Issue TypeActionCreate Cell?Credit?
Valid bug with reproConfirm โ†’ file cell โ†’ fixโœ… Yesโœ… Yes
Bug missing reproAsk for steps โ†’ waitโธ๏ธ Deferโœ… Yes (when fixed)
Feature request in scopeValidate โ†’ file cell โ†’ implementโœ… Yesโœ… Yes
Feature out of scopeExplain why โ†’ closeโŒ NoโŒ No
DuplicateLink to original โ†’ closeโŒ Noโœ… Maybe (if original gets fixed)
Question/supportAnswer โ†’ closeโŒ NoโŒ No
Already fixedConfirm โ†’ closeโŒ Noโœ… Yes (if recent)

SDK Commands

# Get issue details
bun run scripts/issue-summary.ts <owner/repo> <number>
# Returns: title, body, author, state, labels, url

# Get contributor profile (includes Twitter!)
bun run scripts/get-contributor.ts <login> [issue-number]
# Example: bun run scripts/get-contributor.ts justBCheung 42
# Returns:
#   - Profile details (name, twitter_username, blog, bio, avatar_url)
#   - Ready-to-paste changeset credit: "Thanks to Brian Cheung ([@justBCheung]...)"
#   - Ready-to-paste semantic-memory_store command

Quick Triage Pattern

import { getIssueSummary } from "./scripts/issue-summary.ts";
import { getContributor } from "./scripts/get-contributor.ts";

// 1. Fetch issue
const issue = await getIssueSummary("owner/repo", 42);

// 2. Get contributor profile
const contributor = await getContributor(issue.author.login);

// 3. Store contributor in semantic-memory for future credits
semantic-memory_store({
  information: `Contributor @${contributor.login}: ${contributor.name || contributor.login} ${contributor.twitter_username ? `(@${contributor.twitter_username} on Twitter)` : ''}. Filed issue #42. Bio: '${contributor.bio || 'N/A'}'`,
  tags: `contributor,${contributor.login},issue-42`
});

// 4. Analyze and decide
if (issue.body.includes("TypeError") && issue.body.includes("steps to reproduce")) {
  // Valid bug with repro - file cell
  await hive_create({
    title: `Issue #42: ${issue.title}`,
    type: "bug",
    description: `${issue.url}\n\nReported by: ${contributor.name || contributor.login}\nTwitter: ${contributor.twitter_username || 'N/A'}\n\n${issue.body.slice(0, 500)}`
  });
  
  // Tag issue
  await $`gh issue edit 42 --add-label bug`;
} else if (!issue.body.includes("steps to reproduce")) {
  // Missing info - ask nicely
  await $`gh issue comment 42 --body "Hey ${contributor.name || contributor.login}! Could you share steps to reproduce? That'll help me track this down."`;
}

Acknowledgment Comment Templates

After filing cell:

Hey [name]! Thanks for reporting this. I've filed a tracking issue - we'll get this sorted.

After asking for clarification:

Hey [name], could you share [X]? That'll help me nail down what's happening.

After fixing:

Fixed in [commit]! Should be in the next release. Thanks for catching this ๐Ÿ™

When closing as duplicate:

This is a dupe of #[N] - tracking there. Thanks for the report!

When closing as not-a-bug:

This is actually expected behavior because [reason]. If you're trying to [X], here's how: [link/example]

Changeset Credit Templates

With name AND Twitter handle (PREFERRED):

---
"package-name": patch
---

Fixed [bug description]

Thanks to [Name] ([@twitter_username](https://x.com/twitter_username)) for the report!

With Twitter handle only (no name):

---
"package-name": patch
---

Fixed [bug description]

Thanks to [@twitter_username](https://x.com/twitter_username) for the report!

With name only (no Twitter):

---
"package-name": patch
---

Fixed [bug description]

Thanks to [Name] (@github_username on GitHub) for the report!

GitHub username only (no name, no Twitter):

---
"package-name": patch
---

Fixed [bug description]

Thanks to @github_username for the report!

Why include both name and Twitter? Names are human, Twitter handles enable engagement. "Thanks to Brian Cheung (@justBCheung)" gives credit AND makes it easy to tag them when tweeting the release.

Profile Extraction

GitHub user profiles have these useful fields:

{
  "login": "bcheung",
  "name": "Brandon Cheung",
  "twitter_username": "justBCheung",  // โ† THIS!
  "blog": "https://example.com",
  "bio": "Building cool stuff",
  "avatar_url": "...",
  "html_url": "..."
}

Always fetch the profile - it's one API call and gives you credit info for changesets that get tweeted.

Voice Guide (You're Joel the Maintainer)

DO:

  • Be genuine and conversational
  • Use "Hey [name]" not "Hello"
  • Say "Thanks for the report!" not "Thank you for your contribution"
  • Use emoji sparingly (๐Ÿ™ after fixes, not in every comment)
  • Explain WHY something is/isn't a bug
  • Link to docs/examples when helpful

DON'T:

  • Corporate speak ("We appreciate your feedback")
  • Interrogate ("Can you provide more details about...")
  • Over-promise ("We'll fix this ASAP!")
  • Apologize excessively ("Sorry for the inconvenience")
  • Use ticket numbers as if it's Jira ("TKT-1234")

Examples:

โŒ Corporate: "Thank you for your contribution. We have logged this issue and will investigate."

โœ… Joel: "Hey Brandon! Thanks for catching this. I can reproduce it - looks like the auth refresh logic is borked. Tracking in #42."


โŒ Interrogative: "Can you please provide the following information: 1) Version 2) Steps to reproduce 3) Expected behavior 4) Actual behavior"

โœ… Joel: "Hey! Could you share which version you're on? And if you've got repro steps that'd be ๐Ÿ”ฅ"


โŒ Over-promise: "We'll fix this in the next patch release!"

โœ… Joel: "On it! Should have a fix soon."

Integration with Hive

// File cell with issue reference
hive_create({
  title: `Issue #42: Token refresh fails`,
  type: "bug",
  description: `https://github.com/owner/repo/issues/42

Reported by: Brandon Cheung
Twitter: @justBCheung
GitHub: @bcheung

User reports auth tokens aren't refreshing. Repro steps in issue.`
});

// When closing cell, reference in commit
git commit -m "fix: token refresh race condition

Fixes #42 - adds 5min buffer before token expiry.

Thanks @justBCheung for the report!"

References

  • scripts/get-contributor.ts - GitHub user profile fetcher
  • scripts/issue-summary.ts - Issue details with smart formatting
  • GitHub CLI: gh issue view, gh api users/<login>

Score

Total Score

75/100

Based on repository quality metrics

โœ“SKILL.md

SKILL.mdใƒ•ใ‚กใ‚คใƒซใŒๅซใพใ‚Œใฆใ„ใ‚‹

+20
โ—‹LICENSE

ใƒฉใ‚คใ‚ปใƒณใ‚นใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

0/10
โœ“่ชฌๆ˜Žๆ–‡

100ๆ–‡ๅญ—ไปฅไธŠใฎ่ชฌๆ˜ŽใŒใ‚ใ‚‹

+10
โœ“ไบบๆฐ—

GitHub Stars 100ไปฅไธŠ

+5
โœ“ๆœ€่ฟ‘ใฎๆดปๅ‹•

1ใƒถๆœˆไปฅๅ†…ใซๆ›ดๆ–ฐ

+10
โœ“ใƒ•ใ‚ฉใƒผใ‚ฏ

10ๅ›žไปฅไธŠใƒ•ใ‚ฉใƒผใ‚ฏใ•ใ‚Œใฆใ„ใ‚‹

+5
โœ“Issue็ฎก็†

ใ‚ชใƒผใƒ—ใƒณIssueใŒ50ๆœชๆบ€

+5
โœ“่จ€่ชž

ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+5
โœ“ใ‚ฟใ‚ฐ

1ใคไปฅไธŠใฎใ‚ฟใ‚ฐใŒ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹

+5

Reviews

๐Ÿ’ฌ

Reviews coming soon