Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Converts long-form markdown (specs, RFCs, reports, plans, explainers) into a single-file, lightly-interactive HTML document with sticky TOC, scrollspy, search filter, code-copy buttons, and design-system-driven brand tokens. Triggers when the markdown-html-orchestrator classifies an input as DOCUMENT, or when invoked directly via /cs:md-document. Reads the design-system config via config_loader.py and inlines the user's 12 derived CSS custom properties; refuses to render if onboarding hasn't run
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -38% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -29% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -62% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -46% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -62% | 0% |
The general-purpose converter — handles the 90% case Shihipar describes (specs, plans, RFCs, reports, explainers). Three stdlib tools pipeline together:
markdown_parser.py → html_renderer.py → interactivity_injector.py
(md → JSON AST) (AST + tokens → HTML) (HTML + JS behavior)Output is one .html file with sticky TOC, search filter, scrollspy, code-copy buttons, and the user's 12 derived brand tokens. Externals limited to Google Fonts CSS + Prism.js CDN.
| Symptom | Action | |---|---| | markdown-html-orchestrator routes input as DOCUMENT | Invoke this skill | | User runs /cs:md-document <path>.md directly | Invoke this skill | | User says "convert this spec/report/RFC/plan to HTML" | Invoke this skill | | Input is a code review (has diff blocks) | Route to md-review instead | | Input is a slide deck (clear --- boundaries) | Route to md-slides instead | | Input is < 100 lines | Refuse (Shihipar threshold — markdown still wins) | | Design-system not onboarded | Refuse, surface /cs:design-system |
bash# 1. Parse markdown → JSON AST python3 markdown-html/skills/md-document/scripts/markdown_parser.py \ --input <path>.md --output sections.json # 2. Render AST + design-system config → single-file HTML python3 markdown-html/skills/md-document/scripts/html_renderer.py \ --sections sections.json --output document.html # 3. Inject lightweight JS (search, copycode, smoothscroll, scrollspy) python3 markdown-html/skills/md-document/scripts/interactivity_injector.py \ --file document.html \ --features search,copycode,smoothscroll,scrollspy
Or all-in-one (sample render):
bashpython3 markdown-html/skills/md-document/scripts/html_renderer.py --sample \ | python3 markdown-html/skills/md-document/scripts/interactivity_injector.py \ --file /dev/stdin --output document.html
CommonMark subset sufficient for agent-generated artifacts:
code / links / !images python ) with Prism.js highlighting on demand> [!NOTE], > [!TIP], > [!IMPORTANT], > [!WARNING], > [!CAUTION])Out of scope: nested lists, HTML inlines, footnotes, definition lists, task list checkboxes (rendered as plain text), reference-style links.
config_loader.setup_completed() must return True. Otherwise surface /cs:design-system.fonts.googleapis.com and cdn.jsdelivr.net (Prism). Anything else is a regression.design_style=editorial produces 720px-wide layout with 1.75 line-height; playful rounds the callouts and adds shadow; technical is dense with 0.875rem code. Smoke-tested.prefers-color-scheme). Canon: WCAG 2.2 §1.4.3.<title> and is excluded from the TOC.md-review — that converter renders diff blocks + severity-tagged margin annotations. This one renders prose + tables + code + callouts.md-slides — that converter splits on --- boundaries into slides. This one renders one continuous document.marketing/landing/ — that generates landing pages from scratch (no markdown input). This converts existing markdown.{default_output_dir}/doc-{slug}.html (path resolved by orchestrator's output_path_resolver.py; collision suffix -2, -3, … by default).
references/ for full citationsOther measured skills in the registry, with their headline benchmark lift.