🎯

tapestry

🎯Skill

from zpankz/mcp-skillset

VibeIndex|
What it does

Extracts content from various URLs and transforms it into an actionable, structured plan using adaptive detection and processing techniques.

πŸ“¦

Part of

zpankz/mcp-skillset(137 items)

tapestry

Installation

πŸ“‹ No install commands found in docs. Showing default command. Check GitHub for actual instructions.
Quick InstallInstall with npx
npx skills add zpankz/mcp-skillset --skill tapestry
2Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"Unified content extraction and action planning. Use when user says `tapestry [URL]`, `weave [URL]`, `help me plan [URL]`, `extract and plan [URL]`, `make this actionable [URL]`, or similar phrases indicating they want to extract content and create an action plan. Automatically detects content type (YouTube video, article, PDF) and processes accordingly."

Overview

# Tapestry: Unified Content Extraction + Action Planning

This is the master skill that orchestrates the entire Tapestry workflow:

  1. Detect content type from URL
  2. Extract content using appropriate skill
  3. Automatically create a Ship-Learn-Next action plan

When to Use This Skill

Activate when the user:

  • Says "tapestry [URL]"
  • Says "weave [URL]"
  • Says "help me plan [URL]"
  • Says "extract and plan [URL]"
  • Says "make this actionable [URL]"
  • Says "turn [URL] into a plan"
  • Provides a URL and asks to "learn and implement from this"
  • Wants the full Tapestry workflow (extract β†’ plan)

Keywords to watch for: tapestry, weave, plan, actionable, extract and plan, make a plan, turn into action

How It Works

Complete Workflow:

  1. Detect URL type (YouTube, article, PDF)
  2. Extract content using appropriate skill:

- YouTube β†’ youtube-transcript skill

- Article β†’ article-extractor skill

- PDF β†’ download and extract text

  1. Create action plan using ship-learn-next skill
  2. Save both content file and plan file
  3. Present summary to user

URL Detection Logic

YouTube Videos

Patterns to detect:

  • youtube.com/watch?v=
  • youtu.be/
  • youtube.com/shorts/
  • m.youtube.com/watch?v=

Action: Use youtube-transcript skill

Web Articles/Blog Posts

Patterns to detect:

  • http:// or https://
  • NOT YouTube, NOT PDF
  • Common domains: medium.com, substack.com, dev.to, etc.
  • Any HTML page

Action: Use article-extractor skill

PDF Documents

Patterns to detect:

  • URL ends with .pdf
  • URL returns Content-Type: application/pdf

Action: Download and extract text

Other Content

Fallback:

  • Try article-extractor (works for most HTML)
  • If fails, inform user of unsupported type

Step-by-Step Workflow

Step 1: Detect Content Type

```bash

URL="$1"

# Check for YouTube

if [[ "$URL" =~ youtube\.com/watch || "$URL" =~ youtu\.be/ || "$URL" =~ youtube\.com/shorts ]]; then

CONTENT_TYPE="youtube"

# Check for PDF

elif [[ "$URL" =~ \.pdf$ ]]; then

CONTENT_TYPE="pdf"

# Check if URL returns PDF

elif curl -sI "$URL" | grep -i "Content-Type: application/pdf" > /dev/null; then

CONTENT_TYPE="pdf"

# Default to article

else

CONTENT_TYPE="article"

fi

echo "πŸ“ Detected: $CONTENT_TYPE"

```

Step 2: Extract Content (by Type)

#### YouTube Video

```bash

# Use youtube-transcript skill workflow

echo "πŸ“Ί Extracting YouTube transcript..."

# 1. Check for yt-dlp

if ! command -v yt-dlp &> /dev/null; then

echo "Installing yt-dlp..."

brew install yt-dlp

fi

# 2. Get video title

VIDEO_TITLE=$(yt-dlp --print "%(title)s" "$URL" | tr '/' '_' | tr ':' '-' | tr '?' '' | tr '"' '')

# 3. Download transcript

yt-dlp --write-auto-sub --skip-download --sub-langs en --output "temp_transcript" "$URL"

# 4. Convert to clean text (deduplicate)

python3 -c "

import sys, re

seen = set()

vtt_file = 'temp_transcript.en.vtt'

try:

with open(vtt_file, 'r') as f:

for line in f:

line = line.strip()

if line and not line.startswith('WEBVTT') and not line.startswith('Kind:') and not line.startswith('Language:') and '-->' not in line:

clean = re.sub('<[^>]*>', '', line)

clean = clean.replace('&', '&').replace('>', '>').replace('<', '<')

if clean and clean not in seen:

print(clean)

seen.add(clean)

except FileNotFoundError:

print('Error: Could not find transcript file', file=sys.stderr)

sys.exit(1)

" > "${VIDEO_TITLE}.txt"

# 5. Cleanup

rm -f temp_transcript.en.vtt

CONTENT_FILE="${VIDEO_TITLE}.txt"

echo "βœ“ Saved transcript: $CONTENT_FILE"

```

#### Article/Blog Post

