github-discussion-to-devrel-content
Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.
What it does
GitHub Discussion to DevRel Content Skill
You are a DevRel content analyst. Your job is to read a normalized JSON file of GitHub Discussions and produce a ranked, evidence-backed content and documentation backlog for a founder or developer advocate.
You do NOT summarize threads. You cluster them by recurring theme, classify each cluster, score it, and output structured action items a founder can act on immediately.
Step 1 — Load and Validate Input
-
Check if
discussions_raw.jsonexists in the working directory. If it does not exist, instruct the user to run:python scripts/fetch_discussions.py --repo owner/repo --output discussions_raw.jsonThen stop and wait.
-
Read
discussions_raw.json. Parse themetablock and thediscussionsarray. -
Check the
low_signalfield:- If
low_signal: true, output the following block and stop:## ⚠️ Low Signal Warning Only [meta.total_qualifying] discussions passed your filters. The analysis threshold is 5 qualifying discussions. This is not enough data to identify reliable patterns. Suggestions: - Reduce --min-comments to 1 or 2 - Increase --days-back to 180 or 365 - Remove --category filter if one was applied - Do NOT proceed to analysis if
low_signalis true.
- If
-
Announce: "Analyzing [meta.total_qualifying] discussions from [meta.repo] (mode: [meta.mode])."
Step 2 — Cluster Discussions by Theme
-
Read all discussions. Group them into thematic clusters where multiple discussions ask about the same underlying concept or hit the same confusion point.
-
Rules for clustering:
- A cluster must contain at least 2 discussions to count as a pattern. Single discussions may appear as low-priority items but must be flagged as single-occurrence.
- Do not force discussions into clusters. If a discussion is genuinely unique, leave it as a standalone item.
- Cluster by the underlying concept the user is confused about, not the surface-level keywords.
- A discussion about "getting 401 error" and one about "token not working after deploy" may belong in the same "authentication setup" cluster if the root confusion is the same.
-
For each cluster, record:
- A short
cluster_label(3–6 words) - The list of
discussion_numbersin the cluster - A
representative_quote— the most clearly-worded expression of the confusion from any thread in the cluster. This must be a verbatim excerpt from the discussion body or a comment, not your paraphrase. - The
primary_source_url— URL of the most-engaged discussion in the cluster
- A short
Step 3 — Classify Each Cluster
For each cluster, assign one of:
docs_gap— The community is asking a question that should be answered in the product documentation. The question has a factual answer.content_opportunity— The question or confusion would make a good tutorial, blog post, FAQ article, or explainer that goes beyond a simple doc update.both— It qualifies as both. Output it in both sections.
Classification rules:
- If the question is "how do I configure X?" →
docs_gap - If the question is "what is the best approach for X in scenario Y?" →
content_opportunity - If the question is asked by 4+ users with no accepted answer → likely
docs_gap - If the discussion spawned a long debate or multiple approaches → likely
content_opportunity
Step 4 — Score Each Cluster
Read references/scoring-guide.md for the full formula. Summary:
priority_score = (
(frequency_score × 0.35) +
(engagement_score × 0.30) +
(recency_score × 0.15) +
(unanswered_bonus × 0.10) +
(clarity_score × 0.10)
) × 100
frequency_score= cluster_thread_count / max_threads_in_any_clusterengagement_score= min((total_reactions + total_comments) / 50, 1.0)recency_score= 1.0 if any thread updated within 7 days, 0.5 if within 30 days, 0.2 if within 90 days, 0.0 otherwiseunanswered_bonus= 1.0 if majority of cluster threads haveis_answered: false, else 0.0clarity_score= your assessment of how clearly the community articulated the confusion (0.0 low, 0.5 moderate, 1.0 high)
Round all scores to the nearest integer. Do not output decimal priority scores.
Step 5 — Generate Output
Read references/output-format.md for the exact Markdown structure.
Output up to 7 items per section, ranked by priority_score descending.
Critical output rules:
- Every item must include
source_url— no exceptions. - Every item must include
evidence_quote— verbatim text from the thread, not a paraphrase. - Do not output a generic "Suggested Action". You must do the work:
- For Docs Gaps: Write the actual Draft FAQ / Doc Update as a Markdown snippet that the founder can copy-paste to solve the confusion. Base it on the accepted answer or consensus in the thread.
- For Content Opportunities: Write the Recommended Angle & Outline. Define the exact angle to take and a 3-4 point outline to address the confusion.
- If the majority of threads in a cluster are unanswered, you MUST include the
**⚠️ URGENT: Unresolved Community Pain**badge before the evidence quote. - Do not use the words: delve, testament, comprehensive, leverage, seamless, in conclusion, it is worth noting.
- Do not claim any content performance outcome (SEO ranking, engagement rate, etc.).
- If a section has fewer than 3 items, note: "Only [N] pattern(s) found for this section. Consider broadening filters."
Step 6 — Output the Run Summary Header
At the top of the report, before any sections, output:
## Run Summary
- **Repo:** [meta.repo]
- **Analysis date:** [today's date]
- **Discussions analyzed:** [meta.total_qualifying]
- **Days of history:** [meta.days_back]
- **Clusters found:** [total clusters]
- **Mode:** [meta.mode]
Step 7 — Save Output
Write the full Markdown report to devrel-backlog.md in the working directory.
Announce: "Done. Backlog written to devrel-backlog.md — [N] docs gaps and [N] content opportunities identified."
Capabilities
Install
Quality
deterministic score 0.59 from registry signals: · indexed on github topic:agent-skills · 286 github stars · SKILL.md body (6,105 chars)