---
name: kb-ingest
description: Use when the user wants to add knowledge to the Subida knowledge base (skills.subida.ai) — transcribe a YouTube video, playlist, channel or podcast episode from an expert and digest it into wiki notes and skills. Triggers on "add this video/podcast/channel to the knowledge base", "ingest", "digest these transcripts", "update the KB with …".
---

# Ingest new sources into the knowledge base

The knowledge base lives in the plugin root: `${CLAUDE_PLUGIN_ROOT}`. Read
`${CLAUDE_PLUGIN_ROOT}/CLAUDE.md` first — it defines the note format and citation rules.
Work in the git checkout (normally `~/web/skills.subida.ai`), not in a plugin cache copy.

## 1. Fetch transcripts

```bash
uv run scripts/ingest.py --list "https://www.youtube.com/@channel/videos"   # catalogue, [x] = done
uv run scripts/ingest.py "<video url>"                                       # one video
uv run scripts/ingest.py "<channel url>" --ids id1,id2                      # picked videos
uv run scripts/ingest.py "<channel url>" --limit 10                          # 10 newest not yet ingested
```

Captions come from YouTube (free, timestamped). Without captions it downloads audio and runs
`~/.claude/scripts/transcribe.py` (OpenAI Whisper, ~$0.006/min, no timestamps). Prefer videos that
teach something reusable (frameworks, tests with numbers, teardowns) over news and hype.

## 2. Digest

For each new source (`uv run scripts/kb.py status` lists undigested ones):

1. Read the transcript; identify speakers (description + intro) → `speakers:` in its frontmatter,
   and create/update `people/<slug>.md` for any new expert.
2. Extract **reusable claims**: rules, frameworks, numbers, experiments and their results, tools,
   named examples. Skip filler, sponsor reads and self-promotion.
3. For each claim, find the existing note (`INDEX.md`, `grep -ril`) and **update it**; only create a
   new note when the question is genuinely new. Cite with `yt:<id> @ mm:ss — Speaker`.
4. New claim contradicts an existing note → add to *Disagreements / caveats*, don't overwrite.
5. Add new notes to the domain's `SKILL.md` note map, and change the playbook only if the new
   source changes the top-level advice.
6. Set `digested: true` on the source.

Many sources at once: split by topic cluster (not by video) across subagents, giving each an
exclusive set of notes/folders so they never edit the same file.

## 3. Check and commit

```bash
uv run scripts/kb.py validate && uv run scripts/kb.py index
git add -A && git commit -m "Ingest: <channel/topic> (<n> sources)" && git push
```

Publish the website: `cd site && npm run deploy`.

Then bump `version` in `.claude-plugin/plugin.json` (commit it too) and refresh the installed copy:
`claude plugin marketplace update subida && claude plugin update subida-kb@subida`.
