skills
AGENTS.md62 starsChanged 9 days agoMITView on GitHub
This file is the single source of guidance for coding agents working in this repository. CLAUDE.md imports it and adds nothing but Claude Code specifics, so put repository facts here and do not maintain a second copy. A collection of agent skills for building interfaces with coding agents. It is distributed two ways: via npx skills add raphaelsalaja/skills and as the Claude Code plugin userinterface served by the marketplace in this same repository. It is documentation. The only tooling is…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository26 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- alignmentSkill
- auditSkill
- avatarSkill
- botsSkill
- colorSkill
- copySkill
- deconstructSkill
- defaultsSkill
- framesSkill
- gatherSkill
- iconsSkill
- keyboardSkill
- labSkill
- matchSkill
- motionSkill
- proseSkill
- prototypeSkill
- restraintSkill
- reuseSkill
- ruleSkill
- scopeSkill
- shipSkill
- sketchbookSkill
- verifySkill
- viewportsSkill
The file
We split this AGENTS.md into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 55
Every rule id starts with its skill's name, such as defaults-fade-not-cut.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md 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
AGENTS.md
This file is the single source of guidance for coding agents working in this repository. CLAUDE.md imports it and adds nothing but Claude Code specifics, so put repository facts here and do not maintain a second copy.
What this repository is
A collection of agent skills for building interfaces with coding agents. It is distributed two ways: via npx skills add raphaelsalaja/skills and as the Claude Code plugin userinterface served by the marketplace in this same repository. It is documentation. The only tooling is kit/sync.mjs, which copies the shared interface kit into the skills.
The house rule is the pair. Every rule shows the broken line and the line that replaces it. ## The pair in each skill is that rule, and a finding is file:line - [rule-id]. When a finding is about the work rather than a file, cite the request or the step instead: request 2 - [rule-id].
A skill states the rule, the exact value and the detection pattern. It does not restate a sibling skill. It names no person, company or outside product as its source.
.claude-plugin/plugin.json and .claude-plugin/marketplace.json define the plugin and its marketplace. Both are named userinterface, so plugin users invoke skills as /userinterface:verify while skills-CLI users invoke /verify. Skills are discovered from skills/ automatically, so adding a skill needs no manifest change. Bump version in plugin.json in the same commit as any change under skills/. That number is the only signal plugin users update on. Commit messages follow Conventional Commits, such as feat(defaults): add the safe-area rule.
opencode.json registers skills/ under skills.paths so opencode loads the collection while this repository itself is open.
Two kinds of skill
Principle skills hold a standard applied during any work: scope, reuse, restraint, copy, prose, defaults, motion and color. Their headings state the point, such as ## Shadows are never cut off, and they have no numbered steps.
Procedure skills run a job in order: verify, gather, match, rule, viewports, icons, ship, prototype, lab, deconstruct, alignment, keyboard, frames, avatar, bots, sketchbook and audit. Their steps are numbered ## 1. onward.
Invocation
ship, prototype, lab, deconstruct, alignment, keyboard, frames, avatar, bots, sketchbook and audit are user-invoked. Each one sets disable-model-invocation: true in its frontmatter and allow_implicit_invocation: false under policy in agents/openai.yaml. Set both or neither. The README line ends with "User-invoked." Every other skill may load on its own.
Structure
Each skill lives in skills/<name>/, with SKILL.md as the entry point. agents/openai.yaml carries the display name and the short description. A supporting file such as recipes.md, sources.md or report.md sits beside SKILL.md only when it holds code or a format too long for the skill. Link it from the section that uses it.
Every SKILL.md carries:
- Frontmatter with
namematching the directory, a one-sentencedescriptionand the invocation flag where it applies. The description matches that skill's line inREADME.md, without the bold. - A plain-name H1 and a two-sentence opener saying what the skill does.
- A calibration section whose heading states how hard to press, including which values are exact and when the skill applies.
- A hand-off naming the sibling that owns an adjacent topic, in backticks, never as a relative link. Each skill directory ships on its own.
- Principle sections or numbered steps, by kind.
- A
## The pairtable. Each row is a rule id, the broken line and the line that replaces it. That table is the house rule. - A
## Reportingsection with the severity ladder and thefile:line - [rule-id]format.
The kit
kit/ holds the interface shipped pages and overlays share: tokens, the page base, the head and bar, controls, the select, inputs, the toast and tip, the side sheet and section heads. Each skill still ships on its own, so the kit is copied into marked regions rather than imported.
A region opens on /* kit:select */ in CSS or // kit:h in JavaScript and closes on the same marker with end. Add prefix=lab to rename every custom property, so tokens on a shadow host never reach slotted app components.
kit/index.html shows every component in both themes and syncs like any page.
Change a component in kit/, never inside a region, then run node kit/sync.mjs. node kit/sync.mjs --check exits 1 when any region has drifted from the kit.
A class the kit owns, such as .pick or .tip, means the kit component on every page. A page-only variant takes its own name, such as .tool-pick, and sits after the regions.
Work an agent builds in the user's project, such as sketchbook tiles or bot cards, uses that project's own stack and takes nothing from the kit.
Every rule id starts with its skill's name, such as defaults-fade-not-cut. Each id appears once in the prose and once in the pair.
Headings are sentence case. Straight quotes. No em dashes. En dashes are for numeric ranges only. No serial comma.
Rule ownership
| Skill | Owns |
verify | Evidence from the running result, repeat reports, where to see the change |
scope | Every ask in the message, the smallest reading, earlier instructions, keeping what worked, no phasing |
reuse | Own component, then library, then platform, then custom, one standard, fixes in the primitive and the sibling sweep |
restraint | Unrequested interface, settings and code, fallbacks, legacy, deleting instead of deferring, narrating comments |
copy | Title Case labels, word count, one-line descriptions, status tense, em dashes and ellipses |
prose | Long-form posts and breakdowns: the opening context, first person, linked reasons, lists in the sentence, what happened, own limits, rejected options, exact values, asides and footnotes, sources and citations, marked guesses, British spelling, captions, the ending, the author's voice |
defaults | Scroll edges, shadows, surfaces, theme, focus and accessible names, hit areas, hover styles, links and URL state, forms, loading, type rendering, sound cues, hotkeys in inputs, dialogs |
motion | What animates, easing, durations, springs and gestures, exits and presence, cross-fades and icon morphs, motion blur through the package, reduced motion |
color | Text and control contrast, composited measurement, scrims, role tokens, translucent neutrals, dark palettes, accent and status meaning |
gather | Asking to connect missing sources, boards through Pond, a read-only library, parallel source agents, stopping at a usage limit, queries and image searches, live captures, the collector, the linked board, More Like This and saving picks |
match | Inspecting a named reference, computed values, state inventory, side-by-side proof |
rule | Writing a correction into the agent file, conflicts between rules, sweeping old breaks |
viewports | The width set, breakpoint edges, sideways scroll, clipped text, hover-only controls, short heights, doubled text |
icons | Missing glyphs, the spec measured from the whole set, the grid, the morph form, one skeleton, the lint, the shipped sheet and the project's icon API |
ship | Commits and their Conventional Commit messages, changesets, pushes, merges, pull requests per bug, releases, deploy checks |
prototype | Labelled real-code variants of one idea, pruning after the pick |
lab | Every state of real components forced open on one development page |
deconstruct | Motion broken into named states, events and per-property tracks, the editable timeline |
alignment | Measured edges, gaps, ink centring, optical nudges, concentric radii, visual weight, the annotated report |
keyboard | The keyboard-only walk, focus order, reach, visible stops, composite arrows, Escape, focus after removal |
frames | The throttled trace, frame and input budgets, layout and paint cost per frame, the before and after recording |
avatar | Character silhouettes, eyes on a sphere, whole-body idle life, moods as eye shapes, reactions to the page, the contact sheet |
bots | The Grok round, picked Bots only, stripping private details, real copy links, the Bot marks, the physics pile, Bot cards and the org chart |
sketchbook | Daily batches of live interaction tiles, the taste file, kept components, wildcards and a clip suggestion |
audit | Review scope, running every skill, merging by root cause, the numbered report and the verdict |
reuse owns the sweep that follows a fix moved into a shared component. rule owns the sweep that follows a new rule. restraint owns what to leave out of the interface. copy owns the words that stay in the interface and prose owns the words around it. defaults owns how the surfaces that stay behave, motion owns how they move and color owns how they read. audit owns the shared severity ladder in audit/report.md, and every other skill uses the same three words.
Authoring
A description change updates README.md in the same commit. A rename updates the directory, the frontmatter name, the rule id prefix and display_name in agents/openai.yaml.
Sentences stay at or under 30 words, counting a code span as one word. Before adding a sentence, check whether another skill already owns that rule.
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.

