
Web To Markdown
- 604 installs
- 2.3k repo stars
- Updated March 5, 2026
- softaworks/agent-toolkit
web-to-markdown is an agent skill that converts webpage URLs into clean, readable Markdown by calling the local web2md CLI with Puppeteer and Readability for coding agents.
About
web-to-markdown is version 0.1.0 agent skill from softaworks/agent-toolkit that converts any webpage URL into clean Markdown suitable for coding agents. It drives a locally installed browser through the web2md CLI, combining Puppeteer rendering for JavaScript-heavy pages with Mozilla Readability extraction to strip boilerplate. Developers explicitly invoke it with phrases like "use the skill web-to-markdown" because the skill enforces a hard trigger gate and will not run on implicit requests. Reach for web-to-markdown when you need article or documentation page content as Markdown context for an agent without manual copy-paste or brittle curl fetches.
- Converts JS-rendered pages using local Puppeteer + Readability
- Works with Chrome, Chromium, Brave, or Edge via puppeteer-core
- Outputs clean Markdown with Turndown and optional YAML frontmatter
- Supports stdout, single file, or directory output modes
- Hard trigger gate: activates ONLY when user explicitly says "use the skill web-to-markdown"
Web To Markdown by the numbers
- 604 all-time installs (skills.sh)
- +16 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #1,580 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/softaworks/agent-toolkit --skill web-to-markdownAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 604 |
|---|---|
| repo stars | ★ 2.3k |
| Last updated | March 5, 2026 |
| Repository | softaworks/agent-toolkit ↗ |
How do you convert a webpage to agent-ready Markdown?
Convert any webpage URL into clean, readable Markdown that can be fed directly to coding agents.
Who is it for?
Developers who need JS-rendered documentation or articles converted to Markdown locally before feeding content to a coding agent.
Skip if: Developers who have not installed the web2md CLI locally or who did not explicitly request the web-to-markdown skill by name.
When should I use this skill?
The user explicitly writes "use the skill web-to-markdown" or "use a skill web-to-markdown" with a target URL to convert.
What you get
Clean Markdown files extracted from live URLs with main content preserved and navigation clutter removed.
- clean Markdown from a URL
By the numbers
- Skill metadata version 0.1.0
- Uses Puppeteer plus Readability via the web2md CLI
Files
web-to-markdown
Convert web pages to clean Markdown by driving a locally installed browser (via web2md).
Hard trigger gate (must enforce)
This skill MUST NOT be used unless the user explicitly wrote exactly a phrase like:
use the skill web-to-markdown ...use a skill web-to-markdown ...
If the user did not explicitly request this skill by name, stop and ask them to re-issue the request including: use the skill web-to-markdown.
What this skill does
- Handles JS-rendered pages (Puppeteer → user Chrome).
- Works best with Chromium-family browsers (Chrome/Chromium/Brave/Edge) via
puppeteer-core. - Extracts main content (Readability).
- Converts to Markdown (Turndown) with cleaned links and optional YAML frontmatter.
Non-goals
- Do not use Playwright or other browser automation stacks; the mechanism is
web2md.
Inputs you should collect (ask only if missing)
url(or a list of URLs)- Output preference:
- Print to stdout (
--print), OR - Save to a file (
--out ./file.md), OR - Save to a directory (
--out ./some-dir/to auto-name by page title) - Optional rendering controls for tricky pages:
--chrome-path <path>(if Chrome auto-detection fails)--interactive(show Chrome and pause so the user can complete human checks/login, then press Enter)--wait-until load|domcontentloaded|networkidle0|networkidle2--wait-for '<css selector>'--wait-ms <milliseconds>--headful(debug)--no-sandbox(sometimes required in containers/CI)--user-data-dir <dir>(login/session; use a dedicated profile directory)
Workflow
1) Confirm the user explicitly invoked the skill (use the skill web-to-markdown). 2) Validate URL(s) start with http:// or https://. 3) Ensure web2md is installed:
- Run:
command -v web2md - If missing, instruct the user to install it (assume the project exists at
~/workspace/softaworks/projects/web2md): cd ~/workspace/softaworks/projects/web2md && npm install && npm run build && npm link- Or:
cd ~/workspace/softaworks/projects/web2md && npm install && npm run build && npm install -g .
4) Convert:
- Single URL → file:
web2md '<url>' --out ./page.md- Single URL → auto-named file in directory:
mkdir -p ./out && web2md '<url>' --out ./out/- Human verification / login walls (interactive):
mkdir -p ./out && web2md '<url>' --interactive --user-data-dir ./tmp/web2md-profile --out ./out/- Then: complete the check in the browser window and press Enter in the terminal to continue.
- Print to stdout:
web2md '<url>' --print- Multiple URLs (batch):
- Create output dir (e.g.
./out/) then run oneweb2mdcommand per URL using--out ./out/
5) Validate output:
- If writing files, verify they exist and are non-empty (e.g.
ls -la <path>andwc -c <path>).
6) Return:
- The saved file path(s), or the Markdown (stdout mode).
Defaults (recommended)
- For most pages:
--wait-until networkidle2 - For heavy apps: start with
--wait-until domcontentloaded --wait-ms 2000, then add--wait-for 'main'(or another stable selector) if needed.
web-to-markdown
Convert web pages to clean Markdown using local browser automation with Puppeteer and Readability.
Purpose
This skill enables Claude Code to convert web pages (including JavaScript-rendered content) into clean, readable Markdown format by leveraging the web2md CLI tool. It's particularly useful for extracting article content, documentation, or any web content that needs to be processed, archived, or analyzed in Markdown format.
When to Use
Use this skill when you need to:
- Extract article content from news sites, blogs, or documentation
- Convert JavaScript-heavy pages that simple HTTP fetching can't handle
- Archive web content in a readable, portable format
- Process web content for analysis or documentation
- Handle pages with login walls or human verification (using interactive mode)
- Batch convert multiple URLs to Markdown files
Important: This skill must be explicitly invoked by the user with phrases like:
- "use the skill web-to-markdown ..."
- "use a skill web-to-markdown ..."
This is a hard requirement to prevent accidental usage when simpler tools might suffice.
How It Works
The skill uses the web2md CLI tool which:
1. Launches a real browser (Chrome/Chromium/Brave/Edge) via Puppeteer 2. Renders the page including all JavaScript and dynamic content 3. Extracts main content using Mozilla's Readability library 4. Converts to Markdown using Turndown with cleaned links 5. Outputs to stdout or saves to file(s) with optional YAML frontmatter
This approach handles modern single-page applications and JavaScript-rendered content that simple HTTP fetchers cannot process.
Key Features
- JavaScript Support: Renders pages with Puppeteer, capturing dynamically loaded content
- Smart Content Extraction: Uses Readability to identify and extract main article content
- Flexible Output: Print to stdout, save to specific files, or auto-name files in a directory
- Interactive Mode: Handle login walls and human verification challenges
- Batch Processing: Convert multiple URLs in one operation
- Wait Strategies: Multiple options to ensure content is fully loaded before extraction
- Browser Profiles: Support for persistent user data directories (sessions, logins)
- Clean Markdown: Produces readable, well-formatted Markdown with optional metadata
Prerequisites
The web2md CLI tool must be installed. The skill will check for it and provide installation instructions if needed:
cd ~/workspace/softaworks/projects/web2md
npm install
npm run build
npm linkUsage Examples
Basic Conversion
Convert a single URL and save to a file:
use the skill web-to-markdown to convert https://example.com/article to article.mdThis will run:
web2md 'https://example.com/article' --out ./article.mdAuto-Named Output
Convert a URL and let the tool name the file based on page title:
use the skill web-to-markdown to convert https://example.com/article and save to ./output/This creates a directory and auto-names the file:
mkdir -p ./output
web2md 'https://example.com/article' --out ./output/Print to Console
Convert and display the Markdown (useful for quick inspection):
use the skill web-to-markdown to convert https://example.com/article and print the resultThis will run:
web2md 'https://example.com/article' --printInteractive Mode (Login Walls)
Handle pages requiring login or human verification:
use the skill web-to-markdown to convert https://example.com/protected-article in interactive modeThis will run:
mkdir -p ./tmp/web2md-profile
web2md 'https://example.com/protected-article' --interactive --user-data-dir ./tmp/web2md-profile --out ./output/The browser window will appear, allowing you to complete login or verification, then press Enter to continue.
Batch Conversion
Convert multiple URLs:
use the skill web-to-markdown to convert these URLs:
- https://example.com/article1
- https://example.com/article2
- https://example.com/article3
Save them to ./articles/This will create the directory and run separate commands for each URL:
mkdir -p ./articles
web2md 'https://example.com/article1' --out ./articles/
web2md 'https://example.com/article2' --out ./articles/
web2md 'https://example.com/article3' --out ./articles/Advanced Wait Strategies
For heavy JavaScript applications:
use the skill web-to-markdown to convert https://app.example.com/dashboard
Wait for the main selector to appearThis will run:
web2md 'https://app.example.com/dashboard' --wait-until domcontentloaded --wait-for 'main' --out ./dashboard.mdAdvanced Options
The skill supports various options to handle tricky pages:
--chrome-path <path>: Specify Chrome/Chromium location if auto-detection fails--interactive: Show browser and pause for manual intervention--wait-until <event>: Wait forload,domcontentloaded,networkidle0, ornetworkidle2(default:networkidle2)--wait-for '<selector>': Wait for specific CSS selector to appear--wait-ms <milliseconds>: Additional wait time in milliseconds--headful: Show browser window (useful for debugging)--no-sandbox: Disable sandbox (sometimes required in containers/CI)--user-data-dir <dir>: Use persistent browser profile (for sessions/logins)
Output Format
The generated Markdown includes:
- YAML Frontmatter (optional): Title, author, publication date, URL, excerpt
- Main Content: Article text with preserved formatting
- Clean Links: Properly formatted Markdown links
- Images: Preserved with alt text and captions where available
Technical Details
- Browser Automation: Uses
puppeteer-corewith local Chrome/Chromium - Content Extraction: Mozilla Readability library
- Markdown Conversion: Turndown library
- Supported Browsers: Chrome, Chromium, Brave, Edge (Chromium-based)
Troubleshooting
Chrome not found:
- Install Chrome/Chromium or specify path with
--chrome-path
Page content incomplete:
- Try
--wait-until networkidle2(waits for network to settle) - Use
--wait-for '<selector>'to wait for specific elements - Add
--wait-ms 2000for additional delay
Login required:
- Use
--interactivemode to manually login - Use
--user-data-dirto persist session across runs
Verification/CAPTCHA:
- Use
--interactivemode to complete verification manually
Version
Current version: 0.1.0
Related Tools
For simpler use cases without JavaScript, consider using Claude Code's built-in WebFetch tool instead.
Related skills
How it compares
Pick web-to-markdown for local CLI-based URL-to-Markdown extraction with JS rendering rather than manual copy-paste or static HTML parsers.
FAQ
What CLI does web-to-markdown call?
web-to-markdown calls the locally installed web2md CLI, which uses Puppeteer to render pages and Mozilla Readability to extract the main article content into clean Markdown suitable for coding agents.
When is web-to-markdown allowed to run?
web-to-markdown runs only when the user explicitly requests it by name, for example "use the skill web-to-markdown" or "use a skill web-to-markdown". The skill stops if that exact trigger phrase is missing.