Claude-skill-registry-data markdown-preview
Generate browser-viewable HTML previews from markdown, plain text, and Mermaid diagrams. Auto-validates diagrams, applies professional styling, and opens in default browser. Use when agents need to preview documentation, visualizations, or formatted content.
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/markdown-preview" ~/.claude/skills/majiayu000-claude-skill-registry-data-markdown-preview && rm -rf "$T"
data/markdown-preview/SKILL.mdMarkdown Preview Generator — Browser-Ready HTML from Markdown
Generate self-contained HTML files from markdown content and automatically open them in the user's default browser.
What This Skill Does
- Accepts GitHub-flavored markdown, plain text, and Mermaid diagrams
- Validates all Mermaid diagrams in document at once (single validation pass)
- Generates single-page HTML with embedded libraries (marked.js, Prism.js, Mermaid.js)
- Applies professional styling (GitHub-style, dark mode, or minimal)
- Saves HTML to system temp directory with unique filename
- Auto-opens preview in default browser (cross-platform: macOS, Linux, Windows)
- Returns file path and execution status
When to Use
Use this skill when you need to:
- Preview markdown documentation in a browser
- Visualize Mermaid diagrams with proper rendering
- Generate formatted HTML reports for users
- Display code blocks with syntax highlighting
- Create professional previews of generated content
Trigger scenarios: markdown preview, HTML generation, browser preview, document visualization, diagram rendering.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| content | string | Yes | - | Markdown, plain text, or Mermaid content to render |
| title | string | No | "Markdown Preview" | HTML page title |
| theme | string | No | "github" | Template theme: "github", "dark", or "minimal" |
Workflow
1. Parse Input Content
Extract content from agent context or parameters. The skill expects markdown content as a string input.
2. Validate All Mermaid Diagrams (Single Pass)
Efficient Validation Strategy:
Instead of validating each diagram individually, validate the entire markdown document at once:
-
Write markdown to temp file:
TEMP_MD=$(mktemp /tmp/markdown-preview.XXXXXX.md) echo "$CONTENT" > "$TEMP_MD" -
Validate all diagrams in one pass:
rp1 agent-tools mmd-validate "$TEMP_MD" EXIT_CODE=$? -
Check validation result:
- If
: All diagrams valid, proceed with generationEXIT_CODE = 0 - If
: One or more diagrams invalidEXIT_CODE = 1
- If
-
Handle validation failures:
if [ $EXIT_CODE -ne 0 ]; then # Extract error message from validation output # Prepend warning to markdown content: CONTENT="⚠️ **Mermaid Validation Warning**: Some diagrams have syntax errors. They may not render correctly in the preview.\n\n$CONTENT" # Continue with HTML generation (non-blocking) fi -
Clean up temp file:
rm -f "$TEMP_MD"
Why This Approach is Better:
- ✅ Single validation pass instead of per-diagram validation
- ✅ Faster: Validates all diagrams in ~2-5 seconds total (not per diagram)
- ✅ Uses CLI tool: Leverages
for validationrp1 agent-tools mmd-validate - ✅ Simpler logic: No loops, no retry attempts
- ✅ Non-blocking errors: Invalid diagrams show in preview with Mermaid's own error rendering
- ✅ Better user experience: User sees actual diagram syntax errors in browser
Error Handling:
- Validation failures are non-blocking (HTML generation continues)
- Invalid diagrams render with Mermaid.js's built-in error display
- User can see exact syntax errors in browser preview
- Warning message prepended to document if validation fails
Dependencies:
- Requires rp1 CLI v0.3.0+ (includes
command)agent-tools mmd-validate - CLI tool supports markdown files with multiple Mermaid blocks
3. Generate Self-Contained HTML
Template Selection:
Based on
theme parameter, select appropriate template from TEMPLATES.md:
- "github" (default): GitHub-style with professional appearance
- "dark": Dark mode for late-night work or presentations
- "minimal": Lightweight, print-friendly styling
Template Loading:
- Read selected template from TEMPLATES.md
- Identify template section markers
- Extract complete HTML template
Template Processing:
- Replace
with actual page title{{TITLE}} - Replace
with markdown content{{MARKDOWN_CONTENT}} - Ensure proper escaping of special characters in content
HTML Features (embedded in templates):
- Libraries: marked.js (markdown), Prism.js (syntax highlighting), Mermaid.js (diagrams)
- Security: Content Security Policy prevents XSS attacks
- Styling: Professional CSS embedded inline
- Rendering: Client-side JavaScript handles markdown parsing and diagram rendering
- Error Display: Mermaid.js automatically shows syntax errors for invalid diagrams
- Languages: Syntax highlighting for 10+ languages (Python, JavaScript, TypeScript, Bash, JSON, YAML, Rust, Go, Java, Markdown)
See TEMPLATES.md for complete HTML structure and styling details.
4. Write HTML to Temp Directory
Filename Generation:
TIMESTAMP=$(date +%s%N) FILENAME="markdown-preview-${TIMESTAMP}.html" TEMP_DIR="${TMPDIR:-/tmp}" FILE_PATH="${TEMP_DIR}/${FILENAME}"
File Operations:
- Use Write tool to create HTML file
- Set file permissions to 600 (user-only readable) on Unix systems
- Return absolute file path
Platform-specific temp directories:
- macOS/Linux:
or$TMPDIR/tmp - Windows:
%TEMP%
5. Open in Default Browser
Platform Detection:
# Detect platform via $OSTYPE if [[ "$OSTYPE" == "darwin"* ]]; then PLATFORM="macos" OPEN_CMD="open" elif [[ "$OSTYPE" == "linux-gnu"* ]]; then PLATFORM="linux" OPEN_CMD="xdg-open" elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || "$OSTYPE" == "win32" ]]; then PLATFORM="windows" OPEN_CMD="start" else PLATFORM="unknown" OPEN_CMD="" fi
Browser Opening:
if [ -n "$OPEN_CMD" ]; then $OPEN_CMD "$FILE_PATH" 2>&1 if [ $? -eq 0 ]; then BROWSER_OPENED=true else BROWSER_OPENED=false # Log error but continue (non-blocking) fi else BROWSER_OPENED=false # Log warning: unknown platform fi
Error Handling:
- If browser command fails: log error, set
, but still return successbrowserOpened=false - If platform unknown: log warning, return file path without opening browser
- Browser launch failure is non-blocking (file was still created successfully)
6. Return Results
Output Format:
{ "status": "success" | "error", "filePath": "/tmp/markdown-preview-1699464000000.html", "message": "Preview generated successfully.", "diagramsValidated": true, "browserOpened": true, "theme": "github" }
Success Response:
- status: "success"
- filePath: Absolute path to generated HTML
- message: Human-readable summary
- diagramsValidated: Whether all Mermaid diagrams passed validation
- browserOpened: Whether browser was successfully launched
- theme: Selected template theme
Error Response:
{ "status": "error", "message": "Failed to write HTML file: Permission denied", "filePath": null, "diagramsValidated": false, "browserOpened": false }
Error Handling
Empty/Whitespace Input:
- Render empty HTML gracefully
- Do not fail
File Write Errors:
- Return error status with system error message
- Check file system permissions
- Suggest temp directory access issues
Validation Script Unavailable:
- Log warning: "Mermaid validation script not found. Diagrams not pre-validated."
- Continue with HTML generation (non-blocking)
- Mermaid.js will show errors in browser if diagrams invalid
Browser Launch Failures (non-blocking):
- Log error message
- Set browserOpened = false
- Return success with file path
- User can manually open file
Malformed Markdown (best-effort):
- marked.js handles malformed markdown gracefully
- Render as best as possible
- Do not fail on non-standard syntax
- Log warnings but continue generation
Invalid Theme:
- Fall back to "github" theme
- Log warning about invalid theme parameter
Invalid Mermaid Diagrams (non-blocking):
- Validation warning prepended to document
- Mermaid.js renders error messages in browser
- User sees exact syntax errors
- Can inspect and fix diagrams in source
Integration Example
From PR Visualizer Agent:
## Generate HTML Preview After creating the markdown file, use the markdown-preview skill to generate the HTML preview. Use the Skill tool: skill: "rp1-base:markdown-preview" Read the generated markdown file and pass content: - content: Read from {RP1_ROOT}/work/pr_reviews/<pr-id>-visual.md - title: "PR Visualization for PR #{pr-number}" - theme: "github" The skill will: 1. Write markdown to temp file 2. Validate ALL Mermaid diagrams in one pass using rp1 CLI tool 3. Generate self-contained HTML with professional styling 4. Save to temp directory 5. Auto-open in browser 6. Return file path for logging Log the file path and report to user: "✓ Preview generated: {filePath}"
From Documentation Agent:
Use skill: "rp1-base:markdown-preview" Pass documentation content: - content: Generated markdown documentation - title: "Project Documentation" - theme: "github" Skill validates all diagrams once and generates HTML. Browser opens automatically.
Performance Expectations
Optimized Performance (<5 seconds total):
- Input parsing: <100ms
- Mermaid validation (all diagrams): ~2-3s (single pass)
- HTML generation: <500ms
- File write: <100ms
- Browser launch: <2s
Typical Content:
- 5,000-10,000 characters of markdown
- 2-5 Mermaid diagrams (validated together)
- 5-10 code blocks with syntax highlighting
Performance Improvement:
- Before: 1-3 seconds PER diagram (4 diagrams = 4-12 seconds)
- After: 2-3 seconds for ALL diagrams (constant time)
- Speedup: ~60-75% faster for documents with multiple diagrams
Dependencies
Internal:
- rp1 CLI v0.3.0+ (for bulk diagram validation via
)agent-tools mmd-validate
External (embedded via CDN):
- marked.js (markdown parsing)
- Prism.js (syntax highlighting)
- Mermaid.js (diagram rendering)
System Requirements:
- Write access to temp directory
- Default browser configured
- Bash tool access for platform detection and browser opening
Business Rules
- Single-Pass Validation: All Mermaid diagrams validated together in one script call
- Non-Blocking Errors: Invalid diagrams don't prevent HTML generation
- Browser-Side Error Display: Mermaid.js shows syntax errors in preview
- Browser Launch is Non-Blocking: File creation always succeeds; browser opening is best-effort
- Self-Contained Output: HTML file contains all resources (CSS inline, JS via CDN)
- Best-Effort Rendering: Never fail due to malformed markdown; render as best as possible
- Theme Fallback: Invalid theme parameter defaults to "github"
- Validation Tool Optional: If rp1 CLI validation unavailable, continue without pre-validation
References
- TEMPLATES.md: Complete HTML templates with CSS variations (GitHub-style, dark mode, minimal)
- EXAMPLES.md: Practical input/output examples demonstrating all features
Anti-Loop Directives
EXECUTE IMMEDIATELY:
- Do NOT propose plans or ask for approval
- Do NOT iterate or refine output
- Execute workflow ONCE from start to finish
- Generate complete HTML and open browser
- Return results and STOP
No user interaction required during execution. Complete the entire workflow autonomously.