Turn a visual or interaction technique you already built into a reusable web-design skill, by isolating the one mechanism that makes it work while reproducing its approved reference exactly around that focus, and packaging it with a demo that proves both the mechanism and the visual fidelity. Covers finding the mechanism, naming the technique plainly, disclosing the verified runtime and renderer, auditing reference layers, carrying real numbers instead of adjectives, preserving owned staging, keeping expensive gotchas, declaring the boundary against neighbouring skills, and browser-verifying before claiming it works. Use when a page, canvas scene, shader, scroll effect, layout system, or hover interaction turned out well and should become a skill rather than staying in one project.
69
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Start from working code, not from prose. Reach for article-prompts-to-skills when the source is an article or a prompt pack that describes behavior. Reach for this when you built the thing, it works, and the knowledge is currently trapped in one file.
Extract one mechanism per skill. A page that turned out well usually holds several; package them separately or each one gets diluted.
Treat this as the living quality contract for every web-technique skill. On every creation or revision, audit this skill too. If the work exposes a missing fidelity rule, failure mode, packaging constraint, or verification step, update this contract in the same scoped change instead of solving it only inside one child skill.
Write the sentence before you write anything else: the one thing that, if removed, makes the effect stop working. If you cannot write it, you have a look, not a mechanism, and there is no skill here yet.
The sentence decides everything downstream. For a leaf fall it is "the tumble crosses edge-on, and that instant of near-disappearance is what the eye reads as a leaf" — so the sprite artwork, the palette, and the night scene are all staging, and the tumble is the skill.
Test it: change the subject, the palette, and the layout in your head. If the sentence still holds, it is the mechanism. If it stops making sense, you named the staging.
Use the concrete technique name for the visible h1 and browser <title>: Wisps, Cursor Ripples, Liquid Metal Border, or Scroll-scrubbed Word Reveal. Do not hide the subject behind an abstract mechanism claim. “Draw at any speed” describes behaviour, but it does not tell anyone what the demo is.
Put the verified implementation path directly above or below that title. Name, in order:
Write Vanilla JavaScript · Canvas 2D or Three.js · WebGL · GLSL, not “interactive experiment” or “motion study.” Never guess from the look. Verify imports, renderer construction, and context creation in the source. getContext('2d') is Canvas 2D, not a shader; WebGLRenderer plus ShaderMaterial is Three.js, WebGL, and GLSL. When the visual could be mistaken for a more complex stack, state the absence plainly: No WebGL, shaders, or Three.js.
Separate the effect stack from the interface stack when they differ. Write Vanilla JavaScript + Canvas 2D effect; CSS interface instead of listing CSS beside Canvas 2D as if both render the particles. Readers should know which technology creates the technique and which technology only lays out its controls.
If an approved reference headline must remain for layout fidelity, keep it and put the technique name plus stack in the browser title and the reference's existing kicker, control panel, or secondary label. The implementation must still be obvious on the first screen.
Sort every part of the source into three piles and keep only the first:
| pile | goes where | examples |
|---|---|---|
| mechanism | the skill | the maths, the state model, the ordering constraint, the budget |
| staging | the demo only | palette, copy, imagery, page layout, brand |
| incidental | nowhere | selector names, a font choice, a one-off asset path |
Strip project selectors and incidental asset paths from the reusable mechanism in the skill body. Keep the approved reference staging in the demo: the same owned brand, palette, type treatment, composition, asset placement, atmosphere, and motion hierarchy. Isolate the technique by narrowing what the demo teaches and controls, not by inventing a different visual world.
State the wrong result, not the right adjective. A rule with a named failure is testable; a rule without one is decoration.
If you cannot name what goes wrong, you probably never tested the alternative, and the rule may not be real. Cut it or go and find out.
Ship the constants you actually landed on. "Subtle" is unusable; 0.3–0.5 is a starting point someone can adjust.
Include ranges per layer or state, timing and easing, size and spacing, budgets (dt clamp, DPR cap, instance counts), and any formula that trades one quantity against another. Where a value was tuned by measurement rather than taste, say what was measured.
Prefer a small table over prose when three or more parameters vary together.
The rules worth most are the ones that cost hours and cannot be re-derived by reading the code. They are usually one of:
Write these as their own rule with the symptom first, so the reader recognises the bug they are currently staring at.
Name the nearest existing skill and say when to reach for it instead. Search agent-skills/*/*/SKILL.md before you start; if a skill already covers the mechanism, extend it rather than adding a near-duplicate.
Two skills that both "add particles" with no stated boundary means neither gets picked correctly.
For web-design skills these are part of the mechanism, not an appendix:
prefers-reduced-motion: reduce, render a designed still frame. Do not hide the effect; the composition was built with it in. Keep controls live so they still do something.document.hidden and when the section leaves the viewport. Reset the time base on resume so the first frame does not integrate the whole pause.dt to about 1/30 s. Cap device pixel ratio at 2.ResizeObserver, and guard any build step against a zero viewport.Say what is actually expensive, and measure before claiming it. Profile rather than guess: the part that looks heavy often is not. Name the real bottleneck, the cheap lever, and the thing that does not matter.
Report the lever that buys the most for the least — for a recycled particle field, tightening the spawn band beats raising the count, because on-screen density goes as count ÷ area.
Write one line in SKILL.md naming the source: what the project was, and what the mechanism was doing in it. A reader decides whether the skill applies to them by understanding the context it survived — "extracted from a dark WebGL Kyoto night scene where it had to stay legible over type" tells them more than any amount of description.
The demo should look like that source — see Direct the demo below. What stays behind is only what you do not own: a client's name and brand, licensed fonts, purchased or third-party imagery. Substitute those and reproduce everything else.
The demo is the only evidence most readers will ever see. They will not read the source project, and they will judge the technique by this one file. A mechanism that shipped on a considered page, demonstrated by something that looks like a test harness, reads as unfinished — and nobody reaches for a skill that looks unfinished.
So the demo inherits the craft bar of the source, not the craft bar of a code sample.
A worked example of the copy rule, for a Canvas 2D trail that emits per unit of distance:
Vanilla JavaScript · Canvas 2D
Wisps
Distance-emitted Canvas 2D particles keep the same spacing at any hand speed; CSS styles the interface only. Switch emission to a timer and the same gesture breaks apart — a fast pass leaves scattered dots, while a resting hand piles them on one spot. No WebGL, shaders, or Three.js.
The title names the effect. The kicker identifies the stack. The body states the mechanism, the failure, and any likely implementation ambiguity. The control named in the body is on screen, so the reader can check the claim.
Every one of these, every time:
If the demo would embarrass you next to the page you extracted it from, it is not finished.
Do not claim visual or interaction behavior from reading the file. Drive it:
Expect this pass to find something. When it does, fix the demo and re-run rather than softening the rule.
agent-skills/<category>/<skill-name>/
SKILL.md
agents/openai.yaml
demo/
index.html
PROMPT.md
preview.jpg
reference.* # optional owned staging required for exact fidelityWrite SKILL.md in imperative form with only name and description in frontmatter, and put every trigger phrase in the description. Give demo/PROMPT.md three headings: Minimal prompt, Recreate the demo, Remix prompt, where the remix changes subject, palette, and composition while preserving the mechanism and the budgets.
Stage only the new folder and the gallery rows it needs. Review git diff --cached --stat before committing, and leave pre-existing dirty files alone.
321c769
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.