PluginBench
Skill
Review
Audit score 70

defuddle

joeseesun/defuddle-skill

Extract clean article content from web pages, removing ads and clutter to get readable Markdown with metadata.

What is defuddle?

Defuddle extracts the main article content from web pages or local HTML files, stripping away ads, sidebars, navigation, and other noise. Use it when you need to convert web pages into clean, readable Markdown with structured metadata like title, author, and word count.

  • Extract article text from URLs or local HTML files with clutter removal
  • Output clean Markdown content with frontmatter metadata (title, author, publication date, word count)
  • Retrieve structured JSON metadata including title, author, description, domain, featured image, and parse time
  • Save extracted content to user-specified directories with sanitized filenames
  • Support single-property extraction for targeted data retrieval

How to install defuddle

npx skills add https://github.com/joeseesun/defuddle-skill --skill defuddle
Prerequisites
  • Node.js and npm installed
  • Install defuddle globally: npm install -g defuddle jsdom
Claude Code
Cursor
Windsurf
Cline

How to use defuddle

  1. 1.Run defuddle parse with both markdown and JSON flags: defuddle parse "<url>" -m -j
  2. 2.Review the extracted metadata (title, author, source, word count) and content preview
  3. 3.Specify a directory to save the file (e.g., ~/Documents, ~/Desktop)
  4. 4.Defuddle saves the file with frontmatter metadata and full Markdown content using the article title as the filename
  5. 5.Confirm the saved file path

Use cases

Good for
  • Save blog posts or news articles as clean Markdown files for offline reading or archiving
  • Extract article text from web pages to feed into downstream processing or analysis
  • Batch convert multiple web pages to structured Markdown with consistent metadata
  • Retrieve metadata (author, publication date, word count) from articles programmatically
  • Strip ads and navigation from documentation pages to focus on core content
Who it's for
  • Content researchers and archivists
  • Developers building content processing pipelines
  • Knowledge workers managing research materials
  • Documentation readers wanting clean offline copies

defuddle FAQ

What types of pages work best with defuddle?

Article-style pages like blogs, news sites, and documentation work best. JavaScript-heavy single-page applications and pages requiring browser rendering (e.g., WeChat articles) are not well-supported.

Can I extract a single piece of metadata instead of the full article?

Yes, use the -p or --property flag to extract a single field: defuddle parse "<url>" -p title (options: title, description, domain, author, published, wordCount, content).

How are filenames generated when saving?

Filenames are based on the article title with special characters replaced by spaces and whitespace trimmed. For example, an article titled 'The Shape of the Essay Field' becomes 'The Shape of the Essay Field.md'.

What metadata is included in the saved file?

Saved files include frontmatter with title, author, source URL, publication date, clipping date, and word count, followed by the full extracted Markdown content.

Does defuddle work with local HTML files?

Yes, you can pass a local file path instead of a URL to defuddle parse.

Full instructions (SKILL.md)

Source of truth, from joeseesun/defuddle-skill.


name: defuddle description: Extract clean article content from web pages or local HTML files. Removes clutter (ads, sidebars, nav) and returns readable content with metadata. trigger: Use when user wants to extract/clean web page content, strip clutter from HTML, get article text from a URL, or convert web pages to clean markdown. Triggers include "defuddle", "extract article", "clean this page", "get content from URL", "strip clutter", "web extract".

Defuddle - Web Content Extraction

Extract main article content from web pages, removing ads, sidebars, navigation, and other clutter. Output clean Markdown with metadata.

Prerequisites

Before first use, check if defuddle is installed:

command -v defuddle >/dev/null 2>&1 || npm install -g defuddle jsdom

Default Workflow

When user provides a URL, follow this workflow:

Step 1: Extract content as Markdown + JSON metadata

Always use both -m and -j flags to get markdown content with full metadata:

defuddle parse "<url>" -m -j

Step 2: Present a summary to the user

Show the user:

  • Title: from JSON title field
  • Author: from JSON author field
  • Source: domain
  • Word count: from JSON wordCount field
  • A brief preview (first 2-3 sentences)

Step 3: Ask where to save

If this is the first time using defuddle in this conversation, ask the user:

"Save to which directory? (e.g. ~/Documents, ~/Desktop, or a custom path)"

Remember the user's chosen directory for subsequent uses in the same conversation.

Step 4: Save as Markdown file

Write the file with frontmatter + full content:

---
title: {title}
author: {author}
source: {url}
date: {published or "Unknown"}
clipped: {today's date YYYY-MM-DD}
wordCount: {wordCount}
---

# {title}

{markdown content}

File naming: Use the article title as filename, sanitized for filesystem:

  • Replace special characters with spaces
  • Trim whitespace
  • Example: The Shape of the Essay Field.md

Step 5: Confirm to user

Tell the user the file path where it was saved.

CLI Reference

defuddle parse <source> [options]

Arguments:

  • <source> — URL (https://...) or local HTML file path

Options:

FlagDescription
-m, --markdownConvert content to Markdown
-j, --jsonOutput as JSON with full metadata
-o, --output <file>Write to file instead of stdout
-p, --property <name>Extract single property (title, description, domain, author, published, wordCount, content)
--debugVerbose logging

JSON Response Fields

When using -j, the response includes:

  • title — Article title
  • author — Author name
  • published — Publication date
  • description — Meta description
  • content — Extracted Markdown (when -m used)
  • domain — Source domain
  • favicon — Favicon URL
  • image — Featured image URL
  • site — Site name
  • wordCount — Word count
  • parseTime — Processing time in ms

Notes

  • Requires Node.js and npm
  • jsdom is required as a peer dependency
  • Works best with article-style pages (blogs, news, documentation)
  • Not designed for SPAs or JavaScript-heavy pages (e.g. WeChat articles need browser rendering)