
Baoyu Danger X To Markdown
Convert X (Twitter) posts and threads into clean markdown with a one-time preferences file so solo builders can repurpose social posts into blogs or docs.
Overview
baoyu-danger-x-to-markdown is an agent skill for the Grow phase that onboards X-to-markdown conversion preferences via EXTEND.md before saving tweets or articles as markdown.
Install
npx skills add https://github.com/jimliu/baoyu-skills --skill baoyu-danger-x-to-markdownWhat is this skill?
- Blocking first-time setup saves EXTEND.md before any tweet or article conversion runs
- AskUserQuestion flow covers media policy (ask each time, always, never) and default output directory
- Recommended default output folder x-to-markdown for organized saves
- Supports converting tweets and articles after preferences are persisted
- 3 media-handling options in first-time setup (ask each time, always download, never download)
Adoption & trust: 21.2k installs on skills.sh; 20.9k GitHub stars; 0/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want to turn X posts into markdown but need consistent media download and output-folder rules without re-asking every run.
Who is it for?
Indie builders archiving threads, building swipe files, or feeding markdown into static sites and newsletters from X.
Skip if: Teams that need enterprise Twitter API compliance review only, or workflows with no filesystem and no desire to store conversion prefs locally.
When should I use this skill?
No EXTEND.md exists yet for baoyu-danger-x-to-markdown, or user is starting X/article conversion and needs preference onboarding.
What do I get? / Deliverables
EXTEND.md stores your media and output preferences so subsequent conversions follow the same rules automatically.
- EXTEND.md preference file
- Markdown exports from X content (after setup completes)
Recommended Skills
Journey fit
Canonical shelf is Grow → content because the skill’s purpose is capturing and reformatting social posts for downstream content and distribution workflows. Content subphase fits markdown export, media handling, and output paths for articles and archives—not product build or launch SEO tooling.
How it compares
Use as a gated preference workflow for social-to-markdown—not a generic web clipper MCP with no blocking setup.
Common Questions / FAQ
Who is baoyu-danger-x-to-markdown for?
Solo and indie builders who repurpose X content into markdown files with predictable media handling and output paths.
When should I use baoyu-danger-x-to-markdown?
Use it the first time you run the X-to-markdown skill in a repo (Grow/content), before any conversion, and whenever you need to reset EXTEND.md preferences.
Is baoyu-danger-x-to-markdown safe to install?
Review the Security Audits panel on this Prism page and limit filesystem/network scope to directories you trust; the skill writes config and may download remote media.
SKILL.md
READMESKILL.md - Baoyu Danger X To Markdown
# First-Time Setup ## Overview When no EXTEND.md is found, guide user through preference setup. **BLOCKING OPERATION**: This setup MUST complete before ANY other workflow steps. Do NOT: - Start converting tweets or articles - Ask about URLs or output paths - Proceed to any conversion ONLY ask the questions in this setup flow, save EXTEND.md, then continue. ## Setup Flow ``` No EXTEND.md found | v +---------------------+ | AskUserQuestion | | (all questions) | +---------------------+ | v +---------------------+ | Create EXTEND.md | +---------------------+ | v Continue conversion ``` ## Questions **Language**: Use user's input language or saved language preference. Use AskUserQuestion with ALL questions in ONE call: ### Question 1: Download Media ```yaml header: "Media" question: "How to handle images and videos in tweets?" options: - label: "Ask each time (Recommended)" description: "After saving markdown, ask whether to download media" - label: "Always download" description: "Always download media to local imgs/ and videos/ directories" - label: "Never download" description: "Keep original remote URLs in markdown" ``` ### Question 2: Default Output Directory ```yaml header: "Output" question: "Default output directory?" options: - label: "x-to-markdown (Recommended)" description: "Save to ./x-to-markdown/{username}/{tweet-id}.md" ``` Note: User will likely choose "Other" to type a custom path. ### Question 3: Save Location ```yaml header: "Save" question: "Where to save preferences?" options: - label: "User (Recommended)" description: "~/.baoyu-skills/ (all projects)" - label: "Project" description: ".baoyu-skills/ (this project only)" ``` ## Save Locations | Choice | Path | Scope | |--------|------|-------| | User | `~/.baoyu-skills/baoyu-danger-x-to-markdown/EXTEND.md` | All projects | | Project | `.baoyu-skills/baoyu-danger-x-to-markdown/EXTEND.md` | Current project | ## After Setup 1. Create directory if needed 2. Write EXTEND.md 3. Confirm: "Preferences saved to [path]" 4. Continue with conversion using saved preferences ## EXTEND.md Template ```md download_media: [ask/1/0] default_output_dir: [path or empty] ``` ## Modifying Preferences Later Users can edit EXTEND.md directly or delete it to trigger setup again. { "lockfileVersion": 1, "configVersion": 1, "workspaces": { "": { "name": "baoyu-danger-x-to-markdown-scripts", "dependencies": { "baoyu-chrome-cdp": "^0.1.1", }, }, }, "packages": { "baoyu-chrome-cdp": ["baoyu-chrome-cdp@0.1.1", "", {}, "sha512-OR3PQ7NzJDykCXl20TnkZuwvNQ0hsVC2czje93P72xQaA3vKOyPN/Q1CwEgKuYzP7Rka4Fdh4HvURj6AoNR7Tg=="], } } import { resolveXToMarkdownChromeProfileDir } from "./paths.js"; export const DEFAULT_BEARER_TOKEN = "Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA"; export const DEFAULT_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"; export const X_LOGIN_URL = "https://x.com/home"; export const X_USER_DATA_DIR = resolveXToMarkdownChromeProfileDir(); export const X_COOKIE_NAMES = ["auth_token", "ct0", "gt", "twid"] as const; export const X_REQUIRED_COOKIES = ["auth_token", "ct0"] as const; export const FALLBACK_QUERY_ID = "id8pHQbQi7eZ6P9mA1th1Q"; export const FALLBACK_FEATURE_SWITCHES = [ "profile_label_improvements_pcf_label_in_post_enabled", "responsive_web_profile_redirect_enabled", "rweb_tipjar_consumption_enabled", "verified_phone_label_enabled", "responsive_web_graphql_skip_user_profile_image_extensions_enabled", "responsive_web_graphql_timeline_navigation_enabled", ]; export const FALLBACK_FIELD_TOGGLES = ["withPayments", "withAuxiliary