Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
freestylefly avatar

Canghe Danger X To Markdown

  • 459 installs
  • 424 repo stars
  • Updated June 8, 2026
  • freestylefly/canghe-skills

canghe-danger-x-to-markdown is a Claude Code skill that converts X posts and threads into clean Markdown for blogs, newsletters, docs, and repurposed growth content for developers who need social posts reformatted withou

About

canghe-danger-x-to-markdown is a content conversion skill from freestylefly/canghe-skills that transforms X (Twitter) posts and multi-post threads into clean, publication-ready Markdown. The skill strips platform formatting noise, preserves thread structure, and outputs Markdown suitable for static site generators, newsletter tools, documentation repos, and blog CMS imports. Developers reach for canghe-danger-x-to-markdown when repurposing launch threads, technical explainers, or changelog announcements into long-form blog posts or docs without hand-editing every line break and quote block. Output is a single Markdown file or thread-sectioned document ready for Hugo, Next.js MDX, Substack, or Obsidian vault ingestion.

  • X thread to Markdown
  • Formatting cleanup
  • Repurposing for blogs
  • Newsletter-ready output
  • Social-to-owned-content pipeline

Canghe Danger X To Markdown by the numbers

  • 459 all-time installs (skills.sh)
  • Ranked #784 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
  • Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/freestylefly/canghe-skills --skill canghe-danger-x-to-markdown

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs459
repo stars424
Last updatedJune 8, 2026
Repositoryfreestylefly/canghe-skills

How do you convert X threads to Markdown?

Convert X posts and threads into clean Markdown for blogs, newsletters, docs, and repurposed growth content without manual reformatting.

Who is it for?

Developers repurposing technical X threads into blog posts, newsletters, or docs without manual reformatting.

Skip if: Scraping X at scale for analytics or building a Twitter API ingestion pipeline with rate-limit handling.

When should I use this skill?

User asks to convert X posts, Twitter threads, or tweets to Markdown for a blog or newsletter.

What you get

Clean Markdown file with preserved thread structure for blogs and newsletters

Files

SKILL.mdMarkdownGitHub ↗

X to Markdown

Converts X content to markdown:

  • Tweets/threads → Markdown with YAML front matter
  • X Articles → Full content extraction

Script Directory

Scripts located in scripts/ subdirectory.

Path Resolution: 1. SKILL_DIR = this SKILL.md's directory 2. Script path = ${SKILL_DIR}/scripts/main.ts

Consent Requirement

Before any conversion, check and obtain consent.

Consent Flow

Step 1: Check consent file

# macOS
cat ~/Library/Application\ Support/canghe-skills/x-to-markdown/consent.json

# Linux
cat ~/.local/share/canghe-skills/x-to-markdown/consent.json

Step 2: If accepted: true and disclaimerVersion: "1.0" → print warning and proceed:

Warning: Using reverse-engineered X API. Accepted on: <acceptedAt>

Step 3: If missing or version mismatch → display disclaimer:

DISCLAIMER

This tool uses a reverse-engineered X API, NOT official.

Risks:
- May break if X changes API
- No guarantees or support
- Possible account restrictions
- Use at your own risk

Accept terms and continue?

Use AskUserQuestion with options: "Yes, I accept" | "No, I decline"

Step 4: On accept → create consent file:

{
  "version": 1,
  "accepted": true,
  "acceptedAt": "<ISO timestamp>",
  "disclaimerVersion": "1.0"
}

Step 5: On decline → output "User declined. Exiting." and stop.

Preferences (EXTEND.md)

Use Bash to check EXTEND.md existence (priority order):

# Check project-level first
test -f .canghe-skills/canghe-danger-x-to-markdown/EXTEND.md && echo "project"

# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.canghe-skills/canghe-danger-x-to-markdown/EXTEND.md" && echo "user"

┌────────────────────────────────────────────────────────────┬───────────────────┐ │ Path │ Location │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ .canghe-skills/canghe-danger-x-to-markdown/EXTEND.md │ Project directory │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.canghe-skills/canghe-danger-x-to-markdown/EXTEND.md │ User home │ └────────────────────────────────────────────────────────────┴───────────────────┘

┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ Result │ Action │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Found │ Read, parse, apply settings │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ Not found │ MUST run first-time setup (see below) — do NOT silently create defaults │ └───────────┴───────────────────────────────────────────────────────────────────────────┘

