ui
Skill1 starsChanged 26 days agoMITView on GitHub
Makes interfaces a human finds obvious and good-looking. Copy from mature products before building, operate the result with real input on each device, cut explanatory text, and pass an independent reviewer before merge. Use when building or changing any screen, page, HUD, menu, form, dashboard or player-facing text, when the user says /ui, "ugly", "not intuitive", "can't click", "too complicated", "defensive text", or when a project with a user interface starts.
In this repository7 other files it gives its agents.
- academic-writingSkill
- bedtimeSkill
- grill-meSkill
- memtreeSkill
- project-teamSkill
- quSkill
- watchSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
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
- Distinctive: line 14
Prefer ready accessible components to hand-made widgets.
- Distinctive: line 17
Default delete. A hint means the control failed.
- Distinctive: line 24
Look at the screenshot at real size before saying done.
- Very specific: line 39
Add to the project's .claude/settings.json:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 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
UI
The user's time goes here first: controls unreachable the way humans really use them, self-made ugly screens, needless text.
Before building a screen
- Real use:
docs/ref/REAL_USE.md, one line per device: size, input, cursor state. Example: "PC: pointer locked in game, Esc releases. Phone: touch only." - References:
docs/ref/<screen>_*.pngfrom 2-3 mature products. Note: copy what, differ where, why. If a good one exists, copy its layout rather than inventing. No reference: write why. Check licence before copying code. - Plan: 4-6 named colours, typefaces, one-sentence layout, ASCII wireframe. If it resembles a generic AI page, revise.
- Prefer ready accessible components to hand-made widgets. One shared component owns input state (modal open frees the pointer, close restores it), never each screen.
Text
Default delete. A hint means the control failed; fix the control. Delete a sentence unless something breaks without it. No reassurance, no "only stored on this device", no caveats. Same verb for the same action everywhere. A waiting state shows who is working on what.
Done means operated
Author checks first, then the reviewer:
- Each listed device, real clicks, touch and keys, starting from the state a user is really in.
- Assert the effect of each action, never only that no error appeared.
- Fix the whole class: every screen with the same control or state, not the one reported.
- Look at the screenshot at real size before saying done.
Facts measured 2026-11-02, Playwright 1.64 headless Chromium:
- Under pointer lock,
mouse.clickandlocator.clickon a button hit nothing and raise no error. - Esc does not release the lock headless.
document.exitPointerLock()is the only stand-in: say so each time, and test the state before it as well. - Phone: Playwright
--device "iPhone 15",hasTouch: true. Playwright MCP--caps visionadds coordinate clicks.
Independent review before merge
Spawn a fresh subagent that did not write the code, with: "Read ~/.claude/skills/ui/reviewer.md; review branch <b>; write verdict to <path the gate printed>." Batch per step, not per commit.
Gate (optional, per project)
Blocks merging UI paths without a verdict. In the repo:
echo 'apps/client/|packages/ui/' > "$(git rev-parse --git-common-dir)/ui-gate-paths" # regex of UI pathsAdd to the project's .claude/settings.json:
{"hooks":{"PreToolUse":[{"matcher":"Bash","hooks":[{"type":"command","command":"python3 $HOME/.claude/skills/ui/scripts/ui_gate.py"}]}]}}Verdict file first line: PASS, FAIL, or USER-SKIP <their words> when they need it now. It stays valid across a clean rebase.
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.

