hairline-create
Skill8 starsChanged 2 months agoMITView on GitHub
Use when someone asks for a new Hairline figure, or runs /hairline-create with an idea. Draws one isometric line figure that answers the pointer, in the style and on the engine of @lucasmarkes/hairline, and hands it over as a single self-contained HTML file.
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 2 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Every file named below is in this skill's folder.
- Very specific: line 17
Read concepts.md. Then offer two or three concepts, one line each:
- Distinctive: line 21
Wait for the person to pick.
- Very specific: line 27
Read rules.md. The ten rules are not advice: a figure that breaks one is not finished.
- Very specific: line 28
Read the index at the top of kernel.js: the comment under the hash line, down to var HL.
- Very specific: line 29
Read the example nearer your concept: examples/terrain.js for a continuous field, examples/riffle.js for discrete items.
- Very specific: line 30
Write the figure as <name>.js in the person's working directory, in the shape of the examples: take what you need from HL, define mount({ …
- Very specific: line 40
Read look.md, then the sheet, and answer its twelve questions.
- Distinctive: line 44
Do not hand over a page the validator rejects.
- Very specific: line 56
When the person asks for a change, edit only <name>.js, then run look.mjs again and read the new sheet.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Hairline: create a figure
You are making one figure in the Hairline style: an isometric line drawing, built from rounded solids in a single stroke, that answers the pointer. It ships as one HTML file with nothing to install. The six figures of @lucasmarkes/hairline are the bar; examples/terrain.js and examples/riffle.js are two of them, in the format you will write.
You write one thing: the figure. The engine (kernel.js) and the page (bench.html) are fixed. Never edit them, never paste a changed copy of them, and never write again what the kernel already gives you.
Every file named below is in this skill's folder. The figure and the page are written in the person's working directory: run build.mjs, validate.mjs and look.mjs from there, by their path in this folder.
1. Concept
Read concepts.md. Then offer two or three concepts, one line each:
Name. The object. What the pointer does to it. What the read-out says.
Wait for the person to pick. Skip this step only when they arrived with the object and the gesture already chosen. If there is nobody to ask, take the concept with the strongest rest pose and say which you took.
One figure, one idea. A concept that needs a label to be understood is not a concept yet.
2. Build
- Read
rules.md. The ten rules are not advice: a figure that breaks one is not finished. - Read the index at the top of
kernel.js: the comment under the hash line, down tovar HL. It lists everything you may call. Do not read the code under it. - Read the example nearer your concept:
examples/terrain.jsfor a continuous field,examples/riffle.jsfor discrete items. - Write the figure as
<name>.jsin the person's working directory, in the shape of the examples: take what you need fromHL, definemount({ stage, svg, read }, value)returning{ set, destroy }, and end the file withhairline({ name, means, rules, range, mount }).name: lowercase, one word or hyphenated.means: one sentence, 140 characters at most, saying what the figure shows. It is the line under the stage.rules: the numbers of the rules this figure leans on most.range: the one number the slider drives, at intensity 0, 0.5 and 1. The middle one is the default, and the three move one way.mount'svalue, and thevaluethatset(value)gets when the slider moves, is this number: the figure's own, read onrange, not 0 to 1.
- Assemble it:
node build.mjs <name>.jswriteshairline-<name>.html, and so does each run oflook.mjsin step 3. Without Node, copybench.htmland put the contents ofkernel.jswhere/*KERNEL*/is and your figure where/*FIGURE*/is, by file operation, changing nothing else.
3. Check
node look.mjs <name>.js --answer x,y,z --edge x,y,z, the points being world points of your figure, aslook.mdsays. It builds the page, validates it, takes the eight pictures on one sheet,hairline-<name>-look.png, and checks the frame, the read-out and the console. Fix every line it prints as failed, and run it again until it exits 0.- Read
look.md, then the sheet, and answer its twelve questions. Fix what fails, then go back to 1.
look.mjs needs a browser and installs playwright-core once, outside this folder. Without one, check with node validate.mjs hairline-<name>.html after each build and do the look as look.md says under "Without a browser". Without Node, read the list of checks at the top of validate.mjs and answer each one from your code.
Do not hand over a page the validator rejects. Do not say the look is done if you did not look.
4. Hand over
Publish hairline-<name>.html as an artifact if you can. If you cannot, leave the file where the person can open it and say where it is. Then say, one line each:
- the metaphor: what the object is, and what the pointer does to it;
- the rules it leans on;
- anything you could not verify (no Node, no browser), plainly.
5. Adjust
When the person asks for a change, edit only <name>.js, then run look.mjs again and read the new sheet. The tenth version is held to the same bar as the first.
What goes wrong
| If you catch yourself | Do this instead |
| adding a label, a number or a letter to the drawing | say it with geometry (rule 10); names go to read.textContent |
| reaching for a colour, a fill or a glow | move one stroke from sil to hi (rule 04) |
writing a timer, a requestAnimationFrame or a CSS animation | register(stage, tick), with springs or tweens (rules 07 and 08) |
| testing the pointer against what is drawn right now | test it against the rest or target pose (rule 01) |
| drawing a box with twelve edges | prism of two rounded rings: a silhouette and one crease (rule 09) |
| drawing a part as a plain rounded block | give it the features that make it what it is, the ones you named in the concept (concepts.md) |
| leaving rest flat, empty, or symmetric because that was easy | compose it: rest is the thumbnail (rule 05) |
| editing the kernel or the bench to make something work | the figure is wrong; change the figure |
| letting in a second idea | cut it: one figure, one idea |
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- The-Utopia-Studio/skills★ 681% same
- hsynozdamar-byte/claude-skills-edited★ 497% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- autonomous-maintainerSkill
- commitSkill
- competitive-ads-extractorSkill
- compress-skillsSkill
- extract-design-systemSkill
- fix-ciSkill
- flesch-kincaid-proofreaderSkill
- frontendSkill
- get-pr-commentsSkill
- gogSkill
- grillingSkill
- grill-meSkill
- image-generationSkill
- posthogSkill
- shipSkill
- signoz-investigating-alertsSkill
- teachSkill
- thermo-nuclear-code-quality-reviewSkill
- update-agents-mdSkill
- visualizeSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

