1仕組みと動作原理
サイト上の項目「Tapestry Sources」は、本ピン留めコミットにおいて同名のディレクトリが存在しません(リポジトリには learn-this / article-extractor / youtube-transcript / ship-learn-next / scrum-sage / session-log / unblock-action の 7 つの skill のみ存在)。本レポートでは、「記事、PDF、YouTube 字幕のソース素材をダウンロードする」という記述に基づき、コンテンツ取得の統合オーケストレーターである learn-this にマッピングし、実際に呼び出される article-extractor および youtube-transcript をダウンロード実装の証拠として扱います。
| [Learn This](#0-learn-this-) | One command to extract content from any URL and turn it into an action plan. |
コンテンツの取得は URL タイプによって振り分けられます。YouTube は yt-dlp、記事は readability/trafilatura、PDF は curl+pdftotext を使用し、検出と振り分けはすべて直接実行可能なインライン bash として記述されています。
elif [[ "$URL" =~ \.pdf$ ]] || curl -sI "$URL" | grep -iq "Content-Type: application/pdf"; then CONTENT_TYPE="pdf"
YouTube ブランチは、yt-dlp による自動字幕の取得と、インライン Python による重複排除・プレーンテキスト化のクレンジングという定型パターンを採用しており、動画タイトルを出力ファイル名として使用します。
yt-dlp --write-auto-sub --skip-download --sub-langs en --output "temp_transcript" "$URL"
記事ブランチは、reader(Mozilla Readability)→ trafilatura → curl + インライン HTMLParser という 3 段階のフォールバックチェーンとなっており、ツールが不足している場合は npm/pip でその場でインストールします。
### Option 1: reader (Recommended - Mozilla's Readability) ```bash command -v reader ```
PDF ブランチは最もシンプルで、curl -L でダウンロードした後に pdftotext でテキストを抽出します。poppler が不足していても処理をブロックせず、PDF を保持したままインストールコマンドを提示します。
echo "⚠️ pdftotext not found. PDF downloaded but not extracted." echo " Install with: brew install poppler"
すべてのブランチは「タイトルを安全なファイル名に変換してカレントワーキングディレクトリに出力する」処理で終了します。/ : ? " < > | を除去し、80〜100 文字に切り詰めた上で .txt を付加します。
FILENAME=$(echo "$ARTICLE_TITLE" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '"' '' | cut -c 1-80 | sed 's/ *$//')
コンテンツ取得は前半フェーズにすぎません。txt を取得した後、learn-this は必須処理として('Always create an action plan')ship-learn-next を呼び出して 5-rep アクションプランを生成し、「コンテンツファイル + 計画ファイル」の 2 つの成果物を提供します。
**IMPORTANT**: Always create an action plan after extracting content.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | yt-dlp(字幕/元数据/音频下载) |
| cli | reader(@mozilla/readability-cli 或 reader-cli,文章提取首选) |
| cli | trafilatura(Python 文章提取备选) |
| cli | curl(PDF 下载与文章兜底抓取) |
| cli | pdftotext(poppler,PDF 取文) |
| cli | whisper(openai-whisper,仅在完全无字幕时使用) |
| cli | python3(VTT 去重清洗与 HTML 兜底解析的内联脚本) |
| network | YouTube(经 yt-dlp 取字幕/元数据/音频) |
| network | 目标网页(用户给的任意 URL:HEAD 探测、curl 抓 HTML、reader/trafilatura 拉正文) |
| network | 包管理器源(Homebrew / apt / PyPI / npm registry)——依赖自动安装路径上的网络出口 |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: yt-dlp --list-subs / --write-sub / --write-auto-sub --skip-download --sub-l
- scripts/ 或 SKILL.md: 外部言語パッケージの依存関係の動的インストールを宣言
- 网络端点: 外部ネットワークアクセスの宣言: YouTube(yt-dlp:字幕、メタデータ、必要に応じた音声データ。youtube.com / youtu.be / /shorts/)
- 本地工作目录: ファイルの読み書きと成果物の出力: カレントワーキングディレクトリ:<タイトル>.txt(クレンジング済みの本文/字幕、最終成果物)
5二重目の独立検証
- [unlocatable] 任务表 name_slug=tapestry-sources 对应的 skill 目录 — git ls-tree -r HEAD 列名:LICENSE、README.md、article-extractor/SKILL.md、install.sh、learn-this/SKILL.md、scrum-sage/SKILL.md、session-log/SKILL.md、ship-learn-next/SKILL.md、unblock-action/SKILL.md、youtube-transcript/SKILL.md——无 tapestry-sources 或任何 sources 命名的目录/SKILL.md;pool.json 侧该条目 path="{空}"、来源为 awesome-skills.com 的 repo 级摘要。按任务书规则记为 unlocatable,不硬造目录。
- [discrepancy] 映射决定:以 learn-this 作为本条目主体 — 站点摘要『Download sources from articles, PDFs, and YouTube video transcripts』与 learn-this frontmatter description 的三源检测('Automatically detects content type (YouTube video, article, PDF)')逐项对应,仓库内没有第二个覆盖三源的入口(article-extractor 只做文章、youtube-transcript 只做视频)。故 skill.path 记为 learn-this,报告显式说明这是映射而非同名命中;如需严格一一对应,本条目应在站点侧标注为 repo 级条目。
- [ok] 文章三级降级链真实存在 — article-extractor/SKILL.md '## Extraction Methods' 依次 Method 1 reader、Method 2 trafilatura、Method 3 兜底 curl + 内联 HTMLParser;'## Complete Workflow' 用 if command -v reader / elif command -v trafilatura / else 分支实现,与 learn-this Step 2 的 case 一致。
- [ok] YouTube 三段策略与确认门 — youtube-transcript/SKILL.md 明列 Option 1 --write-sub、Option 2 --write-auto-sub、Option 3 Whisper('**ONLY use this if both manual and auto-generated subtitles are unavailable.**'),且 Whisper 前有体积展示+等待确认、安装前再次等待确认、转写后询问是否删除音频——确认门原文均在。
- [ok] PDF 分支的 pdftotext 与降级 — learn-this Step 2 PDF 段:curl -L 下载 → if command -v pdftotext → pdftotext 取文并可选删 PDF;否则打印 'pdftotext not found' 与 brew/apt 安装提示并保留 PDF 作为产物。
- [ok] 无凭证读取(重要:决定档位) — 对 learn-this/article-extractor/youtube-transcript/install.sh/README 扫描 .env|API_KEY|token|secret|cookie|login 无命中;yt-dlp 未使用 --cookies-from-browser,Whisper 为本地模型,无任何账号依赖。故 credential_reads 为空、档位落黄而非橙。
- [ok] 文件名清洗与写盘范围 — 清洗链在 learn-this(article 行)与 article-extractor(tr '/' '-' / tr ':' '-' / cut -c 1-80|100)均存在;产物写当前目录,中间文件 rm;install.sh 只写 $HOME/.claude/skills(SOURCE 目录为脚本自身所在目录)。
- [ok] 安装命令是否需要提权 — youtube-transcript/SKILL.md 的 Linux 路径为 'sudo apt update && sudo apt install -y yt-dlp'(需要 sudo);macOS/pip/npm 路径无需提权。已如实写入 scripts_executed 与 external_deps。
6結論
1da7c419a2dedca5…