Youtube
Analyze a YouTube video and create a vault note from its transcript. Use this skill whenever a YouTube URL is pasted — even with casual commentary like "check this out" or "interesting talk." Also triggers on "youtube", "take notes from this video", "summarize this video", or any YouTube link (youtube.com, youtu.be) regardless of surrounding context.From its SKILL.md
npx -y skills add tuan3w/obsidian-vault-agent --skill youtubeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- runs commandsInstructs the agent to run 3 commands, including `uv run "$SKILL_DIR/scripts/fetch_youtube.py" "VIDEO_URL" --lang en > "$YT_OUTPUT"` and 2 more.
SKILL.md
6.2 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
<Use_When>
- User shares a YouTube URL and wants notes taken
- User says "take notes from this video"
- User pastes a YouTube link with /youtube
- User wants to add a video's insights to the vault </Use_When>
<Do_Not_Use_When>
- User wants to watch or download the video itself
- User has a local video file (not YouTube)
- Video has no transcript/captions at all
- User wants to process an existing vault note (use /process) </Do_Not_Use_When>
<Execution_Policy>
- Extract first, synthesize second, integrate third
- Always check vault for existing notes on the same video before creating
- Create note as type: post with processing_status: inbox
- The note is a starting point — user can /process it later for deeper engagement </Execution_Policy>
Stage 1: EXTRACT
Parse the YouTube URL/ID from $ARGUMENTS. If no URL provided, ask the user.
Run the extraction script. Redirect stdout to a temp file (stderr has progress messages that break piping):
SKILL_DIR="${CLAUDE_SKILL_DIR}"
YT_OUTPUT="$SKILL_DIR/_output.json"
uv run "$SKILL_DIR/scripts/fetch_youtube.py" "VIDEO_URL" --lang en > "$YT_OUTPUT"
Then read $YT_OUTPUT with the Read tool to get the JSON. Clean up the file after use.
The JSON contains:
title,channel,duration,upload_date,description,chapterstranscript.full_text,transcript.segments,transcript.languagetranscript.error(null if success)
If transcript.error is not null: inform the user and stop. No note without content.
If transcript is very long (>50,000 chars): warn the user this is a long video. Chunk the transcript for the agent if needed — send first 40,000 chars with a note about total length. For very long videos (>2hrs), consider suggesting the user watch key sections instead.
Stage 2: SYNTHESIZE
Read the agent definition:
Read("${CLAUDE_SKILL_DIR}/agents/video-noter.md")
Search the vault for existing notes related to the video's topics using the MCP tool:
search_notes(query="KEYWORD", limit=20)
Or fall back to Grep if MCP is unavailable:
Grep(pattern="KEYWORD", path="notes/", glob="*.md", head_limit=20)
Launch the video-noter agent:
Agent(
subagent_type="general-purpose",
model="sonnet",
run_in_background=false,
prompt="You are Video Noter. Follow these instructions exactly:
[INSERT FULL CONTENT OF agents/video-noter.md HERE]
VIDEO METADATA:
- Title: [title]
- Channel: [channel]
- Duration: [duration]
- Upload date: [upload_date]
- Chapters: [chapters if any]
- Description: [first 500 chars of description]
EXISTING VAULT NOTES ON RELATED TOPICS:
[List any matching notes found in grep]
TRANSCRIPT:
[full_text or chunked text]
Produce the note body following the Output Format. Do NOT include frontmatter —
only the body starting from the # title line."
)
Stage 3: INTEGRATE
- Generate timestamp ID:
date +%Y%m%d%H%M%S
-
Format the upload_date for frontmatter (YYYYMMDD → YYYY-MM-DD)
-
Check for duplicate notes:
grep -rl "VIDEO_TITLE" notes/ --include="*.md" | head -5
- Create the note file with frontmatter + agent output:
---
id: YYYYMMDDHHMMSS
type: post
processing_status: inbox
author: Channel Name
link: "https://www.youtube.com/watch?v=VIDEO_ID"
created_date: YYYY-MM-DD
updated_date: YYYY-MM-DD
---
[AGENT OUTPUT HERE — starts with # title and 🏷️Tags line]
Place the note in notes/ under the most appropriate topic subfolder:
- ML/AI content →
notes/ml/ - Startup/business →
notes/startup/ - Finance →
notes/finance/ - Design →
notes/design/ - Psychology →
notes/psychology/ - General/unclear →
notes/
- Report to user:
- Note path and title
- Number of concepts suggested for extraction
- Any related vault notes found
- Remind: "Run /process on this note when you're ready to deepen it"
<Tool_Usage>
- Bash: Run fetch_youtube.py script (via uv run), generate timestamps, search vault
- Read: Read agent definition, read existing vault notes for context
- Write: Create the post note in vault
- Agent: Delegate synthesis to video-noter agent (sonnet)
- Grep/Glob: Search vault for duplicates and related notes
- TodoWrite: Track progress through stages </Tool_Usage>
<Escalation_And_Stop_Conditions>
- No transcript available: Inform user, suggest manual notes while watching
- Transcript in wrong language: Try other available languages, report what's available
- yt-dlp fails for metadata: Fall back to oEmbed (basic title/channel only)
- Video extremely long (>3hrs): Warn user, offer to process first N minutes only
- Duplicate note exists: Show existing note, ask if user wants to update or create new </Escalation_And_Stop_Conditions>
$ARGUMENTS
What ships with it: 2 files
13.4 KB alongside SKILL.md, 1 of them executable
agents/
- video-noter.md5.5 KB
scripts/
- fetch_youtube.pyruns8.0 KB
Gives 0 of the 12 instructions most note taking skills give in ~1.5k tokens
Counted across 632 of the 857 authors here whose files we hold, read 2026-09-06
- Use standard Markdown links for external URLsin 16 of 632, across 8 files
- Use wikilinks for internal vault connectionsin 15 of 632, across 7 files
- Embed content using the exclamation mark prefixin 14 of 632, across 6 files
- Ask for clarification if the user request is ambiguousin 13 of 632
- Add frontmatter properties at the top of the filein 12 of 632, across 4 files
- Verify note renders correctly in reading viewin 12 of 632, across 4 files
- Include a visual element on every slidein 11 of 632, across 5 files
- Left-align body text and listsin 11 of 632, across 5 files
- Maintain 0.5 inch minimum marginsin 11 of 632, across 5 files
- Wrap formulas containing double quotes in single quotesin 11 of 632, across 5 files
- Repeat one distinctive visual motif across all slidesin 10 of 632, across 4 files
- Use 36pt or larger for slide titlesin 10 of 632, across 4 files
Said here and by no other author read
- Parse the YouTube URL from arguments
- Check vault for existing notes before creating
- Run the extraction script to get metadata and transcript
- Warn user if transcript is missing or very long
- Delegate synthesis to the video-noter agent
- Generate a unique timestamp ID for the note
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.