Markdown Formatter
Transforms plain text or markdown files into well-structured markdown with proper frontmatter, formatting, and typography.
Script Directory
Scripts in
subdirectory. Replace
with this SKILL.md's directory path.
| Script | Purpose |
|---|
| Main entry point with CLI options (uses remark-cjk-friendly for CJK emphasis) |
| Replace ASCII quotes with fullwidth quotes |
| Add CJK/English spacing via autocorrect |
Preferences (EXTEND.md)
Use Bash to check EXTEND.md existence (priority order):
bash
# Check project-level first
test -f .baoyu-skills/baoyu-format-markdown/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.baoyu-skills/baoyu-format-markdown/EXTEND.md" && echo "user"
┌──────────────────────────────────────────────────────────┬───────────────────┐
│ Path │ Location │
├──────────────────────────────────────────────────────────┼───────────────────┤
│ .baoyu-skills/baoyu-format-markdown/EXTEND.md │ Project directory │
├──────────────────────────────────────────────────────────┼───────────────────┤
│ $HOME/.baoyu-skills/baoyu-format-markdown/EXTEND.md │ User home │
└──────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐
│ Result │ Action │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Found │ Read, parse, apply settings │
├───────────┼───────────────────────────────────────────────────────────────────────────┤
│ Not found │ Use defaults │
└───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md Supports: Default formatting options | Summary length preferences
Usage
Claude performs content analysis and formatting (Steps 1-6), then runs the script for typography fixes (Step 7).
Workflow
Step 1: Read Source File
Read the user-specified markdown or plain text file.
Step 1.5: Detect Content Type & Confirm
Content Type Detection:
| Indicator | Classification |
|---|
| Has YAML frontmatter | Markdown |
| Has , , headings | Markdown |
| Has , | Markdown |
| Has or lists | Markdown |
| Has ``` code blocks | Markdown |
| Has blockquotes | Markdown |
| None of above | Plain text |
Decision Flow:
┌─────────────────┬────────────────────────────────────────────────┐
│ Content Type │ Action │
├─────────────────┼────────────────────────────────────────────────┤
│ Plain text │ Proceed to Step 2 (format to markdown) │
├─────────────────┼────────────────────────────────────────────────┤
│ Markdown │ Use AskUserQuestion to confirm optimization │
└─────────────────┴────────────────────────────────────────────────┘
If Markdown detected, ask user:
Detected existing markdown formatting. What would you like to do?
1. Optimize formatting (Recommended)
- Add/improve frontmatter, headings, bold, lists
- Run typography script (spacing, emphasis fixes)
- Output: {filename}-formatted.md
2. Keep original formatting
- Preserve existing markdown structure
- Run typography script (spacing, emphasis fixes)
- Output: {filename}-formatted.md
3. Typography fixes only
- Run typography script on original file in-place
- No copy created, modifies original file directly
Based on user choice:
- Optimize: Continue to Step 2-8 (full workflow)
- Keep original: Skip Steps 2-5, copy file → Step 6-8 (run script on copy)
- Typography only: Skip Steps 2-6, run Step 7 on original file directly
Step 2: Analyze Content Structure
Identify:
- Existing title (H1 )
- Paragraph separations
- Keywords suitable for bold
- Parallel content convertible to lists
- Code snippets
- Quotations
Step 3: Check/Create Frontmatter
Check for YAML frontmatter (
block). Create if missing.
Meta field handling:
| Field | Processing |
|---|
| See Step 4 |
| Infer from file path (e.g., posts/2026/01/10/vibe-coding/
→ ) or generate from title |
| Generate engaging summary (100-150 characters) |
| Check if exists in same directory; if so, use relative path |
Step 4: Title Handling
Logic:
- If frontmatter already has → use it, no H1 in body
- If first line is H1 → extract to frontmatter , remove H1 from body
- If neither exists → generate candidate titles
Title generation flow:
- Generate 3 candidate titles based on content
- Use tool:
Select a title:
1. [Title A] (Recommended)
2. [Title B]
3. [Title C]
- If no selection within a few seconds, use recommended (option 1)
Title principles:
- Concise, max 20 characters
- Captures core message
- Engaging, sparks reading interest
- Accurate, avoids clickbait
Important: Once title is in frontmatter, body should NOT have H1 (avoid duplication)
Step 5: Format Processing
Formatting rules:
| Element | Format |
|---|
| Titles | Use , , hierarchy |
| Key points | Use |
| Parallel items | Convert to unordered or ordered lists |
| Code/commands | Use or |
| Quotes/sayings | Use blockquote |
| Separators | Use where appropriate |
Formatting principles:
- Preserve original content and viewpoints
- Add formatting only, do not modify text
- Formatting serves readability
- Avoid over-formatting
Step 6: Save Formatted File
Save as
{original-filename}-formatted.md
Examples:
If user chose "Keep original formatting" (from Step 1.5):
- Copy original file to without modifications
- Proceed to Step 7 for typography fixes only
Backup existing file:
If
already exists, backup before overwriting:
bash
# Check if formatted file exists
if [ -f "{filename}-formatted.md" ]; then
# Backup with timestamp
mv "{filename}-formatted.md" "{filename}-formatted.backup-$(date +%Y%m%d-%H%M%S).md"
fi
Example:
- exists → backup to
final-formatted.backup-20260128-143052.md
Step 7: Execute Text Formatting Script
After saving, must run the formatting script:
bash
npx -y bun ${SKILL_DIR}/scripts/main.ts {output-file-path} [options]
Script Options:
| Option | Short | Description | Default |
|---|
| | Replace ASCII quotes with fullwidth quotes | false |
| | Do not replace quotes | |
| | Add CJK/English spacing via autocorrect | true |
| | Do not add CJK/English spacing | |
| | Fix CJK emphasis punctuation issues | true |
| | Do not fix CJK emphasis issues | |
| | Show help message | |
Examples:
bash
# Default: spacing + emphasis enabled, quotes disabled
npx -y bun ${SKILL_DIR}/scripts/main.ts article.md
# Enable all features including quote replacement
npx -y bun ${SKILL_DIR}/scripts/main.ts article.md --quotes
# Only fix emphasis issues, skip spacing
npx -y bun ${SKILL_DIR}/scripts/main.ts article.md --no-spacing
# Disable all processing except frontmatter formatting
npx -y bun ${SKILL_DIR}/scripts/main.ts article.md --no-spacing --no-emphasis
Script performs (based on options):
- Fix CJK emphasis/bold punctuation issues (default: enabled)
- Add CJK/English mixed text spacing via autocorrect (default: enabled)
- Replace ASCII quotes with fullwidth quotes (default: disabled)
- Format frontmatter YAML (always enabled)
Step 8: Display Results
**Formatting complete**
File: posts/2026/01/09/example/final-formatted.md
Changes:
- Added title: [title content]
- Added X bold markers
- Added X lists
- Added X code blocks
Formatting Example
Before:
This is plain text. First point is efficiency improvement. Second point is cost reduction. Third point is experience optimization. Use npm install to install dependencies.
After:
markdown
---
title: Three Core Advantages
slug: three-core-advantages
summary: Discover the three key benefits that drive success in modern projects.
---
This is plain text.
**Main advantages:**
- Efficiency improvement
- Cost reduction
- Experience optimization
Use `npm install` to install dependencies.
Notes
- Preserve original writing style and tone
- Specify correct language for code blocks (e.g., , )
- Maintain CJK/English spacing standards
- Do not add content not present in original
Extension Support
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.