EXTEND.md Supports: Download media by default | Default output directory

First-Time Setup (BLOCKING)

CRITICAL: When EXTEND.md is not found, you MUST use `AskUserQuestion` to ask the user for their preferences before creating EXTEND.md. NEVER create EXTEND.md with defaults without asking. This is a BLOCKING operation — do NOT proceed with any conversion until setup is complete.

Use AskUserQuestion with ALL questions in ONE call:

Question 1 — header: "Media", question: "How to handle images and videos in tweets?"

  • "Ask each time (Recommended)" — After saving markdown, ask whether to download media
  • "Always download" — Always download media to local imgs/ and videos/ directories
  • "Never download" — Keep original remote URLs in markdown

Question 2 — header: "Output", question: "Default output directory?"

  • "x-to-markdown (Recommended)" — Save to ./x-to-markdown/{username}/{tweet-id}.md
  • (User may choose "Other" to type a custom path)

Question 3 — header: "Save", question: "Where to save preferences?"

  • "User (Recommended)" — ~/.canghe-skills/ (all projects)
  • "Project" — .canghe-skills/ (this project only)

After user answers, create EXTEND.md at the chosen location, confirm "Preferences saved to [path]", then continue.

Full reference: references/config/first-time-setup.md

Supported Keys

KeyDefaultValuesDescription
download_mediaaskask / 1 / 0ask = prompt each time, 1 = always download, 0 = never
default_output_diremptypath or emptyDefault output directory (empty = ./x-to-markdown/)

Value priority: 1. CLI arguments (--download-media, -o) 2. EXTEND.md 3. Skill defaults

Usage

npx -y bun ${SKILL_DIR}/scripts/main.ts <url>
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> -o output.md
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --download-media
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --json

Options

OptionDescription
<url>Tweet or article URL
-o <path>Output path
--jsonJSON output
--download-mediaDownload image/video assets to local imgs/ and videos/, and rewrite markdown links to local relative paths
--loginRefresh cookies only

Supported URLs

  • https://x.com/<user>/status/<id>
  • https://twitter.com/<user>/status/<id>
  • https://x.com/i/article/<id>

Output

---
url: "https://x.com/user/status/123"
author: "Name (@user)"
tweetCount: 3
coverImage: "https://pbs.twimg.com/media/example.jpg"
---

Content...

File structure: x-to-markdown/{username}/{tweet-id}.md

When --download-media is enabled:

  • Images are saved to imgs/ next to the markdown file
  • Videos are saved to videos/ next to the markdown file
  • Markdown media links are rewritten to local relative paths

Media Download Workflow

Based on download_media setting in EXTEND.md:

SettingBehavior
1 (always)Run script with --download-media flag
0 (never)Run script without --download-media flag
ask (default)Follow the ask-each-time flow below

Ask-Each-Time Flow

1. Run script without --download-media → markdown saved 2. Check saved markdown for remote media URLs (https:// in image/video links) 3. If no remote media found → done, no prompt needed 4. If remote media found → use AskUserQuestion:

  • header: "Media", question: "Download N images/videos to local files?"
  • "Yes" — Download to local directories
  • "No" — Keep remote URLs

5. If user confirms → run script again with --download-media (overwrites markdown with localized links)

Authentication

1. Environment variables (preferred): X_AUTH_TOKEN, X_CT0 2. Chrome login (fallback): Auto-opens Chrome, caches cookies locally

Extension Support

Custom configurations via EXTEND.md. See Preferences section for paths and supported options.

Related skills

How it compares

Pick canghe-danger-x-to-markdown for one-off thread-to-blog conversion; use web-crawler MCPs for programmatic bulk social scraping.

FAQ

What does canghe-danger-x-to-markdown output?

canghe-danger-x-to-markdown outputs clean Markdown from X posts and threads, preserving multi-post structure for blogs, newsletters, and documentation. The formatted file is ready for static site generators or CMS import.

When should developers use canghe-danger-x-to-markdown?

canghe-danger-x-to-markdown fits repurposing launch threads, technical explainers, or announcements into long-form content without manual reformatting. Skip it when you need API-based bulk scraping instead of one-off conversion.

Marketing & SEOcontentdistribution

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.