Help us improve
Share bugs, ideas, or general feedback.
From wiki
Use when the user invokes LLM Wiki parse workflow — explicitly via "wiki:parse", "parse this", "parse this folder", "wiki: parse <path|url>", drops a YouTube link, or when a new file is dropped into a wiki's raw/_inbox/. Handles four input kinds: single file, folder (batch), generic URL (defuddle clip), or YouTube URL (yt-dlp transcript + optional whisper). Processes each source into the wiki: creates sources/<slug>.md summary, updates 10-15 entities/concepts with citations, appends a log entry. Recognizes the target wiki by a CLAUDE.md with `type: schema, scope: wiki` frontmatter. Reads that CLAUDE.md for the authoritative ingest protocol before acting.
npx claudepluginhub genkovich/llm-wiki --plugin wikiHow this skill is triggered — by the user, by Claude, or both
Slash command
/wiki:parseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the ingest workflow for an LLM Wiki. The authoritative procedure lives in the target wiki's `CLAUDE.md` — read it before acting.
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
You are the ingest workflow for an LLM Wiki. The authoritative procedure lives in the target wiki's CLAUDE.md — read it before acting.
Find CLAUDE.md with frontmatter type: schema and scope: wiki:
pwd and walk up — look for wiki/CLAUDE.md$VAULT_ROOT/**/wiki/CLAUDE.mdArgument can be a file path, folder path, URL, YouTube URL, the literal this, or empty. Detect kind:
| Input | How to detect | Action |
|---|---|---|
| YouTube URL | matches youtube.com/watch, youtu.be/, youtube.com/shorts/ | go to Step 2a |
| Generic URL | starts with http(s)://, not YouTube | call obsidian:defuddle → raw/anthropic-docs/<slug>.md |
| Folder | [ -d "$path" ] | go to Step 2b (batch) |
| File | [ -f "$path" ] and lives under raw/ | use as-is. If outside raw/ — ask user where it belongs |
this / empty | no arg | pick the most recently modified file in raw/_inbox/; if empty, ask user |
mkdir -p wiki/raw/transcriptsyt-dlp --skip-download --write-auto-sub --write-sub \
--sub-lang "en,uk,en-orig" --sub-format vtt \
-o "wiki/raw/transcripts/%(id)s.%(ext)s" "<URL>"
.vtt missing), fall back to whisper:
yt-dlp -x --audio-format mp3 -o "wiki/raw/transcripts/%(id)s.%(ext)s" "<URL>"
whisper "wiki/raw/transcripts/<id>.mp3" --model small --output_format txt \
--output_dir wiki/raw/transcripts
.vtt/.txt into a clean markdown at wiki/raw/transcripts/<slug>.md with metadata header (video title via yt-dlp --get-title, URL, duration, channel, fetched date).md, .txt, and other text files in the folder (skip binaries)N files. Pick mode:
raw/_inbox/: after Step 4 succeeds for each file, move the source out of _inbox/ into its permanent home:
.url / .txt containing a URL → already processed via defuddle/yt-dlp, original moves to raw/_inbox/_processed/<filename>raw/transcripts/<id>.md (already there from Step 2a)raw/anthropic-docs/ (from Step 2a)raw/articles/<filename> (or raw/_inbox/_processed/ if unclear)Use this when N > 20. Splits work between subagents to avoid sequential bottleneck and write conflicts.
Phase A — sources/ (parallel, idempotent writes):
sources/<slug>.md in with frontmatter (type: source, raw: [[...]], url, fetched, tags, confidence) and sections Summary / Key claims / Quotes / Backlinks. Do NOT touch entities/ or concepts/ — that's a later pass. Return list of slugs created."Phase B — entities/concepts sweep (single thread, after Phase A):
sources/*.md[[sources/<slug>]] citation, refresh last_updatedPhase C — finalize:
qmd update && qmd embedRead the schema in full. Do not paraphrase or shortcut steps.
Per wiki/CLAUDE.md:
Read the raw file completely
Discuss takeaways with the user (1-2 sentences each) before writing — in batch mode, summarize per file but skip the back-and-forth
Create sources/<slug>.md with frontmatter (type: source, raw: [[...]], url, fetched: YYYY-MM-DD, tags, confidence) and sections: Summary / Key claims / Quotes / Backlinks. For YouTube sources add video_id, channel, duration fields
Touch 10-15 entities/ and concepts/: add new claims with citation [[sources/<slug>]], refresh last_updated. Create new entities/concepts if warranted
Sync index.md if it contains manual sections (Dataview blocks auto-refresh)
Append log.md:
## [YYYY-MM-DD] ingest | <Source title>
- bullet 1 — what changed
- bullet 2
- bullet 3
For batch ingests: one log entry per source, OR one rollup entry with sub-bullets listing each source — your choice based on scale.
After all sources written:
qmd update && qmd embed
Mention this in the final summary so the user knows the search index is fresh.
raw/ after Step 2 — read-only from Step 3 onwardconfidence: low + matching questions/<topic>.mdurl: frontmatter for any web/YouTube source