AgentSkillsCN

Rss Subscriptions

RSS 订阅

SKILL.md
--- frontmatter
context: fork

/rss-check

Check subscribed YouTube channels for new videos and add them to today's daily note.

Usage

code
/rss-check                    # Check all subscribed channels
/rss-check <channel-name>     # Check specific channel only
/rss-check --list             # List all subscriptions
/rss-check --add <url>        # Add new channel subscription
/rss-check --remove <name>    # Remove channel subscription

Examples

code
/rss-check
/rss-check "Nate B Jones"
/rss-check --add https://www.youtube.com/@NateBJones
/rss-check --list

Subscription Config

Subscriptions are stored in .claude/subscriptions.yaml:

yaml
youtube_channels:
  - name: "Nate B Jones"
    channel_id: "UCxxxxxxxxxx"
    channel_url: "https://www.youtube.com/@NateBJones"
    last_checked: "2026-01-12T00:00:00Z"
    last_video_id: "0TpON5T-Sw4"
    create_page: true           # Create full Page analysis
    tags: [ai, productivity]    # Default tags for this channel

settings:
  auto_create_page: true        # Default: create Page for all new videos
  auto_create_weblink: true     # Default: create Weblink for all new videos
  add_to_daily: true            # Add entries to daily note
  extract_links: true           # Extract links from video descriptions

Instructions

List Subscriptions (--list)

  1. Read .claude/subscriptions.yaml
  2. Display formatted table of subscriptions:
    code
    | Channel | Last Checked | Last Video |
    |---------|--------------|------------|
    | Nate B Jones | 2026-01-12 | Why 2026 Is... |
    

Add Subscription (--add <url>)

  1. Parse YouTube channel URL (supports @handle, /channel/ID, /c/name formats)
  2. Use mcp__MCP_DOCKER__get_video_info on a recent video to get channel info
  3. Extract channel ID from video info or page
  4. Add entry to .claude/subscriptions.yaml:
    yaml
    - name: "Channel Name"
      channel_id: "UCxxxxxxxxxx"
      channel_url: "https://www.youtube.com/@handle"
      last_checked: null
      last_video_id: null
      create_page: true
      tags: []
    
  5. Confirm addition

Remove Subscription (--remove <name>)

  1. Find channel by name (case-insensitive partial match)
  2. Remove from .claude/subscriptions.yaml
  3. Confirm removal

Check for New Videos (default)

  1. Read subscriptions from .claude/subscriptions.yaml

  2. For each channel, fetch RSS feed:

    code
    https://www.youtube.com/feeds/videos.xml?channel_id={{channel_id}}
    

    Use WebFetch with prompt: "Extract video entries: title, video_id, published date, description"

  3. Identify new videos:

    • Compare video IDs against last_video_id
    • Select videos published after last check
    • If first check, take only the most recent video
  4. For each new video:

    a. Fetch full details:

    code
    mcp__MCP_DOCKER__get_video_info(url)
    mcp__MCP_DOCKER__get_transcript(url)
    

    b. Extract links from description:

    • Parse URLs from video description
    • Categorise: website, substack, github, twitter, etc.
    • Store for inclusion in notes

    c. Create Weblink note (if auto_create_weblink: true):

    • Follow /youtube skill Weblink template
    • Include extracted links in Resources section

    d. Create Page note (if channel create_page: true):

    • Follow /youtube skill Page template
    • Full transcript analysis
    • Include all extracted links

    e. Add to Daily Note:

    • Open/create today's daily note (+Daily/{{year}}/{{date}}.md)
    • Add entry under ## New Videos section:
      markdown
      ## New Videos
      
      ### [[Weblink - {{video title}}]]
      **Channel:** [[Nate B Jones]]
      **Duration:** {{duration}}
      
      {{2-3 sentence summary}}
      
      **Links mentioned:**
      - [Resource 1](url)
      - [Resource 2](url)
      
  5. Update subscription config:

    • Set last_checked to current timestamp
    • Set last_video_id to most recent video ID
  6. Report results:

    code
    Checked 3 channels:
    - Nate B Jones: 1 new video
      - "Why 2026 Is the Year to Build a Second Brain"
      - Created: Weblink + Page
    - Channel 2: No new videos
    - Channel 3: 2 new videos
      - "Video Title 1" (Weblink + Page)
      - "Video Title 2" (Weblink + Page)
    
    Added 3 entries to today's daily note.
    

Daily Note Integration

The skill adds a ## New Videos section to the daily note. If the section doesn't exist, create it. If it exists, append new entries.

Daily note location: +Daily/{{year}}/{{YYYY-MM-DD}}.md

Entry format:

markdown
### [[Weblink - {{title}}]]
**Channel:** [[{{channel name}}]]
**Duration:** {{duration}}

{{brief summary from video analysis}}

**Links mentioned:**
- [{{link title}}]({{url}})

Link Extraction

From video descriptions, extract and categorise:

TypePatternExample
WebsitePersonal domainsnatebjones.com
NewsletterSubstack, Beehiivnatesnewsletter.substack.com
GitHubgithub.com/*github.com/user/repo
Twitter/Xtwitter.com, x.comx.com/handle
LinkedInlinkedin.comlinkedin.com/in/name
ProductProduct URLsnotion.so, zapier.com

Include these in:

  1. Weblink note ## Resources section
  2. Page note ## Resources section
  3. Daily note entry **Links mentioned:**

Error Handling

  • RSS fetch fails: Log error, continue to next channel
  • Transcript unavailable: Create notes without transcript, note in output
  • Daily note doesn't exist: Create it using /daily skill template
  • Config file missing: Create default config with instructions

Channel ID Discovery

YouTube channel IDs can be found:

  1. From any video by that channel (in video info)
  2. From channel page source (search for channelId)
  3. From RSS feed URL if already subscribed

When adding via --add, attempt to:

  1. Fetch the channel page
  2. Extract channel ID from page content
  3. Get latest video to verify

Quality Standards

  • Always update config after checking
  • Always link Person note if exists for channel creator
  • Always extract and include description links
  • Never duplicate videos already captured
  • Use UK English throughout
  • Create daily note if it doesn't exist