| name | github-discussion-to-devrel-content |
| description | 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. |
| compatibility | ["claude-code","gemini-cli","github-copilot"] |
| author | ajaycodesitbetter |
| version | 1.0.0 |
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.json exists 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.json
Then stop and wait.
-
Read discussions_raw.json. Parse the meta block and the discussions array.
-
Check the low_signal field:
-
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_numbers in 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
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_cluster
engagement_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 otherwise
unanswered_bonus = 1.0 if majority of cluster threads have is_answered: false, else 0.0
clarity_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."