[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78JBCD9D84PXCTATPBMP2BC":3,"skill-same:01M78JBCD9D84PXCTATPBMP2BC":92},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":14,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M78JBCD9D84PXCTATPBMP2BC","markdown-html-orchestrator",null,"Use when a user wants to convert any markdown file in their Claude project into a single-file, lightly-interactive HTML — long-form documents (specs, plans, RFCs, reports, explainers), code reviews with diffs and severity-tagged annotations, or slide decks. Triggers on \"convert this markdown to HTML\", \"make this an HTML file\", \"turn this into an interactive document\", \"render this report as HTML\", \"PR writeup as HTML\", \"slides from this markdown\". Forks context to route to one of three converter sub-skills (md-document, md-review, md-slides) based on a deterministic doctype classifier, after the user has run the design-system onboarding once. Refuses if input is under 100 lines (per Shihipar — markdown still wins below the threshold) or design-system isn't onboarded. Distinct from Anthropic's official Playground plugin (which is interactive prompt-tuning controls with sliders\u002Fknobs\u002Fprompt-copy-back) and from marketing\u002Flanding\u002F (which is a landing-page generator).","aneeba-pixel\u002Fclaude-skills","aneeba-pixel","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F218186338?v=4","01M78GRXBTG70217SH410P543Y","Aneeba Saeed","01M78GRXCDZ6TA0F8H2CZMDGSS",0,"MIT","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: markdown-html-orchestrator\ndescription: Use when a user wants to convert any markdown file in their Claude project into a single-file, lightly-interactive HTML — long-form documents (specs, plans, RFCs, reports, explainers), code reviews with diffs and severity-tagged annotations, or slide decks. Triggers on \"convert this markdown to HTML\", \"make this an HTML file\", \"turn this into an interactive document\", \"render this report as HTML\", \"PR writeup as HTML\", \"slides from this markdown\". Forks context to route to one of three converter sub-skills (md-document, md-review, md-slides) based on a deterministic doctype classifier, after the user has run the design-system onboarding once. Refuses if input is under 100 lines (per Shihipar — markdown still wins below the threshold) or design-system isn't onboarded. Distinct from Anthropic's official Playground plugin (which is interactive prompt-tuning controls with sliders\u002Fknobs\u002Fprompt-copy-back) and from marketing\u002Flanding\u002F (which is a landing-page generator).\ncontext: fork\nversion: 2.10.0\nauthor: Alireza Rezvani\nlicense: MIT\ntags: [markdown, html, converter, orchestrator, documentation, code-review, slides, design-system]\ncompatible_tools: [claude-code, codex-cli, cursor, antigravity, opencode, gemini-cli]\n---\n\n# Markdown → HTML — Domain Orchestrator\n\nThariq Shihipar's argument (Claude Code HTML output essay, Medium 2026): **markdown collapses past 100 lines for agent-generated artifacts.** Long specs, code reviews, and architecture explainers lose density, hierarchy, and lightweight interaction the moment they exceed a screen of text. HTML restores all three — single-file, browser-native, shareable.\n\nThis orchestrator forks context, classifies the input markdown deterministically, routes to the right converter sub-skill, and returns a digest with the output path. Heavy intake (full markdown bodies, diffs, slide decks) stays in the forked context.\n\n**Foundation status (v2.10.0):** orchestrator + `design-system` (onboarding + shared brand tokens) are live. Converter sub-skills (`md-document`, `md-review`, `md-slides`) land in v2.10.1 follow-up PRs. Until they land, this skill still runs the classifier and the design-system gate, and surfaces the routing recommendation — it just hands the rendering work back to Claude with the structured brief.\n\n## When to invoke\n\n| Symptom | Sub-skill |\n|---|---|\n| \"Convert this RFC \u002F spec \u002F report \u002F explainer to HTML\" — long-form doc | `md-document` |\n| \"Turn this PR writeup \u002F code review into HTML\" — markdown with diff blocks | `md-review` |\n| \"Make a slide deck from this markdown\" — `---` boundaries or H1 cadence | `md-slides` |\n\n## Pre-flight gates (hard refusals)\n\n1. **Below the 100-line threshold.** Markdown wins below 100 lines (Shihipar). The classifier prints `below_min_lines: true` and `route_explainer.py` refuses. Tell the user to keep their input as markdown.\n2. **Design-system not onboarded.** If `~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json` doesn't exist (or its `setup_completed_at` is null), refuse. Point the user at `python3 markdown-html\u002Fskills\u002Fdesign-system\u002Fscripts\u002Fonboard.py` (or `--defaults` for a zero-touch run).\n3. **Unwritable save location.** `output_path_resolver.py` refuses if the configured `default_output_dir` (or `--out` override) isn't writable.\n\n## Routing logic (deterministic)\n\nTwo-signal threshold pattern lifted from `research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md`. Filename hint = 2 points; each content signal = 1 point. Silent-route allowed when winner ≥ 3 AND (runner-up = 0 OR winner ≥ 2× runner-up). Below threshold → one clarifying question with a recommended answer.\n\n### Signal table\n\n| Signal class | Filename hints | Content signals | Sub-skill |\n|---|---|---|---|\n| DOCUMENT | `report.md`, `*-doc.md`, `spec.md`, `rfc-*.md`, `*-analysis.md`, `*-explainer.md` | `## Table of Contents` (2), `^# `, `^## `, markdown table rows, `> [!NOTE]\u002F[!TIP]\u002F[!IMPORTANT]` callouts | `md-document` |\n| REVIEW | `review.md`, `*-pr-*.md`, `*.diff.md`, `code-review*.md` | ` ```diff ` (2), `^[-+]{3} ` (2), `^@@` (2), `> [!BLOCKER]\u002F[!MAJOR]\u002F[!MINOR]\u002F[!NIT]` (2), `LGTM`\u002F`nit:`\u002F`blocker:` | `md-review` |\n| SLIDES | `deck.md`, `slides.md`, `*-talk.md`, `presentation*.md` | `^---$` ≥ 3 (2 + per-boundary), `\u003C!-- notes:` (2), H1 count ≥ 5 with median gap ≤ 12 lines (2) | `md-slides` |\n\nThe pipeline:\n\n```bash\npython3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Fdoctype_classifier.py \\\n    --input \u003Cpath>.md --output json \\\n  | python3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Froute_explainer.py\n```\n\n`route_explainer.py` checks the design-system status, applies the \u003C 100-line refusal, and prints one of: `ROUTE_SILENTLY -> md-\u003Ctype>`, `ASK_USER one question: ...`, or `REFUSE — fix the issues above`.\n\n## Workflow\n\n### Step 1 — Confirm onboarding\n\nIf the user has never run onboarding, surface the one-time setup:\n\n```bash\npython3 markdown-html\u002Fskills\u002Fdesign-system\u002Fscripts\u002Fonboard.py\n```\n\nTen questions, 1-2 minutes. Captures brand primary + accent + heading\u002Fbody Google Fonts + design style (editorial\u002Ftechnical\u002Fminimal\u002Fplayful) + default output dir + syntax theme + TOC behavior + optional logo\u002Fcompany. Stored at `~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json`. Re-runnable with `--scope project` for per-repo overrides.\n\n### Step 2 — Classify the input\n\nRun `doctype_classifier.py` on the markdown. Inspect the verdict.\n\n### Step 3 — Route or ask\n\nPipe the classification into `route_explainer.py`. If it says `ROUTE_SILENTLY`, forward the original markdown + the design-system config into the named sub-skill's renderer in the forked context. If it says `ASK_USER`, ask ONE question with the recommended answer.\n\n### Step 4 — Resolve the output path\n\n```bash\npython3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Foutput_path_resolver.py \\\n    --input \u003Cpath>.md --doctype \u003Cdocument|review|slides>\n```\n\nCollision handling defaults to `-2 \u002F -3 \u002F ...` suffix; `--on-collision timestamp` for stamped names.\n\n### Step 5 — Hand off to the sub-skill (when shipped)\n\nIn v2.10.1+, the converter sub-skill's renderer takes the input markdown, the design-system config, and the resolved output path, and writes a single self-contained HTML file. The orchestrator returns a ≤ 100-word digest: input lines, output path, design style applied, top 3 features used (TOC, search, code-copy, etc.), and one forcing question for the user.\n\nUntil v2.10.1, the orchestrator's job stops at step 4 — it returns the classification + routing brief and lets Claude do the rendering inline with the design-system tokens.\n\n## Forcing-question library (Matt Pocock grill-with-docs pattern)\n\nWalk these one at a time, with a recommended answer per question, citing the canon. Lift this list into `\u002Fcs:grill-markdown-html` for plan-stage interrogation.\n\n1. **What decision does this HTML drive — is the reader skimming, deciding, or presenting?**\n   Recommended: name it first; density follows from purpose. Canon: Shihipar — \"match output format to consumption context\"; Tufte — *Visual Display of Quantitative Information*, ch. 1.\n2. **Is the input markdown ≥ 100 lines?**\n   Recommended: yes — below that, keep it as markdown. Canon: Shihipar — markdown still wins under 100 lines.\n3. **Is the design-system onboarded?**\n   Recommended: yes, globally (`~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json`). Canon: research-ops onboarding pattern (`research-ops\u002FCLAUDE.md` §8); WCAG 2.2 §1.4.3 (text contrast 4.5:1).\n4. **Where does the output save, and will it overwrite anything?**\n   Recommended: the configured `default_output_dir` with `--on-collision suffix`. Canon: Matt Pocock `handoff` skill — never silently overwrite a working artifact.\n5. **Document type confidence — silent-route or one question?**\n   Recommended: silent-route only when the classifier's verdict is one of `document\u002Freview\u002Fslides` AND `silent_route_allowed: true`. Otherwise ask. Canon: research-ops two-signal threshold (`research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md` §\"Routing logic\").\n\nNever run a sub-skill before the lane is locked.\n\n## Assumptions\n\n1. User has a markdown file ≥ 100 lines they want to convert.\n2. User has run onboarding once (`~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json` exists with `setup_completed_at` populated).\n3. Single-file HTML output is acceptable (no multi-file site, no embedded server, no build step).\n4. Externals limited to Google Fonts CSS + Prism.js CDN (jsdelivr \u002F cdnjs).\n\n## Non-goals\n\n- Not a landing-page generator (use `marketing\u002Flanding\u002F`).\n- Not an interactive prompt-tuning playground (use Anthropic's official `playground` plugin).\n- Not a static-site generator (no multi-file output, no site index).\n- Not a PDF generator (slides use `@media print`; user prints from browser).\n- Not a watch \u002F live-reload pipeline (conversion is one-shot).\n\n## Distinct from\n\n- **Anthropic Playground plugin** (`\u002Fplayground`) — builds interactive controls (sliders, knobs, drag-drop) for prompt tuning, with a copy-prompt-back loop. This plugin converts existing markdown documents to HTML. Different tools for different jobs.\n- **`marketing\u002Flanding\u002F`** — generates landing pages from scratch (Phase-0 intake → 3 sections → branded TSX\u002FHTML). This plugin converts an existing markdown file you already have.\n- **`engineering\u002Fhandoff\u002F` + `productivity\u002Fhandoff\u002F`** — preserve session continuity between Claude conversations. Different artifact type (handoff brief vs. document conversion).\n\n## Output artifacts\n\n| Sub-skill | Artifact | Status |\n|---|---|---|\n| `md-document` | `doc-\u003Cslug>.html` (single file, sticky TOC, collapsibles, search, code-copy, scrollspy) | v2.10.1 |\n| `md-review` | `review-\u003Cslug>.html` (2-col diff + severity margin notes + jump-nav) | v2.10.1 |\n| `md-slides` | `deck-\u003Cslug>.html` (arrow-key nav + presenter mode + print-to-PDF) | v2.10.1 |\n\n## Anti-patterns (do not)\n\n- ❌ Convert markdown \u003C 100 lines — markdown still wins. Refuse and tell the user.\n- ❌ Run the orchestrator before the design-system is onboarded. The output looks broken without tokens.\n- ❌ Silently chain two sub-skills (e.g., \"convert doc AND make slides from it\"). Pick one, finish, ask before chaining.\n- ❌ Use external JS frameworks (React\u002FVue\u002FSvelte). Vanilla JS + IntersectionObserver only. Prism.js CDN is the single exception.\n- ❌ Multi-file output (extracted CSS, asset directories). Single file or nothing — that's the whole point.\n- ❌ Overwrite an existing output file by default. The path resolver suffixes `-2`, `-3`, …; `--on-collision overwrite` is opt-in only.\n\n## References\n\n- Spec: Thariq Shihipar — \"Claude Code HTML output\" (Medium, 2026)\n- Forking pattern: `research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md` (`context: fork`, two-signal routing)\n- Customization pattern: `research-ops\u002Fskills\u002Fclinical-research\u002Fscripts\u002F` (`onboard.py`, `config_loader.py`)\n- Brand palette math: `marketing\u002Flanding\u002Fskills\u002Flanding\u002Fscripts\u002Fbrand_palette_validator.py` (WCAG + HSL derive)\n- Information-density canon: Tufte; Shihipar's `thariqs.github.io\u002Fhtml-effectiveness\u002F` gallery; Wattenberger interactive essays; Maggie Appleton digital gardens\n","# Markdown → HTML — Domain Orchestrator\n\nThariq Shihipar's argument (Claude Code HTML output essay, Medium 2026): **markdown collapses past 100 lines for agent-generated artifacts.** Long specs, code reviews, and architecture explainers lose density, hierarchy, and lightweight interaction the moment they exceed a screen of text. HTML restores all three — single-file, browser-native, shareable.\n\nThis orchestrator forks context, classifies the input markdown deterministically, routes to the right converter sub-skill, and returns a digest with the output path. Heavy intake (full markdown bodies, diffs, slide decks) stays in the forked context.\n\n**Foundation status (v2.10.0):** orchestrator + `design-system` (onboarding + shared brand tokens) are live. Converter sub-skills (`md-document`, `md-review`, `md-slides`) land in v2.10.1 follow-up PRs. Until they land, this skill still runs the classifier and the design-system gate, and surfaces the routing recommendation — it just hands the rendering work back to Claude with the structured brief.\n\n## When to invoke\n\n| Symptom | Sub-skill |\n|---|---|\n| \"Convert this RFC \u002F spec \u002F report \u002F explainer to HTML\" — long-form doc | `md-document` |\n| \"Turn this PR writeup \u002F code review into HTML\" — markdown with diff blocks | `md-review` |\n| \"Make a slide deck from this markdown\" — `---` boundaries or H1 cadence | `md-slides` |\n\n## Pre-flight gates (hard refusals)\n\n1. **Below the 100-line threshold.** Markdown wins below 100 lines (Shihipar). The classifier prints `below_min_lines: true` and `route_explainer.py` refuses. Tell the user to keep their input as markdown.\n2. **Design-system not onboarded.** If `~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json` doesn't exist (or its `setup_completed_at` is null), refuse. Point the user at `python3 markdown-html\u002Fskills\u002Fdesign-system\u002Fscripts\u002Fonboard.py` (or `--defaults` for a zero-touch run).\n3. **Unwritable save location.** `output_path_resolver.py` refuses if the configured `default_output_dir` (or `--out` override) isn't writable.\n\n## Routing logic (deterministic)\n\nTwo-signal threshold pattern lifted from `research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md`. Filename hint = 2 points; each content signal = 1 point. Silent-route allowed when winner ≥ 3 AND (runner-up = 0 OR winner ≥ 2× runner-up). Below threshold → one clarifying question with a recommended answer.\n\n### Signal table\n\n| Signal class | Filename hints | Content signals | Sub-skill |\n|---|---|---|---|\n| DOCUMENT | `report.md`, `*-doc.md`, `spec.md`, `rfc-*.md`, `*-analysis.md`, `*-explainer.md` | `## Table of Contents` (2), `^# `, `^## `, markdown table rows, `> [!NOTE]\u002F[!TIP]\u002F[!IMPORTANT]` callouts | `md-document` |\n| REVIEW | `review.md`, `*-pr-*.md`, `*.diff.md`, `code-review*.md` | ` ```diff ` (2), `^[-+]{3} ` (2), `^@@` (2), `> [!BLOCKER]\u002F[!MAJOR]\u002F[!MINOR]\u002F[!NIT]` (2), `LGTM`\u002F`nit:`\u002F`blocker:` | `md-review` |\n| SLIDES | `deck.md`, `slides.md`, `*-talk.md`, `presentation*.md` | `^---$` ≥ 3 (2 + per-boundary), `\u003C!-- notes:` (2), H1 count ≥ 5 with median gap ≤ 12 lines (2) | `md-slides` |\n\nThe pipeline:\n\n```bash\npython3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Fdoctype_classifier.py \\\n    --input \u003Cpath>.md --output json \\\n  | python3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Froute_explainer.py\n```\n\n`route_explainer.py` checks the design-system status, applies the \u003C 100-line refusal, and prints one of: `ROUTE_SILENTLY -> md-\u003Ctype>`, `ASK_USER one question: ...`, or `REFUSE — fix the issues above`.\n\n## Workflow\n\n### Step 1 — Confirm onboarding\n\nIf the user has never run onboarding, surface the one-time setup:\n\n```bash\npython3 markdown-html\u002Fskills\u002Fdesign-system\u002Fscripts\u002Fonboard.py\n```\n\nTen questions, 1-2 minutes. Captures brand primary + accent + heading\u002Fbody Google Fonts + design style (editorial\u002Ftechnical\u002Fminimal\u002Fplayful) + default output dir + syntax theme + TOC behavior + optional logo\u002Fcompany. Stored at `~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json`. Re-runnable with `--scope project` for per-repo overrides.\n\n### Step 2 — Classify the input\n\nRun `doctype_classifier.py` on the markdown. Inspect the verdict.\n\n### Step 3 — Route or ask\n\nPipe the classification into `route_explainer.py`. If it says `ROUTE_SILENTLY`, forward the original markdown + the design-system config into the named sub-skill's renderer in the forked context. If it says `ASK_USER`, ask ONE question with the recommended answer.\n\n### Step 4 — Resolve the output path\n\n```bash\npython3 skills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Foutput_path_resolver.py \\\n    --input \u003Cpath>.md --doctype \u003Cdocument|review|slides>\n```\n\nCollision handling defaults to `-2 \u002F -3 \u002F ...` suffix; `--on-collision timestamp` for stamped names.\n\n### Step 5 — Hand off to the sub-skill (when shipped)\n\nIn v2.10.1+, the converter sub-skill's renderer takes the input markdown, the design-system config, and the resolved output path, and writes a single self-contained HTML file. The orchestrator returns a ≤ 100-word digest: input lines, output path, design style applied, top 3 features used (TOC, search, code-copy, etc.), and one forcing question for the user.\n\nUntil v2.10.1, the orchestrator's job stops at step 4 — it returns the classification + routing brief and lets Claude do the rendering inline with the design-system tokens.\n\n## Forcing-question library (Matt Pocock grill-with-docs pattern)\n\nWalk these one at a time, with a recommended answer per question, citing the canon. Lift this list into `\u002Fcs:grill-markdown-html` for plan-stage interrogation.\n\n1. **What decision does this HTML drive — is the reader skimming, deciding, or presenting?**\n   Recommended: name it first; density follows from purpose. Canon: Shihipar — \"match output format to consumption context\"; Tufte — *Visual Display of Quantitative Information*, ch. 1.\n2. **Is the input markdown ≥ 100 lines?**\n   Recommended: yes — below that, keep it as markdown. Canon: Shihipar — markdown still wins under 100 lines.\n3. **Is the design-system onboarded?**\n   Recommended: yes, globally (`~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json`). Canon: research-ops onboarding pattern (`research-ops\u002FCLAUDE.md` §8); WCAG 2.2 §1.4.3 (text contrast 4.5:1).\n4. **Where does the output save, and will it overwrite anything?**\n   Recommended: the configured `default_output_dir` with `--on-collision suffix`. Canon: Matt Pocock `handoff` skill — never silently overwrite a working artifact.\n5. **Document type confidence — silent-route or one question?**\n   Recommended: silent-route only when the classifier's verdict is one of `document\u002Freview\u002Fslides` AND `silent_route_allowed: true`. Otherwise ask. Canon: research-ops two-signal threshold (`research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md` §\"Routing logic\").\n\nNever run a sub-skill before the lane is locked.\n\n## Assumptions\n\n1. User has a markdown file ≥ 100 lines they want to convert.\n2. User has run onboarding once (`~\u002F.config\u002Fmarkdown-html\u002Fdesign-system.json` exists with `setup_completed_at` populated).\n3. Single-file HTML output is acceptable (no multi-file site, no embedded server, no build step).\n4. Externals limited to Google Fonts CSS + Prism.js CDN (jsdelivr \u002F cdnjs).\n\n## Non-goals\n\n- Not a landing-page generator (use `marketing\u002Flanding\u002F`).\n- Not an interactive prompt-tuning playground (use Anthropic's official `playground` plugin).\n- Not a static-site generator (no multi-file output, no site index).\n- Not a PDF generator (slides use `@media print`; user prints from browser).\n- Not a watch \u002F live-reload pipeline (conversion is one-shot).\n\n## Distinct from\n\n- **Anthropic Playground plugin** (`\u002Fplayground`) — builds interactive controls (sliders, knobs, drag-drop) for prompt tuning, with a copy-prompt-back loop. This plugin converts existing markdown documents to HTML. Different tools for different jobs.\n- **`marketing\u002Flanding\u002F`** — generates landing pages from scratch (Phase-0 intake → 3 sections → branded TSX\u002FHTML). This plugin converts an existing markdown file you already have.\n- **`engineering\u002Fhandoff\u002F` + `productivity\u002Fhandoff\u002F`** — preserve session continuity between Claude conversations. Different artifact type (handoff brief vs. document conversion).\n\n## Output artifacts\n\n| Sub-skill | Artifact | Status |\n|---|---|---|\n| `md-document` | `doc-\u003Cslug>.html` (single file, sticky TOC, collapsibles, search, code-copy, scrollspy) | v2.10.1 |\n| `md-review` | `review-\u003Cslug>.html` (2-col diff + severity margin notes + jump-nav) | v2.10.1 |\n| `md-slides` | `deck-\u003Cslug>.html` (arrow-key nav + presenter mode + print-to-PDF) | v2.10.1 |\n\n## Anti-patterns (do not)\n\n- ❌ Convert markdown \u003C 100 lines — markdown still wins. Refuse and tell the user.\n- ❌ Run the orchestrator before the design-system is onboarded. The output looks broken without tokens.\n- ❌ Silently chain two sub-skills (e.g., \"convert doc AND make slides from it\"). Pick one, finish, ask before chaining.\n- ❌ Use external JS frameworks (React\u002FVue\u002FSvelte). Vanilla JS + IntersectionObserver only. Prism.js CDN is the single exception.\n- ❌ Multi-file output (extracted CSS, asset directories). Single file or nothing — that's the whole point.\n- ❌ Overwrite an existing output file by default. The path resolver suffixes `-2`, `-3`, …; `--on-collision overwrite` is opt-in only.\n\n## References\n\n- Spec: Thariq Shihipar — \"Claude Code HTML output\" (Medium, 2026)\n- Forking pattern: `research-ops\u002Fskills\u002Fresearch-ops-skills\u002FSKILL.md` (`context: fork`, two-signal routing)\n- Customization pattern: `research-ops\u002Fskills\u002Fclinical-research\u002Fscripts\u002F` (`onboard.py`, `config_loader.py`)\n- Brand palette math: `marketing\u002Flanding\u002Fskills\u002Flanding\u002Fscripts\u002Fbrand_palette_validator.py` (WCAG + HSL derive)\n- Information-density canon: Tufte; Shihipar's `thariqs.github.io\u002Fhtml-effectiveness\u002F` gallery; Wattenberger interactive essays; Maggie Appleton digital gardens\n",{"name":5,"tags":24,"author":33,"context":34,"license":15,"version":35,"description":7,"compatible_tools":36},[25,26,27,28,29,30,31,32],"markdown","html","converter","orchestrator","documentation","code-review","slides","design-system","Alireza Rezvani","fork","2.10.0",[37,38,39,40,41,42],"claude-code","codex-cli","cursor","antigravity","opencode","gemini-cli","claude\u002Fopen-prs-review-Of9HK","a48d8438efe8e36550acc4c2006bdcddf62911db","markdown-html\u002Fskills\u002Fmarkdown-html-orchestrator","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills","https:\u002F\u002Fgithub.com\u002Faneeba-pixel","Student at University of Gujrat","2026-07-14 21:41:17",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add aneeba-pixel\u002Fclaude-skills --skill markdown-html-orchestrator",{"tool":56,"command":57},"bunx","bunx skills add aneeba-pixel\u002Fclaude-skills --skill markdown-html-orchestrator",{"tool":59,"command":60},"pnpm","pnpm dlx skills add aneeba-pixel\u002Fclaude-skills --skill markdown-html-orchestrator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002FSKILL.md",true,[64,70,74,78,84,88],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Finformation_density_canon.md","REFERENCE","参考文档",4076,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Freferences\u002Finformation_density_canon.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Forchestrator_routing_patterns.md",4058,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Freferences\u002Forchestrator_routing_patterns.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fsingle_file_html_discipline.md",5286,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Freferences\u002Fsingle_file_html_discipline.md",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"scripts\u002Fdoctype_classifier.py","SCRIPT","脚本",9478,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Fdoctype_classifier.py",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"scripts\u002Foutput_path_resolver.py",6480,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Foutput_path_resolver.py",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"scripts\u002Froute_explainer.py",6281,"https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fmarkdown-html\u002Fskills\u002Fmarkdown-html-orchestrator\u002Fscripts\u002Froute_explainer.py",[93,100,107,114,121,128],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":19},"01M78K120A3JKH3NH8GC19YG4M","syllabus","Generates a curated supplementary reading list from any course syllabus using Consensus academic search. Grill-me intake (syllabus input format + course audience + year range) plus a grouping forcing-options checkpoint before any search runs — so the reading list matches the course's level and recency need. Parses the syllabus to extract topics and learning outcomes, searches Consensus for recent peer-reviewed papers per topic, and produces a professionally formatted .docx with clickable Consensus links, plain-language summaries calibrated to audience level, and Bloom-higher-order discussion questions tied to course learning goals. Triggers whenever a user uploads a syllabus, course outline, or curriculum document and wants supplementary readings. Also triggers on: 'syllabus reading list', 'find papers for my course', 'create a reading list from this syllabus', 'recent research for my class', 'supplementary readings', 'find journal articles for these topics', 'what recent papers cover this material', 'any new research on these course topics', 'update my syllabus with recent papers'. Even casual mentions when a syllabus is attached should trigger this skill.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Fsyllabus\u002Fskills\u002Fsyllabus\u002FSKILL.md",[],[],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":19},"01M78K0QS9AGDJ43CPQYEHM5S0","research","Default entry point for any research request — a hybrid router that classifies the question deterministically and either delegates to a specialist research skill (pulse for trends\u002Fsentiment, grants for NIH funding, litreview for academic literature, syllabus for course reading, patent for prior-art + IP landscape, dossier for entity research) or runs its own plan-decompose-multi-source-search-synthesize-cite fallback workflow when no specialist matches. Always surfaces the routing decision so users can override. Triggers — \"research [topic]\", \"look into [topic]\", \"what do we know about [topic]\", \"investigate [topic]\", \"find me information on [topic]\", \"do some research on [topic]\", \"I need to understand [topic]\", or any research request that doesn't obviously match a more-specific specialist skill. Output is a markdown briefing (default) or .docx document (on request) with full citations and an audit log.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Fresearch\u002Fskills\u002Fresearch\u002FSKILL.md",[],[],{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":19},"01M78K0FV3HMJ94SK965CWMNNP","pulse","Multi-source recency research skill that takes the pulse of any topic across Reddit, Hacker News, the open web, and optionally X\u002FTwitter within a configurable recent window (default 30 days). Forcing intake clarifies topic specificity, angle (trend\u002Fsentiment\u002Fproblems\u002Fopportunities\u002Fcomparison), time window, and platform scope before searching. Returns a synthesized briefing with citations, engagement metrics, and cross-platform pattern analysis. Triggers: 'pulse on [topic]', 'what's happening with [topic]', 'what are people saying about [topic]', 'current conversation about [topic]', 'take the pulse of [topic]', 'trending: [topic]', 'find me info on [topic]', or any variation requesting multi-source recency intelligence on a topic. Also use for competitor research, trend discovery, tool comparisons, and audience sentiment analysis.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Fpulse\u002Fskills\u002Fpulse\u002FSKILL.md",[],[],{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":19},"01M78K04E77B04KYBB6M01EV3J","patent","Patent prior-art and landscape intelligence skill — not generic patent help. Commits to one of five sub-use-cases via forcing intake (novelty search \u002F freedom-to-operate \u002F competitive landscape \u002F acquisition diligence \u002F litigation prior-art) before any search runs. Searches Google Patents, Espacenet, USPTO, and optionally Lens.org for citation-graph signals. Output is an editable Word document (.docx) with verdict, ranked closest art (claim-text extracted), CPC-class-aware landscape, family-resolved hits, geographic coverage, FTO flags where applicable, strategy recommendations, and full audit log. Triggers: 'prior art search for [invention]', 'patent search on [topic]', 'freedom to operate analysis', 'FTO for [product]', 'patent landscape for [field]', 'is [invention] novel', 'patents on [topic]', 'competitive patent analysis', 'prior art for litigation', 'patent diligence on [company]'. Produces search signal, not legal advice — always recommends consulting a patent attorney before filing or licensing decisions. Trademark, copyright, and trade-secret questions are out of scope.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Fpatent\u002Fskills\u002Fpatent\u002FSKILL.md",[],[],{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":19},"01M78JZW8XEFZP6HSF53M8D4M1","notebooklm","Browser automation skill for controlling Google's NotebookLM. Handles reading and querying notebooks, adding sources (URLs, text, files, YouTube links, synthesized content), generating Studio outputs (Audio Overview, infographics, slide decks, study guides, briefing docs, mind maps, timelines, FAQs), and creating new notebooks. Triggers on any phrase involving NotebookLM — 'open NotebookLM', 'check my [name] notebook', 'pull info from NotebookLM', 'ask my notebook about X', 'add [source] to NotebookLM', 'create an infographic in NotebookLM', 'use NotebookLM Studio', 'generate a slide deck from my notebook', or any variation where the goal involves NotebookLM. Requires browser automation environment — fails gracefully when unavailable.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Fnotebooklm\u002Fskills\u002Fnotebooklm\u002FSKILL.md",[],[],{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":19},"01M78JZHX45S2Y0GPY9Z5V6TQ3","litreview","Academic literature orientation skill that searches papers via Consensus, builds a strategic search plan using PICO (default) or SPIDER \u002F Decomposition \u002F hybrid as fallbacks, and synthesizes findings into a professionally formatted Word document (.docx) research guide. Grill-me intake (research question specificity + framework hint + tentative depth) before the recon search; a second forcing checkpoint after Phase 2 confirms framework + sub-areas + depth before searches consume budget. Configurable depth (5\u002F10\u002F20 queries) controls coverage vs. speed. Output is a 'launching pad' — not a finished review, but an orientation guide that lets a researcher dive in confidently. Triggers: 'litreview on [topic]', 'literature review on [topic]', 'I'm starting a literature review on X', 'I'm writing a paper on X', 'help me research X', 'I'm doing research on X', 'can you help me research X'. Do NOT trigger for single one-off paper searches where the user just wants a quick list — that's a plain Consensus search.","https:\u002F\u002Fgithub.com\u002Faneeba-pixel\u002Fclaude-skills\u002Fblob\u002Fclaude\u002Fopen-prs-review-Of9HK\u002Fresearch\u002Flitreview\u002Fskills\u002Flitreview\u002FSKILL.md",[],[]]