
baoyu-format-markdown transforms plain text or markdown files into well-structured, reader-friendly documents by applying consistent formatting, frontmatter, titles, headings, bold text, lists, and code blocks while preserving all original content. It serves writers and content creators who need to quickly improve article layout and readability without manual formatting work. The skill solves the problem of converting unformatted or poorly structured text into polished markdown that helps readers grasp key points and structure at a glance.
$ npx -y skills add jimliu/baoyu-skills --skill baoyu-format-markdown --agent claude-codeInstalls into .claude/skills of the current project.
Make plain text or markdown scannable so readers grasp key points and structure fast.
Core principle: Only adjust formatting and fix obvious typos. Never add, delete, or rewrite content.
When this skill prompts the user, follow this tool-selection rule (priority order):
AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.
{baseDir} = this SKILL.md's directory. ${BUN_X} = bun if installed; else npx -y bun if npx available; else suggest installing bun. Replace {baseDir} and ${BUN_X} with actual values.
| Script | Purpose |
|---|---|
scripts/main.ts | Main entry point with CLI options (uses remark-cjk-friendly for CJK emphasis) |
scripts/quotes.ts | Replace ASCII quotes with fullwidth quotes |
scripts/autocorrect.ts | Add CJK/English spacing via autocorrect |
First one found wins:
| Priority | Path | Scope |
|---|---|---|
| 1 | .baoyu-skills/baoyu-format-markdown/EXTEND.md | Project |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-format-markdown/EXTEND.md | XDG |
| 3 | $HOME/.baoyu-skills/baoyu-format-markdown/EXTEND.md | User home |
None found → use defaults (no first-time setup for this skill).
| Setting | Values | Default | Description |
|---|---|---|---|
auto_select | true/false | false | Skip both title and summary selection, auto-pick best |
auto_select_title | true/false | false | Skip title selection only |
auto_select_summary | true/false | false | Skip summary selection only |
| Other | — | — | Default formatting options, typography preferences |
The agent analyzes and formats (Steps 1-5), then runs the typography script (Step 6).
Read the file. It is Markdown if it has --- YAML frontmatter, #/##/### headings, or **bold**/*italic*/lists/code blocks/blockquotes; otherwise plain text.
If Markdown, ask:
Detected existing markdown formatting. What would you like to do?
1. Optimize formatting (Recommended)
- Analyze content, improve headings, bold, lists for readability
- Run typography script (spacing, emphasis fixes)
- Output: {filename}-formatted.md
2. Keep original formatting
- Preserve existing markdown structure
- Run typography script only
- Output: {filename}-formatted.md
3. Typography fixes only
- Run typography script on original file in-place
- No copy created, modifies original file directly
Read the whole text and ask what would help a reader quickly understand and remember it. Save {original-filename}-analysis.md — the blueprint for Step 4:
# Content Analysis: {filename}
## Highlights & Key Insights
- [core arguments/conclusions, surprising facts or data, counterintuitive claims, golden quotes]
## Structure Assessment
- Current flow: [describe]
- Suggested sections: [heading candidates with brief rationale; unheaded section boundaries; walls of text needing breaks]
## Reader-Important Information
- [actionable takeaways, key definitions, lists buried in prose, comparisons that should be tables]
## Formatting Issues
- [specific issues with location: heading hierarchy, mixed-topic paragraphs, parallel items as prose, unmarked code/commands/terms]
## Typos Found
- [obvious typos with corrections, or "None found"]
Create a YAML frontmatter block if missing.
| Field | Processing |
|---|---|
title | See Title Generation |
slug | Infer from file path or generate from title |
summary | One-sentence summary (see Summary Generation) |
description | Longer descriptive summary (see Summary Generation) |
coverImage | If imgs/cover.png exists in the same directory, use its relative path |
Run this flow even if a title exists, unless auto_select_title is set.
(recommended):Pick a title:
1. [Hook title A] — (recommended) [formula name]
2. [Hook title B] — [formula name]
3. [Hook title C] — [formula name]
4. [Straightforward title D] — straightforward
5. [Straightforward title E] — straightforward
Enter number, or type a custom title:
title is context only; still generate fresh candidates.auto_select: true or auto_select_title: true → skip the prompt, use the top candidate.Generate both directly (no user selection):
| Field | Length | Purpose |
|---|---|---|
summary | 1 sentence, ~50-80 chars | Concise hook — feeds, social sharing, SEO meta |
description | 2-3 sentences, ~100-200 chars | Richer context — article previews, newsletter blurbs |
summary punchy and self-contained; description may add supporting detailssummary/description; only generate the missing oneGuided by the Step 2 analysis, make content scannable and key points impossible to miss, using headings (##/###), bold, ordered/unordered lists, tables, inline/fenced code (commands, paths, technical terms), blockquotes, and --- for major transitions.
Don't:
Do:
python, javascript)Save as {original-filename}-formatted.md, backing up any existing one:
if [ -f "{filename}-formatted.md" ]; then
mv "{filename}-formatted.md" "{filename}-formatted.backup-$(date +%Y%m%d-%H%M%S).md"
fi
${BUN_X} {baseDir}/scripts/main.ts {output-file-path} [options]
| Option | Short | Description | Default |
|---|---|---|---|
--quotes | -q | Replace ASCII quotes with fullwidth quotes "..." | false |
--no-quotes | Do not replace quotes | ||
--spacing | -s | Add CJK/English spacing via autocorrect | true |
--no-spacing | Do not add CJK/English spacing | ||
--emphasis | -e | Fix CJK emphasis punctuation issues | true |
--no-emphasis | Do not fix CJK emphasis issues |
Frontmatter YAML is always formatted. Examples: main.ts article.md (defaults), --quotes (add quote replacement), --no-spacing (emphasis only).
Report actual changes; omit categories with none:
**Formatting Complete**
**Files:**
- Analysis: {filename}-analysis.md
- Formatted: {filename}-formatted.md
**Content Analysis Summary:**
- Highlights found: X key insights
- Golden quotes: X memorable sentences
- Formatting issues fixed: X items
**Changes Applied:**
- Frontmatter: [added/updated] (title, slug, summary)
- Headings added: X (##: N, ###: N)
- Bold markers added: X
- Lists created: X (from prose → list conversion)
- Tables created: X
- Code markers added: X
- Blockquotes added: X
- Typos fixed: X [list each: "original" → "corrected"]
**Typography Script:**
- CJK spacing: [applied/skipped]
- Emphasis fixes: [applied/skipped]
- Quote replacement: [applied/skipped]
Custom configurations via EXTEND.md — see Preferences above.
Sponsors