.claude/skills/ingest-github-discussions/SKILL.md
Extract content from GitHub Discussion threads for wiki ingestion. Uses gh CLI GraphQL API, authenticated via gh auth.
npx skillsauth add RonanCodes/llm-wiki ingest-github-discussionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extract the full content of a GitHub Discussion thread, including all comments and nested replies.
Parse the URL to extract owner, repo, and discussion number:
https://github.com/{owner}/{repo}/discussions/{number}Fetch via GraphQL using gh api graphql:
gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!) {
repository(owner: $owner, name: $repo) {
discussion(number: $number) {
title
body
createdAt
author { login }
url
category { name }
labels(first: 10) { nodes { name } }
comments(first: 100) {
totalCount
pageInfo { hasNextPage endCursor }
nodes {
body
createdAt
author { login }
replies(first: 100) {
nodes {
body
createdAt
author { login }
}
}
}
}
}
}
}' -F owner='{owner}' -F repo='{repo}' -F number={number}
.data.repository.discussion.title — discussion title.data.repository.discussion.body — opening post body (markdown).data.repository.discussion.author.login — author username.data.repository.discussion.createdAt — creation date.data.repository.discussion.category.name — category (e.g. "Ideas", "Q&A").data.repository.discussion.labels — labels.data.repository.discussion.comments.nodes[] — top-level comments.replies.nodes[] — nested replies (max 2 levels deep)If comments.pageInfo.hasNextPage is true, fetch additional pages using the endCursor:
gh api graphql -f query='
query($owner: String!, $repo: String!, $number: Int!, $after: String!) {
repository(owner: $owner, name: $repo) {
discussion(number: $number) {
comments(first: 100, after: $after) {
totalCount
pageInfo { hasNextPage endCursor }
nodes {
body
createdAt
author { login }
replies(first: 100) {
nodes {
body
createdAt
author { login }
}
}
}
}
}
}
}' -F owner='{owner}' -F repo='{repo}' -F number={number} -f after='{endCursor}'
Repeat until hasNextPage is false.
raw/<owner>-<repo>-discussion-<number>.md with YAML header:---
source-url: <discussion-url>
title: "<discussion-title>"
author: "<github-username>"
date-fetched: <today>
source-type: discussion
category: "<category-name>"
comment-count: <total-count>
---
---
source-url: https://github.com/owner/repo/discussions/123
title: "Discussion Title"
author: "username"
date-fetched: 2026-04-14
source-type: discussion
category: "Ideas"
comment-count: 42
---
# Discussion Title
**@username** — 2026-04-10
<opening post body>
---
## Comments
### @commenter1 — 2026-04-10
<comment body>
> **@replier1** — 2026-04-11
>
> <reply body>
> **@replier2** — 2026-04-11
>
> <reply body>
---
### @commenter2 — 2026-04-11
<comment body>
Requires gh CLI (authenticated). No additional tools needed.
data-ai
Extract transcript from a YouTube video as clean readable text. Use when user shares a youtube.com or youtu.be link and wants the transcript, content summary, or to read what was said.
development
Page type templates and frontmatter conventions for LLM Wiki pages. Reference skill loaded by ingest, query, and lint skills to ensure consistent wiki structure.
testing
Show status of all LLM Wiki vaults — page counts, source counts, last activity, and git status. Use when user wants to see vault status, list vaults, or check wiki health.
documentation
Import an existing Obsidian vault, markdown folder, or git repo as an llm-wiki vault. Moves content into vaults/, adds missing structure (index, log, CLAUDE.md, frontmatter). Use when user wants to import, adopt, migrate, or bring in an existing knowledge base.