
Web To Markdown
- 13 installs
- 1 repo stars
- Updated March 1, 2026
- cachemoney/agent-toolkit
Convert web content to markdown
About
Converts web content to markdown format. Useful for capturing web information and converting it to structured documentation.
- Content conversion
- Web scraping
- Documentation
Web To Markdown by the numbers
- 13 all-time installs (skills.sh)
- Ranked #1,117 of 1,901 Documentation skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cachemoney/agent-toolkit --skill web-to-markdownAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 13 |
|---|---|
| repo stars | ★ 1 |
| Last updated | March 1, 2026 |
| Repository | cachemoney/agent-toolkit ↗ |
What it does
Convert web content to markdown
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.