| 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