From gigachang-skills
Use when about to present long or complex AI-generated markdown to the user — typically >150 lines, >5 H2 sections, or content like code reviews, implementation plans, specs, research reports. Also use when the user explicitly asks to convert a markdown source into a readable HTML report. Produces a single self-contained HTML report (TL;DR hero, sticky TOC with importance stars, semantic-color callouts, syntax-highlighted code, mermaid diagrams, inline concept explanations, dark mode, magazine reading layout) saved to ./claude-reports/. Skip for short, simple, or plain-text content where the conversion cost outweighs the reader's time savings.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gigachang-skills:markdown-to-html-reportThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn long AI-generated markdown into a human-friendly self-contained HTML report — designed to minimize reader cognitive load via TL;DR, collapsible sections, semantic colors, and inline concept explanations.
Turn long AI-generated markdown into a human-friendly self-contained HTML report — designed to minimize reader cognitive load via TL;DR, collapsible sections, semantic colors, and inline concept explanations.
This skill rewrites, it does not photocopy. The source markdown is raw material, not the final body. Each section is re-authored into flowing prose that reads like a well-edited tech article — not a bullet dump. The work splits in three: the markdown-report-analyst sub-agent does the understanding and editing (it reads the source and produces the rewritten metadata.json), the renderer does the deterministic HTML transformation, and this skill orchestrates the two. Copy-pasting the source verbatim into the report is the single most common failure mode and is explicitly wrong.
Auto-trigger heuristic (use judgment, not strict thresholds):
Manual trigger: user explicitly asks ("convert this to HTML report", "make a readable version", or hands you a markdown file/string).
Skip when:
The source can be:
./claude-reports/.tmp-input.md./claude-reports/.tmp-input.mdNote the markdown_dir (parent of the markdown file) — it's used to resolve relative image paths.
The comprehension-heavy half — reading the source, understanding it, re-authoring each section into distilled prose, and producing metadata.json — is delegated to the bundled markdown-report-analyst sub-agent. You do not read and rewrite the article yourself.
In a single Agent call, dispatch subagent_type: markdown-report-analyst and pass it:
markdown_dir (parent of the source, for resolving relative image paths),./claude-reports/.tmp-report.json.The agent already carries the full contract — the metadata schema, the body-rewriting rules, the hero-SVG rules, the glossary/diagram rules, the same-language rule, and the no-fabrication rule — defined in agents/markdown-report-analyst.md. Do not re-specify any of that here, and do not do the rewriting yourself.
When it returns, it reports the metadata path it wrote, the slug it chose, the section count, estimated read minutes, and the must-read/diagram counts. Use the metadata path and slug in Step 3, and the counts in your Step 4 message.
First-time setup (one-shot per machine):
pip install -r ${CLAUDE_PLUGIN_ROOT}/skills/markdown-to-html-report/scripts/requirements.txt
If pip install fails or dependencies are missing, ask the user to run the install command themselves before proceeding.
Then render, using the metadata path the analyst wrote and the <slug> it returned:
python ${CLAUDE_PLUGIN_ROOT}/skills/markdown-to-html-report/scripts/render_report.py \
<markdown_path> \
./claude-reports/.tmp-report.json \
./claude-reports/$(date +%Y%m%d-%H%M%S)-<slug>.html
If the markdown source is a temp file (a pasted string or markdown you
produced in chat, written to ./claude-reports/.tmp-input.md), the source's
folder is no longer where its relative images live. Pass the original
markdown_dir from Step 1 so relative images still resolve:
... --image-base <markdown_dir>
When the source is a real file the user gave, omit the flag — it defaults to the file's own folder.
The script prints the absolute output path on stdout. The metadata contract is unchanged — the renderer behaves identically whether the metadata was authored inline or by the sub-agent.
.tmp-*.md and .tmp-*.json files./claude-reports/ was just created, remind the user once: "I created ./claude-reports/ for HTML reports — consider adding it to .gitignore."file://<absolute-path> link they can cmd-click to openExample final message:
Report ready:
file:///Users/you/proj/claude-reports/20260510-143022-pr-review.html(12 min read, 8 sections, 3 must-read highlights). Reads top-to-bottom like a tech blog — use the Skim button in the top bar to collapse sections for index-style overview.
metadata.json — all live in agents/markdown-report-analyst.md. This skill orchestrates (resolve source → dispatch agent → render → report); it does not rewrite the article inline. If you need to change how the article is understood or rewritten (rewrite intensity, schema, SVG/glossary rules), edit the agent file, not this one.auto_diagrams empty if the content doesn't need diagrams.<script>, event handlers, style="…" attrs, and unrecognized tags are stripped. Keep the SVG self-contained (no external href).<mark>, <kbd>, <details>, etc.; strips <script>, <iframe>, event handlers).Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub gigayaya/gigachang-skills --plugin gigachang-skills