全部技能 / 内容创作 / tapestry-sources
内容创作 · michalparkola/tapestry-skills

tapestry-sources

Unified content extraction and action planning. Use when user says "learn-this <URL>", "learn this <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.

风险提醒:黄色 · 留意使用AI 侦查报告
作者 michalparkolaGitHub michalparkola/tapestry-skills ↗Stars 543许可 MIT(仓库根 LICENSE 文件;GitHub API spdx=MIT)commit 80e1dc56df
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

站点条目『Tapestry Sources』在本 pin commit 无同名目录(仓库只有 7 个 skill:learn-this / article-extractor / youtube-transcript / ship-learn-next / scrum-sage / session-log / unblock-action),本报告按『下载文章、PDF、YouTube 字幕源材料』这一描述映射到内容获取总编排 learn-this,并以它实际调用的 article-extractor 与 youtube-transcript 作为下载实现取证。

README.md
| [Learn This](#0-learn-this-) | One command to extract content from any URL and turn it into an action plan. |
注:映射依据见 verification.second_pass 的两条记录(名为 tapestry-sources 的目录 unlocatable;映射到 learn-this 为 discrepancy 级说明)。learn-this 的 description 逐字覆盖三源:'Automatically detects content type (YouTube video, article, PDF) and processes accordingly.'

内容获取靠 URL 类型分派:YouTube 走 yt-dlp、文章走 readability/trafilatura、PDF 走 curl+pdftotext,检测与分派全部写成可直接执行的内联 bash。

learn-this/SKILL.md
elif [[ "$URL" =~ \.pdf$ ]] || curl -sI "$URL" | grep -iq "Content-Type: application/pdf"; then CONTENT_TYPE="pdf"
注:YouTube 判定用 'if [[ "$URL" =~ youtube\.com/watch || "$URL" =~ youtu\.be/ || "$URL" =~ youtube\.com/shorts ]]',其余默认 article;PDF 还会发一次 HEAD 请求看 Content-Type。SKILL.md 内嵌完整 'Complete Tapestry Workflow Script'(#!/bin/bash, Usage: tapestry <URL>)供 agent 照抄执行。

YouTube 分支是 yt-dlp 抓自动字幕 + 内联 Python 去重清洗成纯文本的固定套路,并用视频标题命名输出文件。

learn-this/SKILL.md
yt-dlp --write-auto-sub --skip-download --sub-langs en --output "temp_transcript" "$URL"
注:紧随其后的内联脚本用 'seen = set()' 逐行过滤 WEBVTT/Kind/Language/'-->' 行并解 HTML 实体,输出 "${VIDEO_TITLE}.txt",最后 'rm -f temp_transcript.en.vtt'。youtube-transcript/SKILL.md 是同一套流程的展开版(含手动字幕优先、Whisper 兜底、删除音频等)。

文章分支是三级降级链:reader(Mozilla Readability)→ trafilatura → curl + 内联 HTMLParser,缺工具时按 npm/pip 现场安装。

article-extractor/SKILL.md
### Option 1: reader (Recommended - Mozilla's Readability) ```bash command -v reader ```
注:安装命令在同文件:'npm install -g @mozilla/readability-cli' 与 'pip3 install trafilatura';兜底是 'curl -s "URL" | python3 -c "…class ArticleExtractor(HTMLParser)…"',跳过 script/style/nav/header/footer/aside/form。标题分别从 markdown 首行、trafilatura --json 的 title、或 <title> 正则取。

PDF 分支最简:curl -L 下载后用 pdftotext 抽取,缺 poppler 时不阻塞——保留 PDF 并提示安装命令。

learn-this/SKILL.md
echo "⚠️ pdftotext not found. PDF downloaded but not extracted." echo " Install with: brew install poppler"
注:抽取成功时会问是否保留原始 PDF('echo "Keep original PDF? (y/n)"),否则 rm 掉;产物是 ${PDF_FILENAME%.pdf}.txt。

所有分支都以『标题转安全文件名 + 落到当前工作目录』收尾:清 / : ? " < > |、截断 80-100 字符再拼 .txt。

learn-this/SKILL.md
FILENAME=$(echo "$ARTICLE_TITLE" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '"' '' | cut -c 1-80 | sed 's/ *$//')
注:YouTube 分支对 VIDEO_TITLE 用同类清洗;article-extractor/SKILL.md 另有更完整的 tr 链与 '< 100 chars' 建议。

内容获取只是前半程:拿到 txt 后 learn-this 强制('Always create an action plan')调用 ship-learn-next 生成 5-rep 行动计划,交付『内容文件 + 计划文件』两份产物。

learn-this/SKILL.md
**IMPORTANT**: Always create an action plan after extracting content.
注:对应 skills 表里 learn-this 的定位是 'The unified workflow that orchestrates everything'(README);本条目的『下载源材料』能力即 SKILL.md 的 Step 1-2。

2核心能力

01按 URL 自动识别内容类型(YouTube / 文章 / PDF)并分派对应抓取路径
02下载 YouTube 字幕并清洗去重为可读纯文本(转写文件按视频标题命名)
03无字幕视频的兜底转写:先报音频体积并等用户确认,再下载音频交 Whisper 转写
04从任意文章页提取正文(三级工具降级,含无依赖的内联 HTML 解析兜底)
05下载 PDF 并用 pdftotext 抽取文本(可选保留原文件)
06文件名工程:从标题生成跨平台安全、长度受限的 .txt 文件名
07依赖缺失时自动安装(brew / apt / pip / npm 四条路径)
08将抓取结果转交下游(ship-learn-next 生成 5-rep 行动计划),形成『取源 → 成计划』的单一入口

3外部依赖

类型依赖
cliyt-dlp(字幕/元数据/音频下载)
clireader(@mozilla/readability-cli 或 reader-cli,文章提取首选)
clitrafilatura(Python 文章提取备选)
clicurl(PDF 下载与文章兜底抓取)
clipdftotext(poppler,PDF 取文)
cliwhisper(openai-whisper,仅在完全无字幕时使用)
clipython3(VTT 去重清洗与 HTML 兜底解析的内联脚本)
networkYouTube(经 yt-dlp 取字幕/元数据/音频)
network目标网页(用户给的任意 URL:HEAD 探测、curl 抓 HTML、reader/trafilatura 拉正文)
network包管理器源(Homebrew / apt / PyPI / npm registry)——依赖自动安装路径上的网络出口

4风险提醒 风险提醒:黄色 · 留意使用

风险提醒:黄色 · 留意使用
  • 抓取内容直通下游模型 — 网页正文与字幕是不可信外部文本,落盘后作为 'learn-this' 完整流程的输入交给模型改写;恶意页面/字幕可植入指令影响产出,skill 无任何来源标注或内容消毒步骤。
  • 任意 URL 抓取与命令拼接 — URL 直接进入 curl/reader/trafilatura/yt-dlp 命令行(普遍有双引号但无 scheme 白名单与格式校验),内联 python 片段中还把文件名变量拼进 'open(...)';理论上可被带引号/换行的输入破坏脚本结构(本机自用场景风险有限)。
  • 运行时安装第三方软件(含 sudo) — 缺依赖时按 SKILL.md 直接执行 brew/apt/pip/npm 安装命令,Linux 路径需要 sudo;供应链与权限面由用户环境决定,skill 不做校验也不锁定版本。
  • 版权与站点条款 — 抓取文章正文、YouTube 字幕,必要时下载音频转写,属批量取用他人内容的场景;README/SKILL.md 未涉及版权、robots.txt 或平台条款,使用者需自行判断。
  • 无质量校验 — 抓取失败与『抓到的是导航/广告垃圾』在提示词层无法区分(兜底 HTMLParser 明确 'less reliable'),落盘前只做字符清洗与去重,不做内容完整性检查。
风险提醒:黄色,留意使用。按统一分档:本 skill(内容取源路径)不做任何凭证/账号读取,外发对象可预期——YouTube 公开字幕、用户自己给的 URL、官方包管理器源,属『常规网络调用 + 本地读写』;但它确实会执行下载型 CLI(yt-dlp/curl/reader/trafilatura)、把远端内容落盘,并在缺依赖时用 brew/apt/pip/npm 现场安装(含 sudo),因此高于纯本地档(蓝)而不到橙——橙档的触发条件(凭证/cookie 读取、或依赖第三方插件镜像)在此不成立(Whisper 为可选本地模型、无镜像/无代理)。主要注意点为任意 URL 抓取 + 自动安装 + 抓取内容作为下游模型输入。

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结论

  • 一个入口覆盖三类源材料:YouTube 字幕、网页文章、PDF 都有专门路径与降级方案,且只需一句『learn-this <URL>』触发。
  • 降级链设计务实:每类内容都预设『首选工具缺失/不可用』的第二、第三方案(含零依赖的内联 HTMLParser),在裸环境也能出结果。
  • 对大动作有确认门:Whisper 安装与音频下载前先报体积并等待用户同意,转写后询问是否删除音频;PDF 也询问是否保留原文件。
  • 产物干净:单文件 .txt 以标题命名落当前目录,中间文件用完即删,不污染项目结构。
  • 纯文本可移植:整套能力写在 SKILL.md 里,可跨宿主整目录搬走,不依赖脚本目录或运行时。
  • 适合:适合:想把自己正在看的文章/论文 PDF/技术视频一键转成可读文本(并顺带生成行动计划)的知识工作者;愿意在本地装 yt-dlp/trafilatura/poppler 等工具的开发者;需要跨宿主(Claude Code 等)搬同一套取源流程的用户(纯文本 skill,无运行时依赖)。
    不适合:不适合:需要凭证/登录态才能访问的内容(付费墙、私有仓库、需 cookie 的站点——skill 无登录能力,article-extractor 明确写 'Paywall or login required → Cannot extract');不愿让 agent 在本机安装软件或执行 sudo 的环境;对内容出处与合规有硬要求的团队(无来源标注、无版权处理);以及期望精确字幕(Whisper base 模型精度、yt-dlp 自动字幕质量有限)或需要批量/大规模抓取的场景。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 tapestry-sources.tar.gz
    sha256: 1da7c419a2dedca5…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 80e1dc56df;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库michalparkola / michalparkola/tapestry-skills
    Stars543
    最近推送2026-03-11
    本 skill commit80e1dc56df
    许可MIT(仓库根 LICENSE 文件;GitHub API spdx=MIT)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近