Claude-skill-registry adding-notes
Add new notes to the Second Brain knowledge base. Use when the user provides a resource (URL, book, podcast, article, GitHub repo, Reddit thread) and asks to "add a note", "create a note", "save this", "add to my notes", "take notes on", or "capture this".
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/adding-notes" ~/.claude/skills/majiayu000-claude-skill-registry-adding-notes && rm -rf "$T"
skills/data/adding-notes/SKILL.mdAdding Notes to Second Brain
Add content to the knowledge base with proper frontmatter, tags, summaries, and wiki-links.
Content Type Routing
Detect type from URL, then load the appropriate reference file.
| URL Pattern | Type | Reference |
|---|---|---|
| youtube.com | See YouTube Classification | or or |
| reddit.com | | |
| github.com | github | |
| imdb.com/title/, themoviedb.org/movie/ | movie | |
| goodreads.com/series/ | manga | |
| goodreads.com, amazon.com (books) | book | |
| spotify.com/episode, podcasts.apple.com | podcast | |
| udemy.com, coursera.org, skillshare.com | course | |
| .substack.com/p/, .beehiiv.com/p/, buttondown.email/* | newsletter | |
| Other URLs | article | |
| No URL | note | |
Manual: | quote | |
Manual: | evergreen | |
Manual: | map | |
YouTube Classification
YouTube URLs require sub-classification before processing:
- Known podcast channel? →
references/content-types/podcast.md - Known talk channel OR conference title? →
references/content-types/talk.md - Tutorial signals? →
withreferences/content-types/youtube.mdisTechnical: true - Default →
references/content-types/youtube.md
See
references/content-types/youtube.md for full classification logic and channel lists.
Scripts Reference
Only use scripts that fetch external data or perform complex processing:
| Script | Purpose |
|---|---|
| Video title, channel |
| Video transcript (see formats below) |
| Podcast transcript |
| Thread + comments |
| Book metadata |
| Manga series data |
| Repo stats |
| Semantic search using project embeddings |
Transcript Format Options
get-youtube-transcript.py URL # plain (default) - single blob get-youtube-transcript.py URL --format sentences # one sentence per line (grep-friendly) get-youtube-transcript.py URL --format timestamped # [MM:SS] per segment get-youtube-transcript.py URL --format json # full metadata with timestamps
Recommended: Use
--format sentences for large transcripts—enables grep/search and chunked reading.
Do NOT use scripts for trivial operations — do them inline:
- Author check:
withGlobcontent/authors/*{lastname}*.md - Frontmatter: Write YAML directly
- Tag lookup:
or knowledge from prior notesGrep
Workflow Phases
Phase 1: Type Detection → Route to content-type file Phase 2: Parallel Metadata Collection → Per-type agents Phase 2.5: Large Transcript Handling → Subagent for >10K token transcripts Phase 3: Author Creation → See references/author-creation.md Phase 4: Content Generation → Apply writing-style, generate body Phase 4.25: Diagram Evaluation → REQUIRED visual assessment with logged outcome Phase 4.5: Connection Discovery → Find genuine wiki-link candidates (if any exist) Phase 5: Quality Validation → Parallel validators Phase 6: Save Note → Write to content/{slug}.md with link density report Phase 7: MOC Placement → Suggest placements + check MOC threshold Phase 8: Quality Check → Run pnpm lint:fix && pnpm typecheck
Phase 1: Type Detection & Dispatch
- Detect type from URL using the Content Type Routing table above (no script needed)
- Load the content-type reference file for detailed handling
- Detect
flag (see content-type file for criteria)isTechnical
Phase 2: Metadata Collection
Spawn parallel agents as specified in the content-type file. Each file lists:
- Required scripts to run
- Agent configuration
- Special handling notes
If
: Also spawn code extraction agent (see isTechnical: true
references/code-extraction.md).
Phase 2.5: Large Transcript Handling
For podcasts/videos with transcripts >10K tokens, use a dedicated subagent instead of reading directly.
Detection: If transcript file exceeds 50KB or initial read fails with token limit error.
Option A: Transcript Analysis Subagent (Recommended)
Spawn a Task with
subagent_type: general-purpose:
Analyze this transcript and extract structured content for a knowledge base note. **Instructions:** 1. Read the transcript file at: {transcript_path} 2. Extract and return: ## Timestamps | Time | Topic | |------|-------| (Major topic shifts with approximate times) ## Key Arguments (3-5 main claims with supporting reasoning, 2-3 sentences each) ## Notable Quotes (4-6 verbatim quotes that capture core ideas, with speaker attribution) ## Named Frameworks (Any models, principles, or processes given specific names) ## Diagram Candidates (Any process, system, or framework worth visualizing) **Output:** Structured markdown, max 1500 words.
Option B: Chunked Extraction (Fallback)
If subagent unavailable, use
--format sentences and manual chunking:
- Fetch with sentences format:
get-youtube-transcript.py URL --format sentences > transcript.txt - Read first 100 lines (intro, episode overview)
- Read last 100 lines (conclusion, wrap-up)
- Grep for key terms mentioned in intro
- Extract quotes around grep matches with
context-C 3
Benefits of Subagent Approach:
| Aspect | Direct Read | Subagent |
|---|---|---|
| Context usage | Fills main context with raw text | Returns only structured output |
| Parallelism | Sequential processing | Runs alongside other agents |
| Semantic analysis | Manual grep for terms | Agent identifies themes |
| Output quality | May miss connections | Comprehensive extraction |
Phase 3: Author Creation
For external content, check if author exists:
Glob: content/authors/*{lastname}*.md
- Match found: Use existing slug
- Partial match: Use AskUserQuestion to confirm identity
- No match: Create new author per
references/author-creation.md
Phase 4: Content Generation
- Load writing-style skill (REQUIRED):
Read .claude/skills/writing-style/SKILL.md - Load linking philosophy (REQUIRED):
Read .claude/skills/adding-notes/references/linking-philosophy.md - If
: collect code snippets from Phase 2isTechnical - Compile frontmatter using template from content-type file
- Generate body with wiki-links (see Phase 4.5 for connection discovery)
Tags: 3-5 relevant tags. Use tags you've seen in prior notes or
Grep for similar content to find existing tags.
Summary: Frame as a core argument, not a description. What claim does this content make?
Phase 4.25: Diagram Evaluation (REQUIRED)
- Load
references/diagrams-guide.md - Apply the decision tree based on content type priority
- Log outcome (REQUIRED):
- Adding:
✓ Diagram added: [mermaid-type] - [description] - Skipping:
✓ No diagram needed: [specific reason]
- Adding:
Phase 4.5: Connection Discovery
Load
references/linking-philosophy.md and follow the discovery checklist:
- Same-author check (highest priority):
Grep pattern: "authors:.*{author-slug}" glob: "content/*.md" - Tag-based discovery:
Grep pattern: "tags:.*{tag}" glob: "content/*.md" limit: 5 - Evaluate: "Would I naturally reference this when discussing the topic?"
Only add genuine connections with explanatory context. Orphans are acceptable.
Phase 5: Quality Validation
Spawn parallel validators:
| Validator | Checks |
|---|---|
| Wiki-link exists | Each exists in (excluding Readwise) |
| Link context | Each link has adjacent explanation (not bare "See also") |
| Duplicate | Title/URL doesn't already exist |
| Tag | Tags match or similar to existing |
| Type-specific | E.g., podcast: profile exists, guest not in hosts |
Wiki-link note: Readwise highlights (
content/readwise/) are excluded from Nuxt Content and won't resolve as valid wiki-links. Use plain text or italics for books/articles that only exist in Readwise.
If issues found: Use AskUserQuestion to offer: Fix issues / Save anyway / Cancel. If no issues: Log "✓ Validation passed" and proceed.
Phase 6: Save Note
Generate slug inline: lowercase title, replace spaces with hyphens, remove special characters. Example:
"Superhuman Is Built for Speed" → superhuman-is-built-for-speed
Save to
content/{slug}.md. Confirm with link density status:
✓ Note saved: content/{slug}.md - Type: {type} - Authors: {author-slugs} - Tags: {tag-count} tags - Diagram: {diagram-status} - Wiki-links: {link-count} connections ({status}) - [[link-1]] (why: {context}) - [[link-2]] (why: {context})
Diagram status:
Added: [type] - [description] or None: [reason]
Link density status:
: "well-connected"{link-count} >= 3
: "connected"{link-count} = 1-2
: "standalone" (fine when no genuine connections exist){link-count} = 0
Phase 7: MOC Placement (Non-blocking)
See
references/moc-placement.md for detailed workflow:
- Suggest existing MOC placement via cluster script
- Check if any tag exceeds 15-note threshold for new MOC creation
Phase 8: Quality Check
Run linter and type check to catch any issues:
pnpm lint:fix && pnpm typecheck
If errors are found, fix them before completing the task.
Error Handling
| Error | Recovery |
|---|---|
| Metadata agent fails | Prompt for manual entry or WebFetch fallback |
| Transcript unavailable | Note "No transcript available" in body |
| Transcript too large (>10K tokens) | Use Phase 2.5 subagent or chunked extraction |
| Author not found online | Create minimal profile (name only) |
| Reddit 429 | Wait 60s and retry |
| Semantic analysis timeout | Proceed without wiki-link suggestions |
| Validation crash | Warn user, recommend manual check |
Reference Files
| File | Purpose |
|---|---|
| Author profile workflow |
| When/how to add mermaid diagrams |
| Connection quality standards |
| MOC suggestion and creation |
| Technical content code snippets |
| Podcast show profiles |
| Newsletter publication profiles |
| Type-specific templates |