ux-ui-agent-skills reaches an agent through five channels. They install
different things, and the one you want depends on which agent you use and
whether you want to read the doctrine or run the gates.
Every number on this page was measured on the version it names, not carried forward. Re-run the commands and you should get the same ones.
| You use | Install with | You get |
|---|---|---|
| Claude Code | /plugin marketplace add plugin87/ux-ui-agent-skills |
26 skills, hooks, the critic |
| Codex, Cursor, Copilot, Aider | npx ux-ui-agent-skills@3.1.0 init --agent codex |
AGENTS.md + every gate |
| Gemini CLI | gemini extensions install https://github.com/plugin87/ux-ui-agent-skills |
GEMINI.md, 23 ported skills, the MCP server |
| Antigravity (or Gemini CLI, per project) | npx ux-ui-agent-skills@3.1.0 init --agent gemini |
GEMINI.md + .agents/skills/ + every gate |
| Any MCP client | claude mcp add ux-ui-gates -- npx -y --package=ux-ui-agent-skills@3.1.0 ux-ui-mcp |
6 tools that run the gates |
| A terminal, any project | brew install plugin87/tap/ux-ui-agent-skills |
the CLI and the MCP binary |
| Just looking | npx ux-ui-agent-skills@3.1.0 demo |
the rendered examples, nothing installed |
/plugin marketplace add plugin87/ux-ui-agent-skills
/plugin install ux-ui-agent-skills@ux-ui-agent-skills
This is the only route that carries the parts Claude Code can enforce rather than request:
- 26 skills that load on demand. Ask for a screen and
design-screenloads itself; ask about contrast anda11y-auditdoes. - Three hooks that fire whether or not the model remembers them: no hardcoded values and no emoji on every file write, and a refusal to end a session that edited UI and measured none of it.
design-critic, an adversarial reviewer that runs in a forked context so it never sees the conversation that produced the work.
Fourteen skills the model reaches for on its own; eleven you start yourself, because each takes an action or sets a direction that should be your call.
After installing, just ask for what you want. If the skills do not appear, start a new session.
cd your-project
npx ux-ui-agent-skills@3.1.0 init --agent codexWrites AGENTS.md at the repository root (an open convention roughly 25 tools
read without any setup), plus the tokens, component specs, taste doctrine, the
index of the 2,144 design systems and all 52 gates.
The specs themselves are fetched when used, not copied: node scripts/library.mjs get <name> writes one to design-systems/library/<name>/DESIGN.md and refuses
it unless its sha256 matches the index. npx ux-ui-agent-skills@3.1.0 library pull
fetches every spec, for a machine that will work offline.
It deliberately does not write .claude/. Skills, rules and the critic are
Claude Code mechanisms; on this route they would be dead files.
What you lose, stated plainly: the hooks. On Claude Code three rules are enforced without the model choosing to. Here every rule is a request and the gates run when you run them. That makes running them the whole difference between this kit working and not working.
npx ux-ui-agent-skills@3.1.0 init --agent both # both surfaces, held in step by a gateTwo routes. Both were run against Gemini CLI 0.65.0.
gemini extensions install https://github.com/plugin87/ux-ui-agent-skills # every project
npx ux-ui-agent-skills@3.1.0 init --agent gemini # this projectThe extension is an archive attached to each release, which is what
gemini extensions install fetches from a GitHub URL. It carries GEMINI.md,
23 ported skills whose paths Gemini CLI resolves to the extension, and the kit's
MCP server. Installed into a clean home, gemini extensions list showed all 23
skills and gemini mcp list showed the server Connected.
init --agent gemini writes the kit, GEMINI.md and the same skills to
.agents/skills/, at the project root, with every path relative to it.
--agent antigravity writes exactly the same. Gemini CLI reads workspace skills
only in a trusted folder: untrusted, gemini skills list showed none of
them; trusted, all 23. Antigravity reads GEMINI.md and .agents/skills/ from
the same place. That side follows Antigravity's own documentation; it has not
been driven end to end here.
Three skills stay in Claude Code, because they need it: critique runs the
critic as a forked subagent, observe reports what the Claude Code hooks
recorded, and scaffold-project lays out a Claude Code project. There are no
hooks on this route: as on the AGENTS.md surface, every rule is a request and
the gates run when you run them.
claude mcp add ux-ui-gates -- npx -y --package=ux-ui-agent-skills@3.1.0 ux-ui-mcpOr in any MCP client's config:
{
"mcpServers": {
"ux-ui-gates": {
"command": "npx",
"args": ["-y", "--package=ux-ui-agent-skills@3.1.0", "ux-ui-mcp"]
}
}
}
--package=is load-bearing. This package's name is also one of its bin names, sonpx -y ux-ui-agent-skills@3.1.0 ux-ui-mcpruns the installer CLI and hands itux-ui-mcpas an argument: you get a help screen and a client that never completes a handshake.
Six tools:
| Tool | What it does |
|---|---|
list_gates |
Every gate, what it measures, whether it needs a browser |
run_gate |
Run one gate, get its output and exit code unedited |
review_ui |
Run every applicable gate, per-gate verdict |
get_doctrine |
The written rules, by topic |
get_design_system |
One of the 2,144 specs, fetched on first use and cached |
get_tokens |
The DTCG token source |
AGENTS.md lets an agent read the doctrine. This lets it run the gates,
which reading cannot do. Plenty of things describe good UI; very little tells
you afterwards that the contrast you shipped is 3.9:1 on hover.
It returns what the gates printed, with their exit codes: 0 looked and found nothing, 1 found something, 2 could not look. None of them is a pass.
brew install plugin87/tap/ux-ui-agent-skillsOne line. No brew tap first: Homebrew sees owner/tap/name and clones the
tap itself, and installs Node if you do not have it.
You get two commands on your PATH:
ux-ui-skills init # drop the kit into a project
ux-ui-mcp # the MCP server, no npx needed
claude mcp add ux-ui-gates -- ux-ui-mcp
brew upgrade ux-ui-agent-skillsYou will not find it with
brew searchuntil you have installed it once.brew.shandformulae.brew.shindex only homebrew-core and homebrew-cask, and this is a personal tap. The command above is the only way in, so it has to travel with any link to the project.
The formula is generated from the registry rather than hand-edited, and the tap updates itself within a minute of a release.
npx ux-ui-agent-skills@3.1.0 demo # copy the rendered examples and open them
npx ux-ui-agent-skills@3.1.0 init # the full kit into the current folder
npx ux-ui-agent-skills@3.1.0 new ./app # scaffold a new product repo
npx ux-ui-agent-skills@3.1.0 list # what each area containsdemo opens pages the gates measure. Delete the folder afterwards; nothing was
installed.
The half that does the work never depended on which agent is reading:
- 14 token files in DTCG format: colour, typography, spacing, motion, theming, sizing, data-viz
- 52 component specs with anatomy, variants, the eight states, token mapping and ARIA
- 2,144 named design systems, each a complete spec
- 52 objective gates: 34 open a real browser, 18 read files
Everything in the gate layer is plain Node and Python. Nothing in it knows which agent called it.
The gates are the point. Pointed at your own files:
python3 scripts/validate_tokens.py <your-tokens.json>
python3 scripts/validate_contrast.py <your-tokens.json>
python3 scripts/lint_hardcodes.py <your src>
node scripts/verify_states.mjs <your page> # contrast in default/hover/focus
node scripts/axe_audit.mjs <your page>
node scripts/verify_responsive.mjs <your src> --scale=1.25
node scripts/verify_screen_economy.mjs <your page>The render gates need a browser, once per machine:
npm install && npx playwright install chromeWithout it a render gate prints SKIPPED and exits 0. That is not a pass. It
is a run that measured nothing. Set DS_REQUIRE_BROWSER=1 when you intend to
trust the exit code, and it fails loudly instead.
node scripts/accuracy_report.mjsis the kit's own self-test. It points at the kit's examples and will report a low score anywhere else. A real Codex run scored 17/50 in a freshly installed project, which means nothing about that project. Run it only inside a clone of the kit.
Objective correctness: tokens, contrast, accessibility, drift. Not whether the work is any good.
For the half no script can score there is /critique, an adversarial reviewer
that renders the work, argues for rejection, and cites evidence per finding. It
runs in a forked context so it never sees the reasoning that produced the work,
because a critic holding the maker's argument reviews the argument instead of
the artifact.
No number in this project covers taste, and every gate that prints one says so.
Measured against v2.9.6. npm · brew install plugin87/tap/ux-ui-agent-skills ·
github.com/plugin87/ux-ui-agent-skills