```bash

# Use article-extractor skill workflow

echo "πŸ“„ Extracting article content..."

# 1. Check for extraction tools

if command -v reader &> /dev/null; then

TOOL="reader"

elif command -v trafilatura &> /dev/null; then

TOOL="trafilatura"

else

TOOL="fallback"

fi

echo "Using: $TOOL"

# 2. Extract based on tool

case $TOOL in

reader)

reader "$URL" > temp_article.txt

ARTICLE_TITLE=$(head -n 1 temp_article.txt | sed 's/^# //')

;;

trafilatura)

METADATA=$(trafilatura --URL "$URL" --json)

ARTICLE_TITLE=$(echo "$METADATA" | python3 -c "import json, sys; print(json.load(sys.stdin).get('title', 'Article'))")

trafilatura --URL "$URL" --output-format txt --no-comments > temp_article.txt

;;

fallback)

ARTICLE_TITLE=$(curl -s "$URL" | grep -oP '\K[^<]+' | head -n 1)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> ARTICLE_TITLE=${ARTICLE_TITLE%% - *}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> curl -s "$URL" | python3 -c "</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>from html.parser import HTMLParser</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>import sys</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>class ArticleExtractor(HTMLParser):</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> def __init__(self):</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> super().__init__()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> self.content = []</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> self.skip_tags = {'script', 'style', 'nav', 'header', 'footer', 'aside', 'form'}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> self.in_content = False</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> def handle_starttag(self, tag, attrs):</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> if tag not in self.skip_tags and tag in {'p', 'article', 'main'}:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> self.in_content = True</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> def handle_data(self, data):</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> if self.in_content and data.strip():</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> self.content.append(data.strip())</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> def get_content(self):</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> return '\n\n'.join(self.content)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>parser = ArticleExtractor()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>parser.feed(sys.stdin.read())</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>print(parser.get_content())</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>" > temp_article.txt</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> ;;</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>esac</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 3. Clean filename</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>FILENAME=$(echo "$ARTICLE_TITLE" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '"' '' | cut -c 1-80 | sed 's/ *$//')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>CONTENT_FILE="${FILENAME}.txt"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>mv temp_article.txt "$CONTENT_FILE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "βœ“ Saved article: $CONTENT_FILE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>#### PDF Document</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```bash</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Download and extract PDF</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "πŸ“‘ Downloading PDF..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 1. Download PDF</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>PDF_FILENAME=$(basename "$URL")</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>curl -L -o "$PDF_FILENAME" "$URL"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 2. Extract text using pdftotext (if available)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>if command -v pdftotext &> /dev/null; then</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> pdftotext "$PDF_FILENAME" temp_pdf.txt</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> CONTENT_FILE="${PDF_FILENAME%.pdf}.txt"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> mv temp_pdf.txt "$CONTENT_FILE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "βœ“ Extracted text from PDF: $CONTENT_FILE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> # Optionally keep PDF</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "Keep original PDF? (y/n)"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> read -r KEEP_PDF</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> if [[ ! "$KEEP_PDF" =~ ^[Yy]$ ]]; then</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> rm "$PDF_FILENAME"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> fi</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>else</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> # No pdftotext available</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "⚠️ pdftotext not found. PDF downloaded but not extracted."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo " Install with: brew install poppler"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> CONTENT_FILE="$PDF_FILENAME"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>fi</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Step 3: Create Ship-Learn-Next Action Plan</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>IMPORTANT</strong>: Always create an action plan after extracting content.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```bash</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Read the extracted content</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>CONTENT_FILE="[from previous step]"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Invoke ship-learn-next skill logic:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 1. Read the content file</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 2. Extract core actionable lessons</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 3. Create 5-rep progression plan</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># 4. Save as: Ship-Learn-Next Plan - [Quest Title].md</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># See ship-learn-next/SKILL.md for full details</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Key points for plan creation:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Extract actionable lessons (not just summaries)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Define a specific 4-8 week quest</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Create Rep 1 (shippable this week)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Design Reps 2-5 (progressive iterations)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Save plan to markdown file</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Use format: <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">Ship-Learn-Next Plan - [Brief Quest Title].md</code></span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Step 4: Present Results</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Show user:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ… Tapestry Workflow Complete!</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“₯ Content Extracted:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> βœ“ [Content type]: [Title]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> βœ“ Saved to: [filename.txt]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> βœ“ [X] words extracted</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“‹ Action Plan Created:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> βœ“ Quest: [Quest title]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> βœ“ Saved to: Ship-Learn-Next Plan - [Title].md</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>🎯 Your Quest: [One-line summary]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“ Rep 1 (This Week): [Rep 1 goal]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>When will you ship Rep 1?</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Complete Tapestry Workflow Script</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```bash</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>#!/bin/bash</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Tapestry: Extract content + create action plan</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Usage: tapestry <URL></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>URL="$1"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>if [ -z "$URL" ]; then</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "Usage: tapestry <URL>"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> exit 1</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>fi</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "🧡 Tapestry Workflow Starting..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "URL: $URL"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Step 1: Detect content type</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>if [[ "$URL" =~ youtube\.com/watch || "$URL" =~ youtu\.be/ || "$URL" =~ youtube\.com/shorts ]]; then</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> CONTENT_TYPE="youtube"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>elif [[ "$URL" =~ \.pdf$ ]] || curl -sI "$URL" | grep -iq "Content-Type: application/pdf"; then</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> CONTENT_TYPE="pdf"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>else</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> CONTENT_TYPE="article"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>fi</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "πŸ“ Detected: $CONTENT_TYPE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Step 2: Extract content</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>case $CONTENT_TYPE in</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> youtube)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "πŸ“Ί Extracting YouTube transcript..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> # [YouTube extraction code from above]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> ;;</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> article)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "πŸ“„ Extracting article..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> # [Article extraction code from above]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> ;;</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> pdf)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> echo "πŸ“‘ Downloading PDF..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> # [PDF extraction code from above]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> ;;</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>esac</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># Step 3: Create action plan</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "πŸš€ Creating Ship-Learn-Next action plan..."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span># [Plan creation using ship-learn-next skill]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "βœ… Tapestry Workflow Complete!"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "πŸ“₯ Content: $CONTENT_FILE"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "πŸ“‹ Plan: Ship-Learn-Next Plan - [title].md"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo ""</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>echo "🎯 Next: Review your action plan and ship Rep 1!"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Error Handling</h3><div><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Common Issues:</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>1. Unsupported URL type</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Try article extraction as fallback</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>If fails: "Could not extract content from this URL type"</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>2. No content extracted</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Check if URL is accessible</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Try alternate extraction method</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Inform user: "Extraction failed. URL may require authentication."</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>3. Tools not installed</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Auto-install when possible (yt-dlp, reader, trafilatura)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Provide install instructions if auto-install fails</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Use fallback methods when available</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>4. Empty or invalid content</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Verify file has content before creating plan</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Don't create plan if extraction failed</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Show preview to user before planning</span></li></ul></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Best Practices</h3><div><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Always show what was detected ("πŸ“ Detected: youtube")</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Display progress for each step</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Save both content file AND plan file</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Show preview of extracted content (first 10 lines)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Create plan automatically (don't ask)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Present clear summary at end</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>βœ… Ask commitment question: "When will you ship Rep 1?"</span></li></ul></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Usage Examples</h3><div><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Example 1: YouTube Video (using "tapestry")</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>User: tapestry https://www.youtube.com/watch?v=dQw4w9WgXcQ</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Claude:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>🧡 Tapestry Workflow Starting...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“ Detected: youtube</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“Ί Extracting YouTube transcript...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Saved transcript: Never Gonna Give You Up.txt</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸš€ Creating action plan...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Quest: Master Video Production</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Saved plan: Ship-Learn-Next Plan - Master Video Production.md</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ… Complete! When will you ship Rep 1?</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Example 2: Article (using "weave")</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>User: weave https://example.com/how-to-build-saas</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Claude:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>🧡 Tapestry Workflow Starting...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“ Detected: article</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“„ Extracting article...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Using reader (Mozilla Readability)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Saved article: How to Build a SaaS.txt</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸš€ Creating action plan...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Quest: Build a SaaS MVP</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Saved plan: Ship-Learn-Next Plan - Build a SaaS MVP.md</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ… Complete! When will you ship Rep 1?</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Example 3: PDF (using "help me plan")</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>User: help me plan https://example.com/research-paper.pdf</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Claude:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>🧡 Tapestry Workflow Starting...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“ Detected: pdf</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸ“‘ Downloading PDF...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Downloaded: research-paper.pdf</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Extracted text: research-paper.txt</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>πŸš€ Creating action plan...</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Quest: Apply Research Findings</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ“ Saved plan: Ship-Learn-Next Plan - Apply Research Findings.md</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>βœ… Complete! When will you ship Rep 1?</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Dependencies</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>This skill orchestrates the other skills, so requires:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>For YouTube:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>yt-dlp (auto-installed)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Python 3 (for deduplication)</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>For Articles:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>reader (npm) OR trafilatura (pip)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Falls back to basic curl if neither available</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>For PDFs:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>curl (built-in)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>pdftotext (optional - from poppler package)</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> - Install: <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">brew install poppler</code> (macOS)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> - Install: <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">apt install poppler-utils</code> (Linux)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>For Planning:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>No additional requirements (uses built-in tools)</span></li></ul></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Philosophy</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Tapestry weaves learning content into action.</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The unified workflow ensures you never just consume content - you always create an implementation plan. This transforms passive learning into active building.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Extract β†’ Plan β†’ Ship β†’ Learn β†’ Next.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>That's the Tapestry way.</span></p></div></div></div></div></div><div class="mt-12 border-t border-zinc-200 pt-8 dark:border-zinc-800"><h2 class="mb-4 flex items-center gap-2 text-lg font-semibold text-zinc-900 dark:text-white"><span>More from this repository</span><span class="rounded-full bg-violet-100 px-2 py-0.5 text-sm font-medium text-violet-700 dark:bg-violet-900/50 dark:text-violet-300">10</span></h2><div class="grid gap-3 sm:grid-cols-2"><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/software-architecture"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">software-architecture</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Provides expert guidance for designing high-quality, clean software architectures using domain-driven design principles and best practices.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/cursor-skills"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">cursor-skills</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">cursor-skills skill from zpankz/mcp-skillset</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/code%20refactoring"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">code refactoring</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Skill</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/claude-docs-consultant"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">claude-docs-consultant</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">claude-docs-consultant skill from zpankz/mcp-skillset</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/csv-analysis"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">csv-analysis</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">csv-analysis skill from zpankz/mcp-skillset</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/code-refactor"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">code-refactor</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Performs systematic code refactoring by finding and replacing patterns, identifiers, and API calls across multiple files while preserving code functionality.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/agent-evaluation"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">agent-evaluation</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Evaluates and improves Claude Code commands, skills, and agents by testing prompt effectiveness and validating context engineering choices.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/refactor"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">refactor</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Automatically analyzes and optimizes Claude's code architecture, identifying redundancies and improving system efficiency through meta-cognitive techniques.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/dspy"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">dspy</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Enables declarative programming of AI systems, automatically optimizing prompts and creating modular RAG pipelines using Stanford NLP's DSPy framework.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/zpankz/mcp-skillset/network-meta-analysis-appraisal"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">network-meta-analysis-appraisal</span><span class="inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">network-meta-analysis-appraisal skill from zpankz/mcp-skillset</p></div></a></div></div></div><!--$--><!--/$--></main><footer class="border-t border-zinc-200 bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900"><div class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8"><div class="grid grid-cols-1 gap-8 md:grid-cols-4"><div class="md:col-span-1"><a class="flex items-center" href="/"><img alt="Vibe Index" loading="lazy" width="140" height="40" decoding="async" data-nimg="1" class="h-8 w-auto dark:hidden" style="color:transparent" src="/logo.png?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX"/><img alt="Vibe Index" loading="lazy" width="140" height="40" decoding="async" data-nimg="1" class="hidden h-8 w-auto dark:block" style="color:transparent" src="/logo-dark.png?v=3&dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX"/></a><p class="mt-4 text-sm text-zinc-600 dark:text-zinc-400">Everything you need for vibe coding. Real-time updates on skills, plugins, MCP servers, and marketplaces.</p></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Resources</h3><ul class="mt-4 space-y-2"><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/skills">Skills</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mcp">MCP Servers</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/marketplaces">Marketplaces</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/plugins">Plugins</a></li></ul></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Support</h3><ul class="mt-4 space-y-2"><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/about">About Us</a></li><li><a href="mailto:admin@vibeindex.ai" class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white">Contact Us</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/feedback">Feedback</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/activity">Sync Activity</a></li></ul></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Legal</h3><ul class="mt-4 space-y-2"><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/privacy">Privacy Policy</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/terms">Terms of Service</a></li></ul></div></div><div class="mt-8 border-t border-zinc-200 pt-8 dark:border-zinc-800"><p class="text-center text-sm text-zinc-500 dark:text-zinc-500">Β© <!-- -->2026<!-- --> <!-- -->Vibe Index<!-- -->. <!-- -->All rights reserved.<!-- --> <!-- -->Operated by<!-- --> <a href="https://jolab.ai" target="_blank" rel="noopener noreferrer" class="text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white transition-colors">JoLab</a></p></div></div></footer><script src="/_next/static/chunks/a8c74b565bd8a7a9.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[26817,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n3:I[44636,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"Providers\"]\n4:I[3374,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n7:I[22016,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"\"]\n8:I[58234,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\na:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"ViewportBoundary\"]\nf:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"MetadataBoundary\"]\n11:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n:HL[\"/_next/static/chunks/2473c16c0c2f6b5f.css?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"style\"]\n:HL[\"/_next/static/chunks/9a540a4976f8bcb6.css?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"FHJAPUh4Z15C32l2AiR_3\",\"c\":[\"\",\"skills\",\"zpankz\",\"mcp-skillset\",\"tapestry\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[[\"owner\",\"zpankz\",\"d\"],{\"children\":[[\"repo\",\"mcp-skillset\",\"d\"],{\"children\":[[\"skill\",\"tapestry\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2473c16c0c2f6b5f.css?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/9a540a4976f8bcb6.css?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased min-h-screen flex flex-col\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-[60vh] flex-col items-center justify-center px-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-6xl font-bold text-zinc-900 dark:text-white\",\"children\":\"404\"}],[\"$\",\"h2\",null,{\"className\":\"mt-4 text-xl font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-zinc-500 dark:text-zinc-400\",\"children\":\"The page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L7\",null,{\"href\":\"/\",\"className\":\"mt-8 inline-flex items-center rounded-lg bg-zinc-900 px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\",\"children\":\"Go Home\"}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L8\",null,{}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L9\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"S\":false}\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"12:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/d2be314c3ece3fbe.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"IconMark\"]\nc:null\n"])</script><script>self.__next_f.push([1,"10:[[\"$\",\"title\",\"0\",{\"children\":\"tapestry | Vibe Index\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Extracts content from various URLs and transforms it into an actionable, structured plan using adaptive detection and processing techniques.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Vibe Index Team\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"vibe coding, vibecoding, AI coding, Claude Code, MCP servers, AI skills, AI plugins, AI development, AI assistants, Claude, cursor, windsurf, aider, cline\"}],[\"$\",\"meta\",\"4\",{\"name\":\"creator\",\"content\":\"Vibe Index\"}],[\"$\",\"meta\",\"5\",{\"name\":\"publisher\",\"content\":\"Vibe Index\"}],[\"$\",\"meta\",\"6\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"7\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"8\",{\"rel\":\"canonical\",\"href\":\"https://vibeindex.ai\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:title\",\"content\":\"Vibe Index - The Ultimate Vibe Coding Directory\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:description\",\"content\":\"The ultimate directory for vibe coding. Discover AI coding tools - skills, plugins, MCP servers, and marketplaces for Claude Code and other AI assistants.\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:url\",\"content\":\"https://vibeindex.ai\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:site_name\",\"content\":\"Vibe Index\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image\",\"content\":\"https://vibeindex.ai/icon.png\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:width\",\"content\":\"512\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:height\",\"content\":\"512\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:alt\",\"content\":\"Vibe Index Logo\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:locale:alternate\",\"content\":\"ko_KR\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:title\",\"content\":\"Vibe Index - Vibe Coding Directory\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:description\",\"content\":\"The ultimate directory for vibe coding. Discover AI coding tools - skills, plugins, MCP servers, and marketplaces for Claude Code and other AI assistants.\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image\",\"content\":\"https://vibeindex.ai/icon.png\"}],[\"$\",\"link\",\"24\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"25\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"26\",{\"rel\":\"icon\",\"href\":\"/icon.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],[\"$\",\"link\",\"27\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$L12\",\"28\",{}]]\n"])</script><script>self.__next_f.push([1,"13:I[74533,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"FavoriteButton\"]\n14:I[54371,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n15:I[38848,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-4xl px-4 py-12 sm:px-6 lg:px-8\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"mb-6\",\"children\":[\"$\",\"ol\",null,{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"li\",null,{\"children\":[\"$\",\"$L7\",null,{\"href\":\"/skills\",\"className\":\"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-300\",\"children\":\"Skills\"}]}],[\"$\",\"li\",null,{\"className\":\"text-zinc-400\",\"children\":\"/\"}],[\"$\",\"li\",null,{\"className\":\"text-zinc-900 dark:text-white\",\"children\":\"tapestry\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start gap-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-5xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 flex-wrap\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl font-bold text-zinc-900 dark:text-white\",\"children\":\"tapestry\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2.5 py-1 text-sm \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}],[\"$\",\"$L13\",null,{\"resourceId\":\"50759486-c751-4541-8163-8c752bd261a1\",\"size\":\"sm\"}],false]}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-zinc-600 dark:text-zinc-400\",\"children\":[\"from \",\"zpankz\",\"/\",\"mcp-skillset\"]}]]}]]}],[\"$\",\"$L14\",null,{\"description\":\"Extracts content from various URLs and transforms it into an actionable, structured plan using adaptive detection and processing techniques.\",\"descriptionKo\":\"λ‹€μ–‘ν•œ URLμ—μ„œ μ½˜ν…μΈ λ₯Ό μΆ”μΆœν•˜κ³ , μ μ‘ν˜• 감지 및 처리 κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ μ‹€ν–‰ κ°€λŠ₯ν•œ κ΅¬μ‘°ν™”λœ κ³„νšμœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.\",\"resourceId\":\"50759486-c751-4541-8163-8c752bd261a1\",\"resourceName\":\"tapestry\",\"resourceType\":\"skill\",\"descriptionType\":\"ai\"}],null,null,[\"$\",\"$L7\",null,{\"href\":\"/collection/zpankz/mcp-skillset\",\"className\":\"mt-4 flex items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-4 transition-all hover:border-zinc-300 hover:bg-zinc-100 dark:border-zinc-700 dark:bg-zinc-800/50 dark:hover:border-zinc-600 dark:hover:bg-zinc-800\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-2xl\",\"children\":\"πŸ“¦\"}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Part of\"}],[\"$\",\"p\",null,{\"className\":\"font-semibold text-zinc-900 dark:text-white\",\"children\":[\"zpankz\",\"/\",\"mcp-skillset\",[\"$\",\"span\",null,{\"className\":\"ml-2 text-sm font-normal text-zinc-500 dark:text-zinc-400\",\"children\":[\"(\",137,\" \",\"items\",\")\"]}]]}]]}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"h-5 w-5 text-zinc-400\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"stroke\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M9 5l7 7-7 7\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-4 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"tapestry\",{\"onClick\":\"$undefined\",\"className\":\"inline-flex items-center rounded-full bg-zinc-100 px-2 py-0.5 text-xs font-medium text-zinc-600 transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-700 \",\"children\":\"tapestry\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":\"Installation\"}],[\"$\",\"$L15\",null,{\"installGuide\":{\"found\":false,\"commands\":[]},\"githubUrl\":\"https://github.com/zpankz/mcp-skillset\",\"owner\":\"zpankz\",\"repo\":\"mcp-skillset\",\"resourceType\":\"skill\",\"resourceName\":\"tapestry\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-8 flex gap-6 text-sm text-zinc-500 dark:text-zinc-400\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1.5\",\"title\":\"Installs\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"h-4 w-4\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"stroke\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4\"}]}],[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"2\"}],[\"$\",\"span\",null,{\"className\":\"text-zinc-400 dark:text-zinc-500\",\"children\":\"Installs\"}]]}],false,\"$L16\",\"$L17\"]}],\"$L18\",\"$L19\",\"$L1a\"]}]\n"])</script><script>self.__next_f.push([1,"1b:I[74533,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"FavoriteCount\"]\n1c:I[13428,[\"/_next/static/chunks/f12dc041feb06d3e.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/6875684dac0d32c7.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/3bfaf7037bc146f6.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\",\"/_next/static/chunks/9b78c3343a8c2975.js?dpl=dpl_BGTSJYAAHEkj6TjL2NJn1JERTonX\"],\"default\"]\n16:[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"h-4 w-4 text-violet-500\",\"fill\":\"currentColor\",\"stroke\":\"currentColor\",\"strokeWidth\":0.5,\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"d\":\"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z\"}]}],[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":[\"$\",\"$L1b\",null,{\"resourceId\":\"50759486-c751-4541-8163-8c752bd261a1\"}]}]]}]\n17:[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Added\"}],[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Feb 4, 2026\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-4\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/zpankz/mcp-skillset\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"inline-flex items-center gap-2 rounded-lg bg-zinc-900 px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"h-5 w-5\",\"fill\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\"clipRule\":\"evenodd\"}]}],\"View on GitHub\"]}],[\"$\",\"$L7\",null,{\"href\":\"/skills\",\"className\":\"inline-flex items-center gap-2 rounded-lg border border-zinc-300 bg-white px-6 py-3 text-sm font-medium text-zinc-700 transition-colors hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-700\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"h-5 w-5\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"stroke\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M10 19l-7-7m0 0l7-7m-7 7h18\"}]}],\"Back to Skills\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1d:T310b,"])</script><script>self.__next_f.push([1,"---\nname: tapestry\ndescription: \"Unified content extraction and action planning. Use when user says `tapestry [URL]`, `weave [URL]`, `help me plan [URL]`, `extract and plan [URL]`, `make this actionable [URL]`, or similar phrases indicating they want to extract content and create an action plan. Automatically detects content type (YouTube video, article, PDF) and processes accordingly.\"\n---\n\n# Tapestry: Unified Content Extraction + Action Planning\n\nThis is the **master skill** that orchestrates the entire Tapestry workflow:\n1. Detect content type from URL\n2. Extract content using appropriate skill\n3. Automatically create a Ship-Learn-Next action plan\n\n## When to Use This Skill\n\nActivate when the user:\n- Says \"tapestry [URL]\"\n- Says \"weave [URL]\"\n- Says \"help me plan [URL]\"\n- Says \"extract and plan [URL]\"\n- Says \"make this actionable [URL]\"\n- Says \"turn [URL] into a plan\"\n- Provides a URL and asks to \"learn and implement from this\"\n- Wants the full Tapestry workflow (extract β†’ plan)\n\n**Keywords to watch for**: tapestry, weave, plan, actionable, extract and plan, make a plan, turn into action\n\n## How It Works\n\n### Complete Workflow:\n1. **Detect URL type** (YouTube, article, PDF)\n2. **Extract content** using appropriate skill:\n - YouTube β†’ youtube-transcript skill\n - Article β†’ article-extractor skill\n - PDF β†’ download and extract text\n3. **Create action plan** using ship-learn-next skill\n4. **Save both** content file and plan file\n5. **Present summary** to user\n\n## URL Detection Logic\n\n### YouTube Videos\n\n**Patterns to detect:**\n- `youtube.com/watch?v=`\n- `youtu.be/`\n- `youtube.com/shorts/`\n- `m.youtube.com/watch?v=`\n\n**Action:** Use youtube-transcript skill\n\n### Web Articles/Blog Posts\n\n**Patterns to detect:**\n- `http://` or `https://`\n- NOT YouTube, NOT PDF\n- Common domains: medium.com, substack.com, dev.to, etc.\n- Any HTML page\n\n**Action:** Use article-extractor skill\n\n### PDF Documents\n\n**Patterns to detect:**\n- URL ends with `.pdf`\n- URL returns `Content-Type: application/pdf`\n\n**Action:** Download and extract text\n\n### Other Content\n\n**Fallback:**\n- Try article-extractor (works for most HTML)\n- If fails, inform user of unsupported type\n\n## Step-by-Step Workflow\n\n### Step 1: Detect Content Type\n\n```bash\nURL=\"$1\"\n\n# Check for YouTube\nif [[ \"$URL\" =~ youtube\\.com/watch || \"$URL\" =~ youtu\\.be/ || \"$URL\" =~ youtube\\.com/shorts ]]; then\n CONTENT_TYPE=\"youtube\"\n\n# Check for PDF\nelif [[ \"$URL\" =~ \\.pdf$ ]]; then\n CONTENT_TYPE=\"pdf\"\n\n# Check if URL returns PDF\nelif curl -sI \"$URL\" | grep -i \"Content-Type: application/pdf\" \u003e /dev/null; then\n CONTENT_TYPE=\"pdf\"\n\n# Default to article\nelse\n CONTENT_TYPE=\"article\"\nfi\n\necho \"πŸ“ Detected: $CONTENT_TYPE\"\n```\n\n### Step 2: Extract Content (by Type)\n\n#### YouTube Video\n\n```bash\n# Use youtube-transcript skill workflow\necho \"πŸ“Ί Extracting YouTube transcript...\"\n\n# 1. Check for yt-dlp\nif ! command -v yt-dlp \u0026\u003e /dev/null; then\n echo \"Installing yt-dlp...\"\n brew install yt-dlp\nfi\n\n# 2. Get video title\nVIDEO_TITLE=$(yt-dlp --print \"%(title)s\" \"$URL\" | tr '/' '_' | tr ':' '-' | tr '?' '' | tr '\"' '')\n\n# 3. Download transcript\nyt-dlp --write-auto-sub --skip-download --sub-langs en --output \"temp_transcript\" \"$URL\"\n\n# 4. Convert to clean text (deduplicate)\npython3 -c \"\nimport sys, re\nseen = set()\nvtt_file = 'temp_transcript.en.vtt'\ntry:\n with open(vtt_file, 'r') as f:\n for line in f:\n line = line.strip()\n if line and not line.startswith('WEBVTT') and not line.startswith('Kind:') and not line.startswith('Language:') and '--\u003e' not in line:\n clean = re.sub('\u003c[^\u003e]*\u003e', '', line)\n clean = clean.replace('\u0026amp;', '\u0026').replace('\u0026gt;', '\u003e').replace('\u0026lt;', '\u003c')\n if clean and clean not in seen:\n print(clean)\n seen.add(clean)\nexcept FileNotFoundError:\n print('Error: Could not find transcript file', file=sys.stderr)\n sys.exit(1)\n\" \u003e \"${VIDEO_TITLE}.txt\"\n\n# 5. Cleanup\nrm -f temp_transcript.en.vtt\n\nCONTENT_FILE=\"${VIDEO_TITLE}.txt\"\necho \"βœ“ Saved transcript: $CONTENT_FILE\"\n```\n\n#### Article/Blog Post\n\n```bash\n# Use article-extractor skill workflow\necho \"πŸ“„ Extracting article content...\"\n\n# 1. Check for extraction tools\nif command -v reader \u0026\u003e /dev/null; then\n TOOL=\"reader\"\nelif command -v trafilatura \u0026\u003e /dev/null; then\n TOOL=\"trafilatura\"\nelse\n TOOL=\"fallback\"\nfi\n\necho \"Using: $TOOL\"\n\n# 2. Extract based on tool\ncase $TOOL in\n reader)\n reader \"$URL\" \u003e temp_article.txt\n ARTICLE_TITLE=$(head -n 1 temp_article.txt | sed 's/^# //')\n ;;\n\n trafilatura)\n METADATA=$(trafilatura --URL \"$URL\" --json)\n ARTICLE_TITLE=$(echo \"$METADATA\" | python3 -c \"import json, sys; print(json.load(sys.stdin).get('title', 'Article'))\")\n trafilatura --URL \"$URL\" --output-format txt --no-comments \u003e temp_article.txt\n ;;\n\n fallback)\n ARTICLE_TITLE=$(curl -s \"$URL\" | grep -oP '\u003ctitle\u003e\\K[^\u003c]+' | head -n 1)\n ARTICLE_TITLE=${ARTICLE_TITLE%% - *}\n curl -s \"$URL\" | python3 -c \"\nfrom html.parser import HTMLParser\nimport sys\n\nclass ArticleExtractor(HTMLParser):\n def __init__(self):\n super().__init__()\n self.content = []\n self.skip_tags = {'script', 'style', 'nav', 'header', 'footer', 'aside', 'form'}\n self.in_content = False\n\n def handle_starttag(self, tag, attrs):\n if tag not in self.skip_tags and tag in {'p', 'article', 'main'}:\n self.in_content = True\n\n def handle_data(self, data):\n if self.in_content and data.strip():\n self.content.append(data.strip())\n\n def get_content(self):\n return '\\n\\n'.join(self.content)\n\nparser = ArticleExtractor()\nparser.feed(sys.stdin.read())\nprint(parser.get_content())\n\" \u003e temp_article.txt\n ;;\nesac\n\n# 3. Clean filename\nFILENAME=$(echo \"$ARTICLE_TITLE\" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '\"' '' | cut -c 1-80 | sed 's/ *$//')\nCONTENT_FILE=\"${FILENAME}.txt\"\nmv temp_article.txt \"$CONTENT_FILE\"\n\necho \"βœ“ Saved article: $CONTENT_FILE\"\n```\n\n#### PDF Document\n\n```bash\n# Download and extract PDF\necho \"πŸ“‘ Downloading PDF...\"\n\n# 1. Download PDF\nPDF_FILENAME=$(basename \"$URL\")\ncurl -L -o \"$PDF_FILENAME\" \"$URL\"\n\n# 2. Extract text using pdftotext (if available)\nif command -v pdftotext \u0026\u003e /dev/null; then\n pdftotext \"$PDF_FILENAME\" temp_pdf.txt\n CONTENT_FILE=\"${PDF_FILENAME%.pdf}.txt\"\n mv temp_pdf.txt \"$CONTENT_FILE\"\n echo \"βœ“ Extracted text from PDF: $CONTENT_FILE\"\n\n # Optionally keep PDF\n echo \"Keep original PDF? (y/n)\"\n read -r KEEP_PDF\n if [[ ! \"$KEEP_PDF\" =~ ^[Yy]$ ]]; then\n rm \"$PDF_FILENAME\"\n fi\nelse\n # No pdftotext available\n echo \"⚠️ pdftotext not found. PDF downloaded but not extracted.\"\n echo \" Install with: brew install poppler\"\n CONTENT_FILE=\"$PDF_FILENAME\"\nfi\n```\n\n### Step 3: Create Ship-Learn-Next Action Plan\n\n**IMPORTANT**: Always create an action plan after extracting content.\n\n```bash\n# Read the extracted content\nCONTENT_FILE=\"[from previous step]\"\n\n# Invoke ship-learn-next skill logic:\n# 1. Read the content file\n# 2. Extract core actionable lessons\n# 3. Create 5-rep progression plan\n# 4. Save as: Ship-Learn-Next Plan - [Quest Title].md\n\n# See ship-learn-next/SKILL.md for full details\n```\n\n**Key points for plan creation:**\n- Extract actionable lessons (not just summaries)\n- Define a specific 4-8 week quest\n- Create Rep 1 (shippable this week)\n- Design Reps 2-5 (progressive iterations)\n- Save plan to markdown file\n- Use format: `Ship-Learn-Next Plan - [Brief Quest Title].md`\n\n### Step 4: Present Results\n\nShow user:\n```\nβœ… Tapestry Workflow Complete!\n\nπŸ“₯ Content Extracted:\n βœ“ [Content type]: [Title]\n βœ“ Saved to: [filename.txt]\n βœ“ [X] words extracted\n\nπŸ“‹ Action Plan Created:\n βœ“ Quest: [Quest title]\n βœ“ Saved to: Ship-Learn-Next Plan - [Title].md\n\n🎯 Your Quest: [One-line summary]\n\nπŸ“ Rep 1 (This Week): [Rep 1 goal]\n\nWhen will you ship Rep 1?\n```\n\n## Complete Tapestry Workflow Script\n\n```bash\n#!/bin/bash\n\n# Tapestry: Extract content + create action plan\n# Usage: tapestry \u003cURL\u003e\n\nURL=\"$1\"\n\nif [ -z \"$URL\" ]; then\n echo \"Usage: tapestry \u003cURL\u003e\"\n exit 1\nfi\n\necho \"🧡 Tapestry Workflow Starting...\"\necho \"URL: $URL\"\necho \"\"\n\n# Step 1: Detect content type\nif [[ \"$URL\" =~ youtube\\.com/watch || \"$URL\" =~ youtu\\.be/ || \"$URL\" =~ youtube\\.com/shorts ]]; then\n CONTENT_TYPE=\"youtube\"\nelif [[ \"$URL\" =~ \\.pdf$ ]] || curl -sI \"$URL\" | grep -iq \"Content-Type: application/pdf\"; then\n CONTENT_TYPE=\"pdf\"\nelse\n CONTENT_TYPE=\"article\"\nfi\n\necho \"πŸ“ Detected: $CONTENT_TYPE\"\necho \"\"\n\n# Step 2: Extract content\ncase $CONTENT_TYPE in\n youtube)\n echo \"πŸ“Ί Extracting YouTube transcript...\"\n # [YouTube extraction code from above]\n ;;\n\n article)\n echo \"πŸ“„ Extracting article...\"\n # [Article extraction code from above]\n ;;\n\n pdf)\n echo \"πŸ“‘ Downloading PDF...\"\n # [PDF extraction code from above]\n ;;\nesac\n\necho \"\"\n\n# Step 3: Create action plan\necho \"πŸš€ Creating Ship-Learn-Next action plan...\"\n# [Plan creation using ship-learn-next skill]\n\necho \"\"\necho \"βœ… Tapestry Workflow Complete!\"\necho \"\"\necho \"πŸ“₯ Content: $CONTENT_FILE\"\necho \"πŸ“‹ Plan: Ship-Learn-Next Plan - [title].md\"\necho \"\"\necho \"🎯 Next: Review your action plan and ship Rep 1!\"\n```\n\n## Error Handling\n\n### Common Issues:\n\n**1. Unsupported URL type**\n- Try article extraction as fallback\n- If fails: \"Could not extract content from this URL type\"\n\n**2. No content extracted**\n- Check if URL is accessible\n- Try alternate extraction method\n- Inform user: \"Extraction failed. URL may require authentication.\"\n\n**3. Tools not installed**\n- Auto-install when possible (yt-dlp, reader, trafilatura)\n- Provide install instructions if auto-install fails\n- Use fallback methods when available\n\n**4. Empty or invalid content**\n- Verify file has content before creating plan\n- Don't create plan if extraction failed\n- Show preview to user before planning\n\n## Best Practices\n\n- βœ… Always show what was detected (\"πŸ“ Detected: youtube\")\n- βœ… Display progress for each step\n- βœ… Save both content file AND plan file\n- βœ… Show preview of extracted content (first 10 lines)\n- βœ… Create plan automatically (don't ask)\n- βœ… Present clear summary at end\n- βœ… Ask commitment question: \"When will you ship Rep 1?\"\n\n## Usage Examples\n\n### Example 1: YouTube Video (using \"tapestry\")\n\n```\nUser: tapestry https://www.youtube.com/watch?v=dQw4w9WgXcQ\n\nClaude:\n🧡 Tapestry Workflow Starting...\nπŸ“ Detected: youtube\nπŸ“Ί Extracting YouTube transcript...\nβœ“ Saved transcript: Never Gonna Give You Up.txt\n\nπŸš€ Creating action plan...\nβœ“ Quest: Master Video Production\nβœ“ Saved plan: Ship-Learn-Next Plan - Master Video Production.md\n\nβœ… Complete! When will you ship Rep 1?\n```\n\n### Example 2: Article (using \"weave\")\n\n```\nUser: weave https://example.com/how-to-build-saas\n\nClaude:\n🧡 Tapestry Workflow Starting...\nπŸ“ Detected: article\nπŸ“„ Extracting article...\nβœ“ Using reader (Mozilla Readability)\nβœ“ Saved article: How to Build a SaaS.txt\n\nπŸš€ Creating action plan...\nβœ“ Quest: Build a SaaS MVP\nβœ“ Saved plan: Ship-Learn-Next Plan - Build a SaaS MVP.md\n\nβœ… Complete! When will you ship Rep 1?\n```\n\n### Example 3: PDF (using \"help me plan\")\n\n```\nUser: help me plan https://example.com/research-paper.pdf\n\nClaude:\n🧡 Tapestry Workflow Starting...\nπŸ“ Detected: pdf\nπŸ“‘ Downloading PDF...\nβœ“ Downloaded: research-paper.pdf\nβœ“ Extracted text: research-paper.txt\n\nπŸš€ Creating action plan...\nβœ“ Quest: Apply Research Findings\nβœ“ Saved plan: Ship-Learn-Next Plan - Apply Research Findings.md\n\nβœ… Complete! When will you ship Rep 1?\n```\n\n## Dependencies\n\nThis skill orchestrates the other skills, so requires:\n\n**For YouTube:**\n- yt-dlp (auto-installed)\n- Python 3 (for deduplication)\n\n**For Articles:**\n- reader (npm) OR trafilatura (pip)\n- Falls back to basic curl if neither available\n\n**For PDFs:**\n- curl (built-in)\n- pdftotext (optional - from poppler package)\n - Install: `brew install poppler` (macOS)\n - Install: `apt install poppler-utils` (Linux)\n\n**For Planning:**\n- No additional requirements (uses built-in tools)\n\n## Philosophy\n\n**Tapestry weaves learning content into action.**\n\nThe unified workflow ensures you never just consume content - you always create an implementation plan. This transforms passive learning into active building.\n\nExtract β†’ Plan β†’ Ship β†’ Learn β†’ Next.\n\nThat's the Tapestry way.\n"])</script><script>self.__next_f.push([1,"19:[\"$\",\"div\",null,{\"className\":\"mt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":\"Skill Details\"}],[\"$\",\"$L1c\",null,{\"content\":\"$1d\"}]]}]\n"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"div\",null,{\"className\":\"mt-12 border-t border-zinc-200 pt-8 dark:border-zinc-800\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 flex items-center gap-2 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":[[\"$\",\"span\",null,{\"children\":\"More from this repository\"}],[\"$\",\"span\",null,{\"className\":\"rounded-full bg-violet-100 px-2 py-0.5 text-sm font-medium text-violet-700 dark:bg-violet-900/50 dark:text-violet-300\",\"children\":10}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-3 sm:grid-cols-2\",\"children\":[[\"$\",\"$L7\",\"e274ac29-2b80-43b2-879e-37a61e8130a5\",{\"href\":\"/skills/zpankz/mcp-skillset/software-architecture\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"software-architecture\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Provides expert guidance for designing high-quality, clean software architectures using domain-driven design principles and best practices.\"}]]}]]}],[\"$\",\"$L7\",\"06a7aad4-a490-4092-8273-6bed39650a32\",{\"href\":\"/skills/zpankz/mcp-skillset/cursor-skills\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"cursor-skills\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"cursor-skills skill from zpankz/mcp-skillset\"}]]}]]}],[\"$\",\"$L7\",\"3a0fe58a-54db-4e66-92c0-81b04cae2997\",{\"href\":\"/skills/zpankz/mcp-skillset/code%20refactoring\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"code refactoring\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Skill\"}]]}]]}],[\"$\",\"$L7\",\"b215b7b2-0d26-4192-9bbf-6a4dfb8b6c4e\",{\"href\":\"/skills/zpankz/mcp-skillset/claude-docs-consultant\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[\"$L1e\",\"$L1f\"]}],\"$L20\",\"$L21\",\"$L22\",\"$L23\",\"$L24\",\"$L25\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}]\n1f:[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"claude-docs-consultant\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"claude-docs-consultant skill from zpankz/mcp-skillset\"}]]}]\n20:[\"$\",\"$L7\",\"23deeeab-b3a7-4670-a294-dcc6f9b49684\",{\"href\":\"/skills/zpankz/mcp-skillset/csv-analysis\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"csv-analysis\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"csv-analysis skill from zpankz/mcp-skillset\"}]]}]]}]\n21:[\"$\",\"$L7\",\"4f460e12-7050-484c-8f9f-30b93d8434c7\",{\"href\":\"/skills/zpankz/mcp-skillset/code-refactor\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"code-refactor\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Performs systematic code refactoring by finding and replacing patterns, identifiers, and API calls across multiple files while preserving code functionality.\"}]]}]]}]\n22:[\"$\",\"$L7\",\"c0f9858e-3fb0-4329-b3f0-87d60182eb02\",{\"href\":\"/skills/zpankz/mcp-skillset/agent-evaluation\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"agent-evaluation\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Evaluates and i"])</script><script>self.__next_f.push([1,"mproves Claude Code commands, skills, and agents by testing prompt effectiveness and validating context engineering choices.\"}]]}]]}]\n23:[\"$\",\"$L7\",\"9a6f9702-e516-4a6c-8dde-373e6fd9fdef\",{\"href\":\"/skills/zpankz/mcp-skillset/refactor\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"refactor\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Automatically analyzes and optimizes Claude's code architecture, identifying redundancies and improving system efficiency through meta-cognitive techniques.\"}]]}]]}]\n24:[\"$\",\"$L7\",\"5928aac7-e568-49be-99cb-8b7f5cda645b\",{\"href\":\"/skills/zpankz/mcp-skillset/dspy\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"dspy\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Enables declarative programming of AI systems, automatically optimizing prompts and creating modular RAG pipelines using Stanford NLP's DSPy framework.\"}]]}]]}]\n25:[\"$\",\"$L7\",\"1b7ae455-0596-4dd3-b5fd-6e4081fde796\",{\"href\":\"/skills/zpankz/mcp-skillset/network-meta-analysis-appraisal\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"network-meta-analysis-appraisal\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 whitespace-nowrap font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"network-meta-analysis-appraisal skill from zpankz/mcp-skillset\"}]]}]]}]\n"])</script></body></html>