| name | markdown-preview |
| description | 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. |
| allowed-tools | Read, Write, Bash, Skill |
Markdown 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
EXIT_CODE = 0: All diagrams valid, proceed with generation - If
EXIT_CODE = 1: One or more diagrams invalid
- 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) fiClean 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
rp1 agent-tools mmd-validatefor validation - ✅ 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
agent-tools mmd-validatecommand) - 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
{{TITLE}}with actual page title - Replace
{{MARKDOWN_CONTENT}}with 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:
$TMPDIRor/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
browserOpened=false, but still return success - 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.