name: gh-discussions-answerer description: Find and answer unanswered GitHub discussions. Activate when user wants to contribute to open source discussions, help answer GitHub questions, or find discussions to answer. Delegates all work to subagents. allowed-tools: [Task]
GitHub Discussions Answerer
All work delegated to general-purpose subagents.
Constraints
- Target: 10 answers → find 1.5x candidates
- Post ALL verified (may be lower or higher, that's fine)
- 100% code-verified via
ghCLI - Discard only uncertain → post everything that passes
- Auto-post immediately after analysis
- Read-only until Phase 3 → Phases 1-2 use only GET/query operations; no mutations
Workflow
Phase 1: Discovery
Search for unanswered discussions via GitHub API:
Task(subagent_type="general-purpose", model="haiku", prompt="
Run these searches to find unanswered discussions. Calculate dates from today.
SEARCH 1 - Last 30 days, Q&A with no replies:
gh api graphql -f query='{
search(query: \"is:open comments:0 created:>YYYY-MM-DD category:Q&A NOT author:bot\", type: DISCUSSION, first: 100) {
nodes { ... on Discussion { title number url bodyText repository { nameWithOwner } category { name } } }
}
}'
SEARCH 2 - Popular repos (stars>100), any unanswered:
gh api graphql -f query='{
search(query: \"is:open comments:0 stars:>100 NOT author:bot NOT title:RFC\", type: DISCUSSION, first: 100) {
nodes { ... on Discussion { title number url bodyText repository { nameWithOwner } category { name } } }
}
}'
SEARCH 3 - Last 14 days, Help/Support categories:
gh api graphql -f query='{
search(query: \"is:open comments:0 created:>YYYY-MM-DD NOT author:bot NOT title:proposal\", type: DISCUSSION, first: 100) {
nodes { ... on Discussion { title number url bodyText repository { nameWithOwner } category { name } } }
}
}'
Merge results, deduplicate by repo#number.
INCLUDE categories (prioritized):
1. Q&A, Questions, Help, Support, Troubleshooting (highest priority)
2. General (if contains a question mark or asks 'how to')
3. Technical, Development, Usage (if asking for help)
HARD SKIP (not answerable with code research):
- Feature requests ('add X', 'would be nice if', 'please implement')
- Timeline/roadmap questions ('when will X', 'release plan', 'ETA')
- Questions only maintainers can answer (prioritization, future plans)
- Bot-created discussions (mvnpm, dependabot, renovate, github-actions)
- RFCs/proposals/announcements/newsletters
- Release notes or changelogs
- Discussions with only emoji or very short body (<20 chars)
- Already answered discussions (comments > 0)
Return exactly 15 candidates: [repo#number] title - category
")
Phase 2: Parallel Analysis
Launch analyses for ALL candidates in parallel (one subagent per candidate):
Task(subagent_type="general-purpose", prompt="
Analyze [repo]#[number]: [title]
READ-ONLY: Only use GET/query operations. Do NOT post, create, or mutate anything.
1. Read discussion: gh api repos/OWNER/REPO/discussions/NUMBER
2. Search code: gh search code 'keyword' repo:OWNER/REPO
3. Read files: gh api repos/OWNER/REPO/contents/PATH --jq '.content' | base64 -d
4. Check README/docs for relevant info
VERIFIED answers must provide ACTIONABLE value:
- Code fixes with file:line references
- Configuration solutions with exact syntax
- Workarounds when expected feature is missing
- Technical explanation of WHY something doesn't work
- Links to relevant documentation in the repo
DISCARD if answer would just restate the question:
- 'Feature X doesn't exist' (user knows, that's why they asked)
- 'No timeline available' (useless)
- 'This is a known limitation' (without workaround)
Return VERIFIED: [1-2 sentence answer with actionable fix] OR DISCARD: [reason]
")
Phase 3: Post All Verified
Post ALL verified answers in parallel (one subagent per answer):
Task(subagent_type="general-purpose", model="haiku", prompt="
Post answer for [repo]#[number]:
1. Get discussion ID:
gh api graphql -f query='{ repository(owner:\"X\", name:\"Y\") { discussion(number:N) { id } } }'
2. Post the answer:
gh api graphql -f query='mutation { addDiscussionComment(input: { discussionId: \"ID\", body: \"ANSWER\" }) { comment { url } } }'
3. Unsubscribe from notifications
THREAD_ID=$(gh api /notifications --jq '.[] | select(.subject.url | contains(\"OWNER/REPO/discussions/NUMBER\")) | .id')
gh api -X DELETE /notifications/threads/$THREAD_ID/subscription
Return posted URL.
")
Answer Format
- 1-2 sentences max
- File:line if relevant
- No fluff, no AI-speak
- Must give user something they can DO, not just confirm what they know