Skip to content
Content
Skill

/pullmd

Read any web page, document, or YouTube video as clean Markdown using PullMD. Use this skill whenever you need to fetch, read, extract, or summarize content from a URL — web articles, Reddit threads, PDF/Word/PowerPoint/Excel/EPUB documents, or YouTube transcripts. This includes

From plugin
pullmd
5201 skill

Claude Code

$ npx -y skills add AeternaLabsHQ/pullmd --skill pullmd --agent claude-code

SKILL.md

pullmd.SKILL.md
name: pullmd
description: "Read any web page, document, or YouTube video as clean Markdown using PullMD. Use this skill whenever you need to fetch, read, extract, or summarize content from a URL — web articles, Reddit threads, PDF/Word/PowerPoint/Excel/EPUB documents, or YouTube transcripts. This includes when the user says 'read this page', 'what does this URL say', 'fetch this article', 'summarize this PDF', 'get the transcript of this video', or when you need web content as context for another task. Also use this when WebFetch fails or returns poor results — PullMD produces cleaner Markdown than raw HTML parsing. Do NOT use this for GitHub URLs (use gh CLI instead) or for API endpoints that return JSON."

PullMD Integration

Read web pages, documents, and YouTube videos as clean, structured Markdown via the self-hosted PullMD service. Falls back gracefully to WebFetch if PullMD is unavailable.

Why PullMD over WebFetch

PullMD routes each URL through the extraction path that fits it:

1. **Reddit** — auto-detected URLs go through Reddit's JSON API with full comment trees. Needs API credentials on the server; without them the request fails with `502`. 2. **Hacker News** — auto-detected item pages, comment permalinks, and listings (`/news`, `/newest`, `/ask`, `/show`, `/jobs`, `/best`) go through the HN API and come back as a clean nested comment tree. 3. **Cloudflare** — sites that support `Accept: text/markdown` get native Markdown directly. 4. **Static HTML** — Mozilla Readability and Trafilatura run in parallel; the higher-quality output wins. 5. **Headless Chromium fallback** — when static extraction returns body-soup or low-quality output (typical for Next.js / SPA pages), the page is rendered in a real browser before extracting. 6. **Documents** — direct links to PDF, Word, PowerPoint, Excel, EPUB, ZIP, CSV, JSON, or XML files are converted to Markdown (requires the markitdown sidecar on the instance). 7. **YouTube** — video URLs return title, description, and the transcript with clickable timecodes (when enabled on the instance). 8. **Images & audio** — captioned / transcribed when the instance has a vision or STT provider configured; metadata-only otherwise.

The result is much cleaner than the raw HTML that WebFetch returns, and it works on JavaScript-heavy sites and binary formats that WebFetch can't handle at all.

How to use

Step 1: Fetch via PullMD

Use Bash to curl the PullMD API. This is preferred over WebFetch because it returns clean Markdown directly:

curl -s "__PULLMD_URL__/api?url=<URL>"

The response is `text/markdown` — ready to use as-is.

**Available parameters:**

| Param | Default | Notes | | --------------- | ------- | --------------------------------------------------------------------------- | | `url` | — | Required. | | `comments` | `true` | Include Reddit / Hacker News comments. Ignored for other URLs. | | `comment_depth` | `3` | Comment nesting depth (1–10), or `all` for the whole thread (Reddit: loads collapsed comments with extra requests). Reddit and Hacker News. | | `comment_limit` | none | Max top-level Reddit comments (uncapped by default). | | `frontmatter` | `false` | Prepend YAML metadata (title, source, quality, share id, …). | | `format` | `md` | `text` strips Markdown; `json` returns a structured response with metadata. | | `nocache` | `false` | Bypass the 1-hour cache and refetch from source. | | `render` | auto | `force` → always render via Playwright. `skip` → never render. Bypasses cache. | | `extractor` | auto | Force `readability` / `trafilatura` / `playwright`, skipping the quality pick. Bypasses cache. | | `pdf` | — | `ocr` → high-quality OCR conversion for PDFs (table-grade output; needs a server-side OCR key). Bypasses cache. | | `yt_timecodes` | `links` | YouTube transcripts: `links` (clickable timestamps), `plain` (`[MM:SS]`), `none`. | | `yt_chunk` | `30` | YouTube transcript block size in seconds; `0` = per original snippet. | | `query` | — | Set this when you need specific information from a page rather than the whole document: pass the question you are trying to answer, in natural language, and get back only the matching sections - typically 70-95% fewer tokens on long pages. No LLM involved. Empty/absent = full page, unchanged. | | `max_tokens` | `600` | Token budget for `query` (64–20000). No effect without `query`. Raise it when the answer likely spans several sections; leave the default for single-fact lookups. Only validated when `query` is set. | | `lang` | `de` | Language for the comments-section header (`de` or `en`). | | `images` | server default | Reddit posts only: `on` describes and transcribes the post images with the server's vision model (when it has one). Use it on image posts or when the output marks an image as `[Bild nicht transkribiert]` (`lang=de`, the default) or `[Image not transcribed]` (`lang=en`). Ignored for other URLs. |

**Response headers worth checking:**

  • `X-Source` — `reddit` · `hackernews` · `cloudflare` · `readability` · `readability-fallback` · `trafilatura` · `playwright` · `recipe-content` · `coverage-guard` · `article-series` · `markitdown` · `youtube` · `image-caption` · `audio-transcript` · `media-link` · `pdf-ocr`
  • `X-Quality` — `0.0–1.0` extraction confidence (low values mean the static extraction was thin or noisy)
  • `X-Share-Id` — 32-hex permalink, openable as `__PULLMD_URL__/s/<id>` (absent for `/api/html` — local conversions are never cached or shared)
  • `X-Suggested-Filename` — a ready-made filename for this conversion (e.g. `YT-some-talk-dQw4w9WgXcQ.md`); use it when you sa
Read more
@aeternalabshq
Ships withpullmd

Anything in, clean Markdown out. Self-hosted conversion of web pages, documents, images, audio and YouTube videos into token-lean Markdown, for you and for your AI agents.

Stars on GitHub

Momentum

stars in total
520
Star history of AeternaLabsHQ/pullmd on GitHub, a chart by star-history.com

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

@iofficeai@iofficeaiInstall Skill

Questions about pullmd.

Which coding agents can use pullmd?
pullmd installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.