Agent Skill that teaches Cursor & Claude Code to output single-file HTML when the answer's shape is spatial, parallel, comparable, or interactive — instead of flattening everything into markdown.
9 categories · 20 patterns · 12 ready-to-use templates · single-file, zero-dependency.
Inspired by Thariq Shihipar's The unreasonable effectiveness of HTML.
Requires Node ≥ 16.7.0 (uses
fs.cpSync).
Markdown flattens everything into a linear text stream. Diffs are spatial. Comparisons are side-by-side. Flows are graph-shaped. Interactions can only be felt. When agents collapse those dimensions into prose, you have to rebuild them in your head.
This skill teaches the agent to switch to a single-file HTML page at the right moment — so you can point at the thing instead of scrolling three walls of text.
The package isn't on the npm registry yet — until then, install directly from GitHub (works today, no setup):
# Install for both Cursor and Claude Code (recommended)
npx -y github:Azhi-ss/html-effectiveness --all
# Or pick one
npx -y github:Azhi-ss/html-effectiveness --cursor # → ~/.cursor/skills/html-effectiveness/
npx -y github:Azhi-ss/html-effectiveness --claude # → ~/.claude/skills/html-effectiveness/
# Or install into the current project
npx -y github:Azhi-ss/html-effectiveness --project .
# Interactive (no flags) → asks where to install
npx -y github:Azhi-ss/html-effectiveness
# Uninstall
npx -y github:Azhi-ss/html-effectiveness --uninstallPin to a specific version (after a release exists):
npx -y github:Azhi-ss/html-effectiveness#v0.2.1 --allOnce published to npm, the shorter form npx html-effectiveness … will work too.
Restart your agent (Cursor / Claude Code) after install. The skill auto-activates when output should be spatial / parallel / interactive.
The installer copies skills/ and templates/ into:
<target>/html-effectiveness/
├── SKILL.md ← main router (decision framework)
├── shared/
│ ├── base.css ← shared design tokens
│ └── components.html ← reusable HTML snippets
├── 01-explore/SKILL.md ← 9 sub-skills, one per category
├── 02-review/SKILL.md
├── 03-design/SKILL.md
├── 04-proto/SKILL.md
├── 05-diagram/SKILL.md
├── 06-slides/SKILL.md
├── 07-research/SKILL.md
├── 08-report/SKILL.md
├── 09-editor/SKILL.md
└── templates/ ← 12 production-ready templates
├── compare.html
├── plan.html
├── pr.html
├── diff.html
├── design-tokens.html
├── animation.html
├── flowchart.html
├── concept.html
├── slides.html
├── status.html
├── postmortem.html
└── prompt.html
Where <target> is ~/.cursor/skills/, ~/.claude/skills/, or your project's .cursor/skills/ & .claude/skills/.
When you ask the agent to:
- Compare approaches / designs / options → side-by-side
compare.html - Plan an implementation / RFC →
plan.htmlwith milestones, data flow SVG, risks - Review a PR → annotated
diff.htmlwith risk map - Write a PR description →
pr.htmlwith TL;DR, before/after, focus areas, rollout - Status report for the week →
status.htmlwith KPIs, shipped table, carryover - Postmortem for an incident →
postmortem.htmlwith minute-by-minute timeline, action items - Explain a concept →
concept.htmlwith interactive visualization (e.g. consistent-hashing ring) - Make slides →
slides.htmlwith keyboard navigation - Tune a prompt →
prompt.htmlwith live preview across multiple sample inputs
…the agent reads the main SKILL.md (decision framework), routes to the matching sub-skill (e.g. 08-report/SKILL.md), pulls the template, fills it with real content (not Lorem ipsum), and saves the file with a path you can open.
The skill stays out of the way for tasks that genuinely fit markdown:
- Single-paragraph answers
- Quick step-by-step (e.g. shell commands)
- Simple bullet lists
- Casual conversation
It only triggers when the output's shape is spatial, parallel, comparable, interactive, or structured.
All HTML the agent produces is written inside your workspace — never to ~/Downloads/, never to /tmp/, never anywhere outside your project. There's exactly one rule:
- Default: ephemeral output goes to
<workspace>/.agent-html/{slug}-{timestamp}.html. Add.agent-html/to your.gitignore(the project's own.gitignorealready does this) so one-shot artifacts don't pollute commits. - Long-lived output (implementation plans, status reports, postmortems, design tokens, feature explainers, slide decks) — the agent proposes writing to the matching standard doc directory instead, e.g.
<workspace>/rfcs/,<workspace>/reports/status/,<workspace>/postmortems/,<workspace>/docs/explainers/. If a matching directory already exists in your repo it's reused; otherwise the agent asks before creating.
Every save is reported as a workspace-relative path with the open command:
✓ Saved to .agent-html/compare-debounce-20260514-1103.html
Open: xdg-open .agent-html/compare-debounce-20260514-1103.html
The full ruleset (including the per-sub-skill default paths and the upgrade decision tree) lives in skills/SKILL.md under "输出位置(强制约定)".
| Sub-skill | Use case | Templates |
|---|---|---|
01-explore |
Multi-approach comparison · visual design directions · implementation plans | compare.html plan.html |
02-review |
PR review (reviewer) · PR writeup (author) · module / call-stack maps | pr.html diff.html |
03-design |
Design system reference · component variant contact-sheets | design-tokens.html |
04-proto |
Animation sandbox · clickable screen flow | animation.html |
05-diagram |
Annotated flowcharts / state machines · inline-SVG figure sheets | flowchart.html |
06-slides |
Keyboard-driven slide deck (no Keynote) | slides.html |
07-research |
Feature explainer (TL;DR + tabs + FAQ) · interactive concept explainer | concept.html |
08-report |
Weekly status report · incident postmortem | status.html postmortem.html |
09-editor |
Drag-to-triage board · feature-flag editor · prompt tuner — always with a Copy/Export button | prompt.html |
Every HTML output the agent produces must satisfy:
- Single-file self-contained — HTML, CSS, JS, SVG all inline. No CDN, no
npm install, no build. file://runnable — saves to disk, double-click to open, no server.- Modern but restrained — system font stack, warm palette from
shared/base.css, restrained motion. - Real content — no
Lorem ipsum, noUser A. Concrete scenarios, real names, real numbers. - Editors must export — every interactive page has a "Copy as markdown / Copy diff / Copy prompt" button so UI state can flow back to the agent.
- Desktop-responsive — 1280px laptop and 1920px monitor both look right.
git clone https://github.com/Azhi-ss/html-effectiveness.git
cd html-effectiveness/templates
# Open any template in your default browser
xdg-open concept.html # Linux
open concept.html # macOS
wslview concept.html # WSL
explorer.exe concept.html # Windows from WSLSeveral templates are fully interactive offline:
concept.html— live consistent-hashing ring; add/remove nodes and watch keys re-shardanimation.html— transition tuner with duration / easing sliders, 5 presets, Copy CSSflowchart.html— click any pipeline node to expand its run details + timingdesign-tokens.html— light/dark toggle covering palette / type / spacing / radius / shadowslides.html— keyboard-driven deck (←/→ navigate,ffullscreen)prompt.html— live preview prompt editor with copy-to-clipboarddiff.html— PR review with risk map and inline reviewer notes
If you'd rather not run npx, you have two options.
git clone https://github.com/Azhi-ss/html-effectiveness.git
cd html-effectiveness
node install.js --all # same flags as `npx ... --all` aboveThis is useful if you want pulling the repo to update both Cursor and Claude
in place. The trick is that the agent expects templates/ to be a sibling
of SKILL.md under <target>/html-effectiveness/, but in this repo templates/
sits at the root, not inside skills/. So we need to assemble the target
directory by symlinking each piece.
# 1. Clone once into a stable location
git clone https://github.com/Azhi-ss/html-effectiveness.git ~/skills/html-effectiveness
# 2. Helper function that wires up one target
install_html_effectiveness() {
local target=$1
local repo=$HOME/skills/html-effectiveness
mkdir -p "$target"
# Symlink every direct child of skills/ into <target>/
ln -sfn "$repo/skills/SKILL.md" "$target/SKILL.md"
ln -sfn "$repo/skills/shared" "$target/shared"
for dir in "$repo"/skills/[0-9][0-9]-*; do
ln -sfn "$dir" "$target/$(basename "$dir")"
done
# And templates/ from the repo root, so `../templates/*.html` refs resolve
ln -sfn "$repo/templates" "$target/templates"
}
install_html_effectiveness ~/.cursor/skills/html-effectiveness
install_html_effectiveness ~/.claude/skills/html-effectivenessVerify the layout (you should see SKILL.md, the nine 01-… through 09-…
directories, shared, and templates):
$ ls -la ~/.cursor/skills/html-effectiveness/
SKILL.md -> /home/you/skills/html-effectiveness/skills/SKILL.md
01-explore -> /home/you/skills/html-effectiveness/skills/01-explore
02-review -> /home/you/skills/html-effectiveness/skills/02-review
03-design -> /home/you/skills/html-effectiveness/skills/03-design
04-proto -> /home/you/skills/html-effectiveness/skills/04-proto
05-diagram -> /home/you/skills/html-effectiveness/skills/05-diagram
06-slides -> /home/you/skills/html-effectiveness/skills/06-slides
07-research -> /home/you/skills/html-effectiveness/skills/07-research
08-report -> /home/you/skills/html-effectiveness/skills/08-report
09-editor -> /home/you/skills/html-effectiveness/skills/09-editor
shared -> /home/you/skills/html-effectiveness/skills/shared
templates -> /home/you/skills/html-effectiveness/templatesAfter this, git -C ~/skills/html-effectiveness pull updates both Cursor and Claude in one go.
Don't symlink
~/skills/html-effectiveness/skillsdirectly to~/.cursor/skills/html-effectiveness— that misses thetemplates/directory and writing the second symlink ends up creating it inside the source repo, polluting your clone.
html-effectiveness/
├── package.json ← name, bin → install.js, version
├── install.js ← npx entry; copies to target dirs
├── README.md
├── LICENSE
│
├── skills/ ← the actual Skill (what gets installed)
│ ├── SKILL.md ← main router: decision framework + 9-category routing
│ ├── shared/
│ │ ├── base.css ← design tokens + shared component CSS
│ │ └── components.html ← reusable HTML snippet library
│ ├── 01-explore/SKILL.md ← exploration & planning
│ ├── 02-review/SKILL.md ← code review & understanding
│ ├── 03-design/SKILL.md ← design system & components
│ ├── 04-proto/SKILL.md ← animation & clickable flows
│ ├── 05-diagram/SKILL.md ← SVG figures & flowcharts
│ ├── 06-slides/SKILL.md ← keyboard slide decks
│ ├── 07-research/SKILL.md ← feature & concept explainers
│ ├── 08-report/SKILL.md ← status & postmortem
│ └── 09-editor/SKILL.md ← drag/configure/prompt editors
│
└── templates/ ← 12 single-file ready-to-fork templates
├── compare.html ← 3-column approach comparison
├── plan.html ← implementation plan / RFC
├── pr.html ← PR writeup (author side)
├── diff.html ← PR review (reviewer side, annotated diff)
├── design-tokens.html ← design system reference (palette/type/spacing)
├── animation.html ← transition tuner (duration/easing slider, Copy CSS)
├── flowchart.html ← annotated SVG flowchart with click-to-detail
├── concept.html ← interactive concept explainer (working ring viz)
├── slides.html ← 6-slide keyboard deck
├── status.html ← weekly engineering status
├── postmortem.html ← incident report / RCA
└── prompt.html ← prompt tuner with live preview
Current: v0.2.2.
- v0.1 (deprecated) — single-file SKILL.md monolith.
- v0.2.0 — npm package + 9 sub-skills + 9 templates +
shared/. - v0.2.1 — adds 3 templates (
design-tokens.html,animation.html,flowchart.html) so all 9 sub-skills have at least one starter template; switchesinstall.jstofs.cpSyncand pinsengines.node ≥ 16.7.0; documentsnpx github:Azhi-ss/html-effectivenessinstall path; rewrites the manual symlink instructions to avoid clobbering the source clone. - v0.2.2 — output-location convention: all agent-produced HTML now stays inside the workspace. Default ephemeral path is
<ws>/.agent-html/; long-lived output (plans / reports / postmortems / explainers / etc.) gets proposed to the matching standard directory (rfcs/,reports/,postmortems/,docs/…) and reused if already present. No more~/Downloads/writes.
Future versions will be backwards-compatible at the SKILL.md level so existing references keep working.
This skill systematizes the 20 patterns from Thariq Shihipar's The unreasonable effectiveness of HTML into a reusable agent decision framework, shared design tokens, and forkable templates. Credit and thanks to the original.
MIT — see LICENSE.
Bug reports and pattern suggestions: https://github.com/Azhi-ss/html-effectiveness/issues