
gh-issue-triage
by joelhooks
๐ Multi-agent swarm coordination for OpenCode with learning capabilities, agent issue tracking, and management
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
- 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
- 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 Type | Action | Create Cell? | Credit? |
|---|---|---|---|
| Valid bug with repro | Confirm โ file cell โ fix | โ Yes | โ Yes |
| Bug missing repro | Ask for steps โ wait | โธ๏ธ Defer | โ Yes (when fixed) |
| Feature request in scope | Validate โ file cell โ implement | โ Yes | โ Yes |
| Feature out of scope | Explain why โ close | โ No | โ No |
| Duplicate | Link to original โ close | โ No | โ Maybe (if original gets fixed) |
| Question/support | Answer โ close | โ No | โ No |
| Already fixed | Confirm โ 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 fetcherscripts/issue-summary.ts- Issue details with smart formatting- GitHub CLI:
gh issue view,gh api users/<login>
Score
Total Score
Based on repository quality metrics
SKILL.mdใใกใคใซใๅซใพใใฆใใ
ใฉใคใปใณในใ่จญๅฎใใใฆใใ
100ๆๅญไปฅไธใฎ่ชฌๆใใใ
GitHub Stars 100ไปฅไธ
1ใถๆไปฅๅ ใซๆดๆฐ
10ๅไปฅไธใใฉใผใฏใใใฆใใ
ใชใผใใณIssueใ50ๆชๆบ
ใใญใฐใฉใใณใฐ่จ่ชใ่จญๅฎใใใฆใใ
1ใคไปฅไธใฎใฟใฐใ่จญๅฎใใใฆใใ
Reviews
Reviews coming soon

