.claude/skills/ingest-hackernews/SKILL.md
Extract Hacker News threads (post + comments) for wiki ingestion. Uses Algolia HN API, no auth required.
npx skillsauth add RonanCodes/llm-wiki ingest-hackernewsInstall 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 Hacker News post and its comment tree.
Parse the URL to extract the item ID:
https://news.ycombinator.com/item?id={id}Fetch the full thread via Algolia HN API (free, no auth, returns entire comment tree):
curl -s "https://hn.algolia.com/api/v1/items/{id}"
Parse JSON response for the top-level post:
title — post titleurl — linked URL (if link post; null for Ask HN / Show HN text posts)author — HN username of postercreated_at — ISO timestamppoints — scoretext — body text (for self/text posts; HTML-encoded)children — array of comment objects (recursive)Parse each comment in children recursively:
author — commenter usernametext — comment body (HTML-encoded, strip tags to markdown)created_at — timestampchildren — nested repliesauthor is null (deleted/dead comments)Convert HTML entities in text fields to readable markdown:
<p> to double newline<a href="..."> to [text](url) markdown links<code> / <pre> to backtick code spans / fenced code blocks<i> to *italic*' and other entities to literal charactersConstruct a flat markdown representation of the thread with indentation to show nesting depth:
# {title}
**Author:** {author} | **Points:** {points} | **Date:** {created_at}
**HN URL:** https://news.ycombinator.com/item?id={id}
**Link:** {url} (if present)
## Post Body
{text content if self-post, otherwise "Link post — see URL above."}
## Comments ({total_comment_count} comments)
**{commenter1}** ({timestamp}):
Comment text here...
> **{reply_author}** ({timestamp}):
> Reply text here, indented with blockquote...
>
> > **{nested_reply_author}** ({timestamp}):
> > Deeper reply, double-indented...
**{commenter2}** ({timestamp}):
Another top-level comment...
Use > blockquote markers for nesting depth:
> > > > > > (deeper replies still shown but capped at 3 levels of indent for readability)raw/hn-{id}-{slug}.md where {slug} is a kebab-case version of the title (truncated to ~50 chars), with YAML header:---
source-url: https://news.ycombinator.com/item?id={id}
title: "{title}"
author: "{author}"
date-fetched: {today}
source-type: discussion
points: {points}
comment-count: {total_comments}
linked-url: "{url or none}"
---
If the Algolia API fails or returns an error:
# Get the item
curl -s "https://hacker-news.firebaseio.com/v0/item/{id}.json"
# Then fetch each child comment by ID from the `kids` array
curl -s "https://hacker-news.firebaseio.com/v0/item/{kid_id}.json"
None — uses only curl.
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.