Skip to content
Content
Skill

/web-to-markdown

Convert a web URL into cleaned Markdown with deterministic routing. Use when Codex needs to read article-like content from links and should apply source-aware fetch strategies: default to r.jina.ai for general pages (including X/Twitter), use defuddle.md for YouTube links, and

BOOST
From plugin
erduo-skills
9407 skills1 agent
Install
$ npx -y skills add rookie-ricardo/erduo-skills --skill web-to-markdown --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/web-to-markdown

Context preview

The summary Claude sees to decide when to auto-load this skill.

Convert a web URL into cleaned Markdown with deterministic routing. Use when Codex needs to read article-like content from links and should apply source-aware fetch strategies: default to r.jina.ai for general pages (including X/Twitter), use defuddle.md for YouTube links, and

SKILL.md

web-to-markdown.SKILL.md
name: web-to-markdown
description: "Convert a web URL into cleaned Markdown with deterministic routing. Use when Codex needs to read article-like content from links and should apply source-aware fetch strategies: default to r.jina.ai for general pages (including X/Twitter), use defuddle.md for YouTube links, and use browser-impersonated extraction for WeChat/Zhihu/Feishu pages with Mozilla Readability cleanup."

Web To Markdown

Convert URLs into usable Markdown by applying domain-aware fetching routes, then return the cleaned content directly.

Quick Workflow

1. Normalize and validate the input URL. 2. Select route:

  • `r.jina.ai`: general web + X/Twitter.
  • `defuddle.md`: YouTube transcript/content extraction.
  • `special-browser-fetch`: WeChat/Zhihu/Feishu.

3. Return markdown text (or JSON metadata if needed).

For generic URLs (non-YouTube, non-WeChat/Zhihu/Feishu), use this fallback chain:

  • try `r.jina.ai` first,
  • if it fails, fallback to direct HTTP fetch + Readability,
  • if direct fetch still fails or returns shell-like content, fallback to browser extraction.

Commands

Run from this skill directory (`skills/web-to-markdown`):

npm install
node scripts/url_to_markdown.mjs <url>

Return metadata with markdown:

node scripts/url_to_markdown.mjs <url> --json

Force special-site browser extraction:

node scripts/fetch_special_sites.mjs <url> --json

Routing Policy

  • Default route: `https://r.jina.ai/<url>`.
  • YouTube (`youtube.com`, `youtu.be`): `https://defuddle.md/<url>`.
  • X/Twitter (`x.com`, `twitter.com`): `https://r.jina.ai/<url>`.
  • WeChat/Zhihu/Feishu: run `scripts/fetch_special_sites.mjs`.
  • If input is already proxy-formatted (`https://defuddle.md/https://...` or `https://r.jina.ai/https://...`), normalize back to the original URL and re-apply routing.

Special-Site Extraction Behavior

Use a two-stage strategy for WeChat/Zhihu/Feishu:

1. Try `cuimp` HTTP/TLS impersonation first, then clean HTML with Mozilla Readability. 2. If stage 1 fails or returns blocked/shell content, fallback to `puppeteer-extra` browser impersonation.

  • HTTP stage impersonates modern Chrome TLS/HTTP profile via `cuimp`.
  • Browser stage impersonates a modern Chrome user agent and standard `sec-ch-ua` headers.
  • Remove known login modals and backdrop overlays (best effort).
  • Scroll the page to trigger lazy-loaded article blocks.
  • Parse cleaned document with Mozilla Readability.
  • Convert extracted HTML body to Markdown via Turndown.
  • Resolve browser executable from `CHROME_PATH` first, then system Chrome/Chromium/Edge paths.

If special-site extraction fails due to anti-bot checks, account-only pages, or network limits, report failure clearly and ask for fallback input (for example raw page text).

Output Contract

For normal usage, output markdown only.

When `--json` is used, return:

  • `source`: backend source (`r.jina.ai`, `defuddle`, `cuimp`, `browser-readability`).
  • `strategy`: selected route (`r-jina`, `defuddle`, `special-http-fetch`, `special-browser-fetch-fallback`).
  • `requestedUrl`: original input.
  • `resolvedUrl`: normalized/final URL.
  • `markdown`: extracted markdown body.

Resources

  • [references/routing-and-notes.md](references/routing-and-notes.md): domain routing rules and operational caveats.
  • `scripts/url_to_markdown.mjs`: primary entrypoint.
  • `scripts/fetch_special_sites_http.mjs`: WeChat/Zhihu/Feishu HTTP impersonation fetcher (`cuimp` JS).
  • `scripts/fetch_special_sites.mjs`: two-stage extractor (HTTP-first, browser-fallback).
Read more
Ships witherduo-skills

为 AI Agent 赋能,提供结构化能力与智能工作流。 Erduo Skills 是一个 AI Agent 技能库,收录了一系列可被 Agent 直接调用的结构化技能。每个技能都是独立的、可组合的工作流单元,覆盖信息获取、内容处理、图像工具等场景。

Get the whole plugin

Other skills on erduo-skills.

translate-polisher
Skill

translate-polisher

高质量文章翻译技能,采用"分析→初译→审校→终稿"四步精翻工作流。仅支持中文↔英文、中文↔日文翻译。当用户明确提出"翻译"、"translate"、"精翻"、"翻訳"、"翻译文章"、"translate to…